
    kh8                     @   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	 	 	 	 	 	 d>d&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	 	 d?d&eeee   f   d*edee   fd.Z4d<d(edeeef   fd/Z5dede2fd0Z6d@ded1ee   dedef   fd2Z7dee   fd3Z8ded4eeedf   ee   ee   f   de2fd5Z9dede2fd6Z:dAded7e2dee   fd8Z;ded9edee   fd:Z<dedeeef   fd;Z=y)BzB 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                 D    | j                  dd      ^} }|r|d   n|}| |fS )N.r   r   )split)r*   r+   tag_listtags       Q/var/www/teggl/fontify/venv/lib/python3.12/site-packages/timm/models/_registry.pyr   r   !   s0    &,,S!4J!(1+vCs?    c                     t        |       d   S )Nr   )r   r*   s    r2   r   r   '   s    
+A..r3   cfgsc                 `   t        t              }t               }| j                         D ]   \  }}t	        |t
              rt        di |}|j                  }t        |      \  }}||v }|xr | xs |j                  d      xr | }	|j                  d      }||   }
|	r-|
j                  j                  |       |j                  |       nE|r(|
j                  s|
j                  j                  |       n|
j                  j                  |       |rd|
_        ||
j                   |<    |S )N*T )r   r   setitems
isinstancedictr   has_weightsr   endswithstriptags
appendleftaddis_pretrainedappendr6   )r6   outdefault_setkvr>   modelr1   is_default_setprioritydefault_cfgs              r2   r   r   +   s   
j
!C%K

 "1a""Amm)!,
s+-+GZc1B1Y>GYiin%j'',OOE"!:!:'',##C((,K% !/"2 Jr3   fnc           	         t         j                  | j                     }| j                  j                  d      }t	        |      r|d   nd}| j
                  }t        |d      r|j                  j                  |       n|g|_        |t        v r+t        j                  d| d| j                   d| dd	       | t        |<   |t        |<   t        |   j                  |       t        |d
      r||j                  v r{|j                  |   }t!        |t"              s6t!        |t$              sJ t'        di |}t#        t)        dg      d|i      }t+        |j,                        D ]  \  }}|dk(  }	|j.                  |   }|rdj1                  ||g      n|}
t%        ||r|nd       }|j2                  r!|j2                  dk(  r|j2                  |
z   |d<   t5        |fi |}|	r*|t6        |<   |j8                  rt:        j                  |       |rC|t6        |
<   |j8                  rt:        j                  |
       t<        |   j                  |
       t<        |   j                  |        |t>        |<   | S )Nr.    __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)rA   r6   r   )architecturer1   ztimm/	hf_hub_idr9   ) sysmodules
__module__r/   len__name__hasattrrR   rE   r#   warningswarnr"   r!   rC   rV   r<   r   r=   r   r   	enumeraterA   r6   joinrX   r   r&   r>   r$   r'   r%   )rN   modmodule_name_splitmodule_namer*   rM   pretrained_cfgtag_idxr1   
is_defaultmodel_name_tagreplace_itemss               r2   r   r   K   s[   
++bmm
$C++C0+./@+A#B'rK JsI:&!l '':,&8q U` `	

 &(z"#.Z k"&&z2sN#
c6F6F(F &&z2+z2k4000*9[9N$%+R<PQK%k&6&67 	@LGS AJ(--c2N<?SXXz3&78ZN jScdSM''N,D,D,O-;-E-E-Vk*$^E}EN5C&z2!--)--j99G&~6!--)--n= ,33NC ,33J?/	@2 +6J'Ir3   deprecated_name
current_fncurrent_tagc                      d fd	}|S )Nc                     J d d       rdj                  j                  g      nj                  }t        j                  d d| dd       |j	                  dd       } d
| |xs d	|S )NzModel z& has been removed with no replacement.r.   zMapping deprecated model name z to current rS   rT   rf   )
pretrainedrf   r9   )rb   r]   r_   r`   pop)rp   kwargscurrent_namerf   rl   rm   rk   s       r2   _fnz#_deprecated_model_shim.<locals>._fn   s    %h&0AAg(hh%GRsxx!4!4k BCXbXkXk66G|T`Saabcpqr$4d;hZ@]R]haghhr3   )Fr9   )rk   rl   rm   rt   s   ``` r2   _deprecated_model_shimru      s    i Jr3   re   deprecation_mapc                    t         j                  |    }| j                  d      }t        |      r|d   nd} |j	                         D ]  \  }}t        |d      r|j                  j                  |       d }d}|rt        |      \  }}t        ||      }t        |||      }	t        |||	       |	t        |<   | t        |<   t        |    j                  |       |t         |<   |t"        |    |<    y )Nr.   rP   rQ   rR   )rY   rZ   r/   r\   r;   r^   rR   rE   r   getattrru   setattrr#   r"   r!   rC   r)   r(   )
re   rv   rc   rd   
deprecatedcurrentrl   rm   rs   deprecated_entrypoint_fns
             r2   register_model_deprecationsr}      s    
