Ë
    éÓ^jš1  ã                   ó  — d dl Zd dlZd dlZd dlmZ d dlmZ d dlmZm	Z	m
Z
mZmZmZmZmZmZ d dlZd dlZd dlmZ d dlmZ d dlmZ g d¢Zd.d	ej0                  d
efd„Z	 	 	 d/de	dej0                  dededej0                  f
d„Z	 	 	 d/dej0                  dededefd„Z	 	 	 d/dej0                  dededefd„ZdZ	 	 d0deeeef      dee
e	f   dedefd„Z 	 	 d0dej0                  dedefd„Z!	 	 d0dej0                  dedefd„Z"	 	 	 d1deeeej0                  f      de#deeeed f   f   d!eeeeej0                        f   fd"„Z$dd#œd$ee   fd%„Z%	 	 	 	 d2d&e#d'ed(ed$ee   fd)„Z&d*e#d+edefd,„Z'd	ej0                  dee   fd-„Z(y)3é    N)Údefaultdict)Úchain)	ÚAnyÚCallableÚDictÚIteratorÚListÚOptionalÚTupleÚTypeÚUnion)Únn)ÚTensor)Úuse_reentrant_ckpt)Úmodel_parametersÚnamed_applyÚnamed_modulesÚnamed_modules_with_paramsÚadapt_input_convÚgroup_with_matcherÚgroup_modulesÚgroup_parametersÚflatten_modulesÚcheckpoint_seqÚ
checkpointÚreinit_non_persistent_buffersÚmodelÚexclude_headc                 ór   — |r!| j                  «       D �cg c]  }|‘Œ c}d d S | j                  «       S c c}w )Néþÿÿÿ)Ú
parameters)r   r   Úps      úb/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/timm/models/_manipulate.pyr   r      s:   € Ùà ×+Ñ+Ó-Ö.�a’Ò.¨s°Ð3Ð3à×ÑÓ!Ð!ùò /s   •	4ÚfnÚmoduleÚdepth_firstÚinclude_rootÚreturnc                 ó¼   — |s|r
 | ||¬«       |j                  «       D ],  \  }}|rdj                  ||f«      n|}t        | |||d¬«       Œ. |r|r
 | ||¬«       |S )N)r%   Únameú.T)r$   r%   r*   r&   r'   )Únamed_childrenÚjoinr   )r$   r%   r*   r&   r'   Ú
child_nameÚchild_modules          r#   r   r      sp   € ñ ™<Ù
�&˜tÕ$Ø$*×$9Ñ$9Ó$;ò mÑ ˆ
�LÙ59�S—X‘X˜t ZÐ0Ô1¸zˆ
Ü�r ,°ZÈ[ÐgkÖlðmñ ‘|Ù
�&˜tÕ$Ø€Mó    r*   c              #   óÈ   K  — |s|r|| f–— | j                  «       D ]3  \  }}|rdj                  ||f«      n|}t        |||d¬«      E d {  –—†  Œ5 |r
|r|| f–— y y y 7 Œ­w©Nr+   T)r%   r*   r&   r'   )r,   r-   r   ©r%   r*   r&   r'   r.   r/   s         r#   r   r   -   sŠ   è ø€ ñ ™<Ø�FˆlÒØ$*×$9Ñ$9Ó$;ò ^Ñ ˆ
�LÙ59�S—X‘X˜t ZÐ0Ô1¸zˆ
Ü Ø j¸kÐX\ô^÷ 	^ñ 	^ð^ñ ‘|Ø�FˆlÓð $€{ð	^ús   ‚A
A"ÁA ÁA"c              #   óú   K  — | j                   r
|s|r|| f–— | j                  «       D ]3  \  }}|rdj                  ||f«      n|}t        |||d¬«      E d {  –—†  Œ5 | j                   r|r
|r|| f–— y y y y 7 Œ ­wr2   )Ú_parametersr,   r-   r   r3   s         r#   r   r   =   s�   è ø€ ð ×Ò¡+±,Ø�FˆlÒØ$*×$9Ñ$9Ó$;ò ^Ñ ˆ
�LÙ59�S—X‘X˜t ZÐ0Ô1¸zˆ
Ü,Ø j¸kÐX\ô^÷ 	^ñ 	^ð^ð ×Ò™k©lØ�FˆlÓð /;˜kÐð	^ús   ‚AA;ÁA9Á!A;)iŸ† Únamed_objectsÚgroup_matcherÚreturn_valuesÚreversec                 óì  ‡— t        ‰t        «      r‰g }t        ‰j                  «       «      D ]i  \  }\  }}|€Œt        |t        t
        f«      r+|D ]%  }|t        j                  |d   «      |f|d   fgz  }Œ' ŒM|t        j                  |«      |fd fgz  }Œk |Šˆfd„}	t        t
        «      }
