
    Χg
                         d dl Z d dlmZ d dlmZmZmZ dgZddZ edd          Z	 ed	d
          Z
 edd          Z edd          Zd Zdee         dee         dee         fdZdeeef         deddfdZdS )    N)repeat)AnyDictList'consume_prefix_in_state_dict_if_presentparsec                        fd}||_         |S )Nc                     t          | t          j        j                  rt	          |           S t	          t          |                     S N)
isinstancecollectionsabcIterabletupler   )xns    R/var/www/html/ai-engine/env/lib/python3.11/site-packages/torch/nn/modules/utils.pyr   z_ntuple.<locals>.parse   s;    a122 	88OVAq\\"""    )__name__)r   namer   s   `  r   _ntupler   
   s*    # # # # #
 ENLr      _single   _pair   _triple   
_quadruplec                 T    t          fdt          |           D                       S )zReverse the order of `t` and repeat each element for `n` times.

    This can be used to translate padding arg used by Conv and Pooling modules
    to the ones used by `F.pad`.
    c              3   @   K   | ]}t                    D ]}|V  d S r   )range).0r   _r   s      r   	<genexpr>z(_reverse_repeat_tuple.<locals>.<genexpr>    s6      ::qq::A:::::::r   )r   reversed)tr   s    `r   _reverse_repeat_tupler(      s.     ::::HQKK::::::r   out_sizedefaultsreturnc                 *   dd l }t          | t          |j        f          r| S t	          |          t	          |           k    r"t          dt	          |           dz              d t          | |t	          |            d                    D             S )Nr   z#Input dimension should be at least r   c                      g | ]\  }}||n|S r    )r#   vds      r   
<listcomp>z&_list_with_default.<locals>.<listcomp>*   s1       &*aQ]  r   )torchr   intSymIntlen
ValueErrorzip)r)   r*   r2   s      r   _list_with_defaultr8   #   s    LLL(S%,/00 
8}}H%%Rs8}}q?PRRSSS .1(Hc(mm^EUEU<V.W.W   r   
state_dictprefixc                 L   t          |                                           }|D ]F}|                    |          r/|t          |          d         }|                     |          | |<   Gt          | d          rt          | j                                                  }|D ]}t          |          dk    r||                    dd          k    s|                    |          r9|t          |          d         }| j                            |          | j        |<   dS dS )a  Strip the prefix in state_dict in place, if any.

    ..note::
        Given a `state_dict` from a DP/DDP model, a local model can load it by applying
        `consume_prefix_in_state_dict_if_present(state_dict, "module.")` before calling
        :meth:`torch.nn.Module.load_state_dict`.

    Args:
        state_dict (OrderedDict): a state-dict to be loaded to the model.
        prefix (str): prefix.
    N	_metadatar   . )listkeys
startswithr5   pophasattrr<   replace)r9   r:   r@   keynewkeys        r   r   r   /   s4    
!!""D 5 5>>&!! 	5V'F!+!4!4Jv z;'' MJ(--//00 
	M 
	MC
 3xx1}}fnnS"----1G1G-S[[]]+/9/C/G/G/L/L
$V,M M
	M 
	Mr   )r   )r   	itertoolsr   typingr   r   r   __all__r   r   r   r   r   r(   r3   r8   strr   r.   r   r   <module>rK      s2             " " " " " " " " " " 5
5    '!Y

7
'!Y

WQ%%
; ; ;	c 	d3i 	DI 	 	 	 	"MS#X"M"M 
"M "M "M "M "M "Mr   