
    +h                     x    S SK r S SKJr  S SKJrJrJr  SSKJr  \R                  " \
5      rS r " S S\5      rg)    N)
CLIPConfigCLIPVisionModelPreTrainedModel   )loggingc                     [         R                  R                  U 5      n[         R                  R                  U5      n[        R                  " X#R                  5       5      $ )N)nn
functional	normalizetorchmmt)image_embedstext_embedsnormalized_image_embedsnormalized_text_embedss       r/home/james-whalen/.local/lib/python3.13/site-packages/diffusers/pipelines/stable_diffusion_safe/safety_checker.pycosine_distancer      sE     mm55lC]]44[A88+-E-E-GHH    c                      ^  \ rS rSr\rS/rS\4U 4S jjr\R                  " 5       S 5       r
\R                  " 5       S\R                  S\R                  4S j5       rS	rU =r$ )
 SafeStableDiffusionSafetyChecker   CLIPEncoderLayerconfigc                 f  > [         TU ]  U5        [        UR                  5      U l        [
        R                  " UR                  R                  UR                  SS9U l	        [
        R                  " [        R                  " SUR                  5      SS9U l        [
        R                  " [        R                  " SUR                  5      SS9U l        [
        R                  " [        R                  " S5      SS9U l        [
        R                  " [        R                  " S5      SS9U l        g )NF)bias   )requires_gradr   )super__init__r   vision_configvision_modelr	   Linearhidden_sizeprojection_dimvisual_projection	Parameterr   onesconcept_embedsspecial_care_embedsconcept_embeds_weightsspecial_care_embeds_weights)selfr   	__class__s     r   r    )SafeStableDiffusionSafetyChecker.__init__$   s     +F,@,@A!#6+?+?+K+KVMbMbin!o ll5::b&:O:O+P`ef#%<<

1f>S>S0Tdi#j &(ll5::b>QV&W#+-<<

1UZ+[(r   c                    U R                  U5      S   nU R                  U5      n[        X@R                  5      R	                  5       R                  5       R                  5       n[        X@R                  5      R	                  5       R                  5       R                  5       n/ nUR                  S   n[        U5       GH  n	0 / 0 / S.n
Sn[        [        US   5      5       Hi  nXY   U   nU R                  U   R                  5       n[        X-
  U-   S5      U
S   U'   U
S   U   S:  d  ML  U
S   R                  XS   U   15        SnMk     [        [        US   5      5       H`  nXi   U   nU R                  U   R                  5       n[        X-
  U-   S5      U
S	   U'   U
S	   U   S:  d  ML  U
S
   R                  U5        Mb     UR                  U
5        GM      U Vs/ s H  n[        US
   5      S:  PM     nnUU4$ s  snf )N   r   )special_scoresspecial_careconcept_scoresbad_concepts        r   r2   r3   {Gz?r4   r5   )r"   r&   r   r*   cpufloatnumpyr)   shaperangelenr,   itemroundappendr+   )r-   
clip_inputimagespooled_outputr   special_cos_distcos_distresult
batch_sizei
result_img
adjustmentconcept_idxconcept_cosconcept_thresholdreshas_nsfw_conceptss                    r   forward(SafeStableDiffusionSafetyChecker.forward0   s&   ))*5a8--m< +<9Q9QRVVX^^`ffh"<1D1DEIIKQQSYY[!''*
z"A,.VXjlmJ J$S)9!)<%=>.1+>$($D$D[$Q$V$V$X!<A+BadnBnpq<r
+,[9./<q@~.55{O_D`alDm6no!%J  ?  %S!%56&k+6$($?$?$L$Q$Q$S!<A+BadnBnpq<r
+,[9./<q@~.55kB  7 MM*%- #0 FLLVcS^!459VL((( Ms   &HrA   rB   c                    U R                  U5      S   nU R                  U5      n[        X@R                  5      n[        X@R                  5      nSnXPR
                  -
  U-   n[        R                  " US:  SS9n	U	S-  n
U
R                  S5      R                  SUR                  S   5      n
X`R                  -
  U
-   n[        R                  " US:  SS9nX,4$ )Nr1   r6   r   )dimr7   )r"   r&   r   r*   r)   r,   r   any	unsqueezeexpandr;   r+   )r-   rA   rB   rC   r   rD   rE   rJ   r2   r3   special_adjustmentr4   rO   s                r   forward_onnx-SafeStableDiffusionSafetyChecker.forward_onnxW   s    ))*5a8--m<*<9Q9QR"<1D1DE 
),L,LLzYyy!!3;)D0/99!<CCBWXHYZ"%@%@@DVV!IInq&8a@((r   )r)   r+   r*   r,   r"   r&   )__name__
__module____qualname____firstlineno__r   config_class_no_split_modulesr    r   no_gradrP   TensorrY   __static_attributes____classcell__)r.   s   @r   r   r      sj    L+,
\z 
\ ]]_$) $)L ]]_)u|| )U\\ ) )r   r   )r   torch.nnr	   transformersr   r   r   utilsr   
get_loggerr[   loggerr   r    r   r   <module>rk      s<      E E  
		H	%IN) N)r   