
    sgw(                        d dl Z d dlmZmZ d dlmZ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 	  G d de      Ze j4                  d        Ze j4                  d	        Ze j4                  d
        Z G d de      Ze j4                  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ListTuple)	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     O/var/www/html/venv/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   r:   r   )r=   pushedss      r   %temporarily_restore_interpreter_stackrC   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   rF   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   rH   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   rV   zVmapInterpreter.randomness   sZ    jj##%.&&&N'''N,,,5cU;<<r   c                 t    | j                         j                  | j                         | j                         fS r   )r)   namer'   rV   r$   s    r   r,   zVmapInterpreter.get_state   s&    
t/@AAr   N)	r0   r1   r2   r
   r   r!   rQ   rV   r,   r   r   r   rE   rE   w   s#    0l 0-&=Br   rE   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   nestedrd      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 )GradInterpreterrF   c                 x    |j                         t        j                  k(  sJ || _        t	        |      | _        y r   )r)   r   GradrI   r	   r   rJ   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_onlyr6   Tensorr   liftr   r   r    s      r   rn   zGradInterpreter.lift   9    ++LL$**//D&>
f V|r   c                 ~    |j                   t        j                     }| j                  ||      \  }} || g|i |S r   )rL   r   rh   rn   rM   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_moderd   r6   no_gradsuperr%   )r   rs   	__class__s     r   r%   zGradInterpreter.lower   s9    ,,.%--/57=?;;w}r   c                 6    | j                   j                         S r   )r   prevGradModer$   s    r   rs   zGradInterpreter.prev_grad_mode   s    zz&&((r   c                 t    | j                         j                  | j                         | j                         fS r   )r)   r]   r'   rs   r$   s    r   r,   zGradInterpreter.get_state   s(    
t/B/B/DEEr   )r0   r1   r2   r
   r   rn   r!   r%   rs   r,   __classcell__rv   s   @r   rf   rf      s)    0l 0-)Fr   rf   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 )JvpInterpreterrF   c                 x    |j                         t        j                  k(  sJ || _        t	        |      | _        y r   )r)   r   JvprI   r   r   rJ   s     r   r   zJvpInterpreter.__init__   s/    yy{m/////'.
r   c                     t        j                  t        j                  | j                  j
                  ||g      \  }}||fS r   rj   ro   s      r   rn   zJvpInterpreter.lift   rp   r   c                 ~    |j                   t        j                     }| j                  ||      \  }} || g|i |S r   )rL   r   r   rn   rM   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_moderd   r   ru   r%   )r   r   rv   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   )r0   r1   r2   r
   r   rn   r!   r%   r   r,   rz   r{   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)FunctionalizeInterpreterrF   c                 x    |j                         t        j                  k(  sJ || _        t	        |      | _        y r   )r)   r   FunctionalizerI   r   r   rJ   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   )rL   r   r   rM   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)r0   r1   r2   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   rh   rf   rH   rE   r   r}   r   r   rZ   )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   )r6   r7   r8   r9   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   )r6   r7   r8   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    )r6   r7   r8   r9   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   rk   rl   r6   rm   r7   r8   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   r   r   r6   torch.utils._pytreeutils_pytreerk   torch._C._functorchr   r	   r
   r   r   r   r   r   r   torch.autograd.forward_adr   r   contextmanagerr#   r>   rC   rE   rd   rf   r}   r   r   r   r   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   