
    sg|O                        d dl Z d dlmZ ddlmZ ddlmZ ddlm	Z	mZ ej                  Z
d dlZd dlmZ  eej                        Zd Zd	 Zd
 Zd Zd Zd Zd#dZd Z G d d      Z G d dee      Z G d dee      Zi Zeefd       Zd Z d Z!d Z" e#       Z$d Z%d Z&	 d$dZ'd Z( e)d      Z*e jV                  jX                  Z- G d d      Z.d  Z/d%d!Z0e jV                  jb                  Z2d&d"Z1y)'    Ndim   )op_properties)_enable_layers)tree_flattentree_map)reducec                 8    t        t        j                  | d      S Nr   )r
   operatormul)xs    J/var/www/html/venv/lib/python3.12/site-packages/functorch/dim/reference.pyprodr      s    (,,1%%    c                 T    ddl m} t        | |      r|rJ d       | S | dk\  r| |z
  S | S )Nr   Dimz8cannot preserve first-class dimensions with keepdim=Truer    r   
isinstance)dNkeepdimr   s       r   	_wrap_dimr      s7    !SVVV{	
a1ur   c                     ddl m} t        | |t        f      rt	        t        |       f      S |r
J d|         t	        fd| D              S )Nr   r   z.expected a single dimension or int but found: c              3   8   K   | ]  }t        |        y wN)r   ).0r   r   r   s     r   	<genexpr>z_dims.<locals>.<genexpr>/   s     6q)Aq'*6s   )r   r   r   intltupler   )r   r   r   
single_dimr   s    ``  r   _dimsr%   )   sQ    !c3Z yAw/122OKA3OO>6A666r   c           
         ddl m} t        d t        |      D              }t	        |      dk(  rO|d   \  }}t        d |D              }| |z  dk7  r t        d |D              } |d|  d|       | |z  }	|	|_        y t	        |      dkD  r t        d	 |D              } |d
| d|       t        d |D              }
| |
k7  r |d|  d|
 d| d|       y )Nr   )DimensionMismatchErrorc              3   D   K   | ]  \  }}|j                   r||f  y wr   )is_bound)r    irs      r   r!   z%_bind_dims_to_size.<locals>.<genexpr>5   s     JAqzzq!fJs    	 r   c              3   N   K   | ]  }|j                   s|j                    y wr   )r)   sizer    r+   s     r   r!   z%_bind_dims_to_size.<locals>.<genexpr>8   s     <Q!&&<s   %%c              3   b   K   | ]'  }|j                   sd nt        |j                         ) yw?Nr)   strr-   r.   s     r   r!   z%_bind_dims_to_size.<locals>.<genexpr>:   s#     NQQZZ#S[@N   -/z>inferred dimension does not evenly fit into larger dimension:  vs c              3   b   K   | ]'  }|j                   sd nt        |j                         ) ywr0   r2   r.   s     r   r!   z%_bind_dims_to_size.<locals>.<genexpr>A   s#     JcQVV<Jr4   z1cannot infer the size of two dimensions at once: z with sizes c              3   4   K   | ]  }|j                     y wr   r-   r.   s     r   r!   z%_bind_dims_to_size.<locals>.<genexpr>F   s     ,1,   z!Dimension sizes to do not match (z != z) when matching z to )r   r'   tuple	enumeratelenr   r-   )lhs_sizerhs	lhs_debugr'   	not_boundidxr   
rhs_so_farrhs_snew_sizerhs_sizes              r   _bind_dims_to_sizerF   2   s   (J3JJI
9~1Q<#<<
j A%N#NNE(PQYPZZ^_d^ef  z)	Y!	JcJJ$?uLQVPWX
 	
 ,,,x(3H:T(K[\e[ffjknjop   r   c                     ddl m} t        | |      r,| j                  t	        | j
                        | j                  fS | t	        t        | j                   d            dfS )Nr   _Tensorr   T)	r   rI   r   _tensorllist_levels_has_devicerangendim)inprI   s     r   _tensor_levelsrQ   M   sL    #w{{E#++.??E%	1-.44r   c                 r   g }g }d}| j                         }|D ]9  }	 |j                  |      }|j                  |       |j                  ||          ; |t	        t        t        |                  k7  r | j                  | } |r | j                  | } | S # t        $ r |j                  d       d}Y w xY w)NFr   T)	r-   indexappend
ValueErrorlistrN   r<   permuteview)	vfrom_levels	to_levelsrX   rW   requires_viewr-   trA   s	            r   _match_levelsr^   V   s    DGM668D !	!##A&CNN3KKS	"	! $uS\*++AIIwAFFDMH  	!KKN M	!s   6BB65B6c                    ddl m} | j                  t        | j                        }}	 |j                  |      }d}t        |      D ](  }t        ||   t              s||xx   dz  cc<   |dz  }* | dz
  ||<   |j                  ||| j                        |fS # t        $ rE |s d} |j                  |j                  g|j                          }|j                  dd       Y w xY w)Nr   )Tensorr   )r   r`   rJ   rK   rL   rS   rU   expandr-   insertrN   r   r"   from_positionalrM   )	selfr   
