ó
    ÷“,jj’  ã            
       ó  • S r SSKrSSKrSSKrSSKJr  SSKJrJrJ	r	J
r
JrJr  SSKrSSKrSSKJs  Jr  SSKJr  SSKJr  SSKJr  SS	KJr  SS
KJr  SSKJr  SSKJrJ r J!r!J"r"J#r#J$r$J%r%J&r&  SSK'J(r(  \ " S S5      5       r)\ " S S5      5       r*S\+4S jr,S\+4S jr-  S1S\.S\)S\/S\
\R`                     4S jjr1  S1S\.S\*S\/S\
\R`                     4S jjr2 " S S\Rf                  5      r4 " S S\Rf                  5      r5\Rl                  4S \Rf                  4S! jjr7\7r8S"\94S# jr:S$\Rl                  4S"\94S% jjr;S&\Rx                  " S'5      4S( jr=S2S)\+S*\/4S+ jjr>S3S)\+S*\/4S, jjr?S- r@S.\\+\4   4S/ jrAS0 rBg)4zlCLIP Model

Adapted from https://github.com/openai/CLIP. Originally MIT License, Copyright (c) 2021 OpenAI.
é    N)Ú	dataclass)ÚAnyÚDictÚListÚOptionalÚTupleÚUnion)Únn)Ú
checkpoint)Úpartialé   )ÚHFTextEncoder)ÚModifiedResNet)Ú	TimmModel)ÚLayerNormFp32Ú	LayerNormÚ	QuickGELUÚ	AttentionÚVisionTransformerÚTextTransformerÚtext_global_poolÚlock_text_tower)Ú	to_2tuplec                   ó&  • \ rS rSr% Sr\\\\\\4   \4   \S'   Sr	\\S'   Sr
\\S'   Sr\\S	'   S
r\\S'   Sr\\\\4   \4   \S'   Sr\\   \S'   Sr\\S'   Sr\\S'   Sr\\S'   Sr\\S'   Sr\\S'   Sr\\S'   Sr\\S'   Sr\\S'   Sr\\S'   Sr\\   \S'   Sr\\   \S '   Sr\\   \S!'   Sr \\S"'   Sr!\\S#'   Sr"\\S$'   Sr#\\S%'   Sr$\\S&'   Sr%\\S''   Sr&\\   \S('   Sr'\\S)'   S*r(\\S+'   S,r)\\S-'   Sr*\\S.'   Sr+\\S/'   Sr,\\   \S0'   S1r-g)2ÚCLIPVisionCfgé"   é   Úlayersi   Úwidthé@   Ú
head_widthç      @Ú	mlp_ratioé   Ú
patch_sizeéà   Ú
image_sizeNÚls_init_valueg        Úpatch_dropoutFÚattentional_poolé   Úattn_pooler_queriesé   Úattn_pooler_headsÚ	no_ln_preÚ	learnableÚpos_embed_typeÚfinal_ln_after_poolÚtokÚ	pool_typeÚoutput_tokensÚ
act_kwargsÚnorm_kwargsÚ
block_typeÚqk_normÚscaled_cosine_attnÚscale_headsÚscale_attn_innerÚ
scale_attnÚscale_fcÚtimm_model_nameÚtimm_model_pretrainedÚavgÚ	timm_poolÚlinearÚ	timm_projÚtimm_proj_biasÚ	timm_dropÚtimm_drop_path© ).Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r   r	   r   ÚintÚ__annotations__r   r!   r#   Úfloatr%   r'   r(   r   r)   r*   Úboolr,   r.   r/   r1   Ústrr2   r4   r5   r6   Údictr7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rB   rD   rE   rF   rG   Ú__static_attributes__rH   ó    Ú�C:\Users\johnn\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\open_clip/model.pyr   r   "   s�  ‡ à46€FˆE�%˜˜S # sÐ*Ñ+¨SÐ0Ñ1Ó6Ø€Eˆ3ÓØ€J�ÓØ€IˆuÓØ€J�ÓØ.1€J��e˜C ˜H‘o sÐ*Ñ+Ó1à%)€M�8˜E‘?Ó)Ø€M�5ÓØ"Ð�dÓ"Ø"Ð˜Ó"ØÐ�sÓØ€IˆtÓØ%€N�CÓ%Ø %Ð˜Ó%Ø€IˆsÓØ€M�4ÓØ!%€J�˜‘Ó%Ø"&€K�˜$‘Ó&ð !%€J�˜‘Ó$Ø€GˆTÓØ$Ð˜Ó$Ø€K�ÓØ"Ð�dÓ"Ø€J�ÓØ€HˆdÓà%)€O�X˜c‘]Ó)Ø"'Ð˜4Ó'Ø€IˆsÓØ€IˆsÓØ €N�DÓ Ø€IˆuÓØ&*€N�H˜U‘OÖ*rT   r   c                   óú  • \ rS rSr% Sr\\S'   Sr\\S'   Sr\	\
   \S'   Sr\	\
   \S'   Sr\	\   \S	'   S
r\\S'   Sr\\S'   Sr\\S'   Sr\\S'   Sr\	\   \S'   Sr\\S'   Sr\\S'   Sr\\S'   Sr\\S'   Sr\\S'   Sr\
\S'   Sr\\S'   Sr\
\S'   Sr\\S '   Sr\\S!'   Sr\\S"'   Sr \	\
   \S#'   Sr!\\S$'   Sr"\\S%'   Sr#\\S&'   Sr$\\S''   Sr%\\S('   Sr&\\S)'   Sr'\	\
   \S*'   S+r(\\S,'   S-r)\