++k
"C#))#.+./@+A#B'rK.446 H
G3	"KKz*
(<W(E%L+ l3J#9*jR]#^ Z!9:)A:&'2$+&**:6)0:&@G$[1*=Hr3   string_c                     t        j                  d| j                               D cg c]  }|j                         rt	        |      n|! c}S c c}w )zHSee https://blog.codinghorror.com/sorting-for-humans-natural-sort-order/z(\d+))rer/   lowerisdigitint)r~   ss     r2   _natural_keyr      s8    24((8W]]_2UVQaiikCFq(VVVs   $Afilterc                 R    t        |       \  }}|sdj                  |dg      | gS | gS )z< expand a 'base_filter' to 'base_filter.*' if no tag portionr.   r8   )r   rb   )r   filter_base
filter_tags      r2   _expand_filterr      s4    26:K+s+,f55xr3   modulerp   exclude_filtersname_matches_cfginclude_tagsc                 $   | rt        | t        t        f      r| n| g}ng }||}|st        t        j                               }nUt        |t              r
t        |   }n;t        |t              sJ t               }|D ]  }|j                  t        |           |t        j                         z
  }|rmt               }	|D ]  }|	j                  t        |           |	}|D 
cg c]  }
t        |
      D ]  }|  }}
}|D 
cg c]  }
t        |
      D ]  }|  }}
}|rEt               }|D ]5  }
t        j                  ||
      }t        |      s%|j!                  |      }7 n|}|rSt        |t        t        f      s|g}|D ]5  }t        j                  ||      }t        |      s%|j#                  |      }7 |rt$        j'                  |      }|rt        t(              j'                  |      }t+        |t,              S c c}}
w c c}}
w )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
    )key)r<   tuplelistr:   r#   keysstrr!   r   updater)   r'   r   fnmatchr   r\   union
differencer$   intersectionr&   sortedr   )r   r   rp   r   r   r   include_filters
all_modelsmmodels_with_tagsfefmodelsinclude_modelsxfexclude_modelss                   r2   r   r      s   4 $.vt}$E&F8!"#5#:#:#<=
fc"#4V#<Jfh///#&5J 8!!"3A"67805577J%(U 	9A##$4Q$78	9%
'6S!PQARS22S2SS'6S!PQARS22S2SS5  	6A$^^J:N>"n5	6
 /E4=9./O! 	;B$^^FB7N>"**>:	;
 &33F;+,99&A&l++5 TSs   #HHc                      t        | d|d      S )NT)r   rp   r   r   )r   )r   r   s     r2   r   r     s     '	 r3   c                 :    | r	t         |    nt        }t        |      S N)r(   r)   r   )r   all_deprecateds     r2   get_deprecated_modelsr     s    =C1&9I[NN##r3   c                 (    t        |       }|t        v S )z" Check if a model name exists
    )r   r#   )r*   	arch_names     r2   r   r     s     j)I***r3   module_filterc                     t        |       }|r*|t        j                  |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      r2   r   r   $  sM     j)I*;*?*?r*RRWZL0Em_TUVWWi((r3   c                  @    t         j                         } t        |       S )zI Return list of module names that contain models / model entrypoints
    )r!   r   r   )rZ   s    r2   r   r   -  s      $$&G'?r3   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   4   K   | ]  }t         |   v   y wr   )r!   ).0nr   s     r2   	<genexpr>z&is_model_in_modules.<locals>.<genexpr>?  s     GQy-a00Gs   )r   r<   r   r   r:   any)r*   r   r   s     @r2   r   r   4  s7     j)IlUD#$6777G,GGGr3   c                     | t         v S r   )r$   r5   s    r2   r   r   B  s    ...r3   allow_unregisteredc                     | t         v rt        t         |          S t        |       \  }}|t        v rt	        d| d| d      |ry 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   r1   s       r2   get_pretrained_cfgr   F  sj    ++.z:;;)*5NIs''5cU&1MNN
-i[8[\
]]r3   cfg_keyc                 6    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      r2   r   r   S  s     ZE
BC3&&r3   c                 l    t        |       \  }}t        |   }|D ci c]  }|t        |    }}|S c c}w )z7 Get all pretrained cfgs for a given architecture.
    )r   r'   r&   )r*   r   _model_namesr   r6   s         r2   r    r    Z  sD     (
3LIq"9-K2=>QA%a((>D>K ?s   1)rQ   )NrQ   )rQ   rQ   FrQ   FN)rQ   rQ   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    r9   r3   r2   <module>r      s    	 
  *   ] ] ] 2 *5S)9 4SX& 9#% $sCx. %46 DhsCx001 6"%% s3x '02 T#},- 235 S-/0 5)4T): $sDI~& :DOPTDU d3S(3--?(@#@A U/1 Dhsm+, 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,W# W$uS#X"7 W
3  )+(* 13!&'+P,c49n%P,c49n%P, P, sDI~.	P,
 P, tnP, 
#YP,h )+!	c49n%		 
#Y	$# $tCH~ $
+ + +) )Xc] )hWZ\_W_N` )d3i HH',U38_d3iS-Q'RH	H/C /D /
^3 
^D 
^HUbLc 
^' 's 'x} ' c=6H1I r3   