U
    ´d¨iö  ã                   @   s*   d dl Z d dlZdd„ Ze jdd„ ƒZdS )é    Nc              
   O   sX   t ƒ H t d¡ | ||Ž}t|tjƒr>|jjdkr>tj ¡  |W  5 Q R £ S Q R X dS )z¡Wrapper to set seed manually for some functions like dropout
    See: https://github.com/pytorch/pytorch/pull/62315#issuecomment-896143189 for more details.
    é*   ZlazyN)	Úfreeze_rng_stateÚtorchZmanual_seedÚ
isinstanceZTensorZdeviceÚtypeZ_lazyZ	mark_step)ÚopÚargsÚkwargsÚoutput© r   ú8/tmp/pip-unpacked-wheel-cn8jp7ys/torch/testing/_utils.pyÚwrapper_set_seed   s    


r   c                  c   sª   t jj ¡ 8 t j ¡ " t  ¡ } t j ¡ r6t j ¡ }W 5 Q R X W 5 Q R X z
d V  W 5 t jj ¡ < t j ¡ & t j ¡ r†t j 	|¡ t  	| ¡ W 5 Q R X W 5 Q R X X d S )N)
r   ÚutilsZ_mode_utilsZno_dispatchZ_CZ_DisableFuncTorchZget_rng_stateZcudaZis_availableZset_rng_state)Z	rng_stateZcuda_rng_stater   r   r   r      s    



r   )Ú
contextlibr   r   Úcontextmanagerr   r   r   r   r   Ú<module>   s   