\S.'   S/r*\
\S0'   S1r+g)2ÚCLIPTextCfgéJ   éM   Úcontext_lengthi Á  Ú
vocab_sizeNÚhf_tokenizer_nameÚtokenizer_modeÚtokenizer_kwargsi   r   r-   Úheadsr   r   r"   r#   r(   FÚ	embed_clsr   Úpad_idé   Úeos_idÚno_causal_maskr2   Úargmaxr4   Ú	proj_biasrC   Ú	proj_typer5   r6   r7   r8   r9   r:   r;   r<   r=   r>   Úhf_model_nameTÚhf_model_pretrainedÚmlpÚhf_proj_typeÚmean_poolerÚhf_pooler_typerH   ),rI   rJ   rK   rL   rZ   rM   rN   r[   r\   r   rQ   r]   r^   rR   r   r_   r   r#   rO   r(   r`   rP   ra   rc   rd   r2   r4   rf   rg   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   rh   ri   rk   rm   rS   rH   rT   rU   rW   rW   J   sa  ‡ à€N�CÓØ€J�ÓØ'+Ð�x ‘}Ó+Ø$(€N�H˜S‘MÓ(Ø'+Ð�h˜t‘nÓ+à€Eˆ3ÓØ€Eˆ3ƒNØ€FˆCÓØ€IˆuÓØ%)€M�8˜E‘?Ó)Ø€IˆtÓØ€FˆCƒOØ€FˆCƒOØ €N�DÓ Ø %Ð˜Ó%Ø€IˆsÓØ€IˆtÓØ€IˆsÓØ€M�4ÓØ€J�ÓØ€K�Óð !%€J�˜‘Ó$Ø€GˆTÓØ$Ð˜Ó$Ø€K�ÓØ"Ð�dÓ"Ø€J�ÓØ€HˆdÓð $(€M�8˜C‘=Ó'Ø $Ð˜Ó$Ø€L�#ÓØ'€N�CÖ'rT   rW   Ú	precisionc                 óf   • S nU S:X  a  [         R                  nU$ U S:X  a  [         R                  nU$ )NÚbf16Úfp16©ÚtorchÚbfloat16Úfloat16)rn   Ú
cast_dtypes     rU   Úget_cast_dtyperw   s   s9   € Ø€JØ�FÓÜ—^‘^ˆ
ð Ðð 
�fÓ	Ü—]‘]ˆ
ØÐrT   c                 óf   • S nU S;   a  [         R                  nU$ U S;   a  [         R                  nU$ )N)rp   Ú	pure_bf16)rq   Ú	pure_fp16rr   )rn   Úinput_dtypes     rU   Úget_input_dtyper|   |   s;   € Ø€KØÐ)Ó)Ü—n‘nˆð Ðð 
Ð+Ó	+Ü—m‘mˆØÐrT   Ú	embed_dimÚ
vision_cfgÚ
quick_gelurv   c                 ó
  • [        U[        5      (       a  [        S0 UD6nU(       a  [        O[        R
                  nUR                  (       a€  [        UR                  UR                  UR                  UR                  UR                  UR                  UR                  UR                  S:”  a  UR                  OS U UR                  S9
nU$ [        UR                   ["        [$        45      (       aI  UR&                  S-  UR(                  -  n[+        UR                   U UUR                  UR&                  S9nU$ UR&                  UR(                  -  nU[,        R.                  [,        R0                  4;   a  [2        O[4        nUR6                  (       a  [9        U40 UR6                  D6nUR:                  b  [9        U40 UR:                  D6n[=        S0 SUR                  _SUR>                  _SUR&                  _SUR                   _S	U_S
UR@                  _SURB                  _SUR                  _SURD                  _SURF                  _SURH                  _SURJ                  _SURL                  _SURN                  _SURP                  _SURR                  _SU _SU_SU_SURT                  _SURV                  _SURX                  _SURZ                  _SUR\                  _SUR^                  _SUR`                  _6nU$ ) Nr   )	Ú
pretrainedÚpoolÚprojrf   ÚdropÚ	drop_pathÚ
patch_dropr}   r'   é    )r   Ú
output_dimr_   r'   r   r'   r%   r   r   r_   r#   r(   r)   r*   r,   r.   r1   r/   r2   r4   r5   rˆ   Ú	act_layerÚ
norm_layerr8   r9   r:   r;   r<   r=   r>   rH   )1Ú
isinstancerR   r   r   r
   ÚGELUr?   r   r@   rB   rD   rE   rF   rG   r)   r'   r   ÚtupleÚlistr   r!   r   rs   ru   rt   r   r   r7   r   r6   r   r%   r#   r(   r*   r,   r.   r1   r/   r2   r4   r5   r8   r9   r:   r;   r<   r=   r>   )r}   r~   r   rv   r‰   ÚvisualÚvision_headsrŠ   s           rU   Ú_build_vision_towerr‘   …   s  € ô �*œd×#Ñ#Ü"Ñ0 ZÑ0ˆ
ö
 (•	¬R¯W©W€Ià×!×!ÜØ×&Ñ&Ø!×7Ñ7Ø×%Ñ%Ø×%Ñ%Ø ×/Ñ/Ø×%Ñ%Ø ×/Ñ/Ø3=×3KÑ3KÈaÓ3O�z×/Ò/ÐUYØØ!×,Ñ,ñ
ˆðt €Mô] 
�J×%Ñ%¬¬t }×	5Ñ	5Ø!×'Ñ'¨"Ñ,°
×0EÑ0EÑEˆÜØ×$Ñ$Ø ØØ!×,Ñ,Ø×"Ñ"ñ
ˆðX €MðI "×'Ñ'¨:×+@Ñ+@Ñ@ˆØ&0´U·]±]ÄEÇNÁNÐ4SÓ&S•]ÔYbˆ
Ø×!×!Ü  ÑF¨z×/EÑ/EÑFˆJØ× Ñ Ñ,Ü 	ÑC¨Z×-BÑ-BÑCˆIä"ò 
Ø!×,Ò,ð
à!×,Ò,ð
ð ×"Ò"ð
ð ×$Ò$ð	
ñ
 ð
ð !×*Ò*ð
ð %×2Ò2ð
ð %×2Ò2ð
ð (×8Ò8ð
ð !+× >Ò >ð
ð )×:Ò:ð
ð &×4Ò4ð
ð !×*Ò*ð
ð !+× >Ò >ð
ð !×*Ò*ð
ð  %×2Ò2ð!
ñ" !ð#
ñ$  ð%
ñ& "ð'
ð( "×,Ò,ð)
ð* ×&Ò&ð+
ð,  *×<Ò<ð-
ð. #×.Ò.ð/
ð0 (×8Ò8ð1
ð2 "×,Ò,ð3
ð4  ×(Ò(ð5
ˆð: €MrT   Útext_cfgc           	      óz  • [        U[        5      (       a  [        S0 UD6nUR                  (       aB  [	        UR                  U UR
                  UR                  UR                  UR                  S9nU$ U(       a  [        O[        R                  nU[        R                  [        R                  4;   a  [        O[         nUR"                  (       a  [%        U40 UR"                  D6nUR&                  b  [%        U40 UR&                  D6n[)        S0 SUR*                  _SUR,                  _SUR.                  _SUR0                  _SUR2                  _SUR4                  _SUR6                  _S	U _S
UR8                  _SUR:                  _SUR<                  _SUR>                  _SUR@                  _SURB                  _SURD                  _SUR                  _SU_SU_SURF                  _SURH                  _SURJ                  _SURL                  _SURN                  _SURP                  _SURR                  _6nU$ )N)rˆ   rg   Úpooler_typer�   r5   rZ   r[   r   r_   r   r#   r(   rˆ   r`   rd   ra   rc   r4   rg   rf   r5   r‰   rŠ   r8   r9   r:   r;   r<   r=   r>   rH   )*r‹   rR   rW   rh   r   rk   rm   ri   r5   r   r
   rŒ   rs   ru   rt   r   r   r7   r   r6   r   rZ   r[   r   r_   r   r#   r(   r`   rd   ra   rc   r4   rg   rf   r8   r9   r:   r;   r<   r=   r>   )r}   r’   r   rv   Útextr‰   rŠ   s          rU   Ú_build_text_towerr–   Ñ   sU  € ô �(œD×!Ñ!ÜÑ* Ñ*ˆà××ÜØ×"Ñ"Ø Ø×+Ñ+Ø ×/Ñ/Ø×3Ñ3Ø"×0Ñ0ñ
ˆðV €KöE ",•I´·±ˆ	Ø&0´U·]±]ÄEÇNÁNÐ4SÓ&S•]ÔYbˆ
Ø××Ü  ÑD¨x×/CÑ/CÑDˆJØ×ÑÑ*Ü 	ÑA¨X×-@Ñ-@ÑAˆIäò 
Ø#×2Ò2ð
à×*Ò*ð
ð —.’.ð
ð —.’.ð	
ð
 —?’?ð
ð ×(Ò(ð
ð #×0Ò0ð
ñ !ð
ð ×(Ò(ð
ð $×2Ò2ð
ð —?’?ð
ð —?’?ð
ð ×(Ò(ð
ð ×(Ò(ð
ð ×(Ò(ð
ð  #×0Ò0ð!
ñ"  ð#
ñ$ "ð%
ð&  ×*Ò*ð'
ð( ×$Ò$ð)
ð*  (×:Ò:ð+
ð, !×,Ò,ð-
ð. &×6Ò6ð/
ð0  ×*Ò*ð1
ð2 ×&Ò&ð3
ˆð6 €KrT   c            $       óî  ^ • \ rS rSr% \R
                  R                  \   \S'   S\	R                  " S5      SSSS4S\S\S\S	\S
\S\\   S\S\\R                      S\4U 4S jjjrS*S jrS+S\S\4S jjr\R
                  R(                  S,S j5       r\R
                  R(                  S 5       rS-S\4S jjrS-S\4S jjrS r              S.S\\R4                     S\\R4                     S\\\\\   4      S\\\\\   4      S\S\S\S\S \S!\S"\S#\S$\S%\S&\\\\R4                  \\R4                     4   4   4S' jjr  S/S\\R4                     S\\R4                     4S( jjr S)r!U =r"$ )0ÚCLIPi	  Úoutput_dictFç$I’$I’,@Nr}   r~   r’   r   Úinit_logit_scaleÚinit_logit_biasÚnonscalar_logit_scalerv   c
                 óÆ  >• [         TU ]  5         X�l        [        XXH5      U l        [        XXH5      n
U
R                  U l        U
R                  U l        U
R                  U l        U
R                  U l	        U
R                  U l
        U
R                  U l        U
R                  U l        U
R                  U l        U
R                  U l        U R#                  SU
R$                  SS9  U(       a  S/O/ n[&        R(                  " [*        R,                  " U5      U-  5      U l        Ub3  [&        R(                  " [*        R,                  " U5      U-  5      U l        g S U l        g )NÚ	attn_maskF)Ú
persistentr   )ÚsuperÚ__init__r™   r‘   r�   r–   ÚtransformerrZ   r[   Útoken_embeddingÚpositional_embeddingÚln_finalÚtext_projectionr4   Útext_pool_typerc   Útext_eos_idÚregister_bufferrŸ   r
   Ú	Parameterrs   ÚonesÚlogit_scaleÚ
logit_bias)Úselfr}   r~   r’   r   r›   rœ   r�   rv   r™   r•   ÚlshapeÚ	__class__s               €rU   r¢   ÚCLIP.__init__  s  ø€ ô 	‰ÑÔØ&Ôä)¨)ÀÓXˆŒä  °jÓMˆØ×+Ñ+ˆÔØ"×1Ñ1ˆÔØŸ/™/ˆŒØ#×3Ñ3ˆÔØ$(×$=Ñ$=ˆÔ!ØŸ™ˆŒØ#×3Ñ3ˆÔØ"Ÿn™nˆÔØŸ;™;ˆÔØ×Ñ˜[¨$¯.©.ÀUÐÑKæ-�!‘°2ˆÜŸ<š<¬¯
ª
°6Ó(:Ð=MÑ(MÓNˆÔØÑ&Ü Ÿlšl¬5¯:ª:°fÓ+=ÀÑ+OÓPˆD�Oà"ˆD�OrT   c                 ó6   • U R                   R                  XS9  g ©N)Úunlocked_groupsÚfreeze_bn_stats©r�   Úlock©r¯   rµ   r¶   s      rU   Úlock_image_towerÚCLIP.lock_image_tower0  ó   € à�‰×Ñ¨ÐÒZrT   Úunlocked_layersÚfreeze_layer_normc                 ó6   • U(       d   S5       e[        X5        g )NzLUnfreezing LayerNorm is not supported. LayerNorm treated like other weights.)r   ©r¯   r½   r¾   s      rU   r   ÚCLIP.lock_text_tower4  s   € Þ ÐpÐ"pÓpÐ Ü˜Õ.rT   c                 óZ   • U R                   R                  U5        XR                  l        g ©N)r�   Úset_grad_checkpointingr£   Úgrad_checkpointing©r¯   Úenables     rU   rÄ   ÚCLIP.set_grad_checkpointing8  s    € à�‰×*Ñ*¨6Ô2Ø.4×ÑÕ+rT   c                 ó¬   • S1n[        U R                  S5      (       a5  U R                  R                  5        H  nUR                  SU-   5        M     U$ )Nr¥   Úno_weight_decayúvisual.)Úhasattrr�   rÊ   Úadd©r¯   Úno_wdÚns      rU   rÊ   ÚCLIP.no_weight_decay=  sJ   € ð (Ð(ˆÜ�4—;‘;Ð 1×2Ñ2Ø—[‘[×0Ñ0Ö2�Ø—	‘	˜) a™-Ö(ñ 3àˆrT   Ú	normalizec                 ó`   • U R                  U5      nU(       a  [        R                  " USS9$ U$ ©Néÿÿÿÿ©Údim©r�   ÚFrÒ   ©r¯   ÚimagerÒ   Úfeaturess       rU   Úencode_imageÚCLIP.encode_imageF  ó(   € Ø—;‘;˜uÓ%ˆÞ09Œq�{Š{˜8¨Ñ,ÐG¸xÐGrT   c           
      ó,  • U R                   R                  5       nU R                  U5      R                  U5      nX@R                  R                  U5      -   nU R                  X@R
                  S9nU R                  U5      n[        XAU R                  [        U SS 5      S9nU R                  bI  [        U R                  [        R                  5      (       a  U R                  U5      nOX@R                  -  nU(       a  [        R                  " USS9$ U$ )N)rŸ   r©   ©Úeos_token_idrÕ   rÖ   )r£   rw   r¤   Útor¥   rŸ   r¦   r   r¨   Úgetattrr§   r‹   r
   ÚLinearrÙ   rÒ   )r¯   r•   rÒ   rv   Úxs        rU   Úencode_textÚCLIP.encode_textJ  sè   € Ø×%Ñ%×4Ñ4Ó6ˆ
à× Ñ  Ó&×)Ñ)¨*Ó5ˆà×)Ñ)×,Ñ,¨ZÓ8Ñ8ˆØ×Ñ˜Q¯.©.ÐÐ9ˆØ�M‰M˜!ÓˆÜ˜Q d×&9Ñ&9ÌÐPTÐVcÐeiÓHjÑkˆØ×ÑÑ+Ü˜$×.Ñ.´·	±	×:Ñ:Ø×(Ñ(¨Ó+‘à×,Ñ,Ñ,�æ)2Œq�{Š{˜1 "Ñ%Ð9¸Ð9rT   c                 óê   • U R                  USS9nU R                  USS9nU R                  R                  5       U-  UR                  -  nU R
                  b  XPR
                  -  nUR                  nXV4$ ©NT©rÒ   ©rÝ   rç   r­   ÚexpÚTr®   ©r¯   rÛ   r•   Úimage_featuresÚtext_featuresÚimage_logitsÚtext_logitss          rU   Ú
get_logitsÚCLIP.get_logits[  óv   € Ø×*Ñ*¨5¸DÐ*ÐAˆØ×(Ñ(¨¸Ð(Ð>ˆØ×'Ñ'×+Ñ+Ó-°Ñ>ÀÇÁÑPˆØ�?‰?Ñ&ØŸO™OÑ+ˆLØ"—n‘nˆØÐ(Ð(rT   rÛ   r•   Úimage_indicesÚtext_indicesÚ
stop_earlyÚnormalize_intermediatesÚintermediates_onlyÚimage_output_fmtÚimage_output_extra_tokensÚtext_output_fmtÚtext_output_extra_tokensÚoutput_logitsÚoutput_logit_scale_biasÚreturnc           
      ó  • 0 nU(       a  SnSnU(       a  Ub  Uc   S5       eUbX  U R                   R                  UUUUUU	U
S9nU(       a!  SU;   a  [        R                  " US   SS9US'   UR	                  U5        UGb]  U R
                  R                  5       nU R                  U5      R                  U5      nUU R                  R                  U5      -   nU R
                  R                  UU R                  US9u  nnU(       a!  U Vs/ s H  nU R                  U5      PM     nnUUS	'   U(       d©  U R                  U5      n[        UX R                  [        U S
S5      S9nU R                  bJ  [!        U R                  ["        R$                  5      (       a  U R                  U5      nOUU R                  -  nU(       a  [        R                  " USS9nUUS'   U(       d  U(       a  U R&                  R)                  5       OSnU(       aJ  UUS   -  US   R*                  -  nU R,                  b  UU R,                  -  nUR*                  nUUS'   UUS'   U(       a!  UUS'   U R,                  b  U R,                  US'   U$ s  snf )a+  Forward features that returns intermediates.

Args:
    image: Input image tensor
    text: Input text tensor
    image_indices: For image tower, Take last n blocks if int, all if None, select matching indices if sequence
    text_indices: Take last n blocks if int, all if None, select matching indices if sequence
    stop_early: Stop iterating over blocks when last desired intermediate hit
    normalize_intermediates: Apply final norm layer to all intermediates
    normalize: L2 Normalize final features
    intermediates_only: Only return intermediate features, do not return final features
    image_output_fmt: Shape of intermediate image feature outputs
    image_output_extra_tokens: Return both prefix and spatial intermediate tokens
    text_output_fmt: Shape of intermediate text feature outputs (ignored for this model)
    text_output_extra_tokens: Return both prefix and spatial intermediate tokens (ignored for this model)
    output_logits: Include logits in output
    output_logit_scale_bias: Include the logit scale bias in the output
Returns:

FNú9Both image and text inputs are required to compute logits©Úindicesrù   rú   rû   Ú
output_fmtÚoutput_extra_tokensrð   rÕ   rÖ   )rŸ   r  Útext_intermediatesr©   rá   rñ   rò   ró   r­   r®   )r�   Úforward_intermediatesrÙ   rÒ   Úupdater£   rw   r¤   rã   r¥   rŸ   r¦   r   r¨   rä   r§   r‹   r
   rå   r­   rí   rî   r®   )r¯   rÛ   r•   r÷   rø   rù   rÒ   rú   rû   rü   rý   rþ   rÿ   r   r  ÚoutputÚimage_outputrv   ræ   ÚintermediatesÚxiÚlogit_scale_exprò   ró   s                           rU   r
  ÚCLIP.forward_intermediatesd  s  € ðJ ˆÞàˆIØ!ˆMÞØÑ$¨Ñ)9ÐvÐ;vÓvÐ9àÑØŸ;™;×<Ñ<ØØ%Ø%Ø(?Ø#5Ø+Ø$=ð =ð ˆLö Ð-°Ó=Ü12·²¸\ÐJZÑ=[ÐacÑ1d�Ð-Ñ.Ø�M‰M˜,Ô'àÒØ×)Ñ)×8Ñ8Ó:ˆJØ×$Ñ$ TÓ*×-Ñ-¨jÓ9ˆAØ�D×-Ñ-×0Ñ0°Ó<Ñ<ˆAØ#×/Ñ/×EÑEØØŸ.™.Ø$ð  Fð  ÑˆAˆ}ö
 'Ù=JÓ Kº]°r §¡¨rÖ!2¹]�Ð Kð ,9ˆFÐ'Ñ(æ%Ø—M‘M !Ó$�Ü$ Q¨×.AÑ.AÔPWÐX\Ð^kÐmqÓPrÑs�Ø×'Ñ'Ñ3Ü! $×"6Ñ"6¼¿	¹	×BÑBØ ×0Ñ0°Ó3™à × 4Ñ 4Ñ4˜ÞÜŸš A¨2Ñ.�AØ*+��Ñ'æ4AÖE\˜$×*Ñ*×.Ñ.Ô0ÐbfˆæØ*¨VÐ4DÑ-EÑEÈÈÑH_×HaÑHaÑaˆLØ�‰Ñ*Ø §¡Ñ/�Ø&Ÿ.™.ˆKØ%1ˆF�>Ñ"Ø$/ˆF�=Ñ!æ"Ø$3ˆF�=Ñ!Ø�‰Ñ*Ø'+§¡��|Ñ$àˆùòA !Ls   ÄJc                 ó�  • Ub  U R                  USS9OS nUb  U R                  USS9OS nU R                  (       a<  UUU R                  R	                  5       S.nU R
                  b  U R
                  US'   U$ U R
                  b'  X4U R                  R	                  5       U R
                  4$ X4U R                  R	                  5       4$ ©NTrë   )rð   rñ   r­   r®   ©rÝ   rç   r™   r­   rí   r®   ©r¯   rÛ   r•   rð   rñ   Úout_dicts         rU   ÚforwardÚCLIP.forwardË  óË   € ð
 FKÑEV˜×*Ñ*¨5¸DÐ*ÑAÐ\`ˆØBFÑBR˜×(Ñ(¨¸Ð(Ñ>ÐX\ˆà××à"0Ø!.Ø#×/Ñ/×3Ñ3Ó5ñˆHð
 �‰Ñ*Ø)-¯©�˜Ñ&ØˆOà�?‰?Ñ&Ø!°$×2BÑ2B×2FÑ2FÓ2HÈ$Ï/É/ÐYÐYØ¨d×.>Ñ.>×.BÑ.BÓ.DÐDÐDrT   )rZ   r¦   r®   r­   r™   r¥   r©   r¨   r§   r¤   r£   r�   r[   ©r   F©r   T©T©F©NNNNFTFFÚNCHWFÚNLCFFF©NN©#rI   rJ   rK   rL   rs   ÚjitÚFinalrP   rN   ÚnpÚlogrM   r   rW   rO   r   Údtyper¢   rº   r   ÚignorerÄ   rÊ   rÝ   rç   rô   ÚTensorr	   r   rQ   r   r
  r  rS   Ú__classcell__©r±   s   @rU   r˜   r˜   	  s~  ø‡ Ø—‘—‘ Ñ&Ó&ð  %Ø&(§f¢f¨XÓ&6Ø/3Ø*/Ø04Ø %ñ"#àð"#ð &ð"#ð "ð	"#ð
 ð"#ð $ð"#ð & e™_ð"#ð $(ð"#ð ! §¡Ñ-ð"#ð ÷"#ð "#ôH[ñ/¨sð /È4õ /ð ‡Y�Y×Ñó5ó ð5ð ‡Y�Y×Ññó ðñH¨Tõ Hñ:¨4õ :ò")ð -1Ø+/Ø=AØ<@Ø$Ø"Ø,1Ø',Ø$*Ø.3Ø#(Ø-2Ø"'Ø,1ñeà˜EŸL™LÑ)ðeð ˜5Ÿ<™<Ñ(ðeð $ E¨#¨t°C©y¨.Ñ$9Ñ:ð	eð
 # 5¨¨d°3©i¨Ñ#8Ñ9ðeð ðeð ðeð &*ðeð !%ðeð "ðeð (,ðeð !ðeð '+ðeð  ðeð &*ðeð  
ˆc�5˜Ÿ™ t¨E¯L©LÑ'9Ð9Ñ:Ð:Ñ	;õ!eðR -1Ø+/ñEà˜EŸL™LÑ)ðEð ˜5Ÿ<™<Ñ(÷Eó ErT   r˜   c            $       óî  ^ • \ rS rSr% \R
                  R                  \   \S'   S\	R                  " S5      SSSS4S\S\S\S	\S
\S\\   S\S\\R                      S\4U 4S jjjrS*S jrS+S\S\4S jjr\R
                  R(                  S,S j5       r\R
                  R(                  S 5       rS-S\4S jjrS-S\4S jjrS r              S.S\\R4                     S\\R4                     S\\\\\   4      S\\\\\   4      S\S\S\S\S \S!\S"\S#\S$\S%\S&\\\\R4                  \\R4                     4   4   4S' jjr  S/S\\R4                     S\\R4                     4S( jjr S)r!U =r"$ )0ÚCustomTextCLIPiâ  r™   Frš   Nr}   r~   r’   r   r›   rœ   r�   rv   c
                 óÔ  >• [         TU ]  5         X�l        [        XXH5      U l        [        XXH5      U l        U R                  R                  U l        U R                  R                  U l        U(       a  S/O/ n
[        R                  " [        R                  " U
5      U-  5      U l        Ub3  [        R                  " [        R                  " U
5      U-  5      U l        g S U l        g )Nr   )r¡   r¢   r™   r‘   r�   r–   r•   rZ   r[   r
   r«   rs   r¬   r­   r®   )r¯   r}   r~   r’   r   r›   rœ   r�   rv   r™   r°   r±   s              €rU   r¢   ÚCustomTextCLIP.__init__å  s«   ø€ ô 	‰ÑÔØ&ÔÜ)¨)ÀÓXˆŒÜ% i¸:ÓRˆŒ	Ø"Ÿi™i×6Ñ6ˆÔØŸ)™)×.Ñ.ˆŒæ-�!‘°2ˆÜŸ<š<¬¯
ª
°6Ó(:Ð=MÑ(MÓNˆÔØÑ&Ü Ÿlšl¬5¯:ª:°fÓ+=ÀÑ+OÓPˆD�Oà"ˆD�OrT   c                 ó6   • U R                   R                  XS9  g r´   r·   r¹   s      rU   rº   ÚCustomTextCLIP.lock_image_towerÿ  r¼   rT   r½   r¾   c                 ó:   • U R                   R                  X5        g rÃ   )r•   r¸   rÀ   s      rU   r   ÚCustomTextCLIP.lock_text_tower  s   € Ø�	‰	�‰�Õ:rT   c                 óp   • U R                   R                  U5        U R                  R                  U5        g rÃ   )r�   rÄ   r•   rÆ   s     rU   rÄ   Ú%CustomTextCLIP.set_grad_checkpointing  s&   € à�‰×*Ñ*¨6Ô2Ø�	‰	×(Ñ(¨Õ0rT   c                 óZ  • [        5       n[        U R                  S5      (       a5  U R                  R                  5        H  nUR	                  SU-   5        M     [        U R
                  S5      (       a5  U R
                  R                  5        H  nUR	                  SU-   5        M     U$ )NrÊ   rË   útext.)ÚsetrÌ   r�   rÊ   rÍ   r•   rÎ   s      rU   rÊ   ÚCustomTextCLIP.no_weight_decay  s‚   € ô “ˆÜ�4—;‘;Ð 1×2Ñ2Ø—[‘[×0Ñ0Ö2�Ø—	‘	˜) a™-Ö(ñ 3ä�4—9‘9Ð/×0Ñ0Ø—Y‘Y×.Ñ.Ö0�Ø—	‘	˜' A™+Ö&ñ 1àˆrT   rÒ   c                 ó`   • U R                  U5      nU(       a  [        R                  " USS9$ U$ rÔ   rØ   rÚ   s       rU   rÝ   ÚCustomTextCLIP.encode_image  rß   rT   c                 ó`   • U R                  U5      nU(       a  [        R                  " USS9$ U$ rÔ   )r•   rÙ   rÒ   )r¯   r•   rÒ   rÜ   s       rU   rç   ÚCustomTextCLIP.encode_text  s'   € Ø—9‘9˜T“?ˆÞ09Œq�{Š{˜8¨Ñ,ÐG¸xÐGrT   c                 óê   • U R                  USS9nU R                  USS9nU R                  R                  5       U-  UR                  -  nU R
                  b  XPR
                  -  nUR                  nXV4$ rê   rì   rï   s          rU   rô   ÚCustomTextCLIP.get_logits  rö   rT   rÛ   r•   r÷   rø   rù   rú   rû   rü   rý   rþ   rÿ   r   r  r  c           
      óú  • 0 nU(       a  SnSnU(       a  Ub  Uc   S5       eUbX  U R                   R                  UUUUUU	U
S9nU(       a!  SU;   a  [        R                  " US   SS9US'   UR	                  U5        UbX  U R
                  R                  UUUUUUUS9nU(       a!  SU;   a  [        R                  " US   SS9US'   UR	                  U5        U(       d  U(       a  U R                  R                  5       OSnU(       aJ  UUS   -  US   R                  -  nU R                  b  UU R                  -  nUR                  nUUS	'   UUS
'   U(       a!  UUS'   U R                  b  U R                  US'   U$ )a+  Forward features that returns intermediates.

Args:
    image: Input image tensor
    text: Input text tensor
    image_indices: For image tower, Take last n blocks if int, all if None, select matching indices if sequence
    text_indices: Take last n blocks if int, all if None, select matching indices if sequence
    stop_early: Stop iterating over blocks when last desired intermediate hit
    normalize: L2 Normalize final image and text features (if present)
    normalize_intermediates: Apply final encoder norm layer to all intermediates (if possible)
    intermediates_only: Only return intermediate features, do not return final features
    image_output_fmt: Shape of intermediate image feature outputs
    image_output_extra_tokens: Return both prefix and spatial intermediate tokens
    text_output_fmt: Shape of intermediate text feature outputs
    text_output_extra_tokens: Return both prefix and spatial intermediate tokens
    output_logits: Include logits in output
    output_logit_scale_bias: Include the logit scale bias in the output
Returns:

FNr  r  rð   rÕ   rÖ   rñ   rò   ró   r­   r®   )
r�   r
  rÙ   rÒ   r  r•   r­   rí   rî   r®   )r¯   rÛ   r•   r÷   rø   rù   rÒ   rú   rû   rü   rý   rþ   rÿ   r   r  r  r  Útext_outputr  rò   ró   s                        rU   r
  Ú$CustomTextCLIP.forward_intermediates(  s   € ðJ ˆÞàˆIØ!ˆMÞØÑ$¨Ñ)9ÐvÐ;vÓvÐ9àÑØŸ;™;×<Ñ<ØØ%Ø%Ø(?Ø#5Ø+Ø$=ð =ð ˆLö Ð-°Ó=Ü12·²¸\ÐJZÑ=[ÐacÑ1d�Ð-Ñ.Ø�M‰M˜,Ô'àÑØŸ)™)×9Ñ9ØØ$Ø%Ø(?Ø#5Ø*Ø$<ð :ð ˆKö ˜_°Ó;Ü/0¯{ª{¸;ÀÑ;WÐ]_Ñ/`�˜OÑ,Ø�M‰M˜+Ô&æ4AÖE\˜$×*Ñ*×.Ñ.Ô0ÐbfˆæØ*¨VÐ4DÑ-EÑEÈÈÑH_×HaÑHaÑaˆLØ�‰Ñ*Ø §¡Ñ/�Ø&Ÿ.™.ˆKØ%1ˆF�>Ñ"Ø$/ˆF�=Ñ!æ"Ø$3ˆF�=Ñ!Ø�‰Ñ*Ø'+§¡��|Ñ$àˆrT   c                 ó�  • Ub  U R                  USS9OS nUb  U R                  USS9OS nU R                  (       a<  UUU R                  R	                  5       S.nU R
                  b  U R
                  US'   U$ U R
                  b'  X4U R                  R	                  5       U R
                  4$ X4U R                  R	                  5       4$ r  r  r  s         rU   r  ÚCustomTextCLIP.forward‚  r  rT   )rZ   r®   r­   r™   r•   r�   r[   r  r  r  r  r  r!  r"  r+  s   @rU   r-  r-  â  s  ø‡ Ø—‘—‘ Ñ&Ó&ð  %Ø&(§f¢f¨XÓ&6Ø/3Ø*/Ø04Ø %ñ#àð#ð &ð#ð "ð	#ð
 ð#ð $ð#ð & e™_ð#ð $(ð#ð ! §¡Ñ-ð#ð ÷#ð #ô4[ñ;¨sð ;È4õ ;ð ‡Y�Y×Ñó1ó ð1ð ‡Y�Y×Ññ	ó ð	ñH¨Tõ HñH¨4õ Hò)ð -1Ø+/Ø=AØ<@Ø$Ø"Ø,1Ø',Ø$*Ø.3Ø#(Ø-2Ø"'Ø,1ñXà˜EŸL™LÑ)ðXð ˜5Ÿ<™<Ñ(ðXð $ E¨#¨t°C©y¨.Ñ$9Ñ:ð	Xð
 # 5¨¨d°3©i¨Ñ#8Ñ9ðXð ðXð ðXð &*ðXð !%ðXð "ðXð (,ðXð !ðXð '+ðXð  ðXð &*ðXð  
ˆc�5˜Ÿ™ t¨E¯L©LÑ'9Ð9Ñ:Ð:Ñ	;õ!Xðx -1Ø+/ñEà˜EŸL™LÑ)ðEð ˜5Ÿ<™<Ñ(÷Eó ErT   r-  Úmodelc                 ó4   ^• U4S jnU R                  U5        g)zCConvert applicable model parameters to low-precision (bf16 or fp16)c                 óŽ  >• [        U [        R                  [        R                  [        R                  45      (       au  U R
                  R                  R                  T5      U R
                  l        U R                  b4  U R                  R                  R                  T5      U R                  l        [        U [        R                  [        45      (       aU  / S Vs/ s H  o S3PM	     snQSPSPSP H4  n[        XS 5      nUc  M  UR                  R                  T5      Ul        M6     [        U [        [        45      (       a0  [        U SS 5      nUb   UR                  R                  T5      Ul        [        U [        5      (       a2  [        U SS 5      nUb!  UR                  R                  T5      Ul        g g g s  snf )N)ÚinÚqÚkÚvÚ_proj_weightÚin_proj_biasÚbias_kÚbias_vr§   rƒ   )r‹   r
   ÚConv1dÚConv2drå   ÚweightÚdatarã   ÚbiasÚMultiheadAttentionr   rä   r˜   r   r   )ÚlÚsÚattrÚtensorr'  s       €rU   Ú_convert_weightsÚ/convert_weights_to_lp.<locals>._convert_weightsœ  s`  ø€ Ü�aœ"Ÿ)™)¤R§Y¡Y´·	±	Ð:×;Ñ;ØŸH™HŸM™M×,Ñ,¨UÓ3ˆA�H‰HŒMØ�v‰vÑ!ØŸf™fŸk™kŸn™n¨UÓ3�—‘”ä�aœ"×/Ñ/´Ð;×<Ñ<ØrÑ7LÓMÒ7L°!˜S Ó-Ñ7LÑMÐrÈ~ÐrÐ_gÐrÐiqÓr�Ü  ¨$Ó/�ØÓ%Ø"(§+¡+§.¡.°Ó"7�F–Kñ sô
 �aœ$¤Ð0×1Ñ1ä˜1Ð/°Ó6ˆDØÑØ ŸI™IŸL™L¨Ó/�”	ä�aÔ*×+Ñ+ä˜1˜f dÓ+ˆDØÑØ ŸI™IŸL™L¨Ó/�•	ð  ð ,ùò Ns   ÃGN)Úapply)rE  r'  rZ  s    ` rU   Úconvert_weights_to_lpr]  ™  s   ø€ õ0ð0 
‡K�KÐ Õ!rT   Ú
state_dictc                 ó–   ^• SU ;   aA  0 nU R                  5        H)  u  mn[        U4S jS 5       5      (       a  ST-   mX!T'   M+     U$ U $ )Nr§   c              3   óF   >#   • U  H  nTR                  U5      v •  M     g 7frÃ   )Ú
startswith)Ú.0ÚprJ  s     €rU   Ú	<genexpr>Ú4convert_to_custom_text_state_dict.<locals>.<genexpr>À  s#   øé € ð ò - q�1—<‘< —?�?ò -ùs   ƒ!)r§   r¥   r¤   r£   r¦   r7  )ÚitemsÚany)r^  Únew_state_dictrK  rJ  s      @rU   Ú!convert_to_custom_text_state_dictri  »  sd   ø€ Ø˜JÓ&àˆØ×$Ñ$Ö&‰DˆAˆqÜô ñ -ó ÷ ñ ð ˜a‘K�Ø !˜1Óñ 'ð ÐØÐrT   Tc           	      óD  ^
• SU ;   nU(       a£  U S   R                   S   n[        U R                  5        Vs/ s H4  oUR                  S5      (       d  M  UR	                  S5      (       d  M2  UPM6     sn5      nU S   R                   S   n[        U S   R                   S   S-
  S	-  5      nXx-  n	O’S
 V
^
s/ s H!  m
[        [        U
4S jU  5       5      5      PM#     nn
[        U5      nU S   R                   S   n[        U S   R                   S   S-
  S	-  5      nS nUS-  S-   U S   R                   S   :X  d   eUS-  n	U S   R                   S   nU S   R                   S   nU S   R                   S   nU S   R                   S   nUS-  n[        [        S U  5       5      5      n[        UUUU	S9n[        UUUUUS9n[        UUUUUS9nS H  nU R                  US 5        M     [        U5        UR                  U 5        UR                  5       $ s  snf s  sn
f )Nzvisual.projzvisual.conv1.weightr   rË   z.attn.in_proj_weightrÕ   úvisual.positional_embeddingr   g      à?)r   rb   é   é   c              3   ó€   >#   • U  H3  oR                  S T 35      (       d  M  UR                  S5      S   v •  M5     g7f)zvisual.layerÚ.rb   N©ra  Úsplit)rb  rJ  Úbs     €rU   rd  Ú5build_model_from_openai_state_dict.<locals>.<genexpr>Ý  s1   øé € Ð\ªZ¨¿<¹<È,ÐWXÐVYÐHZ×;[“O�A—G‘G˜C“L –OªZùs   ƒ>£>zvisual.layer1.0.conv1.weightz$visual.attnpool.positional_embeddingrb   r‡   r§   r¥   ztoken_embedding.weightzln_final.weightr    c              3   óx   #   • U  H0  oR                  S 5      (       d  M  UR                  S5      S   v •  M2     g7f)ztransformer.resblocksro  rb   Nrp  )rb  rJ  s     rU   rd  rs  ê  s(   é € Ð oº*°QÏÉÐWl×Hn£ §¡¨£¨a¦º*ùs   ‚:Ÿ:)r   r   r%   r'   )rZ   r[   r   r_   r   )r~   r’   r   rv   )Úinput_resolutionrZ   r[   )ÚshapeÚlenÚkeysra  ÚendswithÚroundr8  r�   r   rW   r˜   ÚpopÚconvert_weights_to_fp16Úload_state_dictÚeval)r^  r   rv   ÚvitÚvision_widthrJ  Úvision_layersÚvision_patch_sizeÚ	grid_sizer'   rr  ÚcountsÚoutput_widthr}   rZ   r[   Útransformer_widthÚtransformer_headsÚtransformer_layersr~   r’   rE  Úkeys             `            rU   Ú"build_model_from_openai_state_dictrŠ  Í  sq  ø€ ð
 ˜:Ñ
%€Cæ
Ø!Ð"7Ñ8×>Ñ>¸qÑAˆÜØ"Ÿ™Ô)ÓlÒ)�1¯\©\¸)×-D‹QÈÏÉÐTj×Ik�QÑ)Ñlónˆà&Ð'<Ñ=×CÑCÀBÑGÐÜ˜:Ð&CÑD×JÑJÈ1ÑMÐPQÑQÐVYÑYÓZˆ	Ø&Ñ2‰
ñ htôuÚgsÐbcŒC”Ô\©ZÓ\Ó\Ö]Ñgsð 	ð uä˜f›ˆØ!Ð"@ÑA×GÑGÈÑJˆÜ˜jÐ)OÑP×VÑVÐWXÑYÐ\]Ñ]ÐbeÑeÓfˆØ ÐØ˜qÑ  1Ñ$¨
Ð3YÑ(Z×(`Ñ(`ÐabÑ(cÓcÐcÐcØ! BÑ&ˆ
àÐ,Ñ-×3Ñ3°AÑ6€IØÐ 6Ñ7×=Ñ=¸aÑ@€NØÐ4Ñ5×;Ñ;¸AÑ>€JØ"Ð#4Ñ5×;Ñ;¸AÑ>ÐØ)¨RÑ/ÐÜœSÑ o¹*Ó oÓoÓpÐäØØØ$Øñ	€Jô Ø%ØØØØ!ñ€Hô ØØØØØñ€Eó DˆØ�‰�s˜DÖ!ñ Dä˜EÔ"Ø	×Ñ˜*Ô%Ø�:‰:‹<Ðùò] mùò
us   ·HÁHÁ,HÂ6(Hr+   Úcpuc           	      óT  • U R                  5         U R                  R                  n[        R                  " USX34US9n[        R
                  " XR                  4[        R                  US9n[        R                  R                  U [        XE4U4U4S9S9n X0R                  l        U $ )Nrl  )Údevice)r'  r�  )r  rç   rÝ   )Úinputs)r~  r�   r'   rs   r¬   ÚzerosrZ   rM   r#  Útrace_modulerR   )rE  Ú
batch_sizer�  r'   Úexample_imagesÚexample_texts         rU   Útrace_modelr”    s˜   € Ø	‡J�J„LØ—‘×(Ñ(€JÜ—Z’Z ¨Q°
Ð GÐPVÑW€NÜ—;’; 
×,@Ñ,@ÐAÌÏÉÐ[aÑb€LÜ�I‰I×"Ñ"ØÜØ#Ð2Ø%˜Ø(Ð*ñ
ð #ð €Eð )‡L�LÔØ€LrT   ÚinterpolationÚ	antialiasc           	      óÊ  • U R                  SS 5      nUb  [        UR                  S5      (       d  g [        UR                  R                  5      nSnUS   US   -  U-   nXtR
                  S   :X  a  g U(       a	  US U XFS  p˜OS Up˜[        [        [        R                  " [        U	5      5      5      5      n
[        R                  " SX¥5        U	R                  SU
S   U
S   S5      R                  SSSS5      n	[        R                  " U	UUUS	S
9n	U	R                  SSSS5      R                  SUS   US   -  S5      S   n	Ub  [         R"                  " X‰/SS9nOU	nX°S'   g )Nrk  rƒ  r   r   z3Resizing position embedding grid-size from %s to %srÕ   rl  rb   F©ÚsizeÚmoder–  Úalign_cornersrÖ   )ÚgetrÌ   r�   r   rƒ  rv  rM   ÚmathÚsqrtrw  ÚloggingÚinfoÚreshapeÚpermuterÙ   Úinterpolaters   Úcat)r^  rE  r•  r–  Úold_pos_embedrƒ  Úextra_tokensÚnew_seq_lenÚpos_emb_tokÚpos_emb_imgÚold_grid_sizeÚnew_pos_embeds               rU   Úresize_pos_embedr¬    sn  € à—N‘NÐ#@À$ÓG€MØÑ¤G¨E¯L©L¸+×$FÑ$FØÜ˜%Ÿ,™,×0Ñ0Ó1€IØ€LØ˜A‘, ¨1¡Ñ-°Ñ<€KØ×)Ñ)¨!Ñ,Ó,ØæØ#0°°,Ð#?ÀÈ}ÐA]‘[à#'¨�[Üœc¤$§)¢)¬C°Ó,<Ó"=Ó>Ó?€Mä‡L‚LÐFÈÔaØ×%Ñ% a¨°qÑ)9¸=ÈÑ;KÈRÓP×XÑXÐYZÐ\]Ð_`ÐbcÓd€KÜ—-’-ØØØØØñ€Kð ×%Ñ% a¨¨A¨qÓ1×9Ñ9¸!¸YÀq¹\ÈIÐVWÉLÑ=XÐZ\Ó]Ð^_Ñ`€KØÑÜŸ	š	 ;Ð"<À!ÑD‰à#ˆØ0=Ð,Ò-rT   c                 ó
  • SU ;   a  SOSnU R                  US 5      nUc  g [        USS 5      nUc  [        UR                  SS 5      nUR                  S   nUR                  S   nUR                  S   n	UR                  S   n
XŠ:X  d   S5       eXy:X  a  g [        R
                  " SXy5        UR                  SXx5      R                  SSS5      n[        R                  " UU	UUSS	9nUR                  SSS5      S   nUnX°U'   g )
Nr¥   ztext.positional_embeddingr   r   ztext pos_embed width changed!z6Resizing text position embedding num_pos from %s to %srb   Fr˜  )
rœ  rä   r•   rv  rŸ  r   r¡  r¢  rÙ   r£  )r^  rE  r•  r–  Úpos_embed_keyr¥  Úmodel_pos_embedÚold_num_posÚ	old_widthÚnum_posr   r«  s               rU   Úresize_text_pos_embedr³  :  s%  € Ø.DÈ
Ó.RÑ*ÐXs€MØ—N‘N =°$Ó7€MØÑØä˜eÐ%;¸TÓB€OØÑÜ! %§*¡*Ð.DÀdÓKˆà×%Ñ% aÑ(€KØ×#Ñ# AÑ&€IØ×#Ñ# AÑ&€GØ×!Ñ! !Ñ$€EØÓÐ>Ð>Ó>ÐØÓØä‡L‚LÐIÈ;Ô`Ø!×)Ñ)¨!¨[ÓD×LÑLÈQÐPQÐSTÓU€MÜ—M’MØØØØØñ€Mð "×)Ñ)¨!¨Q°Ó2°1Ñ5€MØ!€Mà -ˆ}ÒrT   c                 ó¾   • [        U SU 5      n[        US0 5      nU(       d;  [        US5      nUb  X2S'   [        USS 5      nUb  XBS'   [        USS 5      nUb  XRS'   U$ )	Nr�   Úpreprocess_cfgr'   r™  Ú
image_meanÚmeanÚ	image_stdÚstd©rä   )rE  Úmodulerµ  r™  r·  r¹  s         rU   Úget_model_preprocess_cfgr¼  [  sy   € Ü�U˜H eÓ,€FÜ˜VÐ%5°rÓ:€NÞä�v˜|Ó,ˆØÑØ%)˜6Ñ"Ü�v˜|¨TÓ2ˆØÑØ%)˜6Ñ"Ü�f˜k¨4Ó0ˆØ‰?Ø$'˜5Ñ!ØÐrT   rµ  c                 ó|   • [        U SU 5      nUS   Ul        US   Ul        [        R                  " U5      Ul        g )Nr�   r·  r¹  )rä   r¶  r¸  ÚcopyÚdeepcopyrµ  )rE  rµ  r»  s      rU   Úset_model_preprocess_cfgrÀ  l  s;   € Ü�U˜H eÓ,€FØ& vÑ.€FÔØ% eÑ,€FÔÜ ŸMšM¨.Ó9€FÕrT   c                 ót   • [        U SU 5      n0 n[        USS 5      nUb  X2S'   [        USS 5      nUb  XBS'   U$ )Nr•   rZ   r[   rº  )rE  r»  ÚcfgrZ   r[   s        rU   Úget_model_tokenize_cfgrÃ  s  sT   € Ü�U˜F EÓ*€FØ
€CÜ˜VÐ%5°tÓ<€NØÑ!Ø .ÐÑÜ˜ ¨tÓ4€JØÑØ&ˆLÑØ€JrT   )FN)ÚbicubicT)rC   F)CÚ__doc__r¾  rŸ  r�  Údataclassesr   Útypingr   r   r   r   r   r	   Únumpyr%  rs   Útorch.nn.functionalr
   Ú
functionalrÙ   Útorch.utils.checkpointr   Ú	functoolsr   Úhf_modelr   Úmodified_resnetr   Ú
timm_modelr   r£   r   r   r   r   r   r   r   r   Úutilsr   r   rW   rQ   rw   r|   rM   rP   r'  r‘   r–   ÚModuler˜   r-  ru   r]  r|  rR   ri  rŠ  r�  r”  r¬  r³  r¼  rÀ  rÃ  rH   rT   rU   Ú<module>rÒ     så  ðñó Û Û Ý !ß :× :ã Û ß Ð Ý Ý -Ý å #Ý +Ý !÷	÷ 	ó 	õ ð ÷$+ð $+ó ð$+ðN ÷%(ð %(ó ð%(ðP˜cô ð˜sô ð !Ø,0ñ	IØðIà!ðIð ðIð ˜UŸ[™[Ñ)õ	Ið^ !Ø,0ñ	5Øð5àð5ð ð5ð ˜UŸ[™[Ñ)õ	5ôpVEˆ2�9‰9ô VEôrtE�R—Y‘Yô tEðn 38·-±-ñ " §¡õ "ð< 0Ð ð°$ô ð( Ø—=‘=ñ8Øõ8ðv #&¨e¯lªl¸5Ó.Aô ñ >°sð >ÐSWõ >ñD.¸Cð .ÐW[õ .òBð":°D¸¸c¸±Nô :ó	rT   