
    9jх                       d dl mZ d dlmZmZ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 d dlmZ d dlmZ d dlmZmZmZmZmZ d d	lmZ d d
lm Z  erd dl!m"Z"m#Z#m$Z$ d dl%m&Z&m'Z'  ed      Z( ed      Z) G d de      Z* e*       Z+e+jY                  ejZ                        e+jY                  ej\                        	 	 	 	 	 	 	 	 d-d              Z/	 	 	 	 	 	 d.dZ0dZ1e1f	 	 	 	 	 	 	 	 	 	 	 d/dZ2 G d de      Z3	 	 	 	 d0dZ4d1dZ5e+jY                  ejl                        	 	 	 	 	 	 	 	 	 	 d2d       Z7	 	 	 	 	 	 	 	 	 	 	 	 d3dZ8d4dZ9	 	 	 	 	 	 	 	 d5dZ:e+jY                  ejv                        	 	 	 	 	 	 	 	 	 	 d6d       Z<	 	 	 	 	 	 	 	 	 	 d7dZ=d8dZ> G d  d!      Z? G d" d#e?      Z@ G d$ d%e?      ZA	 d9	 	 	 	 	 	 	 	 	 	 	 d:d&ZB	 d9	 	 	 	 	 	 	 	 	 	 	 d;d'ZC	 	 	 	 	 	 d<d(ZD G d) d*e      ZE eE       ZF G d+ d,      ZGy)=    )annotations)Any
NamedTupleTYPE_CHECKING)	ParamSpecTypeVarN)_unwrap_for_grad_wrap_for_gradcurrent_levelTransformType)vmap)%enable_single_level_autograd_function)_add_batch_dim_broadcast_to_and_flattenrestore_vmapunwrap_batchedwrap_batched)HigherOrderOperator)_set_fwd_grad_enabled)CallableIterableSequence)FuncTorchInterpreterVmapInterpreter_P_Rc                  <     e Zd Zd fdZ	 	 	 	 	 	 	 	 d fdZ xZS )!CustomFunctionHigherOrderOperatorc                $    t         |   d       y )Ncustom_function_callsuper__init__self	__class__s    b/media/conek/DATA/Code/OCR/venv/lib/python3.12/site-packages/torch/_functorch/autograd_function.pyr#   z*CustomFunctionHigherOrderOperator.__init__,   s    /0    c                    t         j                  j                         rt        |   |g|i |S  |j
                  |i |S N)torch_C _are_functorch_transforms_activer"   __call__apply)r%   autograd_functionargskwargsr&   s       r'   r.   z*CustomFunctionHigherOrderOperator.__call__/   sI    " 884467#$5GGGG& &&777r(   returnNone)r0   type[torch.autograd.Function]r1   _P.argsr2   	_P.kwargsr4   r   __name__
__module____qualname__r#   r.   __classcell__r&   s   @r'   r   r   +   s8    1888 8 	8
 
8 8r(   r   c                |    t        | |      }t               5   |j                  | }d d d        |S # 1 sw Y   S xY wr*   )generate_single_level_functionr   r/   )interpreterr0   operands	Generatedflat_outs        r'   custom_function_call_gradrE   i   sE     /{<MNI	.	0 ."9??H-. O. Os   1;c           
     0     j                         d fd}dfd}d	fd}d
