
    9j                         U d dl Z d dlZd dlmZ d dlmZmZmZ d dlm	Z	 da
ej                  dz  ed<    e j                  d      d        Z G d d	e      Zd
 Zd Zy)    N)_len_torch_function_stack)	_pop_mode
_push_modeTorchFunctionModecontext_decoratorCURRENT_DEVICE   c                     h t         j                  t         j                  t         j                  t         j                  t         j
                  t         j                  t         j                  t         j                  t         j                  t         j                  j                  t         j                  j                  t         j                  t         j                  t         j                  t         j                   t         j"                  t         j$                  t         j&                  j(                  t         j*                  t         j,                  t         j.                  t         j0                  t         j2                  t         j4                  t         j6                  t         j8                  t         j:                  t         j<                  t         j>                  t         j@                  t         jB                  t         jD                  t         jF                  t         jH                  t         jJ                  t         jL                  S N)'torchemptyempty_permutedempty_stridedempty_quantizedonesarangebartlett_windowblackman_windoweyefftfftfreqrfftfreqfullhamming_windowhann_windowkaiser_windowlinspacelogspacenestednested_tensorrandrandnrandintrandpermrangesparse_coo_tensorsparse_compressed_tensorsparse_csr_tensorsparse_csc_tensorsparse_bsr_tensorsparse_bsc_tensortril_indicestriu_indiceszerosasarraytensor	as_tensorscalar_tensor     S/media/conek/DATA/Code/OCR/venv/lib/python3.12/site-packages/torch/utils/_device.py_device_constructorsr7      sF   11 	1 		1
 	1 	

1 	1 	1 	1 			1 			1 			1 	

1 	1 	1  	!1" 	#1$ 	%1& 	""'1, 	

-1. 	/10 	112 	314 	516 	718 	&&91: 	;1< 	=1> 	?1@ 	A1B 	C1D 	E1F 	G1H 	I1L 	M1N 	O1P 	Q1 1r5   c                   (    e Zd ZddZd Zd ZddZy)DeviceContextNc                 F    t        j                  |      | _        d | _        y r   )r   device	prev_mode)selfr;   s     r6   __init__zDeviceContext.__init__E   s    ll6*/3r5   c                    t         | _        | j                  a t        t	                     D cg c]  }t                }}t        |        t        |      D ]%  }t        |t              r|| _
        t        |       ' y c c}w r   )r	   
old_devicer;   r&   r   r   r   reversed
isinstancer9   r<   )r=   _	cur_stackmodes       r6   	__enter__zDeviceContext.__enter__I   sm    (
 +00I0K*LMQY[M	M4Y' 	!D$.!%4 		!	 Ns   A?c                    | j                   ag }t        t               dz
        D ]8  }t	               }t        |t              rt        d      |j                  |       : t               dkD  r%t	               }t        |t              st        d      | j                  t        | j                         t        |      D ]  }t        |        y )Nr
   z@Found nested DeviceContext on the mode stack where none expectedr   z8Expected a DeviceContext at the bottom of the mode stack)r@   r	   r&   r   r   rB   r9   AssertionErrorappendr<   r   rA   )r=   exc_typeexc_valexc_tbrD   rC   rE   s          r6   __exit__zDeviceContext.__exit__[   s    	 02Q67 	#A;D$.$V  T"	# %&*;DdM2$N  >>%t~~&Y' 	Dt	r5   c                 v    |xs i }|t               v r |j                  d      | j                  |d<    ||i |S )Nr;   )r7   getr;   )r=   functypesargskwargss        r6   __torch_function__z DeviceContext.__torch_function__v   sC    2'))fjj.B.J#{{F8T$V$$r5   )returnN)r4   N)__name__
__module____qualname__r>   rF   rM   rT   r4   r5   r6   r9   r9   D   s    4!$6%r5   r9   c                 "     t         fd|      S )Nc                       S r   r4   r;   s   r6   <lambda>z"device_decorator.<locals>.<lambda>   s    V r5   r   )r;   rP   s   ` r6   device_decoratorr]   ~   s    ^T22r5   c                       fdS )z
    Set the default device inside of the wrapped function by decorating it with this function.

    If you would like to use this as a context manager, use device as a
    context manager directly, e.g., ``with torch.device(device)``.
    c                 B    t        t        j                        |       S r   )r]   r   r;   )rP   r;   s    r6   r\   zset_device.<locals>.<lambda>   s    (f)=tD r5   r4   r[   s   `r6   
set_devicer`      s     EDr5   )	functoolsr   torch._Cr   torch.overridesr   r   r   torch.utils._contextlibr   r	   r;   __annotations__	lru_cacher7   r9   r]   r`   r4   r5   r6   <module>rg      sg      . D D 5 '+t# * Q2 2l6%% 6%t3Er5   