expand_dimr`   ptensorlevelsrA   idx_batchedr*   s	            r   _positional_no_permuteri   m   s    llE$,,$7VGll3 K3Z fQi%1INI1K ,"F3K!!'643C3CDkQQ   '..;GLLN;as   B AC('C(c                 l    ddl m} t        | |      t        ||      k7  ryt        | |      r| |u S | |k(  S )Nr   r   Fr   )abr   s      r   seqrm      s:    !SZ3//!SAvAvr   c                       e Zd Zd Zd Zy)isinc                 .    | D ]  }t        ||      s y y)NTF)rm   )rd   itemr   s      r   __contains__zisin.__contains__   s"     	A4|	 r   c                 T    t        |       D ]  \  }}t        ||      s|c S  t        r   )r;   rm   rU   )rd   rq   r*   r   s       r   rS   z
isin.index   s/    dO 	DAq4|	 r   N)__name__
__module____qualname__rr   rS    r   r   ro   ro      s    r   ro   c                       e Zd Zy)rK   Nrt   ru   rv   rw   r   r   rK   rK          r   rK   c                       e Zd Zy)r#   Nry   rw   r   r   r#   r#      rz   r   r#   c                    ddl mmm ddlm} |t        j                  j                  u rD|\  }}t        |      r3t        |      r'|j                  dk(  r|j                  dk(  r	 |||      S t               }t        ||f      \  }	}
d |	D ]N  }t        |      s|j                  r|j                  |j                  D ]  }||vs|j                  |        P fd|t         v rt               t               }g }t#        |	      D ]  \  }}t        |      st%        |      \  }}}t        |      r*|j                  s|j'                  j(                        }||	|<   |D ]  }|vsj                  |        |j                  ||f        |D ]  \  }}t+        |	|   |      |	|<     |
|	      \  }} ||i |}fd}t-        ||      S fd}t/        |      5  t1        d	|         |
fd
|	D              \  }} ||i |}t-        ||      cd d d        S # 1 sw Y   y xY w)Nr   )rI   r`   
TensorLike)DelayedMulTensorr   c                     t        |       r8| j                  }(| j                  s|j                  j                        }|S | S )Ndevice)r   _batchtensorrM   tor   )r]   r+   rI   device_holding_tensors     r   unwrapz"__torch_function__.<locals>.unwrap   sC    a!A$0DD 5 < <D=Hr   r   c                 J    t        |       rj                  | d u      S | S r   )r   rc   )r]   r`   r}   r   result_levelss    r   wrapz __torch_function__.<locals>.wrap   s4    !Z(--}&;4&G  Hr   c                 H    t        |       rj                  | d u      S | S r   )r   from_batched)r]   r`   r}   r   s    r   r   z __torch_function__.<locals>.wrap   s+    !Z(**1.C4.OPPHr   zbatch_tensor for c              3   .   K   | ]  } |        y wr   rw   )r    fr   s     r   r!   z%__torch_function__.<locals>.<genexpr>   s     $B1VAY$Bs   )r   rI   r`   r}   delayed_mul_tensorr~   torch__mul__r   rO   rK   r   rM   r   dimsrT   	pointwiser;   rQ   r   r   r^   r	   r   print)rd   origclsargskwargsr~   lhsr>   all_dims	flat_args	unflattenr   r   
arg_levels	to_expandr*   rf   rg   _lresultr   r`   r}   rI   r   r   r   s                         @@@@@@r   __torch_function__r      sS   --4u||###SsG$3(AA#C--wH'v7Iy  'a!}}()%VV 'H$OOA&'	' yW
	i( 	.DAq!Z(%3A%6"q'*MM-9%jj0E0L0LjMG&	! 0A-%,,Q/0   !V-	. # 	NIAv(1v}MIaL	N +ft&v&	 f%%	
 H% 	*%dV,-$$B	$BBLD&4*6*FD&)	* 	* 	*s   :6H::Ic                    ddl m}m}m} | j                  t        | j                        }}t               }g }d}	| j                  }
|D ]  }t        |t              r*|j                  |       |j                  d |D               =t        ||      r-|j                  |       |j                  |j                         vt        |t              r?t        ||
d      }|j                  |       |j                  |j                  |             |j                  |       |j                  t        d |D                     d}	 t!        t#        t%        |                  }t%        |      }t'        |      D ]F  \  }}	 |j)                  |      }||   }||= ||= |j/                  |d	       |j/                  ||       H  |j0                  | }d	}t#        t%        |      dz
  d
d
      D ]!  }t        ||   t              s|dz  }| ||<   # |j3                  ||| j4                        }|	r. |j6                  g ||j                         t%        |      d   }|S # t*        $ r} |d| j,                   d|       |d }~ww xY w)Nr   )r   DimensionBindErrorr`   Fc              3   4   K   | ]  }|j                     y wr   r8   r    es     r   r!   zpositional.<locals>.<genexpr>  s     *1*r9   c              3   4   K   | ]  }|j                     y wr   r8   r   s     r   r!   zpositional.<locals>.<genexpr>  s     /QVV/r9   Tztensor of dimensions z does not contain dim r   )r   r   r   r`   rJ   rK   rL   rO   r   DimListextendrT   r-   r"   r   r   rV   rN   r<   r;   rS   rU   r   rb   rW   rc   rM   reshape)rd   r   r   r   r`   rf   rg   	flat_dimsrX   
