Ë
    éÓ^ji'  ã                   óÜ  — 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mZm	Z	m
Z
 ddlZ	 ddlZdZ ej                   e«      Zg d¢Zdedefd	„Z	 	 d ded
e
eej,                  f   defd„Zdededefd„Zdeeef   deeef   fd„Z	 	 	 d!dedede
eej,                  f   dedeeef   f
d„Z	 	 	 	 	 	 d"dej8                  j:                  dedede
eej,                  f   dedede	e   dedefd„Z	 d#deeef   dej8                  j:                  dedeeef   fd„Z	 	 	 	 d$dej8                  j:                  dede	ej@                  jB                     de	e   dedede	e"   fd„Z#y# e$ r dZY �Œ>w xY w)%zi Model creation / weight loading / state_dict helpers

Hacked together by / Copyright 2020 Ross Wightman
é    N)ÚAnyÚCallableÚDictÚOptionalÚUnionTF)Úclean_state_dictÚload_checkpointÚload_state_dictÚremap_state_dictÚresume_checkpointÚcheckpoint_pathÚreturnc                 óÞ   — t        t        j                  d«      sy	 t        j                  j                  t	        | «      «      }|rddj                  |«      › d�S dS # t
        $ r g }Y Œ&w xY w)NÚ get_unsafe_globals_in_checkpointÚ z Unsupported globals: z, ú.)ÚhasattrÚtorchÚserializationr   ÚstrÚ	ExceptionÚjoin)r   Úunsafe_globalss     ú_/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/timm/models/_helpers.pyÚ_checkpoint_unsafe_globalsr      ss   € Ü”5×&Ñ&Ð(JÔKØðÜ×,Ñ,×MÑMÌcÐRaÓNbÓcˆñ ESÐ# D§I¡I¨nÓ$=Ð#>¸aÐ@ÐZÐXZÐZøô ò ØŠðús   �(A ÁA,Á+A,Úmap_locationÚweights_onlyc                 ó*  — |xr t        t        j                  d«      }	 |rPt        j                  j                  t        j
                  g«      5  t        j                  | ||¬«      cd d d «       S t        j                  | ||¬«      S # 1 sw Y   Œ!xY w# t        $ rA}|st        j                  | |¬«      cY d }~S t        dt        j                  › d�«      |‚d }~wt        j                  $ r!}|s‚ t        dt        | «      › d�«      |‚d }~ww xY w)NÚsafe_globals©r   r   )r   zAweights_only=True is not supported by this PyTorch build (torch==zŽ). No automatic unsafe pickle fallback is performed. Upgrade PyTorch, or explicitly set weights_only=False only for trusted local checkpoints.zeweights_only=True blocked loading this checkpoint because it requires non-allowlisted pickle globals.zp No automatic unsafe pickle fallback is performed. If this checkpoint is trusted, retry with weights_only=False.)r   r   r   r   ÚargparseÚ	NamespaceÚloadÚ	TypeErrorÚRuntimeErrorÚ__version__ÚpickleÚUnpicklingErrorr   )r   r   r   Úuse_safe_globalsÚes        r   Ú_torch_loadr+   )   s  € ð
 $ÒT¬´×0CÑ0CÀ^Ó(TÐðÙä×$Ñ$×1Ñ1´8×3EÑ3EÐ2FÓGñ iÜ—z‘z /ÀÐ[gÔh÷iñ iä�z‰z˜/¸ÐS_Ô`Ð`÷ið iûô ò ÙÜ—:‘:˜o¸LÔIÕIÜØOÔPU×PaÑPaÐObð chð hó
ð ð		ûô
 ×!Ñ!ò ÙØÜØsÜ)¨/Ó:Ð;ð <LðLó
ð
 ð	ûðúsM    0B ÁB
Á(	B Á2B Â
BÂB Â	DÂCÂ7DÂ=CÃDÃ1DÄDÚtextÚprefixc                 óD   — | j                  |«      r| t        |«      d  S | S )N)Ú
startswithÚlen)r,   r-   s     r   Ú_remove_prefixr1   H   s$   € à‡��vÔØ”C˜“K�LÐ!Ð!Ø€Kó    Ú
state_dictc                 ón   — i }d}| j                  «       D ]  \  }}|D ]  }t        ||«      }Œ |||<   Œ |S )N)zmodule.z
_orig_mod.)Úitemsr1   )r3   Úcleaned_state_dictÚ	to_removeÚkÚvÚrs         r   r   r   O   s[   € àÐð€Ið × Ñ Ó"ò "‰ˆˆ1Øò 	%ˆAÜ˜q !Ó$‰Að	%à !Ð˜1Òð"ð Ðr2   Úuse_emaÚdevicec                 óZ  — | rüt         j                  j                  | «      rÝt        | «      j	                  d«      r/t
        sJ d«       ‚t        j                  j                  | |¬«      }nt        | ||¬«      }d}t        |t        «      r;|r|j                  dd«      �d}n$|r|j                  dd«      �d}nd	|v rd	}nd
