
    IЦiI                        S SK r S SKrS SKrS SKrS SKrS SKJr  S SKJrJrJ	r	J
r
JrJr  S SKrS SKJr  S SKJrJrJrJrJr  S SKJrJrJrJrJr  \\\4   r\\\\S4   4   rS rS	\	\
\      S
\	S\4S jrS\\\\S4   4   S\4S jr S\S\S\/ \!4   S\4S jr"S\S\S\S\\\	\   \	\   \4   4S jr#S	\	\   S
\	\   S\S\4S jr$S r%S\\\\S4   4   S\S\S\S\S\4S jr&S r'S\S\SS4S jr(S\4S jr)S q*\RV                  " 5       r,Sq-S! r.S" r/S# r0S$ r1S% r2S& r3S' r4S( r5\ Rl                  S) 5       r7S* r8S+ r9S, r:S- r;g).    N)partial)AnyCallableListOptionalTupleUnion)Tensor)_add_batch_dim_remove_batch_dim_vmap_decrement_nesting_vmap_increment_nestingis_batchedtensor)_broadcast_to_and_flattentree_flatten	tree_map_tree_unflattenTreeSpec.c                 N   ^ ^ Sm[         R                  " T 5      U U4S j5       nU$ )Nzvtorch.func.{grad, vjp, jacrev, hessian} don't yet support saved tensor hooks. Please open an issue with your use case.c                     > [         R                  R                  R                  T5         T" U 0 UD6sS S S 5        $ ! , (       d  f       g = fN)torchautogradgraphdisable_saved_tensors_hooks)argskwargsfmessages     T/var/www/html/ai-image-ml/venv/lib/python3.13/site-packages/torch/_functorch/vmap.pyfn.doesnt_support_saved_tensors_hooks.<locals>.fn-   s5    ^^!!==gFd%f% GFFs	   =
A)	functoolswraps)r   r!   r   s   ` @r    "doesnt_support_saved_tensors_hooksr%   '   s1    	3 
 __Q& & I    flat_in_dims	flat_argsreturnc                   ^ [        X5       VVs/ s H  u  p#Uc  M
  UR                  U5      PM     snnm[        T5      S:X  a  [        S5      eT(       a)  [	        U4S jT 5       5      (       a  [        ST S35      eTS   $ s  snnf )Nr   z/vmap: Expected at least one Tensor to vmap overc              3   2   >#    U  H  oTS    :g  v   M     g7f)r   N ).0sizebatch_sizess     r    	<genexpr>/_validate_and_get_batch_size.<locals>.<genexpr>@   s     Jkd;q>1ks   zTvmap: Expected all tensors to have the same size in the mapped dimension, got sizes z for the mapped dimension)zipr.   len
ValueErrorany)r'   r(   in_dimargr/   s       @r    _validate_and_get_batch_sizer8   6   s    
 |77KF 	7K
 ;1JKKsJkJJJ$$/=0IK
 	
 q>s
   	BBbatched_outputsc                 D    [        U [        5      (       a  [        U 5      $ g)N   )
isinstancetupler3   )r9   s    r    _num_outputsr>   H   s    /5))?##r&   valuenum_elementserror_message_lambdac                 z    [        U [        5      (       d  U 4U-  $ [        U 5      U:w  a  [        U" 5       5      eU $ r   )r<   r=   r3   r4   )r?   r@   rA   s      r    	_as_tuplerC   R   s>     eU##x,&&
5z\!-/00Lr&   in_dimsr   funcc                 4   [        U [        5      (       d<  [        U [        5      (       d'  [        S[	        U5       SU  S[        U 5       S35      e[        U5      S:X  a  [        S[	        U5       S35      e[        U5      u  p4[        X5      nUc-  [        S[	        U5       SU  S[        U 5      S    S	U S3	5      e[        [        X55      5       GH1  u  nu  px[        U[        5      (       d!  Ub  [        S[	        U5       SU  S
U S35      e[        U[        5      (       a?  [        U[        5      (       d*  [        S[	        U5       SU  S
U S[        U5       S3	5      eUbx  XR                  5       * :  d  XR                  5       :  aQ  [        S[	        U5       SU  S
U SUR                  5        SUR                  5        SUR                  5        S35      eUc  GM  US:  d  GM  XR                  5       -  XV'   GM4     [        XS5      UUU4$ )Nvmap(z
, in_dims=zv, ...)(<inputs>): expected `in_dims` to be int or a (potentially nested) tuple matching the structure of inputs, got: .r   z)(<inputs>): got no inputs. Maybe you forgot to add inputs, or you are trying to vmap over a function with no inputs. The latter is unsupported.zb, ...)(<inputs>): in_dims is not compatible with the structure of `inputs`. in_dims has structure r;   z but inputs has structure z, ...)(<inputs>): Got in_dim=zE for an input but in_dim must be either an integer dimension or None.z' for an input but the input is of type zT. We cannot vmap over non-Tensor arguments, please use None as the respective in_dimz> for some input, but that input is a Tensor of dimensionality z  so expected in_dim to satisfy -z <= in_dim < )r<   intr=   r4   	_get_nametyper3   r   r   	enumerater2   r
   dimr8   )	rD   r   rE   r(   	args_specr'   ir7   r6   s	            r    _process_batched_inputsrP   \   sZ    gs##Jw,F,FIdO$Jwi 866:7m_AG
 	

 4yA~IdO$ %) *
 	
 (-I,W@LIdO$Jwi 8%%1'%:1%=$> ?&Kq*
 	
 &c)&BC=C&#&&6+=	$(
7) <$X &01 
 fc"":c6+B+B	$(
7) <$X%L9+ ;<  6WWYJ#6&GGI:M	$(
7) <$X &%%(WWYK 0GGI;mCGGI;a9  &1*$wwy0LO- D2 	%\=	 r&   
vmap_levelc           	          [        X5       VVs/ s H  u  pEUc  UO[        XTU5      PM     nnn[        Xc5      $ s  snnf r   )r2   r   r   )r'   r(   rQ   rN   r6   r7   batched_inputss          r    _create_batched_inputsrT      sM     |77KF ~>#z#JJ7   .44	s   :c           
          UcC  [        U[        R                  5      (       a"  [        U5      (       a  [	        SU  SU  S35      eU$ [        U[        R                  5      (       d  [	        SU  SU  S[        U5       S35      e[        XX45      $ )NrG   z	, ...): `z5` can not return a BatchedTensor when out_dim is Nonez%` must only return Tensors, got type z3. Did you mean to set out_dims= to None for output?)r<   r   r
   r   r4   rK   r   )namebatched_outputrQ   