fd}j                   d}t        |t        j                  j
                  j                  ft        |      t        |      t        |      t        |      d      }|S )Nc                 p   t        j                  t        j                  fd|       }t        j                         5  t        d      5  j                         5  t        g| }d d d        d d d        d d d        dfd}t        || |      S # 1 sw Y   -xY w# 1 sw Y   1xY w# 1 sw Y   5xY w)Nc                    t        |       S r*   )r	   )xlevels    r'   <lambda>zAgenerate_single_level_function.<locals>.forward.<locals>.<lambda>   s    $4Q$> r(   Tc                    t        |       S r*   )r
   )outputrJ   s    r'   wrap_fnz@generate_single_level_function.<locals>.forward.<locals>.wrap_fn   s    !&%00r(   )rM   torch.Tensorr4   rO   )	pytreetree_map_onlyr+   Tensorenable_gradr   lowerr    !wrap_outputs_maintaining_identity)rB   unwrapped_operandsunwrapped_outputrN   r0   rA   rJ   s       r'   forwardz/generate_single_level_function.<locals>.forward}   s    #11LL>
   	"7"= 	{?P?P?R 	3! $6 	 	 		1 10(G
 	
	 	 	 	 	 	s;   B,
B B(B 0B,BB  B)	%B,,B5c                *    j                  | ||      S r*   )setup_context)ctxinputsrM   r0   s      r'   rZ   z5generate_single_level_function.<locals>.setup_context   s     ..sFFCCr(   c                .     j                   | g| }|S r*   )backward)r[   gradsresultr0   s      r'   r^   z0generate_single_level_function.<locals>.backward   s     +"++C8%8r(   c                .     j                   | g| }|S r*   )jvp)r[   tangentsr`   r0   s      r'   rb   z+generate_single_level_function.<locals>.jvp   s     &"&&s6X6r(   rC   )rX   r^   rb   rZ   rB   r   r4   r   )r[   r   r\   r   rM   r   r4   r   )r[   r   r_   r   r4   r   r[   r   rc   r   r4   r   )rJ   r:   typer+   autogradfunction_SingleLevelFunctionstaticmethod)	rA   r0   rX   rZ   r^   rb   namerC   rJ   s	   ``      @r'   r@   r@   w   s     E
(D
  (()3D		 	 	5	57#G,$X.$)-8		
	I r(   znot specifiedc           	        t        j                  | }t        j                  | }t        ||      D ci c]  \  }}t        |      | }	}}t        j                  |       \  }
}g }|t
        k7  }d }|r9t        ||      }|+t        d| dt        j                  |      d    d| d      t        |
      D ]  \  }}t        |t        j                        s|j                  |       2t        |      |	v r|j                  |	t        |                ]|r)|t        d      |j                   ||||                |j                   ||              t        j                  ||      S c c}}w )NzoThe autograd.Function's vmap staticmethod returned an incompatible (output, out_dims) tuple. Expected out_dims=zI to be compatible with the structure of `output`. out_dims has structure    z but output has structure zV. For more details, please see https://pytorch.org/docs/main/notes/extending.func.htmlz9flat_out_dims must not be None when out_dims is specified)rP   arg_tree_leaveszipidtree_flattenNO_OUT_DIMSr   RuntimeError	enumerate
isinstancer+   rR   appendAssertionErrortree_unflatten)outputsunwrapped_inputsorig_inputsrN   out_dimsflat_unwrapped_inputsflat_orig_inputs	unwrappedorigunwrapped_input_to_orig_inputflat_outputsspecr`   out_dims_specifiedflat_out_dimsirM   s                    r'   rU   rU      s    #224DE--{;  ##8:JK%It 	9t%! %
  ,,W5L$F![0M1(DA  %%-J /**0*=*=h*G*J)K L,,06 2JK	 	 |, +	6&%,,/MM&!f:66MM76
CD$$O  MM'&-*:;<MM'&/*+    ..W%s   E/c                  "    e Zd ZU ded<   ded<   y)VmapInfoint
batch_sizestr
randomnessN)r:   r;   r<   __annotations__ r(   r'   r   r   "  s    OOr(   r   c                b    | j                   t        j                  j                  j                   uS r*   )r   r+   rg   Function)r0   s    r'   has_overridden_vmap_ruler   '  s%     !!)@)@)E)EEEr(   c                    d}t        | t              st        |dt        |        dz         t	        |       dk(  st        |dt	        |        dz         y )Nz}Expected the vmap staticmethod to have two returns, an output and out_dims with pytree structure compatible with the output. zGot a z instead   zGot z returns instead)ru   tuplers   rf   len)r`   base_error_msgs     r'   +validate_vmap_returns_tuple_of_two_elementsr   -  se    	J  fe$>fT&\N(,KKLLv;!>d3v;-?O,PPQQ r(   c                   t        d t        j                  j                  j	                  |      d   D              rt        d|       |j                  r1t        |      rt        d|j                   d      t        | |g| S t        |      st        d|j                   d      t        | |j                  |g|i |S )Nc              3  P   K   | ]  }t        |t        j                           y wr*   )ru   r+   rR   ).0vals     r'   	<genexpr>z,custom_function_call_vmap.<locals>.<genexpr>?  s#       	3%s   $&r   z|Run vmap on autograd.Function with kwarg-only Tensor args. Please do not pass kwarg-only Tensors to autograd.Function. Got: zYou tried to vmap over a  , but it has both generate_vmap_rule=True and an overridden vmap staticmethod. Please set generate_vmap_rule=False or delete the overridden vmap staticmethod to avoid ambiguity. For more details, please see https://pytorch.org/docs/main/notes/extending.func.htmlz, but it does not have vmap support. Please override and implement the vmap staticmethod or set generate_vmap_rule=True. For more details, please see https://pytorch.org/docs/main/notes/extending.func.html)anyr+   utils_pytreerq   NotImplementedErrorgenerate_vmap_ruler   rs   r:   'custom_function_call_vmap_generate_rule custom_function_call_vmap_helperr   )rA   r0   rB   r2   s       r'   custom_function_call_vmapr   8  s     ;;&&33F;A>  "8
 	
 ++#$56 )*;*D*D)E FJ K  7*
