
    +h                         S SK r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       m/home/james-whalen/.local/lib/python3.13/site-packages/diffusers/pipelines/stable_diffusion/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/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$ )
StableDiffusionSafetyChecker    
clip_input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!   %StableDiffusionSafetyChecker.__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5       H  u  nnU(       d  M  ["        R$                  " U5      (       d  ["        R$                  " US   5      (       a  ["        R&                  " UU   5      UU'   Mf  [(        R*                  " UU   R                  5      UU'   M     [-        U5      (       a  [.        R1                  S5        UU4$ s  snf )N   r   )special_scoresspecial_careconcept_scoresbad_concepts        r   r3   r4   {Gz?r5   r6   zPotential NSFW content was detected in one or more images. A black image will be returned instead. Try again with a different prompt and/or seed.)r#   r'   r   r+   cpufloatnumpyr*   shaperangelenr-   itemroundappendr,   	enumerater   	is_tensor
zeros_likenpzerosanyloggerwarning)r.   r   imagespooled_outputr   special_cos_distcos_distresult
batch_sizei
result_img
adjustmentconcept_idxconcept_cosconcept_thresholdreshas_nsfw_conceptsidxhas_nsfw_concepts                      r   forward$StableDiffusionSafetyChecker.forward2   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%./@%A!C!??6**eoofQi.H.H"'"2"26#;"?F3K"$((6#;+<+<"=F3K &B  !!NNB
 ((( Ms   &KrJ   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SX,'   X,4$ )Nr2   r7   r   )dimr8   )r#   r'   r   r+   r*   r-   r   rG   	unsqueezeexpandr<   r,   )r.   r   rJ   rK   r   rL   rM   rR   r3   r4   special_adjustmentr5   rW   s                r   forward_onnx)StableDiffusionSafetyChecker.forward_onnxf   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main_input_name_no_split_modulesr!   r   no_gradrZ   Tensorrb   __static_attributes____classcell__)r/   s   @r   r   r       so    L"O+,
\z 
\ ]]_1) 1)f ]]_)u|| )U\\ ) )r   r   )r;   rE   r   torch.nnr	   transformersr   r   r   utilsr   
get_loggerrd   rH   r   r    r   r   <module>rt      s?       E E  
		H	%I^)? ^)r   