| D ]#  \  }}|
 |	|«         j                  |r|n|«       Œ% t        t
        «      }d}t        t        d„ |
j                  «       «      «      D ]2  }|dk  s|d   t        d   k7  r|dz  }||   j                  |
|   «       Œ4 |r1|rJ d«       ‚i }|j                  «       D ]  \  }}|D ]  }|||<   Œ	 Œ |S |S )Nr   é   c                 óŽ  •— t        ‰t        t        f«      ru‰D ]d  \  }}}|j                  | «      }|sŒ||j	                  «       |f}t        t        t        t        j                  t        d |«      «      «      «      c S  t        d«      fS  ‰| «      }t        |t        j                  j                  «      s|fS t        |«      S )NÚinf)Ú
isinstanceÚlistÚtupleÚmatchÚgroupsÚmapÚfloatr   Úfrom_iterableÚfilterÚcollectionsÚabcÚIterable)r*   Úmatch_fnÚprefixÚsuffixÚrÚpartsÚordr7   s          €r#   Ú_get_groupingz)group_with_matcher.<locals>._get_groupinge   s­   ø€ Ü�m¤d¬E ]Ô3Ø,9ò WÑ(�˜& &Ø—N‘N 4Ó(�ÚØ# Q§X¡X£Z°Ð8�Eä ¤¤U¬E×,?Ñ,?ÄÀtÈUÓ@SÓ,TÓ!UÓVÒVðWô ˜“<�=Ð á Ó%ˆCÜ˜c¤;§?¡?×#;Ñ#;Ô<Ø�t�Ü˜“:Ðr0   éÿÿÿÿc                 ó
   — | d uS )N© )Úxs    r#   ú<lambda>z$group_with_matcher.<locals>.<lambda>|   s
   €  Q¨d ]€ r0   z-reverse mapping only sensible for name output)r>   ÚdictÚ	enumerateÚitemsr@   r?   ÚreÚcompiler   ÚappendÚsortedrF   ÚkeysÚMATCH_PREV_GROUPÚextend)r6   r7   r8   r9   ÚcompiledÚgroup_ordinalÚ
