
    Ph!                      N   d dl mZmZ d dl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 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 Z d Z!y)    )ABCabstractmethodN)Any)	TransformTypeRandomnessTypeCInterpreterCGradInterpreterPtrCFunctionalizeInterpreterPtrCVmapInterpreterPtrCJvpInterpreterPtrpop_dynamic_layer_stackpush_dynamic_layer_stack)_set_fwd_grad_enabledc                   :    e Zd ZdefdZed        Zd Zd Zd Z	y)FuncTorchInterpretercptrc                     || _         y N)_cptr)selfr   s     gC:\Users\daisl\Desktop\realtime-object-detection\venv\Lib\site-packages\torch/_functorch/pyfunctorch.py__init__zFuncTorchInterpreter.__init__4   s	    
    c                      y r    )r   opargskwargss       r   processzFuncTorchInterpreter.process9   s    r   c                     t               S r   )!temporarily_pop_interpreter_stackr   s    r   lowerzFuncTorchInterpreter.lower@   s    022r   c                 6    | j                   j                         S r   )r   levelr"   s    r   r%   zFuncTorchInterpreter.levelC   s    zz!!r   c                 6    | j                   j                         S r   )r   keyr"   s    r   r'   zFuncTorchInterpreter.keyF   s    zz~~r   N)
__name__
__module____qualname__r   r   r   r   r#   r%   r'   r   r   r   r   r   3   s1    S 
  3" r   r   c               #   `   K   	 t               } d  t        |        y # t                w xY wwr   )r   r   )saveds    r   r!   r!   J   s'     (') ' 's   . .+.c                   *    e Zd Zdef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   r/   s     r   r   zVmapInterpreter.__init__T   s1    yy{m00000 (/
r   c                 T    |j                   t        j                     } || g|i |S r   )functorch_tabler   r1   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.randomnessc   sZ    jj##%.&&&N'''N,,,5cU;<<r   N)r(   r)   r*   r   r   r   r:   r?   r   r   r   r.   r.   S   s    0l 0-&=r   r.   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)contextsstackctxs      r   nestedrL   n   s<     				5C$  
 		s   A	=	A	AA	c                   <     e Zd ZdefdZd Zd Z fdZd Z xZ	S )GradInterpreterr/   c                 x    |j                         t        j                  k(  sJ || _        t	        |      | _        y r   )r'   r   Gradr2   r	   r   r3   s     r   r   zGradInterpreter.__init__w   s/    yy{m00000(/
r   c                     t        j                  t        j                  | j                  j
                  ||g      \  }}||fS r   pytreetree_map_onlytorchTensorr   liftr   r   r   s      r   rW   zGradInterpreter.lift}   5    ++ELL$**//DRX>ZfV|r   c                 ~    |j                   t        j                     }| j                  ||      \  }} || g|i |S r   )r5   r   rP   rW   r6   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_moderL   rU   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   )
r(   r)   r*   r   r   rW   r   r#   r\   __classcell__r_   s   @r   rN   rN   v   s#    0l 0-)r   rN   c                   <     e Zd ZdefdZd Zd Z fdZd Z xZ	S )JvpInterpreterr/   c                 x    |j                         t        j                  k(  sJ || _        t	        |      | _        y r   )r'   r   Jvpr2   r   r   r3   s     r   r   zJvpInterpreter.__init__   s/    yy{m/////'.
r   c                     t        j                  t        j                  | j                  j
                  ||g      \  }}||fS r   rR   rX   s      r   rW   zJvpInterpreter.lift   rY   r   c                 ~    |j                   t        j                     }| j                  ||      \  }} || g|i |S r   )r5   r   rg   rW   r6   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_moderL   r   r^   r#   )r   rk   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   rk   z!JvpInterpreter.prev_fwd_grad_mode   s    zz))++r   )
r(   r)   r*   r   r   rW   r   r#   rk   rb   rc   s   @r   re   re      s#    /l /-,r   re   c                   $    e Zd ZdefdZd Zd Zy)FunctionalizeInterpreterr/   c                 x    |j                         t        j                  k(  sJ || _        t	        |      | _        y r   )r'   r   Functionalizer2   r
   r   r3   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   )r5   r   rq   r6   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   N)r(   r)   r*   r   r   r   ru   r   r   r   ro   ro      s    9l 9
-6r   ro   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   rP   rN   r1   r.   rg   re   rq   ro   rC   )rv   r'   s     r   coerce_cinterpreterry      s    



C
m   |,,
m   |,,
ml++
m)))'55
KC5Q
RRr   c                  p    t         j                  j                  j                         } | J t	        |       S r   )rU   _C
_functorchpeek_interpreter_stackry   )interpreters    r   &retrieve_current_functorch_interpreterr      s1    ((%%<<>K"""{++r   c                     t               }t        j                  t        j                  t        j
                  j                  j                  ||f      \  }}|j                  | ||      S r   )	r   rS   rT   rU   rV   r{   r|   unwrap_if_deadr   )r   r   r   r~   s       r   dispatch_functorchr      sU    8:K ''ehh))884.JLD&r400r   )"abcr   r   rF   typingr   rU   torch.utils._pytreeutils_pytreerS   torch._C._functorchr   r   r   r	   r
   r   r   r   r   torch.autograd.forward_adr   r   contextmanagerr!   r.   rL   rN   re   ro   ry   r   r   r   r   r   <module>r      s    #    $ $
 
 
 <@ 3  . ( (=* =6  )* ):,) ,:63 6
Sl 
S7K 
S,	1r   