batch_sizeout_dims        r    _maybe_remove_batch_dimrZ      s    nell338H9
 9
 vYtf -5 6   nell33D64& )!!%n!5 6 7@@
 	
 ^MMr&   out_dimsrX   c                   ^^^ [        U 5      u  nmUUU4S jn[        U [        R                  5      (       aO  [        T[        5      (       a  T/nOL[        T[
        5      (       a  [        T5      S:X  a  TnO%Tc  T/nOU" 5         O[        TT5      nUc  U" 5         [        UW5       VV	s/ s H  u  p[        [        T5      XX95      PM     n
nn	[        U
T5      $ s  sn	nf )Nc                  ^   > [        S[        T 5       ST S[        T5      S    ST S3	5      e)NrG   , ..., out_dims=z`)(<inputs>): out_dims is not compatible with the structure of `outputs`. out_dims has structure r;   z but outputs has structure rH   )r4   rJ   r   )rE   r[   output_specs   r    incompatible_error+_unwrap_batched.<locals>.incompatible_error   sJ    IdO$$4XJ ?&&28&<Q&?%@ A(M,
 	
r&   r;   )r   r<   r   r
   rI   r=   r3   r   r2   rZ   rJ   r   )r9   r[   rQ   rX   rE   flat_batched_outputsr`   flat_out_dimsrW   rY   flat_outputsr_   s    `  `      @r    _unwrap_batchedre      s     )5_(E%+
 /5<<00 h$$%JM%((S]a-?$M%JM 1(KH   (++?'O	 (P#N 	 dO^	
 (P	   ,44s   -"Cc                 l    [        U [        5      (       a  g U c  g [        S[        U5       SU S35      e)NrG   r^   z): `out_dims` must be an int, None or a python collection of ints representing where in the outputs the vmapped dimension should appear.)r<   rI   r4   rJ   )xrE   r[   s      r    _check_int_or_nonerh      sD    !Sy

	$  0
 ;+ 	, r&   c                 `    [        U [        5      (       a  g [        [        [        XS9U 5        g )N)rE   r[   )r<   rI   r   r   rh   )r[   rE   s     r    $_check_out_dims_is_int_or_int_pytreerj      s$    (C  g(tGRr&   c                 R    [        U S5      (       a  U R                  $ [        U 5      $ )N__name__)hasattrrl   repr)rE   s    r    rJ   rJ      s%    tZ  }}
 :r&   Fc                    ^ [         (       a  g [           [         (       a
   S S S 5        g [        R                  R	                  SS5      S:X  a  OSq  S S S 5        g [
        R                  R                  SSS5      qSSK	J
m  U4S	 jn U " [
        R                  R                  R                  R                  5        U " [
        R                  R                  R                  R                  5        U " [
        R                  R                  R                   R                  5        U " [
        R                  R                  R"                  R                  5        U " [
        R                  R                  R$                  R                  5        U " [
        R                  R                  R&                  R                  5        U " [
        R                  R                  R(                  R                  5        U " [
        R                  R                  R*                  R                  5        Sq S S S 5        g ! , (       d  f       g = f)
NPYTORCH_JIT1TatenIMPLFuncTorchBatchedr   )decomposition_tablec                 `   > U T;   a  [         R                  U TU    5        g [        SU  35      e)Nz!could not find decomposition for )VMAP_DECOMPOSITIONS_LIBimplRuntimeError)decompru   s    r    #_register_python_decomposition_vmapElazy_load_decompositions.<locals>._register_python_decomposition_vmap!  s5    ,,',,V5H5PQ"%Fvh#OPPr&   )DECOMPOSITIONS_LOADEDDECOMPOSITIONS_LOCKosenvirongetr   libraryLibraryrw   torch._decompru   opsrr   mse_loss_backwarddefaultsmooth_l1_loss_backwardhuber_loss_backwardnll_loss_forwardnll_loss2d_forwardnll_loss_backwardnll_loss2d_backwardaddr)r{   ru   s    @r    lazy_load_decompositionsr   	  sp   	   
	 

}c2c9i$(! 
	 #(--"7"7F.#
 	6	Q 	,EIINN,L,L,T,TU+IINN22::	
 	,EIINN,N,N,V,VW+EIINN,K,K,S,ST+EIINN,M,M,U,UV+EIINN,L,L,T,TU+EIINN,N,N,V,VW+EIINN,?,?,G,GH $I 
		s   H3(H3GH33
Ic           	          [        5         [        X 5        [        XU 5      u  pxpUb  [        XXt5      n[	        U UUU
UU40 UD6$ [        U UUU	U
UU40 UD6$ r   )r   rj   rP   _get_chunked_inputs_chunked_vmap
_flat_vmap)rE   rD   r[   
randomness
chunk_sizer   r   rX   r'   r(   rN   chunks_flat_argss               r    	vmap_implr   5  s    (85Lt62Ji .Z
 
 
 	
 	 	 	r&   c                 P    X-  nU/U-  nX-  nUS:w  a  UR                  U5        U$ )Nr   )append)total_elemsr   n_chunkschunk_sizes	remainders        r    get_chunk_sizesr   W  s9    %3x,)K(IA~9%r&   c                    ^ U4mUb*  [        X#5      n[        [        R                  " U5      5      m[        U4S j[	        X5       5       5      n[	        U6 nU$ )Nc              3   l   >#    U  H)  u  pUb  UR                  TUS9OU/[        T5      -  v   M+     g 7fN)rM   )tensor_splitr3   )r-   tr6   
split_idxss      r    r0   &_get_chunked_inputs.<locals>.<genexpr>g  sP       6IA  	
zv. 
 j/	 6s   14)r   r=   	itertools
accumulater2   )r(   r'   rX   r   r   flat_args_chunksr   r   s          @r    r   r   a  sb    J%j=9//<=
  Y5  ,-r&   c                     / nS nU  H(  n[        U5      u  pEUR                  U5        Ub  M&  UnM*     [        [        U6 5      nXb4$ r   )r   r   listr2   )chunks_output_flat_chunks_outputarg_specoutputflat_output	arg_specsflat_output_chunkss          r    _flatten_chunks_outputr   w  s[     H !-f!5!!+. H	 ! c#567''r&   c                     [        X5      n[        U5      [        U5      :X  d   e/ n[        U5       H/  u  pVUR                  [        R
                  " X%   US95        S X%'   M1     U$ r   )r   r3   rL   r   r   cat)r[   r   r   rc   r   idxrY   s          r    _concat_chunked_outputsr     si    -hAM}%7!8888K!-0599%7%<'JK"& 1
 r&   c                 6   / nUS:X  a  [         R                  " 5       OS nU HP  n	[        X5      n
U
S:X  a  M  Ub  [         R                  " U5        UR	                  [        U U
UU	UUU40 UD65        MR     [        U5      u  pA[        XLU5      n[        X5      $ )Nsamer   )	r   get_rng_stater8   set_rng_stater   r   r   r   r   )rE   r'   r   rN   r[   r   r   chunks_outputrsr(   rX   r   r   r   s                 r    r   r     s     M","6			DB%	1,J
 ?>#	 		
% &> $:-#H  	 *(>PQK +00r&   c                 ,    U S;  a  [        SU  35      eg )N)error	differentr   zLOnly allowed values for randomness are 'error', 'different', or 'same'. Got )ry   )r   s    r    _check_randomness_argr     s)    77Z[eZfg
 	
 8r&   c              #   ^   #     [        X5      nUv   [        5         g ! [        5         f = f7fr   )r   r   )rX   r   rQ   s      r    vmap_increment_nestingr     s'     ",ZD
!!s   - -*-c                     [        X5       n[        X#X5      n	U " U	0 UD6n
[        XXU 5      sS S S 5        $ ! , (       d  f       g = fr   )r   rT   re   )rE   rX   r'   r(   rN   r[   r   r   rQ   rS   r9   s              r    r   r     sG     
 
	7:/Z
 9&9*RVW 
8	7	7s	   !7
Ac                     ^ ^^^ UU UU4S jnU$ )Nc                     > [        TT5       n[        U TU5      nT" U0 UD6n[        XB5      sS S S 5        $ ! , (       d  f       g = fr   )r   wrap_batchedunwrap_batched)	r   r   rQ   rS   r9   rX   rE   rD   r   s	        r    innerrestore_vmap.<locals>.inner  s@    #J
;z)$DN"N=f=O!/> <;;s	    8
Ar,   )rE   rD   rX   r   r   s   ```` r    restore_vmapr     s    ? ? Lr&   c                 X    [        U 5      u  p4[        X5      nUc   e[        XSX$5      nU$ r   )r   r   rT   )r   bdimslevelr(   spec
flat_bdimsresults          r    r   r     s5    "4(OI*57J!!!#J5GFMr&   c                 D   [        U 5      u  p#[        U5      S:X  a  U S4$ U Vs/ s HO  n[        U[        R                  5      (       a)  [        R
                  R                  R                  XA5      OUS 4PMQ     nn[        U6 u  pg[        Xc5      [        Xs5      4$ s  snf )Nr   r,   )
r   r3   r<   r   r
   _C
_functorchre   r2   r   )r   r   r(   r   r7   r   r   r   s           r    r   r   	  s    "4(OI
9~Rx
 	 C c5<<(( 	++C74[	 	   LMF&')DDDs   AB)<
contextlibr#   r   r   	threadingr   typingr   r   r   r   r   r	   r   r
   torch._C._functorchr   r   r   r   r   torch.utils._pytreer   r   r   r   r   rI   	in_dims_t
out_dims_tr%   r8   r>   strrC   rP   rT   rZ   re   rh   rj   rJ   r}   Lockr~   rw   r   r   r   r   r   r   r   r   contextmanagerr   r   r   r   r   r,   r&   r    <module>r      sE      	   > >     #u*	3c3h'(
x}%26$%fck0B(B"C  !9A"c'9J
77#7+37
3S	49h./7|5s)5(,S	5?B5
5N.'565#556'5'5 '5 	'5
 '5 '5T	S: SX SRV SH   nn&  
)%XD,("
.1d
 " "X>Er&   