
    9j1                       d dl mZ d dlZd dlmZmZ d dlmZ d dlm	Z	m
Z
 d dlZd dlmc mZ d dlmZmZmZmZmZmZmZmZmZ d dlmZ e
rd dlmZ 	  G d	 d
e      Zej>                  dd       Z ej>                  dd       Z!ej>                  	 	 	 	 dd       Z" G d de      Z#ej>                  	 	 	 	 dd       Z$ G d de      Z% G d de      Z& G d de      Z'd dZ(d!dZ)d"dZ*d#dZ+d$dZ,y)%    )annotationsN)ABCabstractmethod)cached_property)AnyTYPE_CHECKING)	CFunctionalizeInterpreterPtrCGradInterpreterPtrCInterpreterCJvpInterpreterPtrCVmapInterpreterPtrpop_dynamic_layer_stackpush_dynamic_layer_stackRandomnessTypeTransformType)_set_fwd_grad_enabled)	Generatorc                  V    e Zd Zd
dZedd       ZddZddZddZddZ	ddZ
ddZy	)FuncTorchInterpreterc                    || _         y N)_cptr)selfcptrs     \/media/conek/DATA/Code/OCR/venv/lib/python3.12/site-packages/torch/_functorch/pyfunctorch.py__init__zFuncTorchInterpreter.__init__=   s	    
    c                     y r    )r   opargskwargss       r   processzFuncTorchInterpreter.processB   s    r   c                    t               S r   )!temporarily_pop_interpreter_stackr   s    r   lowerzFuncTorchInterpreter.lowerI   s    022r   c                6    | j                   j                         S r   )r   levelr&   s    r   r)   zFuncTorchInterpreter.levelL   s    zz!!r   c                6    | j                   j                         S r   )r   keyr&   s    r   r+   zFuncTorchInterpreter.keyO   s    zz~~r   c                    t         r   )NotImplementedErrorr&   s    r   	get_statezFuncTorchInterpreter.get_stateR   s    !!r   c                (    || j                         k(  S r   )r.   r   states     r   check_statez FuncTorchInterpreter.check_stateU   s    (((r   c                ^    | j                   j                         }|j                  dd        |S )Nr   )__dict__copypopr0   s     r   __getstate__z!FuncTorchInterpreter.__getstate__X   s'    ""$		'4 r   N)r   r   returnNoner    r   r!   tuple[Any, ...]r"   dict[str, Any]r8   r   r8   &contextlib.AbstractContextManager[Any]r8   int)r8   r   r8   r;   )r1   r;   r8   bool)r8   r<   )__name__
__module____qualname__r   r   r#   r'   r)   r+   r.   r2   r7   r   r   r   r   r   <   s9    
  3" ")r   r   c               #  `   K   	 t               } d  t        |        y # t                w xY wwr   )r   r   )saveds    r   r%   r%   ^   s'     (') ' 's   . .+.c               #    K   g } 	 t         j                  j                  j                         B| j	                  t                      t         j                  j                  j                         Bt        |        | rt        | j                                | ry y # | rt        | j                                | rw w xY wwr   )	torch_C
_functorchpeek_interpreter_stackappendr   listr   r6   )stacks    r   #temporarily_clear_interpreter_stackrP   g   s     E2hh!!88:FLL023 hh!!88:F5k$UYY[1 e$UYY[1 s/   CA)B 0B =CCB><B>>Cc              #     K   g }| y 	 t        |       D ]  }t        |       |j                  |         d  t        |      D ]  }t                 y # t        |      D ]  }t                 w xY wwr   )reversedr   rM   r   )rO   pusheds_s       r   %temporarily_restore_interpreter_stackrV   s   s~      F}	&% 	A$Q'MM!	 	&! 	&A $%	&&! 	&A $%	&s   A30A A3A00A3c                  F    e Zd ZddZed	d       Zd
dZddZddZddZ	y)VmapInterpreterc                    |j                         t        j                  k7  rt        d|j                                || _        y )Nz!expected TransformType.Vmap, got )r+   r   VmapAssertionError_cdatar   cdatas     r   r   zVmapInterpreter.__init__   s8    99;-,,, #DUYY[M!RSS r   c                ,    t        | j                        S r   )r   r\   r&   s    r   r   zVmapInterpreter._cptr        #4;;//r   c                T    |j                   t        j                     } || g|i |S r   )functorch_tabler   rZ   r   r    r!   r"   kernels        r   r#   zVmapInterpreter.process   s-    ##M$6$67d,T,V,,r   c                6    | j                   j                         S r   )r   	batchSizer&   s    r   
batch_sizezVmapInterpreter.batch_size   s    zz##%%r   c                    | j                   j                         }|t        j                  k(  ry|t        j                  k(  ry|t        j
                  k(  ryt        d|       )Nerrorsame	differentzUnknown RandomnessType: )r   
