
    Vhj(                        d dl Z d dlmZmZ d dl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 	  G d de      Ze j0                  d        Ze j0                  d	        Ze j0                  d
        Z G d de      Ze j0                  d        Z G d de      Z G d de      Z G d de      Z dedefdZ!defdZ"de#e   fdZ$de#e%edf      de&fdZ'd Z(y)    N)ABCabstractmethod)Any)	CFunctionalizeInterpreterPtrCGradInterpreterPtrCInterpreterCJvpInterpreterPtrCVmapInterpreterPtrpop_dynamic_layer_stackpush_dynamic_layer_stackRandomnessTypeTransformType)_set_fwd_grad_enabledc                   F    e Zd ZdefdZed        Zd Zd Zd Z	d Z
d Zy	)
FuncTorchInterpretercptrc                     || _         y N)_cptr)selfr   s     L/home/dcms/DCMS/lib/python3.12/site-packages/torch/_functorch/pyfunctorch.py__init__zFuncTorchInterpreter.__init__7   s	    
    c                      y r    )r   opargskwargss       r   processzFuncTorchInterpreter.process<   s    r   c                     t               S r   )!temporarily_pop_interpreter_stackr   s    r   lowerzFuncTorchInterpreter.lowerC   s    022r   c                 6    | j                   j                         S r   )r   levelr"   s    r   r%   zFuncTorchInterpreter.levelF   s    zz!!r   c                 6    | j                   j                         S r   )r   keyr"   s    r   r'   zFuncTorchInterpreter.keyI   s    zz~~r   c                     t         r   )NotImplementedErrorr"   s    r   	get_statezFuncTorchInterpreter.get_stateL   s    !!r   c                 (    || j                         k(  S r   )r*   )r   states     r   check_statez FuncTorchInterpreter.check_stateO   s    (((r   N)__name__
__module____qualname__r   r   r   r   r#   r%   r'   r*   r-   r   r   r   r   r   6   s;    S 
  3" ")r   r   c               #   `   K   	 t               } d  t        |        y # t                w xY wwr   )r   r   )saveds    r   r!   r!   S   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   pop)stacks    r   #temporarily_clear_interpreter_stackr<   \   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 }	 t        |       D ]  }t        |       |j                  |         d  t        |      D ]  }t                 y # t        |      D ]  }t                 w xY wwr   )reversedr   r8   r   )r;   pushedss      r   %temporarily_restore_interpreter_stackrA   h   st     F	&% 	A$Q'MM!	 	&! 	&A $%	&&! 	&A $%	&s   A00A A0A--A0c                   0    e Zd ZdefdZd Zd Zd Zd Zy)VmapInterpretercdatac                 x    |j                         t        j                  k(  sJ || _        t	        |      | _        y r   )r'   r   Vmap_cdatar
   r   r   rD   s     r   r   zVmapInterpreter.__init__x   s1    yy{m00000 (/
r   c                 T    |j                   t        j                     } || g|i |S r   )functorch_tabler   rF   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   rT   zVmapInterpreter.randomness   sZ    jj##%.&&&N'''N,,,5cU;<<r   c                 t    | j                         j                  | j                         | j                         fS r   )r'   namer%   rT   r"   s    r   r*   zVmapInterpreter.get_state   s&    
t/@AAr   N)	r.   r/   r0   r   r   r   rO   rT   r*   r   r   r   rC   rC   w   s#    0l 0-&=Br   rC   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)contextsr;   ctxs      r   nestedrb      sJ     				 5 	%C$	%  s   A	=	A	AA	c                   B     e Zd ZdefdZd Zd Z fdZd Zd Z	 xZ
S )GradInterpreterrD   c                 x    |j                         t        j                  k(  sJ || _        t	        |      | _        y r   )r'   r   GradrG   r   r   rH   s     r   r   zGradInterpreter.__init__   s/    yy{m00000(/
r   c                     t        j                  t        j                  | j                  j
                  ||g      \  }}||fS r   pytreetree_map_onlyr4   Tensorr   liftr   r   r   s      r   rl   zGradInterpreter.lift   9    ++LL$**//D&>