needs_viewrO   r   rW   nflatr*   rA   r   pseenr   s                       r   
positionalr      sX   11llE$,,$7VGIDJ99D a!QKK***3QKK3!T5)AQKKQ(QKK/Q//0J  5V%&G	NE)$ 1	,,q/C
 CL3KCLaq! goow'GD3v;?B+ fQi%AIDF1I ##GVT5E5EFFHHc)n6F(GHM%  	$'		{2HL	s   =I	J%I>>Jc                 :    ddl m} | D ]  }t        ||      s y y )Nr   r   Tr   )inputr   r*   s      r   _contains_dimr   (  s!     ar   c                    t        |      s/| j                  t        j                  j                  d | g|      S |}|D cg c]  }|j
                   c}dg| j                  z  z   } | j                  | } | |   S c c}w )Nr   )r   r   r   r`   ra   r-   rO   )rd   sizesr   r   s       r   ra   ra   0  sw    &&u||':':D4.%.QQD!"QVV"bTDII%55E4;;D: #s   A<c                 L    t        |      |kD  r||   S |j                  | |      S r   )r<   get)nameoffsetr   r   defaults        r   _getargr   <  s)    
4y6F|::dG$$r   c                 6    t        |      |kD  r|||<   y ||| <   y r   )r<   )r   r   r   r   values        r   	_patchargr   B  s     
4y6Vtr   c           	      F    	 ddl mmm	 	 f	d}|S )Nr   )r   r`   r}   c                 ^  	  t        ||t              }|t        u srit        |      s]t         j                        5  t        d        j                    j                  g|i | j                        cd d d        S rt        d||d      nd} j                  t         j                        c}t        | j                  j                  |      }t        fd|D              }r&|s$t              D 	cg c]  \  }}	||vs|	 c}	}nt!        |      dk(  r|d   }t#        |      }t%        |||        fd}
t              5  t        d         |g|i |}t'        |
|      cd d d        S # 1 sw Y   xY wc c}	}w # 1 sw Y   y xY w)	Nzdim fallback batch_tensor for r   Fc              3   @   K   | ]  }j                  |        y wr   rS   )r    r   rg   s     r   r!   z$_wrap.<locals>.fn.<locals>.<genexpr>[  s     :FLLO:s   r   r   c                 Z    t        |       rj                  | j                        S | S r   )r   rc   rM   )r]   r`   r}   
new_levelsrd   s    r   r   z_wrap.<locals>.fn.<locals>.wraph  s-    !Z(--aT=M=MNNHr   zdim used batch_tensor for )r   _not_presentr   r   r   r   r   r   rM   rJ   rK   rL   r%   rO   r:   r;   r<   rV   r   r	   )rd   r   r   r   r   r]   r   dim_indicesr*   r   r   r+   rg   r   r   r`   r}   dim_name
dim_offsetkeepdim_offsetr   r
   r$   s   `           @@r   fnz_wrap.<locals>.fnN  s   h