group_nameÚmspecÚsspecrP   ÚgroupingÚkÚvÚlayer_id_to_paramÚlidÚparam_to_layer_idÚlmÚns    `                r#   r   r   P   sÂ  ø€ ô �-¤Ô&àˆÜ2;¸M×<OÑ<OÓ<QÓ2Rò 		JÑ.ˆMÑ.˜J¨Øˆ}Øä˜%¤%¬ Ô/à"ò U�EØ¤"§*¡*¨U°1©XÓ"6¸Ð8HÈ%ÐPQÉ(Ð!SÐ TÑT‘HñUð œbŸj™j¨Ó/°-Ð1AÀ4ÐHÐIÑI‘ð		Jð !ˆôô  œ4Ó €HØò E‰ˆˆ1Ø‘˜qÓ!Ñ"×)Ñ)©}©!À!ÕDðEô $¤DÓ)ÐØ
€CÜ”FÑ2°H·M±M³OÓDÓEò 3ˆØ�Š7�a˜‘eÔ/°Ñ2Ò2Ø�1‰HˆCØ˜#Ñ×%Ñ% h¨q¡kÕ2ð3ñ
 Ù ÐQÐ"QÓQÐ àÐØ(×.Ñ.Ó0ò 	+‰GˆC�Øò +�Ø'*Ð! !Ò$ñ+ð	+ð !Ð àÐr0   c                 ó<   — t        | j                  «       |||¬«      S ©N)r8   r9   )r   Únamed_parameters©r%   r7   r8   r9   s       r#   r   r   �   s&   € ô Ø×ÑÓ! =ÀÐW^ô`ð `r0   c                 ó2   — t        t        | «      |||¬«      S rn   )r   r   rp   s       r#   r   r   —   s"   € ô Ü! &Ó)¨=ÈÐ_fôhð hr0   r   ÚdepthrK   .Úmodule_typesc              #   ó¼  K  — t        |t        «      }t        |t        «      rF|dk(  r0t        j                  t        j
                  t        j                  f}nt        j                  f}| D ]k  \  }}|r:t        ||«      r.t        |j                  «       |dz
  |r|fn||¬«      E d {  –—†  ŒB|r||fz   }||f–— ŒQ|rdj                  ||g«      }||f–— Œm y 7 Œ2­w)NÚ	containerr;   )rK   rs   r+   )
r>   r@   Ústrr   Ú
SequentialÚ
ModuleListÚ
ModuleDictr   r,   r-   )r   rr   rK   rs   Úprefix_is_tupler*   r%   s          r#   r   r   ¡   sÙ   è ø€ ô ! ¬Ó/€OÜ�,¤Ô$Ø˜;Ò&ÜŸM™M¬2¯=©=¼"¿-¹-ÐH‰LäŸM™MÐ+ˆLØ%ò #‰ˆˆfÙ”Z ¨Ô5Ü&Ø×%Ñ%Ó'Ø˜‘	Ù"1˜‘w°tØ)ô	÷ ñ ñ Ø  Ñ'�Ø˜F�lÓ"áØŸ8™8 V¨T NÓ3�DØ˜F�lÓ"ñ#ðús   ‚B%CÂ'CÂ(3C©Úuse_reentrantr|   c                óx   — |€
t        «       }t        j                  j                  j                  | g|¢­d|i|¤ŽS )z~ checkpoint wrapper fn

    A thin wrapper around torch.utils.checkpoint.checkpoint to default
    use_reentrant to False
    r|   )r   ÚtorchÚutilsr   )Úfunctionr|   ÚargsÚkwargss       r#   r   r   ¿   sN   € ð ÐÜ*Ó,ˆä�;‰;×!Ñ!×,Ñ,Øðà	òð $ðð ñ	ð r0   ÚeveryÚflattenÚ	skip_lastc                 ó  — |€
t        «       }d„ }t        | t        j                  j                  «      r| j                  «       } |rt        j                  | «      } t        | t        t        f«      st        | «      } t        | «      }|r|dz  }d}t        d||«      D ]K  }	t        |	|z   dz
  |dz
  «      }t        j                  j                  j                   ||	|| «      ||¬«      }ŒM |r  ||dz   t        | «      dz
  | «      |«      S |S )a,  A helper function for checkpointing sequential models.

    Sequential models execute a list of modules/functions in order
    (sequentially). Therefore, we can divide such a sequence into segments
    and checkpoint each segment. All segments except run in :func:`torch.no_grad`
    manner, i.e., not storing the intermediate activations. The inputs of each
    checkpointed segment will be saved for re-running the segment in the backward pass.

    See :func:`~torch.utils.checkpoint.checkpoint` on how checkpointing works.

    .. warning::
        Checkpointing currently only supports :func:`torch.autograd.backward`
        and only if its `inputs` argument is not passed. :func:`torch.autograd.grad`
        is not supported.

    .. warning:
        At least one of the inputs needs to have :code:`requires_grad=True` if
        grads are needed for model inputs, otherwise the checkpointed part of the
        model won't have gradients.

    Args:
        functions: A :class:`torch.nn.Sequential` or the list of modules or functions to run sequentially.
        x: A Tensor that is input to :attr:`functions`
        every: checkpoint every-n functions (default: 1)
        flatten: flatten nn.Sequential of nn.Sequentials
        skip_last: skip checkpointing the last function in the sequence if True
        use_reentrant: Use re-entrant checkpointing

    Returns:
        Output of running :attr:`functions` sequentially on :attr:`*inputs`

    Example:
        >>> model = nn.Sequential(...)
        >>> input_var = checkpoint_seq(model, input_var, every=2)
    c                 ó   ‡ ‡‡— ˆˆˆ fd„}|S )Nc                 óF   •— t        ‰‰dz   «      D ]  } ‰|   | «      } Œ | S )Nr;   )Úrange)Ú_xÚjÚendÚ	functionsÚstarts     €€€r#   Úforwardz5checkpoint_seq.<locals>.run_function.<locals>.forward  s2   ø€ Ü˜5 #¨¡'Ó*ò &�Ø!�Y˜q‘\ "Ó%‘ð&àˆIr0   rS   )rŽ   rŒ   r�   r�   s   ``` r#   Úrun_functionz$checkpoint_seq.<locals>.run_function  s   ú€ ö	ð ˆr0   r;   rQ   r   r{   )r   r>   r~   r   rw   Úchildrenr   rE   r@   r?   Úlenr‰   Úminr   r   )
r�   rT   rƒ   r„   r…   r|   r�   Únum_checkpointedrŒ   rŽ   s
             r#   r   r   Õ   s  € ðV ÐÜ*Ó,ˆòô �)œUŸX™X×0Ñ0Ô1Ø×&Ñ&Ó(ˆ	ÙÜ×'Ñ'¨	Ó2ˆ	Ü�i¤%¬ Ô/Ü˜)Ó$ˆ	ä˜9“~ÐÙØ˜AÑÐØ
