
    Ng8                     t   U d Z ddlZddlZddlZddlZddlmZm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mZ ddlmZmZ g d	Z ee          Zeeee         f         ed
<   i Zeeef         ed<   i Z eeedef         f         ed<    e            Z!ee         ed<   i Z"eeef         ed<   i Z#eeef         ed<    ee$          Z%eeee         f         ed<    ee&          Z'eeeeee         f         f         ed<   i Z(eeee         f         ed<   d?dededeeef         fdZ)dedefdZ*deeeeeef         ef         f         fdZ+dedef         dedef         fdZ,d@deded efd!Z-d"ed#eeee         f         fd$Z.d%edeee/ef                  fd&Z0d'efd(Z1	 	 	 	 	 	 dAd'eeee         f         d*eeee         f         d+e2d,eeee         f         d-e2d.ee2         dee         fd/Z3	 	 dBd'eeee         f         d,edee         fd0Z4d?d*edeeef         fd1Z5dede2fd2Z6dCded3ee         dedef         fd4Z7dee         fd5Z8ded6eeedf         ee         ee         f         de2fd7Z9dede2fd8Z:dDded:e2dee         fd;Z;ded<edee         fd=Z<dedeeef         fd>Z=dS )EzB Model Registry
Hacked together by / Copyright 2020 Ross Wightman
    N)defaultdictdeque)deepcopy)replace)
AnyCallableDictIterableListOptionalSetSequenceUnionTuple   )PretrainedCfg
DefaultCfg)split_model_name_tagget_arch_nameregister_modelgenerate_default_cfgslist_modelslist_pretrainedis_modelmodel_entrypointlist_modulesis_model_in_modulesget_pretrained_cfg_valueis_model_pretrainedget_arch_pretrained_cfgs_module_to_models_model_to_module._model_entrypoints_model_has_pretrained_model_default_cfgs_model_pretrained_cfgs_model_with_tags_module_to_deprecated_models_deprecated_models 
model_nameno_tagreturnc                 R    |                      dd          ^} }|r|d         n|}| |fS )N.r   r   )split)r+   r,   tag_listtags       Q/var/www/html/ai-engine/env/lib/python3.11/site-packages/timm/models/_registry.pyr   r   !   s8    &,,S!44J!
-(1++vCs?    c                 ,    t          |           d         S )Nr   )r   r+   s    r3   r   r   '   s    
++A..r4   cfgsc                 x   t          t                    }t                      }|                                 D ]\  }}t	          |t
                    rt          di |}|j        }t          |          \  }}||v }|r| p|	                    d          o| }	|
                    d          }||         }
|	r0|
j                            |           |                    |           n>|r"|
j        s|
j                            |           n|
j                            |           |rd|
_        ||
j        |<   |S )N*T )r   r   setitems
isinstancedictr   has_weightsr   endswithstriptags
appendleftaddis_pretrainedappendr7   )r7   outdefault_setkvr?   modelr2   is_default_setprioritydefault_cfgs              r3   r   r   +   sS   
j
!
!C%%K

 " "1a 	#""""Am)!,,