|v rd
}t        |r||   n|«      }t        j                  dj!                  || «      «       |S t        j#                  dj!                  | «      «       t%        «       ‚)a_  Load state dictionary from checkpoint file.

    Args:
        checkpoint_path: Path to checkpoint file.
        use_ema: Whether to use EMA weights if available.
        device: Device to load checkpoint to.
        weights_only: Whether to load only weights (torch.load parameter).

    Returns:
        State dictionary loaded from checkpoint.
    z.safetensorsz-`pip install safetensors` to use .safetensors)r<   r    r   Ústate_dict_emaNÚ	model_emar3   ÚmodelzLoaded {} from checkpoint '{}'úNo checkpoint found at '{}')ÚosÚpathÚisfiler   ÚendswithÚ_has_safetensorsÚsafetensorsr   Ú	load_filer+   Ú
isinstanceÚdictÚgetr   Ú_loggerÚinfoÚformatÚerrorÚFileNotFoundError)r   r;   r<   r   Ú
checkpointÚstate_dict_keyr3   s          r   r
   r
   ]   s  € ñ" œ2Ÿ7™7Ÿ>™>¨/Ô:äˆÓ×(Ñ(¨Ô8Ý#ÐTÐ%TÓTÐ#Ü$×*Ñ*×4Ñ4°_ÈVÐ4ÓT‰Jä$ _À6ÐXdÔeˆJàˆÜ�j¤$Ô'Ù˜:Ÿ>™>Ð*:¸DÓAÐMØ!1‘Ù˜ZŸ^™^¨K¸Ó>ÐJØ!,‘Ø Ñ+Ø!-‘Ø˜JÑ&Ø!(�Ü%ÁN j°Ò&@ÐXbÓcˆ
Ü�‰Ð5×<Ñ<¸^È_Ó]Ô^ØÐä�‰Ð3×:Ñ:¸?ÓKÔLÜÓ!Ð!r2   r@   ÚstrictÚremapÚ	filter_fnc                 ó4  — t         j                  j                  |«      d   j                  «       dv r)t	        | d«      r| j                  |«       yt        d«      ‚t        ||||¬«      }|rt        || «      }n|r	 ||| «      }| j                  ||¬«      }	|	S )a<  Load checkpoint into model.

    Args:
        model: Model to load checkpoint into.
        checkpoint_path: Path to checkpoint file.
        use_ema: Whether to use EMA weights if available.
        device: Device to load checkpoint to.
        strict: Whether to strictly enforce state_dict keys match.
        remap: Whether to remap state dict keys by order.
        filter_fn: Optional function to filter state dict.
        weights_only: Whether to load only weights (torch.load parameter).

    Returns:
        Incompatible keys from model.load_state_dict().
    éÿÿÿÿ)z.npzz.npyÚload_pretrainedz"Model cannot load numpy checkpointN)r<   r   )rS   )	rB   rC   ÚsplitextÚlowerr   rX   ÚNotImplementedErrorr
   r   )
r@   r   r;   r<   rS   rT   rU   r   r3   Úincompatible_keyss
             r   r	   r	   ˆ   s£   € ô2 
‡w�w×Ñ˜Ó(¨Ñ,×2Ñ2Ó4Ð8HÑHä�5Ð+Ô,Ø×!Ñ! /Ô2ð 	ô &Ð&JÓKÐKô ! °'À&ÐWcÔd€JÙÜ% j°%Ó8‰
Ù	Ù˜z¨5Ó1ˆ
Ø×-Ñ-¨jÀÐ-ÓHÐØÐr2   Úallow_reshapec                 óì  — i }t        |j                  «       j                  «       | j                  «       «      D ]¸  \  \  }}\  }}|j                  «       |j                  «       k(  s(J d|› d|j                  › d|› d|j                  › d�	«       ‚|j                  |j                  k7  rF|r|j                  |j                  «      }n(J d|› d|j                  › d|› d|j                  › d�	«       ‚|||<   Œº |S )a›  Remap checkpoint by iterating over state dicts in order (ignoring original keys).

    This assumes models (and originating state dict) were created with params registered in same order.

    Args:
        state_dict: State dict to remap.
        model: Model whose state dict keys to use.
        allow_reshape: Whether to allow reshaping tensors to match.

    Returns:
        Remapped state dictionary.
    zTensor size mismatch z: z vs z. Remap failed.zTensor shape mismatch )Úzipr3   r5   ÚnumelÚshapeÚreshape)r3   r@   r]   Úout_dictÚkaÚvaÚkbÚvbs           r   r   r   ²   sû   € ð" €HÜ! %×"2Ñ"2Ó"4×":Ñ":Ó"<¸j×>NÑ>NÓ>PÓQò Ñ‰ˆˆR‘(�2�rØ�x‰x‹z˜RŸX™X›ZÒ'ÐtÐ+@ÀÀÀBÀrÇxÁxÀjÐPTÐUWÐTXÐXZÐ[]×[cÑ[cÐZdÐdsÐ)tÓtÐ'Ø�8‰8�r—x‘xÒÙØ—Z‘Z §¡Ó)‘àjÐ 6°r°d¸"¸R¿X¹X¸JÀdÈ2È$ÈbÐQS×QYÑQYÐPZÐZiÐjÓj�uØˆ�Šðð €Or2   Ú	optimizerÚloss_scalerÚlog_infoc                 ó<  — d}t         j                  j                  |«      �rMt        |d|¬«      }t	        |t
        «      röd|v rò|rt        j                  d«       t        |d   «      }| j                  |«       |�/d|v r+|rt        j                  d«       |j                  |d   «       |�C|j                  |v r5|rt        j                  d«       |j                  ||j                     «       d	|v r@|d	   }d