-5
 	
 $$56 %&7&@&@%A BF G
 	
 ,&++->AIMS r(   c                F     j                         t         j                          j                               }t	        |t
        j                  j                  j                        d fd}t        |      \  }}t        j                  d |      r0 |       5  rt        |g| cd d d        S  ||i |cd d d        S  |       5   |||g|i |}	d d d        t        	       |	\  }
}dfd}t        |
||||      S # 1 sw Y   LxY w# 1 sw Y   ;xY w)N)r   r   c                      rj                         S t        j                  j                  t        j                  j	                  t        j                  j
                  j                              S r*   )rT   r+   r,   _ExcludeDispatchKeyGuardDispatchKeySetDispatchKeyFuncTorchBatched)autograd_function_caserA   s   r'   lower_to_nextz7custom_function_call_vmap_helper.<locals>.lower_to_nexty  sN    !$$&&8844''(<(<(M(MN r(   c                
    | d u S r*   r   )dims    r'   rK   z2custom_function_call_vmap_helper.<locals>.<lambda>  s
    3$; r(   c                &    || S t        | |      S r*   )r   )rM   out_dimr   s     r'   rN   z1custom_function_call_vmap_helper.<locals>.wrap_fn  s'      	
  ?	
r(   )r|   )r4   r   )rM   rO   r   
int | Noner4   rO   )rJ   r   r   r   ru   r+   rg   rh   FunctionMetar   rP   tree_allr    r   rU   )rA   vmap_functionoprB   r2   infor   rV   in_dimsr`   rW   r|   rN   r   r   s   `            @@r'   r   r   i  s0     %%'M))+))+D (ENN,C,C,P,PQ #1="I .8_ 	/%+B::	/ 	/ 8.v.		/ 	/ 
 MtWL/ALVLM/7!'h
 -,h( '	/ 	/M Ms   D7DDDD c                P    | d   }t        |t              r	| d d } | |fS | d   } | |fS )Nr   )ru   r   )ry   r|   s     r'   unpack_outputsr     sC    r{H(E"#2, H !*Hr(   c                   t        || j                               \  }}t        ||| j                         | j	                               }| j                         5  t        |g| }d d d        t        t              st        dt        |             t        |      \  }}t        ||| j                               S # 1 sw Y   YxY w)Nz$expected outputs to be a tuple, got )r   rJ   vmapify_autograd_functionr   r   rT   r    ru   r   rw   rf   r   r   )rA   r0   rB   rV   r   vmapped_functionry   r|   s           r'   r   r     s    
 #1;;L;L;N"O0  	 
			 N&'7M:LMN gu%CDM?STT&w/GX;+<+<+>??N Ns   B==Cc                    t        d      )Nz0NYI: Functionalize rule for custom_function_call)rs   )rA   r0   r   rB   s       r'   "custom_function_call_functionalizer     s     I
JJr(   c           
        	 d fd}d		 fd}d
	 fd}d	 fd}d j                    }t        |t        j                  j                  ft        |      t        |      t        |      t        |      dd      		S )Nc                      t        j                        |  \  }}t        |t        j                        r||fS g ||S r*   )r   rX   ru   r+   rR   )rB   ry   r|   r0   r   r   r   s      r'   rX   z*vmapify_autograd_function.<locals>.forward  sX    
