U
    •Ê¹jO	  ã                   @   s¤   d dl Z d dlmZ d dlmZmZmZ dgZddd„Zedd	ƒZ	ed
dƒZ
eddƒZeddƒZdd„ Zee ee ee dœdd„Zeeef eddœdd„ZdS )é    N)Úrepeat)ÚListÚDictÚAnyÚ'consume_prefix_in_state_dict_if_presentÚparsec                    s   ‡ fdd„}||_ |S )Nc                    s$   t | tjjƒrt| ƒS tt| ˆ ƒƒS ©N)Ú
isinstanceÚcollectionsÚabcÚIterableÚtupler   )Úx©Ún© úU/var/www/html/bwave/python/venv/lib/python3.8/site-packages/torch/nn/modules/utils.pyr   	   s    z_ntuple.<locals>.parse)Ú__name__)r   Únamer   r   r   r   Ú_ntuple   s    r   é   Ú_singleé   Ú_pairé   Ú_tripleé   Ú
_quadruplec                    s   t ‡ fdd„t| ƒD ƒƒS )zµReverse 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   s    | ]}t ˆ ƒD ]
}|V  qqd S r   )Úrange)Ú.0r   Ú_r   r   r   Ú	<genexpr>   s     
  z(_reverse_repeat_tuple.<locals>.<genexpr>)r   Úreversed)Útr   r   r   r   Ú_reverse_repeat_tuple   s    r$   )Úout_sizeÚdefaultsÚreturnc                 C   sV   t | tƒr| S t|ƒt| ƒkr4tdt| ƒd › �ƒ‚dd„ t| |t| ƒ d … ƒD ƒS )Nz#Input dimension should be at least r   c                 S   s    g | ]\}}|d k	r|n|‘qS r   r   )r   ÚvÚdr   r   r   Ú
<listcomp>(   s    z&_list_with_default.<locals>.<listcomp>)r	   ÚintÚlenÚ
ValueErrorÚzip)r%   r&   r   r   r   Ú_list_with_default!   s    
ÿÿr/   )Ú
state_dictÚprefixr'   c                 C   s�   t |  ¡ ƒ}|D ],}| |¡r|t|ƒd… }|  |¡| |< qd| krŒ| d }t| ¡ ƒD ]0}t|ƒdkrlqZ|t|ƒd… }| |¡||< qZd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   )ÚsortedÚkeysÚ
startswithr,   ÚpopÚlist)r0   r1   r4   ÚkeyZnewkeyÚmetadatar   r   r   r   -   s    
)r   )r
   Ú	itertoolsr   Útypingr   r   r   Ú__all__r   r   r   r   r   r$   r+   r/   Ústrr   r   r   r   r   Ú<module>   s   





	
 þ