D&,G,:jc6J		* 6tf=>****<T<V<d>N>N  HNGI~tVUCSX 	 LL%"5	6S$++00':F:T::'(1&(9R1Qk=Q!RJJ{q %K Dz(JfkB	
 J' 	%.tf56Q(((AD!$	% 	%9  S 	% 	%s$   >FFF &F#F#F,)r   r   r`   r}   )
r   r   r   r   r$   r
   r   r   r`   r}   s
   `````` @@@r   _wrapr   I  s     *)"% "%H Ir   c           	      x    ddl m} t        t        j                  |       }t        || t        |g|i |       y )Nr   rH   )r   rI   getattrr   r`   setattrr   )r   r   r   rI   r   s        r   _defr   u  s0    5<<&DGT57778r   c                        e Zd ZddZd Zd Zy)dim_trackerNc                 0    t               | _        g | _        y r   )rK   r   count)rd   s    r   __init__zdim_tracker.__init__  s    G	
r   c                     || j                   vr7| j                   j                  |       | j                  j                  d       y y r   )r   rT   r   rd   r   s     r   recordzdim_tracker.record  s7    DIIIIQJJa  r   c                 R    | j                   | j                  j                  |         S r   )r   r   rS   r   s     r   __getitem__zdim_tracker.__getitem__  s    zz$))//!,--r   )returnN)rt   ru   rv   r   r   r   rw   r   r   r   r     s    !
.r   r   c                 	  +, ddl m+m}m}m}m}m} t        ||       xr7 t        |t        t        f       xr t        ||      xr |j                  dk(   }|r1t        | +      r+j                  t        d | |f      S t        | |      S t        |t              s|g}nt        |      }d}d }	g }
t        |      D ]|  \  }}|du st        ||      r |j                  s|	d| d|	 } ||      |}	t        ||      r.||j                  rt        |      ndz  }|
j!                  |       p|s|dusx|dz  }~ | j                  }||kD  rt#        d| d| d	      |	0||z
  }||	   }|du rt$        g|z  ||	|	dz    n|j'                  |       t)        |
      D ]  }||   |||dz     d}d
}| j+                         }g }t-               ,+,fd} ||        g }t        |      D ]  \  }}|t$        ||<   |j!                  d       d}%||   }t        ||      r*||_        ,j/                  |       |j!                  |       nt        |t        t        f      re|rct        |d   |      rT|D ]  },j/                  |        t1        ||d|        |j3                  d |D               d}|j!                  |       n ||       |j!                  |       |dz  } |r | j4                  | } t)        |      D ]  }||   |||dz     t        | +      re| j6                  t        | j8                        }}t;        |      }|D cg c]  }t        |t<              rt?        |      n|! }}| j@                  }d}n| |}}|j                  t        |      z
  }d}g } g }!d }"i }#d
}$t        |      D ]  \  }}%t        |%|      r#,|%   dk(  rt$        ||<   | j!                  |%       5t        |%|      rFd}$|"t        |       }"tC        |%      \  }&}}'||#|<   |&||<   |D ]  }||!vs|!j!                  |        d}$| j!                  d        |"|!| |"|" |#jE                         D ]  \  }}tG        ||   ||!      ||<    |$rt        ||      }(n|}(d})|dkD  r| j3                  dg|z         t        t)        |             D ]#  \  }}*t        |*t<              s|)| d|z
  <   |)dz  })% |jI                  |(| |      S c c}w )Nr   )rI   r   r   r   r`   r}   r   .z\at most one ... or unbound dimension list can exist in indexing list but found 2 at offsets z and z	at least z/ indices were supplied but the tensor only has z dimensions.Fc                 d    t        |       sy | j                  D ]  }j                  |        y r   )r   r   r   )r]   r   rI   	dims_seens     r   add_dimszt__getitem__.<locals>.add_dims  s1    !W% 	 AQ	 r   Tzoffset c              3   4   K   | ]  }|j                     y wr   r8   )r    r   s     r   r!   zt__getitem__.<locals>.<genexpr>  s     !6Q!&&!6r9   r   )%r   rI   r   r   r   r`   r}   r   r:   rV   rO   r   _orig_getitemr;   r)   r<   rT   