L%%w
J
 gu||,H$$%G%X%%r(   c                     t        |      \  }}t              d fd} t        |	|f
      ||       t         d      si  _         j                  j                  |i       y )Nc                L   t        t                     }j                  || |       t        d | D              }t	        d      si _        j
                  j                  |i       t	        d      si _        j                  j                  |j                  i       y )Nc              3  l   K   | ],  }t        |t        j                        r|j                  nd  . y wr*   )ru   r+   rR   shape)r   inps     r'   r   zRvmapify_autograd_function.<locals>.setup_context.<locals>.inner.<locals>.<genexpr>  s+      !ILZU\\:		D!s   24_pt_input_shapes_pt_saved_tensors_bdims_stack)	CtxCustomSaver   rZ   r   hasattrr   updater   _pt_saved_tensors_bdims)r\   ry   wrapped_ctxinput_shapesr0   r[   keys       r'   innerz?vmapify_autograd_function.<locals>.setup_context.<locals>.inner  s    
 (]_=K++KI ! !PV! L 3 23')$  ''l(;<3 ?@461--44{::<r(   _pt_out_dims)r\   r   ry   r   r4   r5   )r   rp   r   r   r   r   )r[   r\   ry   r|   r   r   rC   r0   r   r   r   s   `    @r'   rZ   z0vmapify_autograd_function.<locals>.setup_context  su    *73m	8	
