Ë
    éÓ^j¨  ã                   óT  — d dl Z d dlZd dlmZ d dlmZmZ d dlmZ d dl	m
Z
  ej                  e«      Zdedee   defd	„Z	 	 	 	 	 dd
ej"                  dee   dedee   dee   defd„Zd„ Zdd„ZeZ	 	 	 	 	 	 	 	 	 dd
ej"                  dedee   dee   dededededee   defd„Zy)é    N)Úislice)Ú
CollectionÚOptional)Únn)Úgroup_parametersÚnameÚpatternsÚreturnc                 ó,   ‡ — t        ˆ fd„|D «       «      S )zACheck if parameter name matches any pattern (supports wildcards).c              3   óJ   •K  — | ]  }t        j                   ‰|«      –— Œ y ­w©N)Úfnmatch)Ú.0Úpatternr   s     €úc/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/timm/optim/_param_groups.pyú	<genexpr>z#_matches_pattern.<locals>.<genexpr>   s   øè ø€ ÒF°'Œw�‰˜t W×-ÑFùs   ƒ #)Úany)r   r	   s   ` r   Ú_matches_patternr      s   ø€ äÓF¸XÔFÓFÐFó    ÚmodelÚweight_decayÚweight_decay_exclude_1dÚno_weight_decay_listÚfallback_listÚfallback_no_weight_decayc                 óº  — |rt        |«      t        |«      z  }| }g }g }g }	g }
| j                  «       D ]Ç  \  }}|j                  sŒt        ||«      }|r&|r|
j	                  |«       Œ5|	j	                  |«       ŒGt        ||«      }|xr" |j
                  dk  xs |j                  d«      }|s|r&|r|
j	                  |«       Œ‘|	j	                  |«       Œ£|r|j	                  |«       Œ·|j	                  |«       ŒÉ g }|	r|j	                  |	ddœ«       |r|j	                  ||dœ«       |
r|j	                  |
dddœ«       |r|j	                  ||ddœ«       |S )Né   z.biasç        )Úparamsr   T)r   r   Úuse_fallback)ÚsetÚnamed_parametersÚrequires_gradr   ÚappendÚndimÚendswith)r   r   r   r   r   r   Úno_wdÚdecayÚdecay_fallbackÚno_decayÚno_decay_fallbackr   ÚparamÚis_fallbackÚmatches_patternÚis_excluded_1dÚgroupss                    r   Úparam_groups_weight_decayr1      sc  € ñ  Ü˜MÓ*¬SÐ1EÓ-FÑFˆàÐ€Eà€EØ€NØ€HØÐØ×-Ñ-Ó/ò (‰ˆˆeØ×"Ò"Øô ' t¨]Ó;ˆááØ!×(Ñ(¨Õ/à—‘ Õ&ô /¨tÐ5IÓJˆOØ4Òd¸%¿*¹*È¹/Ò:cÈTÏ]É]Ð[bÓMcˆNÙ¡áØ%×,Ñ,¨UÕ3à—O‘O EÕ*ñ Ø"×)Ñ)¨%Õ0à—L‘L Õ'ð9(ð< €FÙØ�‰ ¸2Ñ>Ô?ÙØ�‰ ¸ÑEÔFÙØ�‰Ð!2ÀBÐX\Ñ]Ô^ÙØ�‰ ÀÐ_cÑdÔeà€Mr   c                 ó<   ‡ ‡— t        ‰ «      Š t        ˆ ˆfd„d«      S )Nc                  ó.   •— t        t        ‰ ‰«      «      S r   )Útupler   ©ÚitÚsizes   €€r   ú<lambda>z_group.<locals>.<lambda>Q   s   ø€ œœf R¨Ó.Ó/€ r   © )Úiterr5   s   ``r   Ú_groupr;   O   s   ù€ Ü	ˆb‹€BÜÔ/°Ó4Ð4r   c                 óâ  — d„ }t        | di «      j                  dd «      }g }g }| j                  «       D ]0  \  }} |||«      r|j                  |«      n|j                  |«       Œ2 t	        |«      }	|�|	| z   }t        t        ||«      «      }t	        |«      }
t        |«      D ���ci c]  \  }}|D ]  }||“Œ Œ }}}}|j                  |D �ci c]  }||
“Œ c}«       |S c c}}}w c c}w )Nc                 ó°   — |syt        |t        t        f«      r(t        |D �cg c]  }| j	                  |«      ‘Œ c}«      S | j	                  |«      S c c}w )NT)Ú
isinstancer4   Úlistr   Ú
startswith)ÚnÚhpÚhpis      r   Ú_in_headz#auto_group_layers.<locals>._in_headU   sI   € ÙØÜ˜œU¤D˜MÔ*Ü°RÖ8¨c˜Ÿ™ SÕ)Ò8Ó9Ð9à—<‘< Ó#Ð#ùò 9s   £AÚpretrained_cfgÚ
classifier)	ÚgetattrÚgetr"   r$   Úlenr?   r;   Ú	enumerateÚupdate)r   Úlayers_per_groupÚ
num_groupsrD   Úhead_prefixÚnames_trunkÚ
names_headrA   Ú_Únum_trunk_layersÚnum_trunk_groupsÚiÚlÚ	layer_maps                 r   Úauto_group_layersrW   T   s  € ò$ô ˜%Ð!1°2Ó6×:Ñ:¸<ÈÓN€KØ€KØ€JØ×&Ñ&Ó(ò T‰ˆˆ1Ù (¨¨KÔ 8ˆ
×Ñ˜!Ô¸k×>PÑ>PÐQRÓ>SùðTô ˜;Ó'ÐØÐØ-°*°Ñ<Ð=ÐÜ”v˜kÐ+;Ó<Ó=€Kä˜;Ó'ÐÜ"+¨KÓ"8×DÐD™$˜!˜QÀ!ÒD¸Q��A‘ÐD�ÐD€IÒDØ×Ñ°:Ö>¨a�aÐ)Ñ)Ò>Ô?ØÐùô EùÚ>s   Â+C%Ã
C,Úlayer_decayÚ	min_scaleÚno_opt_scaleÚverbosec
                 ór  ‡‡‡— |rt        |«      t        |«      z  }i }
