U
    ¯Ê¹j<  ã                	   @   s@  d Z ddlZddlZddlmZ ddlmZmZmZm	Z	m
Z
 ddlZzddlZdZW n ek
rl   dZY nX e e¡Zddd	d
dgZeeef eeef dœdd„Zdeee
eejf eeef dœdd„Zdejjeee
eejf eee	e dœdd	„Zdeeef ejjedœdd
„Zdejjeejjeedœdd„ZdS )zi Model creation / weight loading / state_dict helpers

Hacked together by / Copyright 2020 Ross Wightman
é    N)ÚOrderedDict)ÚAnyÚCallableÚDictÚOptionalÚUnionTFÚclean_state_dictÚload_state_dictÚload_checkpointÚremap_state_dictÚresume_checkpoint)Ú
state_dictÚreturnc                 C   s<   i }|   ¡ D ]*\}}| d¡r*|dd … n|}|||< q|S )Nzmodule.é   )ÚitemsÚ
startswith)r   Zcleaned_state_dictÚkÚvÚname© r   úS/var/www/html/bwave/python/venv/lib/python3.8/site-packages/timm/models/_helpers.pyr      s
    
Úcpu)Úcheckpoint_pathÚuse_emaÚdevicer   c                 C   sê   | rÐt j | ¡rÐt| ƒ d¡r<ts*tdƒ‚tjj	| |d�}ntj
| |d�}d}t|tƒr¦|rr| dd ¡d k	rrd}n4|rŒ| dd ¡d k	rŒd}nd|kršd}nd	|kr¦d	}t|r´|| n|ƒ}t d
 || ¡¡ |S t d | ¡¡ tƒ ‚d S )Nz.safetensorsz-`pip install safetensors` to use .safetensors©r   ©Zmap_locationÚ Zstate_dict_emaZ	model_emar   ÚmodelzLoaded {} from checkpoint '{}'úNo checkpoint found at '{}')ÚosÚpathÚisfileÚstrÚendswithÚ_has_safetensorsÚAssertionErrorÚsafetensorsÚtorchZ	load_fileÚloadÚ
isinstanceÚdictÚgetr   Ú_loggerÚinfoÚformatÚerrorÚFileNotFoundError)r   r   r   Ú
checkpointÚstate_dict_keyr   r   r   r   r	      s(    
)r   r   r   r   ÚstrictÚremapÚ	filter_fnc           	      C   sx   t j |¡d  ¡ dkr:t| dƒr.|  |¡ ntdƒ‚d S t|||d�}|rXt|| ƒ}n|rf||| ƒ}| j||d�}|S )Néÿÿÿÿ)z.npzz.npyÚload_pretrainedz"Model cannot load numpy checkpointr   )r4   )	r    r!   ÚsplitextÚlowerÚhasattrr8   ÚNotImplementedErrorr	   r   )	r   r   r   r   r4   r5   r6   r   Zincompatible_keysr   r   r   r
   >   s    	

)r   r   Úallow_reshapec                 C   s¶   i }t | ¡  ¡ |  ¡ ƒD ]–\\}}\}}| ¡ | ¡ ks`td|› d|j› d|› d|j› d�	ƒ‚|j|jkr¨|r~| |j¡}n*ds¨td|› d|j› d|› d|j› d�	ƒ‚|||< q|S )z¿ 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.
    zTensor size mismatch z: z vs z. Remap failed.FzTensor shape mismatch )Úzipr   r   Znumelr&   ÚshapeZreshape)r   r   r=   Zout_dictÚkaÚvaÚkbZvbr   r   r   r   X   s    &6*
)r   r   Ú	optimizerÚloss_scalerÚlog_infoc                 C   s8  d }t j |¡�rtj|dd�}t|tƒrúd|krú|r@t d¡ t	|d ƒ}|  
|¡ |d k	r‚d|kr‚|rtt d¡ | 
|d ¡ |d k	r²|j|kr²|r¢t d¡ | 
||j ¡ d|krø|d }d	|krÞ|d	 d
krÞ|d
7 }|røt d ||d ¡¡ n |  
|¡ |�rt d |¡¡ |S t d |¡¡ tƒ ‚d S )Nr   r   r   z(Restoring model state from checkpoint...rC   z,Restoring optimizer state from checkpoint...z2Restoring AMP loss scaler state from checkpoint...ÚepochÚversioné   z!Loaded checkpoint '{}' (epoch {})zLoaded checkpoint '{}'r   )r    r!   r"   r(   r)   r*   r+   r-   r.   r   r	   r3   r/   r0   r1   )r   r   rC   rD   rE   Zresume_epochr2   r   r   r   r   r   l   s8    




)Tr   )Tr   TFN)T)NNT) Ú__doc__Úloggingr    Úcollectionsr   Útypingr   r   r   r   r   r(   Zsafetensors.torchr'   r%   ÚImportErrorÚ	getLoggerÚ__name__r-   Ú__all__r#   r   Úboolr   r	   ÚnnÚModuler
   r   ZoptimZ	Optimizerr   r   r   r   r   Ú<module>   sf   

   ý
ü"     ùù ý
ý   ûû