f V|r   c                 ~    |j                   t        j                     }| j                  ||      \  }} || g|i |S r   )rJ   r   rf   rl   rK   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_moderb   r4   no_gradsuperr#   )r   rq   	__class__s     r   r#   zGradInterpreter.lower   s9    ,,.%--/57=?;;w}r   c                 6    | j                   j                         S r   )r   prevGradModer"   s    r   rq   zGradInterpreter.prev_grad_mode   s    zz&&((r   c                 t    | j                         j                  | j                         | j                         fS r   )r'   r[   r%   rq   r"   s    r   r*   zGradInterpreter.get_state   s(    
t/B/B/DEEr   )r.   r/   r0   r   r   rl   r   r#   rq   r*   __classcell__rt   s   @r   rd   rd      s)    0l 0-)Fr   rd   c                   B     e Zd ZdefdZd Zd Z fdZd Zd Z	 xZ
S )JvpInterpreterrD   c                 x    |j                         t        j                  k(  sJ || _        t	        |      | _        y r   )r'   r   JvprG   r	   r   rH   s     r   r   zJvpInterpreter.__init__   s/    yy{m/////'.
r   c                     t        j                  t        j                  | j                  j
                  ||g      \  }}||fS r   rh   rm   s      r   rl   zJvpInterpreter.lift   rn   r   c                 ~    |j                   t        j                     }| j                  ||      \  }} || g|i |S r   )rJ   r   r}   rl   rK   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_moderb   r   rs   r#   )r   r   rt   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'   r[   r%   r   r"   s    r   r*   zJvpInterpreter.get_state   s(    
t/F/F/HIIr   )r.   r/   r0   r   r   rl   r   r#   r   r*   rx   ry   s   @r   r{   r{      s)    /l /-,Jr   r{   c                   *    e Zd ZdefdZd Zd Zd Zy)FunctionalizeInterpreterrD   c                 x    |j                         t        j                  k(  sJ || _        t	        |      | _        y r   )r'   r   FunctionalizerG   r   r   rH   s     r   r   z!FunctionalizeInterpreter.__init__   s/    yy{m999991%8
r   c                 T    |j                   t        j                     } || g|i |S r   )rJ   r   r   rK   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'   r[   r%   r"   s    r   r*   z"FunctionalizeInterpreter.get_state   s    
..r   N)r.   r/   r0   r   r   r   r   r*   r   r   r   r   r      s    9l 9
-6/r   r   cinterpreterreturnc                 .   | 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   rf   rd   rF   rC   r}   r{   r   r   rX   )r   r'   s     r   coerce_cinterpreterr      s    



C
m   |,,
m   |,,
ml++
m)))'55
KC5Q
RRr   c                  p    t         j                  j                  j                         } | J t	        |       S r   )r4   r5   r6   r7   r   )interpreters    r   &retrieve_current_functorch_interpreterr      s1    ((%%<<>K"""{++r   c                      t         j                  j                  j                         } | g S | D cg c]  }t	        |       c}S c c}w r   )r4   r5   r6   get_interpreter_stackr   )ciscis     r   #retrieve_all_functorch_interpretersr     s>    
((


3
3
5C
{	.12#222s   Astates.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   )r-   ).0r   r,   s      r   	<genexpr>z*compare_functorch_state.<locals>.<genexpr>  s"      +"+"eu+s    )r4   r5   r6   r7   lenr   allzip)r   peekr   s      r   compare_functorch_stater     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   ri   rj   r4   rk   r5   r6   unwrap_if_deadr   )r   r   r   r   s       r   dispatch_functorchr     sV    8:K ''ehh))884.LD& r400r   ))r]   abcr   r   typingr   r4   torch.utils._pytreeutils_pytreeri   torch._C._functorchr   r   r   r	   r
   r   r   r   r   torch.autograd.forward_adr   r   contextmanagerr!   r<   rA   rC   rb   rd   r{   r   r   r   r9   r   tupleboolr   r   r   r   r   <module>r      s<    #   $ $
 
 
 <@)3 ): ( ( 2 2 & &B* B<  F* FDJ) JD/3 /"
Sl 
S7K 
S,0D ,3T2F-G 3DsCx$9 d  
1r   