
    +h|                         S SK JrJr  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)    )OptionalTupleN)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/james-whalen/.local/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,   r0   r   r'   r%   r*   r   roundanyr)   )r5   
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,   r0   N)__name__
__module____qualname____firstlineno__r   __annotations__r   float32r"   r6   rG   __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	\	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$ ) FlaxStableDiffusionSafetyCheckerG   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      rX   r(   )r!   r"   )rT   rU   r"   rV   rP   )module_classsuper__init__)	r5   r!   rT   rU   r"   rV   kwargsmodule	__class__s	           r   r[   )FlaxStableDiffusionSafetyChecker.__init__L   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)ra   dropoutra   )r2   randomnormalsplitr]   init)	r5   r`   rT   ra   r<   
params_rngdropout_rngrngsrandom_paramss	            r   init_weights-FlaxStableDiffusionSafetyChecker.init_weightsZ   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   ra   )r"   )rk   )r   	transposer]   applyra   arrayrN   )r5   r<   ra   s      r   rG   )FlaxStableDiffusionSafetyChecker.__call__e   sV    
 ]]:|<
{{  v,-IIj4 ! 
 	
r   rP   )N)rI   rJ   rK   rL   r   config_classmain_input_namer   rY   r   rN   r   r   intr"   boolr[   r2   Arrayr   rm   dictrG   rO   __classcell__)r^   s   @r   rR   rR   G   s    L"O9L
 (,;;mm e_m 	m
 yym m m			 	 	z 	]g 	 
 
 
r   rR   )g-q=)typingr   r   r2   	jax.numpynumpyr   flaxr   r-   flax.core.frozen_dictr   transformersr   r   +transformers.models.clip.modeling_flax_clipr	   r   Moduler   rR   rP   r   r   <module>r      s?    # 
   , 8 L0%!RYY %!P)
': )
r   