randomnessr   ErrorSame	DifferentRuntimeError)r   typs     r   rl   zVmapInterpreter.randomness   sZ    jj##%.&&&N'''N,,,5cU;<<r   c                t    | j                         j                  | j                         | j                         fS r   )r+   namer)   rl   r&   s    r   r.   zVmapInterpreter.get_state   s&    
t/@AAr   Nr^   r   r8   r9   )r8   r   r:   r?   )r8   strrA   )
rC   rD   rE   r   r   r   r#   rg   rl   r.   r   r   r   rX   rX      s0     0 0-&=Br   rX   c               '     K   t        j                         5 }| D ]  }|j                  |        |  d d d        y # 1 sw Y   y xY wwr   )
contextlib	ExitStackenter_context)contextsrO   ctxs      r   nestedr|      sL      
			 5 	%C$	%  s   A	=	A	AA	c                  f     e Zd ZddZed	d       Z	 	 	 	 	 	 d
dZddZd fdZddZ	ddZ
 xZS )GradInterpreterc                    |j                         t        j                  k7  rt        d|j                                || _        y )Nz!expected TransformType.Grad, got )r+   r   Gradr[   r\   r]   s     r   r   zGradInterpreter.__init__   s6    99;-,,, #DUYY[M!RSSr   c                ,    t        | j                        S r   )r
   r\   r&   s    r   r   zGradInterpreter._cptr   r`   r   c                    t        j                  t        j                  | j                  j
                  ||g      \  }}||fS r   pytreetree_map_onlyrI   Tensorr   liftr   r!   r"   s      r   r   zGradInterpreter.lift   ;     ++LL$**//D&>
f V|r   c                ~    |j                   t        j                     }| j                  ||      \  }} || g|i |S r   )rb   r   r   r   rc   s        r   r#   zGradInterpreter.process   sA    ##M$6$67yyv.fd,T,V,,r   c                    | j                         }|s*t        t        j                         t        |                S t        |          S r   )prev_grad_moder|   rI   no_gradsuperr'   )r   r   	__class__s     r   r'   zGradInterpreter.lower   s9    ,,.%--/57=?;;w}r   c                6    | j                   j                         S r   )r   prevGradModer&   s    r   r   zGradInterpreter.prev_grad_mode   s    zz&&((r   c                t    | j                         j                  | j                         | j                         fS r   )r+   rs   r)   r   r&   s    r   r.   zGradInterpreter.get_state   s(    
t/B/B/DEEr   rt   )r8   r
   r!   r;   r"   r<   r8   z&tuple[tuple[Any, ...], dict[str, Any]]r:   r=   r8   rB   rA   )rC   rD   rE   r   r   r   r   r#   r'   r   r.   __classcell__r   s   @r   r~   r~      sN     0 0#-;	/-)Fr   r~   c                  f     e Zd ZddZed	d       Z	 	 	 	 	 	 d
dZddZd fdZddZ	ddZ
 xZS )JvpInterpreterc                    |j                         t        j                  k7  rt        d|j                                || _        y )Nz expected TransformType.Jvp, got )r+   r   Jvpr[   r\   r]   s     r   r   zJvpInterpreter.__init__   s6    99;-+++ #CEIIK=!QRRr   c                ,    t        | j                        S r   )r   r\   r&   s    r   r   zJvpInterpreter._cptr   s     "$++..r   c                    t        j                  t        j                  | j                  j
                  ||g      \  }}||fS r   r   r   s      r   r   zJvpInterpreter.lift   r   r   c                ~    |j                   t        j                     }| j                  ||      \  }} || g|i |S r   )rb   r   r   r   rc   s        r   r#   zJvpInterpreter.process   sA    ##M$5$56yyv.fd,T,V,,r   c                    | j                         }|s!t        t        d      t        |                S t        |          S )NF)prev_fwd_grad_moder|   r   r   r'   )r   r   r   s     r   r'   zJvpInterpreter.lower   s:    !446!/6HHw}r   c                6    | j                   j                         S r   )r   prevFwdGradModer&   s    r   r   z!JvpInterpreter.prev_fwd_grad_mode   s    zz))++r   c                t    | j                         j                  | j                         | j                         fS r   )r+   rs   r)   r   r&   s    r   r.   zJvpInterpreter.get_state  s(    
t/F/F/HIIr   rt   )r8   r   r   r:   r=   r   rA   )rC   rD   rE   r   r   r   r   r#   r'   r   r.   r   r   s   @r   r   r      sN     / /#-;	/-,Jr   r   c                  >    e Zd ZddZedd       Zd	dZd
dZddZy)FunctionalizeInterpreterc                    |j                         t        j                  k7  rt        d|j                                || _        y )Nz*expected TransformType.Functionalize, got )r+   r   Functionalizer[   r\   r]   s     r   r   z!FunctionalizeInterpreter.__init__  s<    99;-555 <UYY[MJ  r   c                ,    t        | j                        S r   )r	   r\   r&   s    r   r   zFunctionalizeInterpreter._cptr  s     ,DKK88r   c                T    |j                   t        j                     } || g|i |S r   )rb   r   r   rc   s        r   r#   z FunctionalizeInterpreter.process  s-    ##M$?$?@d,T,V,,r   c                6    | j                   j                         S r   )r   functionalizeAddBackViewsr&   s    r   functionalize_add_back_viewsz5FunctionalizeInterpreter.functionalize_add_back_views  s    zz3355r   c                V    | j                         j                  | j                         fS r   )r+   rs   r)   r&   s    r   r.   z"FunctionalizeInterpreter.get_state  s    
..r   Nrt   )r8   r	   r:   r   rA   )	rC   rD   rE   r   r   r   r#   r   r.   r   r   r   r   r     s*     9 9-6/r   r   c                .   | j                         }|t        j                  k(  rt        |       S |t        j                  k(  rt        |       S |t        j                  k(  rt        |       S |t        j                  k(  rt        |       S t        d|       )Nz2NYI: PyDispatcher has not implemented support for )r+   r   r   r~   rZ   rX   r   r   r   r   rp   )cinterpreterr+   s     r   coerce_cinterpreterr     s    



C
m   |,,
m   |,,
ml++
m)))'55
KC5Q
RRr   c                     t         j                  j                  j                         } | t	        d      t        |       S )Nzinterpreter must not be None)rI   rJ   rK   rL   r[   r   )interpreters    r   &retrieve_current_functorch_interpreterr   *  s7    ((%%<<>K;<<{++r   c                     t         j                  j                  j                         } | g S | D cg c]  }t	        |       c}S c c}w r   )rI   rJ   rK   get_interpreter_stackr   )ciscis     r   #retrieve_all_functorch_interpretersr   1  s>    
((


3
3
5C
{	.12#222s   Ac                   t         j                  j                  j                         }|t	        |       dk7  s|t	        |       dk(  ryt               }t	        |      t	        |       k(  xr t        d t        ||       D              S )Nr   Fc              3  D   K   | ]  \  }}|j                  |        y wr   )r2   ).0r   r1   s      r   	<genexpr>z*compare_functorch_state.<locals>.<genexpr>C  s"      +"+"eu+s    )rI   rJ   rK   rL   lenr   allzip)statespeekr   s      r   compare_functorch_stater   8  s}     88557DV)t/?CKSTDT
-
/Cs8s6{" s +/23/?+ ( r   c                    t               }t        j                  t        j                  t        j
                  j                  j                  ||f      \  }}|j                  | ||      S r   )	r   r   r   rI   r   rJ   rK   unwrap_if_deadr#   )r    r!   r"   r   s       r   dispatch_functorchr   H  sV    8:K ''ehh))884.LD& r400r   )r8   Generator[None, None, None])r8   z Generator[list[Any], None, None])rO   zlist[Any] | Noner8   r   )rz   r>   r8   zIGenerator[tuple[contextlib.AbstractContextManager[Any], ...], None, None])r   r   r8   r   )r8   r   )r8   zlist[FuncTorchInterpreter])r   zlist[tuple[Any, ...]]r8   rB   r:   )-
__future__r   rw   abcr   r   	functoolsr   typingr   r   rI   torch.utils._pytreeutils_pytreer   torch._C._functorchr	   r
   r   r   r   r   r   r   r   torch.autograd.forward_adr   collections.abcr   r   contextmanagerr%   rP   rV   rX   r|   r~   r   r   r   r   r   r   r   r   r   r   <module>r      s+   "  # % %  $ $
 
 
 < )@3 D ( ( 2 2 && & &$ B*  BF 5N &F* &FR&J) &JR/3 /0
S,3 
1r   