i }t        | d«      rt        | | j                  d¬«      d¬«      }nt	        | «      }t        |j                  «       «      dz   }|dz
  Št        ˆˆˆfd„t        |«      D «       «      }| j                  «       D ]Ç  \  }}|j                  sŒt        ||«      }|r|j                  dk  st        ||«      rd}d	}nd
}|}|j                  |‰«      }||   }|r||k  rd|_
        Œk|rdnd}d|||fz  }||vr|||g dœ|
|<   ||g dœ||<   |rd||   d<   |
|   d   j                  |«       ||   d   j                  |«       ŒÉ |	r-ddl}t         j#                  d|j%                  |
d¬«      z  «       t        |j                  «       «      S )z�
    Parameter groups for layer-wise lr decay & weight decay
    Based on BEiT: https://github.com/microsoft/unilm/blob/master/beit/optim_factory.py#L58
    Úgroup_matcherF)ÚcoarseT)Úreverser   c              3   óB   •K  — | ]  }t        ‰‰‰|z
  z  «      –— Œ y ­wr   )Úmax)r   rT   rX   Ú	layer_maxrY   s     €€€r   r   z+param_groups_layer_decay.<locals>.<genexpr>�   s!   øè ø€ ÒbÈ1œ˜I {°yÀ1±}Ñ'E×FÑbùs   ƒr*   r   r(   Ú	_fallbackÚ zlayer_%d_%s%s)Úlr_scaler   r    Úparam_names)re   r   r   r    rf   r   r   Nzparameter groups: 
%sé   )Úindent)r!   Úhasattrr   r]   rW   ra   Úvaluesr?   Úranger"   r#   r   r%   rH   r$   ÚjsonÚ_loggerÚinfoÚdumps)r   r   r   r   r   r   rX   rY   rZ   r[   Úparam_group_namesÚparam_groupsrV   Ú
num_layersÚlayer_scalesr   r,   r-   Úg_decayÚ
this_decayÚlayer_idÚ
this_scaleÚfallback_suffixÚ
group_namerl   rb   s         ``                 @r   Úparam_groups_layer_decayrz   q   sû  ú€ ñ"  Ü˜MÓ*¬SÐ1EÓ-FÑFˆàÐØ€Läˆu�oÔ&ä$ U¨E×,?Ñ,?ÀuÐ,?Ó,MÐW[Ô\‰	ô & eÓ,ˆ	Ü�Y×%Ñ%Ó'Ó(¨1Ñ,€JØ˜Q‘€IÜÕbÔPUÐV`ÓPaÔbÓb€Là×-Ñ-Ó/ò *9‰ˆˆeØ×"Ò"Øô ' t¨]Ó;ˆñ $¨¯
©
°aªÔ<LÈTÐSgÔ<hà ˆGØ‰JàˆGØ%ˆJà—=‘=  yÓ1ˆØ! (Ñ+ˆ
Ù˜J¨Ò5à"'ˆEÔØá)4™+¸"ˆØ$¨°'¸?Ð'KÑKˆ
à˜\Ñ)à&Ø *Ø +Ø!ñ	-Ð˜jÑ)ð 'Ø *Øñ(ˆL˜Ñ$ñ
 Ø;?�˜ZÑ(¨Ñ8à˜*Ñ% mÑ4×;Ñ;¸DÔAØ�ZÑ  Ñ*×1Ñ1°%Õ8ðU*9ñX ÛÜ�‰Ð-°·
±
Ð;LÐUV°
Ó0WÑWÔXä�×#Ñ#Ó%Ó&Ð&r   )gñhãˆµøä>Tr9   r9   F)é   N)	gš™™™™™©?r9   r9   FTg      è?r   NF)r   ÚloggingÚ	itertoolsr   Útypingr   r   Útorchr   Útimm.modelsr   Ú	getLoggerÚ__name__rm   ÚstrÚboolr   ÚModuleÚfloatr1   r;   rW   Ú
_layer_maprz   r9   r   r   ú<module>rˆ      sZ  ðÛ Û Ý ß 'å å (ð ˆ'×
Ñ
˜HÓ
%€ðG˜3ð G¨*°S©/ð G¸dó Gð )-Ø(,Ø02Ø)+Ø).ñ:Ø�y‰yð:à˜u‘oð:ð "&ð:ð )¨™oð	:ð
 " #‘ð:ð #'ó:òx5ó
ð4 €
ð
 #Ø02Ø)+Ø).Ø(,Ø ØØ(,ØñQ'Ø�y‰yðQ'àðQ'ð )¨™oðQ'ð " #‘ð	Q'ð
 #'ðQ'ð "&ðQ'ð ðQ'ð ðQ'ð ˜u‘oðQ'ð ôQ'r   