s+-+GZc1B1B1Y>GYiinn%j 	)'',,,OOE"""" 	)!: 	)'',,,,##C((( 	-(,K% !Jr4   fnc           	      4   t           j        | j                 }| j                            d          }t	          |          r|d         nd}| j        }t          |d          r|j                            |           n|g|_        |t          v r%t          j        d| d| j         d| dd	           | t          |<   |t          |<   t          |                             |           t          |d
          r||j        v r|j        |         }t!          |t"                    sDt!          |t$                    sJ t'          di |}t#          t)          dg          d|i          }t+          |j                  D ]\  }}|dk    }	|j        |         }|rd                    ||g          n|}
t%          ||r|nd           }|j        r|j        dk    r|j        |
z   |d<   t5          |fi |}|	r+|t6          |<   |j        rt:                              |           |rL|t6          |
<   |j        rt:                              |
           t<          |                             |
           t<          |                             |           |t>          |<   | S )Nr/   r*   __all__zOverwriting z in registry with zr. This is because the name being registered conflicts with an existing name. Please check if this is not expected.   
stackleveldefault_cfgs)rB   r7   r   )architecturer2   ztimm/	hf_hub_idr:   ) sysmodules
__module__r0   len__name__hasattrrR   rF   r#   warningswarnr"   r!   rD   rV   r=   r   r>   r   r   	enumeraterB   r7   joinrX   r   r&   r?   r$   r'   r%   )rO   modmodule_name_splitmodule_namer+   rN   pretrained_cfgtag_idxr2   
is_defaultmodel_name_tagreplace_itemss               r3   r   r   K   s   
+bm
$C++C00+./@+A+AI#B''rK JsI #:&&&&!l '''`: ` ` ` ` ` ` `	
 	
 	
 	

 &(z"#.Z k"&&z222sN## $6
c6F(F(F &z2+z22 	Rk400000*99[99N$%++R<PQQQK%k&677 	@ 	@LGS AJ(-c2N<?OSXXz3&7888ZN jS>RccdSSSM' WN,D,O,O-;-E-Vk*$^EE}EEN :5C&z2!- :)--j999 @9G&~6!- >)--n=== ,33NCCCC ,33J????*5J'Ir4   deprecated_name
current_fncurrent_tagc                      d fd	}|S )NFc                     J d d            rd                     j        g          nj        }t          j        d d| dd           |                    dd           } d
| |pd	|S )NzModel z& has been removed with no replacement.r/   zMapping deprecated model name z to current rS   rT   rf   )
pretrainedrf   r:   )rb   r]   r_   r`   pop)rp   kwargscurrent_namerf   rl   rm   rk   s       r3   _fnz#_deprecated_model_shim.<locals>._fn   s    %%(h(h(h(h%%%GRksxx!4k BCCCXbXkcccT`cccpqrrrr$4d;;zhZ@]R]hhaghhhr4   )Fr:   )rk   rl   rm   rt   s   ``` r3   _deprecated_model_shimru      s<    i i i i i i i i Jr4   re   deprecation_mapc                 >   t           j        |          }|                     d          }t          |          r|d         nd} |                                D ]\  }}t          |d          r|j                            |           d }d}|r"t          |          \  }}t          ||          }t          |||          }	t          |||	           |	t          |<   | t          |<   t          |                              |           |t           |<   |t"          |          |<   d S )Nr/   rQ   r*   rR   )rY   rZ   r0   r\   r<   r^   rR   rF   r   getattrru   setattrr#   r"   r!   rD   r)   r(   )
re   rv   rc   rd   
deprecatedcurrentrl   rm   rs   deprecated_entrypoint_fns
             r3   register_model_deprecationsr}      s<   
+k
"C#))#..+./@+A+AI#B''rK.4466 H H
G3	"" 	+Kz***
 	4(<W(E(E%L+ l33J#9*jR]#^#^ Z!9:::)A:&'2$+&**:666)0:&@G$[1*==H Hr4   string_c                 d    d t          j        d|                                           D             S )zHSee https://blog.codinghorror.com/sorting-for-humans-natural-sort-order/c                 X    g | ]'}|                                 rt          |          n|(S r:   )isdigitint).0ss     r3   
<listcomp>z _natural_key.<locals>.<listcomp>   s/    VVVQaiikk(CFFFqVVVr4   z(\d+))rer0   lower)r~   s    r3   _natural_keyr      s*    VV"(8W]]__2U2UVVVVr4   filterc                 b    t          |           \  }}|sd                    |dg          | gS | gS )z< expand a 'base_filter' to 'base_filter.*' if no tag portionr/   r9   )r   rb   )r   filter_base
filter_tags      r3   _expand_filterr      s?    26::K +s+,,f55xr4   Fmodulerp   exclude_filtersname_matches_cfginclude_tagsc                 n   | r"t          | t          t          f          r| n| g}ng }||}|s't          t                                                    }nmt          |t                    rt          |         }nJt          |t                    sJ t                      }|D ]"}|	                    t          |                    #|t                                          z
  }|rMt                      }	|D ]"}|		                    t          |                    #|	}d |D             }d |D             }|rMt                      }
|D ];}t          j        ||          }t          |          r|
                    |          }
<n|}
|r]t          |t          t          f          s|g}|D ];}t          j        |
|          }t          |          r|
                    |          }
<|rt"                              |
          }
|r't          t&                                        |
          }
t)          |
t*                    S )a   Return list of available model names, sorted alphabetically

    Args:
        filter - Wildcard filter string that works with fnmatch
        module - Limit model selection to a specific submodule (ie 'vision_transformer')
        pretrained - Include only models with valid pretrained weights if True
        exclude_filters - Wildcard filters to exclude models after including them with filter
        name_matches_cfg - Include only models w/ model_name matching default_cfg name (excludes some aliases)
        include_tags - Include pretrained tags in model names (model.tag). If None, defaults
            set to True when pretrained=True else False (default: None)

    Returns:
        models - The sorted list of models

    Example:
        model_list('gluon_resnet*') -- returns all models starting with 'gluon_resnet'
        model_list('*resnext*, 'resnet') -- returns all models with 'resnext' in 'resnet' module
    Nc                 6    g | ]}t          |          D ]}|S r:   r   r   fefs      r3   r   zlist_models.<locals>.<listcomp>   .    SSS!PQARARSS22SSSSr4   c                 6    g | ]}t          |          D ]}|S r:   r   r   s      r3   r   zlist_models.<locals>.<listcomp>   r   r4   )key)r=   tuplelistr;   r#   keysstrr!   r   updater)   r'   fnmatchr   r\   union
differencer$   intersectionr&   sortedr   )r   r   rp   r   r   r   include_filters
all_modelsmmodels_with_tagsmodelsr   include_modelsxfexclude_modelss                  r3   r   r      sf   4  $.vt}$E$ES&&F8! 	8"#5#:#:#<#<==

fc"" 	8#4V#<JJfh/////#&55J 8 8!!"3A"67777055777J T%(UU 	9 	9A##$4Q$78888%
SSSSSSSSSS 55  	6 	6A$^J::N>"" 6n55	6
  ;/E4=99 	0./O! 	; 	;B$^FB77N>"" ;**>:: <&33F;; B+,,99&AA&l++++r4   c                 (    t          | d|d          S )NT)r   rp   r   r   )r   )r   r   s     r3   r   r     s'     '	   r4   c                 L    | rt           |          nt          }t          |          S N)r(   r)   r   )r   all_deprecateds     r3   get_deprecated_modelsr     s&    =C[1&99I[NN###r4   c                 2    t          |           }|t          v S )z" Check if a model name exists
    )r   r#   )r+   	arch_names     r3   r   r     s     j))I***r4   module_filterc                     t          |           }|r3|t                              |i           vrt          d|  d| d          t          |         S )z6Fetch a model entrypoint for specified model name
    zModel (z not found in module r/   )r   r!   getRuntimeErrorr#   )r+   r   r   s      r3   r   r   $  sb     j))I X*;*?*?r*R*RRRVZVVmVVVWWWi((r4   c                  R    t                                           } t          |           S )zI Return list of module names that contain models / model entrypoints
    )r!   r   r   )rZ   s    r3   r   r   -  s!      $$&&G'??r4   module_namesc                     t          |           t          |t          t          t          f          sJ t          fd|D                       S )zCheck if a model exists within a subset of modules

    Args:
        model_name - name of model to check
        module_names - names of modules to search in
    c              3   6   K   | ]}t           |         v V  d S r   )r!   )r   nr   s     r3   	<genexpr>z&is_model_in_modules.<locals>.<genexpr>?  s.      GGQy-a00GGGGGGr4   )r   r=   r   r   r;   any)r+   r   r   s     @r3   r   r   4  sR     j))IlUD#$677777GGGG,GGGGGGr4   c                     | t           v S r   )r$   r6   s    r3   r   r   B  s    ...r4   Tallow_unregisteredc                     | t           v rt          t           |                    S t          |           \  }}|t          v rt	          d| d| d          |rd S t	          d| d          )NzInvalid pretrained tag (z) for r/   zModel architecture (z#) has no pretrained cfg registered.)r&   r   r   r%   r   )r+   r   r   r2   s       r3   get_pretrained_cfgr   F  s    +++.z:;;;)*55NIs'''McMMMMMNNN t
\i\\\
]
]]r4   cfg_keyc                 F    t          | d          }t          ||d          S )zO Get a specific model default_cfg value by key. None if key doesn't exist.
    F)r   N)r   rx   )r+   r   cfgs      r3   r   r   S  s(     ZE
B
B
BC3&&&r4   c                 \    t          |           \  }}t          |         }d |D             }|S )z7 Get all pretrained cfgs for a given architecture.
    c                 *    i | ]}|t           |         S r:   )r&   )r   r   s     r3   
<dictcomp>z,get_arch_pretrained_cfgs.<locals>.<dictcomp>_  s     >>>QA%a(>>>r4   )r   r'   )r+   r   _model_namesr7   s        r3   r    r    Z  s7     (
33LIq"9-K>>+>>>DKr4   )r*   )Nr*   )r*   r*   Fr*   FN)r*   r*   r   )T)>__doc__r   r   rY   r_   collectionsr   r   copyr   dataclassesr   typingr   r   r	   r
   r   r   r   r   r   r   _pretrainedr   r   rR   r;   r!   r   __annotations__r"   r#   r$   r%   r&   r   r'   r>   r(   r)   r   r   r   r   ru   r}   r   r   r   boolr   r   r   r   r   r   r   r   r   r   r    r:   r4   r3   <module>r      sJ      				 



  * * * * * * * *             ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] 2 2 2 2 2 2 2 2   *5S)9)9 4SX& 9 9 9#% $sCx. % % %46 DhsCx001 6 6 6"%#%% s3x ' ' '02 T#},- 2 2 235 S-/0 5 5 5)4T):): $sDI~& : : :DOKPTDUDU d3S(3--?(@#@A U U U/1 Dhsm+, 1 1 1 S # uS#X    /c /c / / / /S%S#X0M*N%N O    @=xS) =hsCx.@ = = = =@ C X [^    HS H4XVY]HZC[ H H H H,W# W$uS#X"7 W W W W
3     )+(* 13!&'+P, P,c49n%P,c49n%P, P, sDI~.	P,
 P, tnP, 
#YP, P, P, P,h )+!	 	c49n%		 
#Y	 	 	 	$ $# $tCH~ $ $ $ $
+ + + + + +) ) )Xc] )hWZ\_W_N` ) ) ) )d3i    HH',U38_d3iS-Q'RH	H H H H/C /D / / / /
^ 
^3 
^D 
^HUbLc 
^ 
^ 
^ 
^' 's 'x} ' ' ' ' c=6H1I      r4   