IndexErrorno_slicebind_lenreversedr-   r   r   rF   r   rX   rJ   rL   iterr"   nextrM   rQ   itemsr^   rc   )-rd   r   r   r   r   r`   r}   	is_simpledims_indexedexpanding_objectdimlistsr*   smsgrO   expanding_ndimsobjr\   r-   
view_sizesr   	dim_packsrA   szr   ptensor_selfrg   input_itr   flat_inputs
has_deviceto_padr   index_levelstensor_insert_pointr   requires_getindexrP   rf   r   r   next_positionalr+   rI   r   s-                                              @@r   t__getitem__r     s   OO uc"" 	@55$-00	@ z*>uzzQ?  dG$--mTD%=QQ u-- eU#ULH%  18z!W-ajj+++,#U3C2DF  )-- a!ajjCFa7LOOA]q|AL  99Dd~%TUYTZZfg
 	
 #-$%#:>> E"%5%9: LL)h $ 8a!a%$LM99;DJI  TNIE" 3;E!Ha  Ml#B#s#  %!!"%C%/CJs1vs<S *A$$S)*"2sgaSM:!!!6#!66 $  #!!"%AL+, tyy*%i  $ 8a!a%$ $ #||T$,,-?f;LRSqAs);tH~BSS%%
$(%k""S%55
MLIK( $3c3IcNa$7%KN  %Z( $"*&)-&8#!/!4GVQ!IaL$KN +L( ''*+ !%  #!$$ &AM)*=>__& M	6&{1~v|LAM |[9OzaS6\*(=12 !1a$3M"q&!q O!
 !!&-DDe Ts   	$S9c                    t        |t              r't        j                  | ||      j	                  ||      S d }|t        ||d      \  }}g }| D ]@  }t        ||d      \  }}|||k7  r|j                  ||      }n|}|j                  |       B t        j                  |||      }	|	j	                  ||dz   f||f      S )NT)re   )outr   )r   r"   r   stackrS   ri   move_dimrT   )
tensorsnew_dimr   r   rS   ptensorsr]   ptpiprs
             r   r   r   B  s    #s{{7C-33CAAE
+CF
UH '34@BuR'BE 
Xu#	.B88UEAI&#77r   c                 4   ddl m}m} t        |t              st        d |D              r%t        |      rt        d      t        | |      S t        |      r%t        | |      s
J d        t        |       \  } | j                        }d}g }g }t        |      D ]^  \  }	}
|
j                  r+|j                  |
j                         ||
j                  z  }=|j                  d       |j                  |	       ` |rS||k  sJ d| d	| d
| d       ||z
  }| t        |      z   }|D ]"  }t        ||      }|||   _	        |||<   ||z  }$ n||k(  sJ d| d	| d
| d       t        fdt!        |t        | |            D              S )Nr   )rI   r   c              3   <   K   | ]  }t        |t                y wr   )r   r"   )r    r]   s     r   r!   zsplit.<locals>.<genexpr>Z  s      6 
1c6s   zKwhen dim is specified as a Dim object, split sizes must also be dimensions.r   zTensor does not have dimension r   z,result dimensions are larger than original: r5   z ()z)result dimensions do not match original: c              3   H   K   | ]  \  }}|j                  |        y wr   r   )r    r   r]   r   s      r   r!   zsplit.<locals>.<genexpr>  s'      Aq 	
Qs   ")r   rI   r   r   r"   anyrU   _orig_splitri   r-   r;   r)   rT   r<   minr:   zip)rd   split_size_or_sectionsr   rI   r   r-   total_bound_sizeunboundr   r*   r   remaining_size
chunk_sizeur   s     `            r   splitr  W  s   (#.# 6$:6 3 c3]  4!7SAA#s$(Q,KC5*QQ(*45	c99S>DGE01 1::LL &LLONN1 $	r9:J9K4PTvUWXnWoopq	r$ 00&#g,67
 	!AZ0B-/"1%*E!Hb N		! $	o67G6HTFRTUkTllmn	o$ .D%S0QR  r   )F)r   r   r   FT)r   N)r   )3r   functorch._Cr   _Cr   r   batch_tensorr   r	   r   r   r   	functoolsr
   setr   r   r   r%   rF   rQ   r^   ri   rm   ro   rV   rK   r:   r#   
empty_dictclassmethodr   r   r   ra   objectr   r   r   r   r   slicer   r`   r   r   r   r   r   r  r  rw   r   r   <module>r     s%    "  ( , **   ''(	&	765.R* 	D$ 		T5 	 
 5? L* L*^/d x% TX)X9 ;((. .oEf8$ ll  .r   