
    JKi                    t    S SK Jr   S SKJr  S SKrS SKrS SKJ	r	   " S S\	5      r
g! \ a	    S SKJr   N(f = f)    )annotations)SelfN)InputModulec                     ^  \ rS rSr% SrS\S'   SSU 4S jjjrSS jr\SS j5       r	\	R                  SS j5       r	SS	 jrSSS
 jjr\SS j5       rSS.SS jjr\     S             SS jj5       rSrU =r$ )	CLIPModel   Tboolsave_in_rootc                   > [         TU ]  5         Uc  Un[        R                  R	                  U5      U l        [        R                  R	                  U5      U l        g N)super__init__transformersr   from_pretrainedmodelCLIPProcessor	processor)self
model_nameprocessor_name	__class__s      h/var/www/html/dynamic-report/venv/lib/python3.13/site-packages/sentence_transformers/models/CLIPModel.pyr   CLIPModel.__init__   sI    !'N!++;;JG
%33CCNS    c                    g)NzCLIPModel() r   s    r   __repr__CLIPModel.__repr__   s    r   c                B    U R                   R                  R                  $ r   r   	tokenizermodel_max_lengthr   s    r   max_seq_lengthCLIPModel.max_seq_length   s    ~~''888r   c                8    XR                   R                  l        g r   r!   )r   values     r   r$   r%   !   s    49  1r   c           
        / n/ nSU;   a:  U R                   R                  US   S9nU R                   R                  US   5      nSU;   a  U R                   R                  UR	                  S5      UR	                  SS 5      UR	                  SS 5      UR	                  SS 5      UR	                  SS 5      S	9nU R                   R                  US   5      n/ n[        U5      n[        U5      n[        US
   5       HA  u  pU
S:X  a  UR                  [        U5      5        M'  UR                  [        U5      5        MC     [        R                  " U5      R                  5       US'   U$ )Npixel_values)r)      	input_idsattention_maskposition_idsoutput_attentionsoutput_hidden_states)r+   r,   r-   r.   r/   image_text_infor   sentence_embedding)r   vision_modelvisual_projection
text_modelgettext_projectioniter	enumerateappendnexttorchstackfloat)r   featuresimage_embedstext_embedsvision_outputstext_outputsr1   image_featurestext_featuresidx
input_types              r   forwardCLIPModel.forward%   sO   X%!ZZ44(>BZ4[N::77q8IJL("::00",,{3'||,<dC%\\.$?"*,,/BD"I%-\\2H$%O 1 L **44\!_EKl+[)(2C)DEOCQ"))$~*>?"))$}*=>	  F */5G)H)N)N)P%&r   c                   SSK Jn  / n/ n/ n[        U5       H[  u  px[        X5      (       a$  UR	                  U5        UR	                  S5        M9  UR	                  U5        UR	                  S5        M]     0 n	[        U5      (       a  U R                  R                  XRSSS9n	[        U5      (       a)  U R                  R                  USS9n
U
R                  U	S'   XiS	'   [        U	5      $ )
Nr   )Imager*   Tpt)padding
truncationreturn_tensors)rN   r)   r0   )	PIL.ImagerJ   r8   
isinstancer9   lenr   r"   image_processorr)   dict)r   textsrL   rJ   imagestexts_valuesr0   rE   dataencodingrC   s              r   tokenizeCLIPModel.tokenizeE   s    #"5)IC$&&d#&&q)##D)&&q) * |~~//Z^os/tHv;;!^^;;FSW;XN'5'B'BH^$&5"#H~r   c                    U R                   $ r   )r   r   s    r   r"   CLIPModel.tokenizer`   s    ~~r   safe_serializationc               l    U R                   R                  XS9  U R                  R                  U5        g )Nr]   )r   save_pretrainedr   )r   output_pathr^   argskwargss        r   saveCLIPModel.saved   s)    

"";"V&&{3r   c           	     :    U R                  UUUUUUS9nU " U5      $ )N)model_name_or_path	subfoldertokencache_folderrevisionlocal_files_only)load_dir_path)	clsrg   rh   ri   rj   rk   rl   rc   
local_paths	            r   loadCLIPModel.loadh   s7     &&1%- ' 

 :r   )r   r   )zopenai/clip-vit-base-patch32N)r   strreturnNone)rs   rr   )rs   int)r'   ru   rs   rt   )r>   dict[str, torch.Tensor]rs   rv   )T)rL   z
str | boolrs   rv   )rs   ztransformers.CLIPProcessor)ra   rr   r^   r	   rs   rt   ) NNNF)rg   rr   rh   rr   ri   zbool | str | Nonerj   
str | Nonerk   rx   rl   r	   rs   r   )__name__
__module____qualname____firstlineno__r
   __annotations__r   r   propertyr$   setterrG   rY   r"   rd   classmethodrp   __static_attributes____classcell__)r   s   @r   r   r      s    L$T T 9 9 : :@6   HL 4  #'#'#!&  !	
 !   
 r   r   )
__future__r   typingr   ImportErrortyping_extensionsr;   r   #sentence_transformers.models.Routerr   r   r   r   r   <module>r      s=    "'   ;m m  '&'s   ( 77