h		

 '	 sN+!Ch0r(   c                $    t              }d	 fd}t        |      } t        | j                  |   |f
       j                  |      \  }}t        || j                  |   
      }t        |t        j                        r|d fS g |d S )Nc                B    t        |       } j                  |g| S r*   )CtxWithSavedTensorsrb   )saved_tensorsrc   r   r0   r[   s      r'   jvp_no_contextz>vmapify_autograd_function.<locals>.jvp.<locals>.jvp_no_context  s(    -c=AK($((@x@@r(   )r   r   rc   r   r4   r   )
rp   get_tangents_in_dimsr   r   r   	reductifyr   ru   r+   rR   )r[   rc   r   r   tangent_in_dimsout_tangentsout_tangents_dimsr`   rC   r0   r   r   r   s   `       r'   rb   z&vmapify_autograd_function.<locals>.jvp  s    m	A /wA+
,..s3_E	+

 

X+''' +S-=-=c-BJ
 fell+4< F=D= r(   c                R    t        	      }|d d } j                  |   }t        |t              s|f}t        d t	        ||      D              }d
 fd} t        | j                  |   |ff       j                  |f      \  }}t        || j                  |         }|S )Nr   c              3  .   K   | ]  \  }}||nd   y wr*   r   )r   grad_outputin_dims      r'   r   z>vmapify_autograd_function.<locals>.backward.<locals>.<genexpr>   s&      %
#V "-F47%
s   c                L    | \  }}t        |      } j                  |g| S r*   )r   r^   )r\   r   grad_outputsr   r0   r[   s       r'   backward_no_contextzHvmapify_autograd_function.<locals>.backward.<locals>.backward_no_context%  s2    *0'M<-c=AK-$--kILIIr(   )r\   r   r4   r   )
rp   r   ru   r   ro   r   r   r   r   r   )r[   r   r   grad_outputs_grad_outputs_in_dimsr   grad_insgrad_ins_dimsr`   rC   r0   r   r   r   s   `        r'   r^   z+vmapify_autograd_function.<locals>.backward  s    m$Sb)"//4.6$8#: $ %
'*=:N'O%
  

	J
#
,//46JKM	#

 m
,#.- mWj#:N:Ns:S
 r(   VmappedT)rX   r^   rb   rZ   r   rd   )r[   r   r\   r   ry   r   r4   r5   re   )r[   r   r   r   r4   r   )r:   rf   r+   rg   r   rj   )
r0   r   r   r   rX   rZ   rb   r^   rk   rC   s
   ````     @r'   r   r     s    & &*1 *1X! !. : &//01D		 	 "#G,$X.$)-8"&	

I r(   c                    t        j                  |       \  }}t        j                  | }t        ||      D cg c]  \  }}|d n| }}}t        j                  ||      S c c}}w r*   )rP   rq   rn   ro   rx   )
input_dimsrc   flat_in_dimsr   flat_tangentsr   tangentr`   s           r'   r   r   G  st    ,,Z8L$**H5M  #<?FG V+F    ..	s   A#c                  4    e Zd ZU dZded<   ddZd	dZd
dZy)
WrappedCtx)_pt_reserved_attrs_pt_inner_ctxztuple[str, ...]r   c                    t        |t              s7t        |       j                  }|D ]  }t	        ||      st        d| d       || _        y )NzPyTorch reserves the zU field on ctx. Please name your fields on ctx something else to avoid name collision.)ru   r   rf   r   r   rs   r   )r%   r[   reserved_attrsrk   s       r'   r#   zWrappedCtx.__init__  s`    #z*!$Z::N& sD)"+N+; <! !  !r(   c                .    t        | j                  |      S r*   )getattrr   )r%   rk   s     r'   __getattr__zWrappedCtx.__getattr__  s    t))400r(   c                ~    |t        |       j                  v r|| j                  |<   y t        | j                  ||      S r*   )rf   r   __dict__setattrr   )r%   rk   values      r'   __setattr__zWrappedCtx.__setattr__  s:    4:000"'DMM$t))477r(   N)r[   r   r4   r5   )rk   r   r4   r   )rk   r   r   r   r4   r5   )r:   r;   r<   r   r   r#   r   r   r   r(   r'   r   r     s    *QQ!18r(   r   c                  R     e Zd Zdgej                  Zd fdZedd       Z xZS )r   _pt_new_saved_tensorsc                2    t         |   |       || _        y r*   )r"   r#   r   )r%   r[   new_saved_tensorsr&   s      r'   r#   zCtxWithSavedTensors.__init__  s    %6"r(   c                    | j                   S r*   )r   )r%   s    r'   r   z!CtxWithSavedTensors.saved_tensors  s    )))r(   )r[   r   r   Sequence[torch.Tensor]r4   r5   )r4   r   )	r:   r;   r<   r   r   r#   propertyr   r=   r>   s   @r'   r   r     s0    1RJ4Q4QR7 * *r(   r   c                  R     e Zd Zddgej                  Zd fdZddZddZ xZS )r   r   _pt_current_levelc                @    t         |   |       d| _        || _        y )Nr   )r"   r#   r   r  )r%   r[   r   r&   s      r'   r#   zCtxCustomSave.__init__  s     8:$!.r(   c                v    t        || j                        \  }} | j                  j                  |  || _        y r*   )r   r  r   save_for_backwardr   r%   tensorsunwrapped_tensorsbdimss       r'   r  zCtxCustomSave.save_for_backward  s9    #1'4;Q;Q#R 5,,,.?@',$r(   c                v    t        || j                        \  }} | j                  j                  |  || _        y r*   )r   r  r   save_for_forwardr   r  s       r'   r  zCtxCustomSave.save_for_forward  s9    #1'4;Q;Q#R 5+++->?',$r(   )r[   r   r   r   r4   r5   )r  rO   r4   r5   )	r:   r;   r<   r   r   r#   r  r  r=   r>   s   @r'   r   r     s0    ! 
	&	&/
-
-r(   r   c           	         t        | t              s| f} t        |t              s|f}t        |t              s|f}|t        |       dz  }t        fdt        | |||      D              }|S )Nr*   c              3  F   K   | ]  \  }}}}t        ||||        y wr*   )reductify_leaf)r   gigi_bdimi_bdimmaybe_ishaper   s        r'   r   zreductify.<locals>.<genexpr>  s.      -B 	r7FJEs   !)ru   r   r   ro   )
grad_inputgrad_input_bdim
input_bdimr   &target_shape_without_bdim_to_reduce_tor`   s      `  r'   r   r     s}     j%( ]
ou-*,j%( ]
-514Z71J. 142	2
 F Mr(   c                l   | y ||| S ||| j                  |      S |t        d      |>| j                  |      } t        | j                        }|||<   | j                  |      } |}|/ t        t        j                  j                  |d f|      | |      S ||k7  r| j                  ||      } | S )Nzinput_bdim must not be None)r   r|   )sumrw   	unsqueezelistr   expandr   r+   rR   sum_to_sizemovedim)r  r  r  r   r  	new_shapes         r'   r  r    s     :#5"z'9~~o..0 :;;))*5
))*	 *	*&&y1
$-9
tLL$$$d+
 <	> 	> _$''D
r(   c                     d fd}|S )Nc                ,     |i |} | ||       |S r*   r   )r[   r1   r2   rM   original_forwardoriginal_setup_contexts       r'   new_forwardz8autograd_function_forward_rewritten.<locals>.new_forward   s#    !4262sD&1r(   )r[   r   r1   r7   r2   r8   r4   r   r   )r"  r#  r$  s   `` r'   #autograd_function_forward_rewrittenr%    s    
 r(   c                  <     e Zd Zd fdZ	 	 	 	 	 	 	 	 	 	 ddZ xZS )AutogradFunctionApplyc                $    t         |   d       y )Nautograd_function_applyr!   r$   s    r'   r#   zAutogradFunctionApply.__init__)  s    23r(   c                    d |d   |d    G fddt         j                  j                        } |j                  | S )Nnon_differentiable_idxsaved_for_backward_idxc                  V    e Zd Zedfd       Zedfd       Zed fd       Zy)5AutogradFunctionApply.__call__.<locals>.ApplyTemplatec                     t        j                  j                        j                  |  \  }	ddlm} t        	      D ]0  \  }}|vs ||      D ]  }d|j                  j                  d<    2 |S )Nr   )_get_proxiesTsaved_tensor_with_no_vc_check)	r+   fxInterpreterrun"torch.fx.experimental.proxy_tensorr0  rt   nodemeta)
r1   r2   rM   r0  idxtproxyfwdr,  saved_valuess
          r'   rX   z=AutogradFunctionApply.__call__.<locals>.ApplyTemplate.forward8  s     (-xx';';C'@'D'Dd'K$ L'5 TFC"88%1!_ TEOSEJJOO,KLTT
 r(   c                    t              dkD  r;g }t        |      D ]  \  }}|v s|j                  |         | j                  |  y y )Nr   )r   rt   rv   mark_non_differentiable)r[   r\   rM   non_differentiable_outputr   rI   r+  s         r'   rZ   zCAutogradFunctionApply.__call__.<locals>.ApplyTemplate.setup_contextN  sb     -.202- )& 1 @1 665<<Q?@ 0C//1JK 3r(   c                ~    t        d      t        j                  j                        j                  g | S )Nzsaved_values must not be None)rw   r+   r2  r3  r4  )r[   gradbwdr<  s     r'   r^   z>AutogradFunctionApply.__call__.<locals>.ApplyTemplate.backwardX  s?      '()HIIxx++C044JdJ\JJr(   N)r1   r   r2   r   r4   r   )r[   r   r\   tuple[Any, ...]rM   r   r4   r5   )r[   r   rA  r   r4   r   )r:   r;   r<   rj   rX   rZ   r^   )rB  r;  r+  r,  r<  s   r'   ApplyTemplater.  7  sA     * L L K Kr(   rD  )r+   rg   r   r/   )	r%   r;  rB  fwd_args
fwd_kwargsrD  r+  r,  r<  s	    ``   @@@r'   r.   zAutogradFunctionApply.__call__,  sV     .2!+,D!E!+,D!E)	K )	KENN33 )	KV #}""H--r(   r3   )
r;  torch.fx.GraphModulerB  rG  rE  r   rF  r   r4   r   r9   r>   s   @r'   r'  r'  (  s=    46.!6. "6. 	6.
 6. 
6.r(   r'  c                      e Zd Zedd       Zy)!DynamoAutogradFunctionTraceHelperc                     d fd}|S )Nc                    t        j                         5   | i |}d d d        | D ch c]  }t        |t         j                        s|! }}t        t         j                        r||v r|j	                  |      S |S g }|D ]d  }t        |t         j                        r7||v r!|j                  |j	                  |             B|j                  |       T|j                  |       f t        |      S # 1 sw Y   xY wc c}w r*   )r+   no_gradru   rR   view_asrv   r   )r1   r2   outsargtensor_argsnew_outsoutorig_fwds          r'   r   zADynamoAutogradFunctionTraceHelper.fwd_trace_helper.<locals>.innern  s     1001
 +/P3*S%,,2O3PKP$-;&<<--KH )c5<<0k) C(89 ,OOC() ?"+1 1
 Qs   	C8DD8D)r1   r7   r2   r8   r4   r   r   )rS  r   s   ` r'   fwd_trace_helperz2DynamoAutogradFunctionTraceHelper.fwd_trace_helperi  s    
	#> r(   N)rS  Callable[_P, Any]r4   rU  )r:   r;   r<   rj   rT  r   r(   r'   rI  rI  h  s    # #r(   rI  )rA   r   r0   r6   rB   r   r4   r   )rA   r   r0   r6   r4   z2type[torch.autograd.function._SingleLevelFunction])ry   r   rz   r   r{   r   rN   Callable[..., Any]r|   r   r4   r   )r0   r6   r4   bool)r`   r   r4   r5   )
rA   r   r0   r6   rB   r   r2   r   r4   r   )rA   r   r   rV  r   r   rB   r   r2   r   r4   r   )ry   rC  r4   ztuple[Any, Any])rA   r   r0   r6   rB   r   r4   r   )
rA   r   r0   r6   r   rW  rB   r   r4   r   )
r0   r6   r   r   r   r   r   r   r4   r6   )r   r   rc   rC  r4   r   r*   )r  z'torch.Tensor | tuple[torch.Tensor, ...]r  int | tuple[int, ...]r  rX  r   r   r  r   r4   rC  )r  torch.Tensor | Noner  r   r  r   r   r   r  r   r4   rY  )r"  zCallable[_P, _R]r#  rV  r4   zCallable[..., _R])H
__future__r   typingr   r   r   typing_extensionsr   r   r+   torch.utils._pytreer   r   rP   torch._C._functorchr	   r
   r   r   torch._functorch.apisr   torch._functorch.utilsr   torch._functorch.vmapr   r   r   r   r   
torch._opsr   torch.autograd.forward_adr   collections.abcr   r   r   torch._functorch.pyfunctorchr   r   r   r   r   r    py_implGradJvprE   r@   rr   rU   r   r   r   Vmapr   r   r   r   Functionalizer   r   r   r   r   r   r   r  r%  r'  r)  rI  r   r(   r'   <module>rk     s   " 1 1 0  $ $  ' H  + ; <<Rt_T]8(; 8@ 9: < m001m//0	%	4	 	 			 1 2	6%646 86D   5/5/5/ 5/  	5/
 5/ 	5/Dz 
F4F	FR m001- -4- - 	-
 	- 2-`2 2%2 	2 	2
 2 	2j@ @4@ @ 		@* m99:K%K4K K 	K
 	K ;K|4|| | 	|
 #|B/~8 86	** 	*-J -8 377* & 	
 -0 B 379#99 9 	9
 -09 9x	&	.	 	:./ :.z 01 % %r(   