
    Ngr                        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	 ddlZdZn# e$ r dZY nw xY w ej        e          Zg dZ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j        j        dedede
eej        f         dedede	e         defdZ	 dd	eeef         dej        j        defdZ	 	 	 d dej        j        dedej        j        dedef
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_checkpointc                 ^    |                      |          r| t          |          d          S | S )N)
startswithlen)textprefixs     P/var/www/html/ai-engine/env/lib/python3.11/site-packages/timm/models/_helpers.py_remove_prefixr      s0    v "CKKLL!!K    
state_dictreturnc                 v    i }d}|                                  D ]\  }}|D ]}t          ||          }|||<    |S )N)zmodule.z
_orig_mod.)itemsr   )r   cleaned_state_dict	to_removekvrs         r   r	   r	      sd    I   "" " "1 	% 	%Aq!$$AA !1r   cpucheckpoint_pathuse_emadeviceweights_onlyc                 ,   | rWt           j                            |           r7t          |                               d          r3t
          s
J d            t          j                            | |          }n?	 t          j	        | ||          }n&# t          $ r t          j	        | |          }Y nw xY wd}t          |t                    rC|r|                    dd           d}n(|r|                    dd           d}nd	|v rd	}nd
|v rd
}t          |r||         n|          }t                              d                    ||                      |S t                              d                    |                      t'                      )Nz.safetensorsz-`pip install safetensors` to use .safetensors)r"   map_locationr#   )r&    state_dict_ema	model_emar   modelzLoaded {} from checkpoint '{}'No checkpoint found at '{}')ospathisfilestrendswith_has_safetensorssafetensorstorch	load_fileload	TypeError
isinstancedictgetr	   _loggerinfoformaterrorFileNotFoundError)r    r!   r"   r#   
checkpointstate_dict_keyr   s          r   r
   r
   +   s     "27>>/:: "((88 	N#TT%TTTT$*44_V4TTJJN"Zf[ghhh

 N N N"ZfMMM


N j$'' 	) ):>>*:DAAM!1 )Z^^K>>J!,++!-J&&!(%N&bj&@&@Xbcc
5<<^_]]^^^3::?KKLLL!!!s   :B  B54B5r*   strictremap	filter_fnc                 |   t           j                            |          d                                         dv r7t	          | d          r|                     |           nt          d          d S t          ||||          }|rt          ||           }n|r |||           }|                     ||          }	|	S )N)z.npzz.npyload_pretrainedz"Model cannot load numpy checkpoint)r"   r#   )rA   )	r,   r-   splitextlowerhasattrrF   NotImplementedErrorr
   r   )
r*   r    r!   r"   rA   rB   rC   r#   r   incompatible_keyss
             r   r   r   N   s     
w((,22448HHH5+,, 	L!!/2222%&JKKK '&WcdddJ 2%j%88

	 2Yz511
--j-HHr   allow_reshapec                    i }t          |                                                                |                                           D ]\  \  }}\  }}|                                |                                k    s!J d| d|j         d| d|j         d	            |j        |j        k    r>|r|                    |j                  }n!J d| d|j         d| d|j         d	            |||<   |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   numelshapereshape)r   r*   rL   out_dictkavakbvbs           r   r   r   i   s    H!%"2"2"4"4":":"<"<j>N>N>P>PQQ  R(2rxxzzRXXZZ''')t)t)trx)t)tUW)t)t[][c)t)t)t'''8rx lZZ))kkkkbhkkBkkRTRZkkkkkkOr   	optimizerloss_scalerlog_infoc                    d }t           j                            |          rt          j        |dd          }t          |t                    r'd|v r"|rt                              d           t          |d                   }| 
                    |           |;d|v r7|rt                              d           |
                    |d                    |E|j        |v r<|rt                              d           |
                    ||j                            d	|v rS|d	         }d
|v r|d
         dk    r|dz  }|r4t                              d                    ||d	                              nD| 
                    |           |r-t                              d                    |                     |S t                              d                    |                     t                      )Nr   Fr%   r   z(Restoring model state from checkpoint...rW   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.   r3   r5   r7   r8   r:   r;   r	   r
   r@   r<   r=   r>   )r*   r    rW   rX   rY   resume_epochr?   r   s           r   r   r   }   s    L	w~~o&&  "ZeRWXXX
j$'' 	OLJ,F,F IGHHH)*\*BCCJ!!*---$
)B)B QLL!OPPP))*[*ABBB&;+E+S+S WLL!UVVV++J{7Q,RSSS*$$)'2
**z)/Dq/H/H A%L sLL!D!K!KO]gho]p!q!qrrr!!*--- O5<<_MMNNN3::?KKLLL!!!r   )Tr   F)Tr   TFNF)T)NNT)!__doc__loggingr,   collectionsr   typingr   r   r   r   r   r3   safetensors.torchr2   r1   ImportError	getLogger__name__r:   __all__r   r/   r	   boolr"   r
   nnModuler   r   optim	Optimizerr    r   r   <module>rn      s     				 # # # # # # 7 7 7 7 7 7 7 7 7 7 7 7 7 7     '
H
%
%
m
m
m  c3h DcN      +0"	 "  " " " c5<'( " 	 "
 
#s(^ "  "  "  "L +0(," x  c5<'(	
   H%    < # cNx    . ,0(" ("x("(" ;((" 	("
 (" (" (" (" (" ("s   + 55