€CÜ�qÐ*¨EÓ2ò 
ˆÜ�%˜%‘- !Ñ#Ð%5¸Ñ%9Ó:ˆÜ�K‰K×"Ñ"×-Ñ-Ù˜  YÓ/ØØ'ð .ó 
‰ð
ñ ØC‰|˜C !™G¤S¨£^°aÑ%7¸ÓCÀAÓFÐFØ€Hr0   Úin_chansÚconv_weightc                 óh  — |j                   }|j                  «       }|j                  dk7  rt        d|j                  › d�«      ‚|j                  \  }}}}| dk(  r\|dkD  rC|j                  d   dz  dk(  sJ ‚|j                  ||dz  d||«      }|j                  dd¬	«      }n~|j                  dd
¬	«      }nj| dk7  re|dk7  rt        d«      ‚t        t        j                  | dz  «      «      }|j                  d|dd«      d d …d | …d d …d d …f   }|dt        | «      z  z  }|j                  |«      }|S )Né   z;adapt_input_conv only supports 4D Conv2d weights; got ndim=r+   r;   é   r   é   F)ÚdimÚkeepdimTz*Weight format not supported by conversion.)ÚdtyperD   ÚndimÚNotImplementedErrorÚshapeÚreshapeÚsumÚintÚmathÚceilÚrepeatÚto)r•   r–   Ú	conv_typeÚOÚIÚJÚKr¦   s           r#   r   r   !  sO  € Ø×!Ñ!€IØ×#Ñ#Ó%€KØ×Ñ˜1Òô "ØIÈ+×JZÑJZÐI[Ð[\Ð]ó
ð 	
ð ×"Ñ"�J€A€qˆ!ˆQØ�1‚}ØˆqŠ5Ø×$Ñ$ QÑ'¨!Ñ+¨qÒ0Ð0Ð0à%×-Ñ-¨a°°a±¸¸A¸qÓAˆKØ%Ÿ/™/¨a¸˜/Ó?‰Kà%Ÿ/™/¨a¸˜/Ó>‰KØ	�QŠØ�Š6Ü%Ð&RÓSÐSô œŸ™ 8¨a¡<Ó0Ó1ˆFØ%×,Ñ,¨Q°¸¸1Ó=ºaÀÀ(ÀÊAÊqÐ>PÑQˆKØ˜A¤ h£Ñ/Ñ0ˆKØ—.‘. Ó+€KØÐr0   c                 óž   — g }| j                  «       D ]7  \  }}t        |d«      sŒ|j                  «        |j                  |r|nd«       Œ9 |S )aý  Walk model and call init_non_persistent_buffers() on modules that have it.

    This reinitializes computed buffers (like RoPE frequencies, attention bias indices)
    that are marked as non-persistent and thus not saved in checkpoints. These buffers
    are typically computed from module configuration and need to be reinitialized after
    loading a checkpoint.

    Args:
        model: Model to reinitialize buffers for

    Returns:
        List of module names that were reinitialized

    Example:
        >>> model = create_model('vit_base', pretrained=True)
        >>> # After loading checkpoint or moving to new device
        >>> reinitialized = reinit_non_persistent_buffers(model)
        >>> print(f"Reinitialized {len(reinitialized)} modules")
    Úinit_non_persistent_buffersz(root))r   Úhasattrr®   r[   )r   Úreinitializedr*   r%   s       r#   r   r   A  sV   € ð( €MØ×+Ñ+Ó-ò =‰ˆˆfÜ�6Ð8Õ9Ø×.Ñ.Ô0Ø× Ñ ©¡°8Õ<ð=ð Ðr0   )F)Ú TF)FF)r;   r±   Ú
sequential)r;   FFN))Úcollections.abcrG   r¤   rY   r   Ú	itertoolsr   Útypingr   r   r   r   r	   r
   r   r   r   r~   Útorch.utils.checkpointr   r   Útimm.layersr   Ú__all__ÚModuleÚboolr   r   rv   r   r   r^   r   r   r   r£   r   r   r   r   r   rS   r0   r#   ú<module>r»      sµ  ðÛ Û Û 	Ý #Ý ß T× TÕ Tã Û Ý Ý å *ò,€ñ
"˜BŸI™Ið "°Tó "ð !#Ø Ø"ñ	Øðà—	‘	ðð ðð ð	ð
 ‡Y�Yóð$ Ø Ø"ñ	Ø—	‘	ðàðð ðð ó	ð$ Ø Ø"ñ	Ø—	‘	ðàðð ðð ó	ð  Ð ð $Øñ	:Ø  c¨3 h¡Ñ0ð:à˜T 8˜^Ñ,ð:ð ð:ð ó	:ð@ $Øñ	`Ø—	‘	ð`ð ð`ð ó	`ð $Øñ	hØ—	‘	ðhð ðhð ó	hð Ø.0Ø;Gñ	#Ø  c¨2¯9©9 nÑ 5Ñ6ð#àð#ð �c˜5  c ™?Ð*Ñ+ð#ð ˜C  t¨B¯I©I¡Ñ!7Ð7Ñ8ó	#ðB %)òð ˜D‘>óð2 ØØØ(,ñIð ðIð ð	Ið
 ðIð   ‘~óIðX˜sð °ð ¸Fó ð@¨¯©ð °t¸C±yô r0   