
    
3jU                         S SK r S SKJr  S SKJr  S SKJr  S SK	J
r
Jr  S SKJr  SS jr " S S\R                  5      r " S	 S
\5      rg)    N)linen)
FrozenDict)
CLIPConfigFlaxPreTrainedModel)FlaxCLIPVisionModulec           
         [         R                  " U R                  [         R                  " [         R                  R                  U SS9US95      R                  n[         R                  " UR                  [         R                  " [         R                  R                  USS9US95      R                  n[         R                  " X4R                  5      $ )N   axis)a_min)jnpdivideTcliplinalgnormmatmul)emb_1emb_2eps
norm_emb_1
norm_emb_2s        r/home/wildlama/miniconda3/lib/python3.13/site-packages/diffusers/pipelines/stable_diffusion/safety_checker_flax.pyjax_cosine_distancer      s    EGGSXXcjjooe!o.LTW%XY[[JEGGSXXcjjooe!o.LTW%XY[[J::j,,//    c                   b    \ rS rSr% \\S'   \R                  r\R                  \S'   S r	S r
Srg)&FlaxStableDiffusionSafetyCheckerModule   configdtypec                    [        U R                  R                  5      U l        [        R
                  " U R                  R                  SU R                  S9U l        U R                  S[        R                  R                  R                  SU R                  R                  45      U l        U R                  S[        R                  R                  R                  SU R                  R                  45      U l        U R                  S[        R                  R                  R                  S5      U l        U R                  S	[        R                  R                  R                  S
5      U l        g )NF)use_biasr    concept_embeds   special_care_embeds   concept_embeds_weights)r$   special_care_embeds_weights)r&   )r   r   vision_configvision_modelnnDenseprojection_dimr    visual_projectionparamjaxinitializersonesr#   r%   r'   r(   )selfs    r   setup,FlaxStableDiffusionSafetyCheckerModule.setup!   s   01J1JK!#$++*D*Du\`\f\f!g"jj)9366;N;N;S;SVXZ^ZeZeZtZtUuv#'::!366#6#6#;#;aA[A[=\$
  '+jj1I366K^K^KcKcej&k#+/::6SUXU[U[UhUhUmUmos+t(r   c                    U R                  U5      S   nU R                  U5      n[        X0R                  5      n[        X0R                  5      nSnX@R
                  S S S 24   -
  U-   n[        R                  " US5      n[        R                  " US:  SSS9nUS-  n	XPR                  S S S 24   -
  U	-   n
[        R                  " U
S5      n
[        R                  " U
S:  SS9nU$ )	Nr	   g        r&   r   T)r   keepdimsg{Gz?r
   )
r*   r.   r   r%   r#   r(   r   roundanyr'   )r3   
clip_inputpooled_outputimage_embedsspecial_cos_distcos_dist
adjustmentspecial_scoresis_special_carespecial_adjustmentconcept_scoreshas_nsfw_conceptss               r   __call__/FlaxStableDiffusionSafetyCheckerModule.__call__-   s    ))*5a8--m<.|=U=UV&|5H5HI 
),L,LTSTW,UUXbb>15''.1"41tL,t3!$?$?a$HHK]]>15GGNQ$6Q?  r   )r#   r'   r%   r(   r*   r.   N)__name__
__module____qualname____firstlineno__r   __annotations__r   float32r    r4   rE   __static_attributes__ r   r   r   r      s%    {{E399"
u!r   r   c                      ^  \ rS rSr\rSr\rSS\	R                  S4S\S\S-  S\S	\	R                  S
\4
U 4S jjjrSS\R"                  S\S\S\4S jjr SS\4S jjrSrU =r$ ) FlaxStableDiffusionSafetyCheckerE   r:   Nr   Tr   input_shapeseedr    _do_initc           	      V   > Uc  SnU R                   " SXS.UD6n[        TU ]	  XX#XES9  g )N)r	      rV   r&   )r   r    )rR   rS   r    rT   rN   )module_classsuper__init__)	r3   r   rR   rS   r    rT   kwargsmodule	__class__s	           r   rY   )FlaxStableDiffusionSafetyChecker.__init__J   s=     *K""H&HH[SXlr   rngparamsreturnc                     [         R                  R                  X5      n[         R                  R                  U5      u  pVXVS.nU R                  R                  Xt5      S   nU$ )N)r_   dropoutr_   )r0   randomnormalsplitr[   init)	r3   r^   rR   r_   r:   
params_rngdropout_rngrngsrandom_paramss	            r   init_weights-FlaxStableDiffusionSafetyChecker.init_weightsX   sT    ZZ&&s8
"%**"2"23"7
$=((:8Dr   c                     [         R                  " US5      nU R                  R                  SU=(       d    U R                  0[         R
                  " U[         R                  S90 S9$ )N)r      r&   r	   r_   )r    )ri   )r   	transposer[   applyr_   arrayrL   )r3   r:   r_   s      r   rE   )FlaxStableDiffusionSafetyChecker.__call__c   sV    
 ]]:|<
{{  v,-IIj4 ! 
 	
r   rN   )N)rG   rH   rI   rJ   r   config_classmain_input_namer   rW   r   rL   tupleintr    boolrY   r0   Arrayr   rk   dictrE   rM   __classcell__)r\   s   @r   rP   rP   E   s    L"O9L
 %);;mm T\m 	m
 yym m m			 	 	z 	]g 	 
 
 
r   rP   )g-q=)r0   	jax.numpynumpyr   flaxr   r+   flax.core.frozen_dictr   transformersr   r   +transformers.models.clip.modeling_flax_clipr   r   Moduler   rP   rN   r   r   <module>r      s<       , 8 L0%!RYY %!P)
': )
r   