|v r|d
   dkD  r|dz  }|r(t        j                  dj                  ||d	   «      «       |S | j                  |«       |r$t        j                  dj                  |«      «       |S t        j                  dj                  |«      «       t        «       ‚)a½  Resume training from checkpoint.

    Args:
        model: Model to load checkpoint into.
        checkpoint_path: Path to checkpoint file.
        optimizer: Optional optimizer to restore state.
        loss_scaler: Optional AMP loss scaler to restore state.
        log_info: Whether to log loading info.
        weights_only: Whether to load only weights via torch.load.

    Returns:
        Resume epoch number if available, else None.
    NÚcpur    r3   z(Restoring model state from checkpoint...rh   z,Restoring optimizer state from checkpoint...z2Restoring AMP loss scaler state from checkpoint...ÚepochÚversioné   z!Loaded checkpoint '{}' (epoch {})zLoaded checkpoint '{}'rA   )rB   rC   rD   r+   rI   rJ   rL   rM   r   r
   rR   rN   rO   rP   )	r@   r   rh   ri   rj   r   Úresume_epochrQ   r3   s	            r   r   r   Ï   s€  € ð* €LÜ	‡w�w‡~�~�oÕ&Ü  ¸uÐS_Ô`ˆ
Ü�j¤$Ô'¨L¸JÑ,FÙÜ—‘ÐGÔHÜ)¨*°\Ñ*BÓCˆJØ×!Ñ! *Ô-àÐ$¨¸
Ñ)BÙÜ—L‘LÐ!OÔPØ×)Ñ)¨*°[Ñ*AÔBàÐ&¨;×+EÑ+EÈÑ+SÙÜ—L‘LÐ!UÔVØ×+Ñ+¨J°{×7QÑ7QÑ,RÔSà˜*Ñ$Ø)¨'Ñ2�Ø 
Ñ*¨z¸)Ñ/DÀqÒ/HØ  AÑ%�LáÜ—L‘LÐ!D×!KÑ!KÈOÐ]gÐhoÑ]pÓ!qÔrð
 Ðð ×!Ñ! *Ô-ÙÜ—‘Ð5×<Ñ<¸_ÓMÔNØÐä�‰Ð3×:Ñ:¸?ÓKÔLÜÓ!Ð!r2   )rl   T)Trl   T)Trl   TFNT)T)NNTT)$Ú__doc__r!   ÚloggingrB   r'   Útypingr   r   r   r   r   r   Úsafetensors.torchrG   rF   ÚImportErrorÚ	getLoggerÚ__name__rL   Ú__all__r   r   r<   Úboolr+   r1   r   r
   ÚnnÚModuler	   r   ÚoptimÚ	OptimizerÚintr   © r2   r   ú<module>r€      s…  ðñó Û Û 	Û ß 7Õ 7ã ðÛàÐð ˆ'×
Ñ
˜HÓ
%€ò€ð[°ð [¸ó [ð 27Ø!ñØðà˜C §¡Ð-Ñ.ðð óð>˜ð  cð ¨có ð  c¨3 h¡ð °D¸¸c¸±Nó ð  Ø+0Ø!ñ	("Øð("àð("ð �c˜5Ÿ<™<Ð'Ñ(ð("ð ð	("ð
 
ˆ#ˆsˆ(�^ó("ð\ Ø+0ØØØ(,Ø!ñ'Ø�x‰x�‰ð'àð'ð ð'ð �c˜5Ÿ<™<Ð'Ñ(ð	'ð
 ð'ð ð'ð ˜HÑ%ð'ð ð'ð 	ó'ðZ #ñØ˜˜c˜‘Nðà�x‰x�‰ðð ðð 
ˆ#ˆsˆ(�^ó	ð@ 6:Ø%)ØØ!ñ6"Ø�x‰x�‰ð6"àð6"ð ˜EŸK™K×1Ñ1Ñ2ð6"ð ˜c‘]ð	6"ð
 ð6"ð ð6"ð ˆc�]ô6"øð} ò ØÓðús   ¦E  Å E+Å*E+