
    Yh
                         d dl Z d dlmZ d dl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'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    h/var/www/tools.fuzzalab.pt/emblema-extractor/venv/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(   r0   s      r   _list_with_defaultr6   #   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
startswithr3   pophasattrr:   replace)r7   r8   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   __all__r   r   r   r   r   r&   r=   r1   r6   dictstrr   r,   r   r   <module>rJ      s&                   5
5    '!Y

7
'!Y

WQ%%
; ; ;	c 	d3i 	DI 	 	 	 	"MS#X"M"M 
"M "M "M "M "M "Mr   