
    rh)                        d dl Z d dlmZmZ d dl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 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)cached_property)Any)	CFunctionalizeInterpreterPtrCGradInterpreterPtrCInterpreterCJvpInterpreterPtrCVmapInterpreterPtrpop_dynamic_layer_stackpush_dynamic_layer_stackRandomnessTypeTransformType)_set_fwd_grad_enabledc                   L    e Zd ZdefdZed        Zd Zd Zd Z	d Z
d Zd	 Zy
)FuncTorchInterpretercptrc                     || _         y N)_cptr)selfr   s     o/var/www/html/ai-insurance-compliance-backend/venv/lib/python3.12/site-packages/torch/_functorch/pyfunctorch.py__init__zFuncTorchInterpreter.__init__8   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.lowerD   s    022r   c                 6    | j                   j                         S r   )r   levelr#   s    r   r&   zFuncTorchInterpreter.levelG   s    zz!!r   c                 6    | j                   j                         S r   )r   keyr#   s    r   r(   zFuncTorchInterpreter.keyJ   s    zz~~r   c                     t         r   )NotImplementedErrorr#   s    r   	get_statezFuncTorchInterpreter.get_stateM   s    !!r   c                 (    || j                         k(  S r   )r+   r   states     r   check_statez FuncTorchInterpreter.check_stateP   s    (((r   c                 ^    | j                   j                         }|j                  dd        |S )Nr   )__dict__copypopr-   s     r   __getstate__z!FuncTorchInterpreter.__getstate__S   s'    ""$		'4 r   N)__name__
__module____qualname__r   r   r   r    r$   r&   r(   r+   r/   r4   r   r   r   r   r   7   s@    S 
  3" ")r   r   c               #   `   K   	 t               } d  t        |        y # t                w xY wwr   )r   r   )saveds    r   r"   r"   Y   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   r3   )stacks    r   #temporarily_clear_interpreter_stackrB   b   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   )rA   pushedss      r   %temporarily_restore_interpreter_stackrG   n   st     F	&% 	A$Q'MM!	 	&! 	&A $%	&&! 	&A $%	&s   A00A A0A--A0c                   @    e Zd ZdefdZed        Zd Zd Zd Z	d Z
y)	VmapInterpretercdatac                 X    |j                         t        j                  k(  sJ || _        y r   )r(   r   Vmap_cdatar   rJ   s     r   r   zVmapInterpreter.__init__~   s%    yy{m00000 r   c                 ,    t        | j                        S r   )r   rM   r#   s    r   r   zVmapInterpreter._cptr       "4;;//r   c                 T    |j                   t        j                     } || g|i |S r   )functorch_tabler   rL   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   r\   zVmapInterpreter.randomness   sZ    jj##%.&&&N'''N,,,5cU;<<r   c                 t    | j                         j                  | j                         | j                         fS r   )r(   namer&   r\   r#   s    r   r+   zVmapInterpreter.get_state   s&    
t/@AAr   N)r5   r6   r7   r	   r   r   r   r    rW   r\   r+   r   r   r   rI   rI   }   s7    l  0 0-&=Br   rI   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)contextsrA   ctxs      r   nestedrj      sJ     				 5 	%C$	%  s   A	=	A	AA	c                   R     e Zd ZdefdZed        Zd Zd Z fdZ	d Z
d Z xZS )	GradInterpreterrJ   c                 X    |j                         t        j                  k(  sJ || _        y r   )r(   r   GradrM   rN   s     r   r   zGradInterpreter.__init__   s#    yy{m00000r   c                 ,    t        | j                        S r   )r   rM   r#   s    r   r   zGradInterpreter._cptr   rP   r   c                     t        j                  t        j                  | j                  j
                  ||g      \  }}||fS r   pytreetree_map_onlyr;   Tensorr   liftr   r   r   s      r   ru   zGradInterpreter.lift   9    ++LL$**//D&>
f V|r   c                 ~    |j                   t        j                     }| j                  ||      \  }} || g|i |S r   )rR   r   rn   ru   rS   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_moderj   r;   no_gradsuperr$   )r   rz   	__class__s     r   r$   zGradInterpreter.lower   s9    ,,.%--/57=?;;w}r   c                 6    | j                   j                         S r   )r   prevGradModer#   s    r   rz   zGradInterpreter.prev_grad_mode   s    zz&&((r   c                 t    | j                         j                  | j                         | j                         fS r   )r(   rc   r&   rz   r#   s    r   r+   zGradInterpreter.get_state   s(    
t/B/B/DEEr   )r5   r6   r7   r	   r   r   r   ru   r    r$   rz   r+   __classcell__r}   s   @r   rl   rl      s=    l 
 0 0-)Fr   rl   c                   R     e Zd ZdefdZed        Zd Zd Z fdZ	d Z
d Z xZS )	JvpInterpreterrJ   c                 X    |j                         t        j                  k(  sJ || _        y r   )r(   r   JvprM   rN   s     r   r   zJvpInterpreter.__init__   s#    yy{m/////r   c                 ,    t        | j                        S r   )r
   rM   r#   s    r   r   zJvpInterpreter._cptr   s    !$++..r   c                     t        j                  t        j                  | j                  j
                  ||g      \  }}||fS r   rq   rv   s      r   ru   zJvpInterpreter.lift   rw   r   c                 ~    |j                   t        j                     }| j                  ||      \  }} || g|i |S r   )rR   r   r   ru   rS   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_moderj   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(   rc   r&   r   r#   s    r   r+   zJvpInterpreter.get_state   s(    
t/F/F/HIIr   )r5   r6   r7   r	   r   r   r   ru   r    r$   r   r+   r   r   s   @r   r   r      s=    l 
 / /-,Jr   r   c                   :    e Zd ZdefdZed        Zd Zd Zd Z	y)FunctionalizeInterpreterrJ   c                 X    |j                         t        j                  k(  sJ || _        y r   )r(   r   FunctionalizerM   rN   s     r   r   z!FunctionalizeInterpreter.__init__   s#    yy{m99999r   c                 ,    t        | j                        S r   )r   rM   r#   s    r   r   zFunctionalizeInterpreter._cptr   s    +DKK88r   c                 T    |j                   t        j                     } || g|i |S r   )rR   r   r   rS   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(   rc   r&   r#   s    r   r+   z"FunctionalizeInterpreter.get_state   s    
..r   N)
r5   r6   r7   r	   r   r   r   r    r   r+   r   r   r   r   r      s1    l  9 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   rn   rl   rL   rI   r   r   r   r   r`   )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   )r;   r<   r=   r>   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   )r;   r<   r=   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    )r;   r<   r=   r>   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   rr   rs   r;   rt   r<   r=   unwrap_if_deadr    )r   r   r   r   s       r   dispatch_functorchr   .  sV    8:K ''ehh))884.LD& r400r   )+re   abcr   r   	functoolsr   typingr   r;   torch.utils._pytreeutils_pytreerr   torch._C._functorchr   r   r	   r
   r   r   r   r   r   torch.autograd.forward_adr   r   contextmanagerr"   rB   rG   rI   rj   rl   r   r   r   r   r@   r   tupleboolr   r   r   r   r   <module>r      sA    # %   $ $
 
 
 <@3 D ( ( 2 2 & &B* BB  "F* "FJ"J) "JJ/3 /(
Sl 
S7K 
S,0D ,3T2F-G 3DsCx$9 d  
1r   