
    קg|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 j+        j,        Z- G d! d"          Z.d# Z/d(d$Z0e j+        j1        Z2d)d%Z1dS )*    Ndim   )op_properties)_enable_layers)tree_flattentree_map)reducec                 8    t          t          j        | d          S Nr   )r
   operatormul)xs    S/var/www/html/ai-engine/env/lib/python3.11/site-packages/functorch/dim/reference.pyprodr      s    (,1%%%    c                 d    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      sW    !S VVV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   :   K   | ]}t          |          V  d S N)r   ).0r   r   r   s     r   	<genexpr>z_dims.<locals>.<genexpr>/   s/      66q)Aq'**666666r   )r   r   r   intltupler   )r   r   r   
single_dimr   s    ``  r   _dimsr%   )   s    !c3Z   3yAw//1222OOOAOOOOO66666A666666r   c           
      4   ddl m} t          d t          |          D                       }t	          |          dk    re|d         \  }}t          d |D                       }| |z  dk    r*t          d |D                       } |d|  d|           | |z  }	|	|_        d S t	          |          dk    r*t          d	 |D                       } |d
| d|           t          d |D                       }
| |
k    r |d|  d|
 d| d|           d S )Nr   )DimensionMismatchErrorc              3   2   K   | ]\  }}|j         ||fV  d S r   )is_bound)r    irs      r   r!   z%_bind_dims_to_size.<locals>.<genexpr>5   s1      JJAqzJq!fJJJJJJr   r   c              3   2   K   | ]}|j         	|j        V  d S r   )r)   sizer    r+   s     r   r!   z%_bind_dims_to_size.<locals>.<genexpr>8   s+      <<Q<!&<<<<<<r   c              3   P   K   | ]!}|j         sd nt          |j                  V  "dS ?Nr)   strr-   r.   s     r   r!   z%_bind_dims_to_size.<locals>.<genexpr>:   s5      NNQQZ@##S[[NNNNNNr   z>inferred dimension does not evenly fit into larger dimension:  vs c              3   P   K   | ]!}|j         sd nt          |j                  V  "dS r0   r2   r.   s     r   r!   z%_bind_dims_to_size.<locals>.<genexpr>A   s5      JJ<ccQVJJJJJJr   z1cannot infer the size of two dimensions at once: z with sizes c              3   $   K   | ]}|j         V  d S r   r-   r.   s     r   r!   z%_bind_dims_to_size.<locals>.<genexpr>F   s$      ,,1,,,,,,r   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_sizerD   2   s   ((((((JJ3JJJJJI
9~~1Q<<#<<<<<
j A%%NN#NNNNNE((fQYff_dff   z)	Y!		JJcJJJJJ$$XXXQVXX
 
 	
 ,,,,,,,x((pHpp(pp\eppknp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   rG   r   _tensorllist_levels_has_devicerangendim)inprG   s     r   _tensor_levelsrO   M   sd    #w 5{E#+..??E%	1--..44r   c                    g }g }d}|                                  }|D ]o}	 |                    |          }|                    |           |                    ||                    I# t          $ r |                    d           d}Y lw xY w|t	          t          t          |                              k    r
 | j        | } |r
 | j        | } | S )NFr   T)	r-   indexappend
ValueErrorlistrL   r:   permuteview)	vfrom_levels	to_levelsrV   rU   requires_viewr-   tr?   s	            r   _match_levelsr\   V   s    DGM6688D ! !	!##A&&CNN3KKS	"""" 	! 	! 	!KKNNN MMM	! $uS\\**++++AIw AFDMHs   AA&&!B
	B
Fc                    ddl m} | j        t          | j                  }}	 |                    |          }nP# t          $ rC |s d} |j        |j        g|                                R  }|	                    dd           Y nw xY wd}t          |          D ]2}t          ||         t                    r||xx         dz  cc<   |dz  }3| dz
  ||<   |                    ||| j                  |fS )Nr   )Tensorr   )r   r^   rH   rI   rJ   rQ   rS   expandr-   insertrL   r   r"   from_positionalrK   )	selfr   
expand_dimr^   ptensorlevelsr?   idx_batchedr*   s	            r   _positional_no_permuterg   m   s+   lE$,$7$7VGll3    	 '.;GLLNN;;;a K3ZZ  fQi%% 	1IIINIII1K,"F3K!!'643CDDkQQs   9 A
BBc                     ddl m} t          | |          t          ||          k    rdS t          | |          r| |u S | |k    S )Nr   r   Fr   )abr   s      r   seqrk      s\    !SZ3////u!S AvAvr   c                       e Zd Zd Zd ZdS )isinc                 6    | D ]}t          ||          r dS dS )NTF)rk   )rb   itemr   s      r   __contains__zisin.__contains__   s2     	 	A4|| ttur   c                 b    t          |           D ]\  }}t          ||          r|c S t          r   )r9   rk   rS   )rb   ro   r*   r   s       r   rQ   z
isin.index   s?    dOO 	 	DAq4|| r   N)__name__
__module____qualname__rp   rQ    r   r   rm   rm      s2              r   rm   c                       e Zd ZdS )rI   Nrr   rs   rt   ru   r   r   rI   rI              Dr   rI   c                       e Zd ZdS )r#   Nrw   ru   r   r   r#   r#      rx   r   r#   c                    ddl mmm ddlm} |t          j        j        u rG|\  }}t          |          r2t          |          r"|j	        dk    r|j	        dk    r |||          S t                      }t          ||f          \  }	}
d |	D ]C}t          |          r1|j        r|j        |j        D ]}||vr|                    |           Dfd|t           v rt                      t                      }g }t#          |	          D ]\  }}t          |          rt%          |          \  }}}t          |          r$|j        s|                    j                  }||	|<   |D ]}|vr                    |           |                    ||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xY w Y   d S )Nr   )rG   r^   
TensorLike)DelayedMulTensorr   c                     t          |           r-| j        }"| j        s|                    j                  }|S | S )Ndevice)r   _batchtensorrK   tor   )r[   r+   rG   device_holding_tensors     r   unwrapz"__torch_function__.<locals>.unwrap   sJ    a!! 	A$00DD 5 <D==Hr   r~   c                 Z    t          |           r                    | d u          S | S r   )r   ra   )r[   r^   r{   r   result_levelss    r   wrapz __torch_function__.<locals>.wrap   sA    !Z(( --}&;4&G   Hr   c                 X    t          |           r                    | d u          S | S r   )r   from_batched)r[   r^   r{   r   s    r   r   z __torch_function__.<locals>.wrap   s7    !Z(( Q**1.C4.OPPPHr   zbatch_tensor for c              3   .   K   | ]} |          V  d S r   ru   )r    fr   s     r   r!   z%__torch_function__.<locals>.<genexpr>   s+      $B$B1VVAYY$B$B$B$B$B$Br   )r   rG   r^   r{   delayed_mul_tensorr|   torch__mul__r   rM   rI   r   rK   r   dimsrR   	pointwiser9   rO   r   r   r\   r	   r   print)rb   origclsargskwargsr|   lhsr<   all_dims	flat_args	unflattenr   r   
arg_levels	to_expandr*   rd   re   _lresultr   r^   r{   rG   r   r   r   s                         @@@@@@r   __torch_function__r      s   ----------444444u|###SsG$$	.3((	. AA##C---wwH'v77Iy  ' 'a!! 	'} 7()%V ' 'H$$OOA&&&      yWW
	i(( 	. 	.DAq!Z(( .%3A%6%6"q'**NMN .9%jj0E0LjMMG&	! 0 0A--%,,Q///  !V---" 	N 	NIAv(1v}MMIaLL y++ft&v&&	 	 	 	 	 	 	 	 f%%%	 	 	 	 	 	 	
 H%% 	* 	*,d,,---$9$B$B$B$B	$B$B$BBBLD&T4*6**FD&))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*s   AI&&I*-I*c                    ddl m}m}m} | j        t          | j                  }}t                      }g }d}	| j        }
|D ]4}t          |t                    r5|
                    |           |
                    d |D                        Mt          ||          r0|                    |           |                    |j                   t          |t                    rOt          ||
d          }|                    |           |                    |                    |                     |
                    |           |                    t          d |D                                  d}	6t!          t#          t%          |                              }t%          |          }t'          |          D ]\  }}	 |                    |          }n)# t*          $ r} |d| j         d|           |d }~ww xY w||         }||= ||= |                    |d	           |                    ||            |j        | }d	}t#          t%          |          dz
  d
d
          D ](}t          ||         t                    r|dz  }| ||<   )|                    ||| j                  }|	r6 |j        g ||                                t%          |          d          R  }|S )Nr   )r   DimensionBindErrorr^   Fc              3   $   K   | ]}|j         V  d S r   r7   r    es     r   r!   zpositional.<locals>.<genexpr>  s$      **1******r   c              3   $   K   | ]}|j         V  d S r   r7   r   s     r   r!   zpositional.<locals>.<genexpr>  s$      //QV//////r   Tztensor of dimensions z does not contain dim r   )r   r   r   r^   rH   rI   rJ   rM   r   DimListextendrR   r-   r"   r   r   rT   rL   r:   r9   rQ   rS   r   r`   rU   ra   rK   reshape)rb   r   r   r   r^   rd   re   	flat_dimsrV   
needs_viewrM   r   rU   nflatr*   r?   r   pseenr   s                       r   
positionalr      s&   1111111111lE$,$7$7VGIDJ9D  a!! 	QKK*********3 
	QKK3 	!T5))AQKKQ((((QKK//Q/////000JJ5V%%&&G	NNE)$$  1	,,q//CC 	 	 	$$L	LLLL 	 CL3KCLaq!gow'GD3v;;?B++  fQi%% 	AIDF1I##GVT5EFFF IHHc)nn6F6F(GHHHMs   G
H $G;;H c                 B    ddl m} | D ]}t          ||          r dS d S )Nr   r   Tr   )inputr   r*   s      r   _contains_dimr   (  sK      a 	44	 r   c                     t          |          s*|                     t          j        j        d | g|R           S |}d |D             dg| j        z  z   } | j        | } | |         S )Nc                     g | ]	}|j         
S ru   r7   r    r   s     r   
<listcomp>zexpand.<locals>.<listcomp>4  s    """QV"""r   r   )r   r   r   r^   r_   rM   )rb   sizesr   s      r   r_   r_   0  sv     R&&u|':D4.%..QQQD""T"""bTDI%55E4;D:r   c                 d    t          |          |k    r||         S |                    | |          S r   )r:   get)nameoffsetr   r   defaults        r   _getargr   <  s1    
4yy6F|::dG$$$r   c                 D    t          |          |k    r|||<   d S ||| <   d S r   )r:   )r   r   r   r   values        r   	_patchargr   B  s-    
4yy6Vtr   r   Tc           	      F    	 ddl mmm	 	 f	d}|S )Nr   )r   r^   r{   c                   	 	
 t          ||t                    }|t          u srxt          |          sht           j                  5  t          d                                  j        g|R i | j                  cd d d            S # 1 swxY w Y   rt          d||d          nd} j	        t           j                  c}
t          | j        j        |          }t          
fd|D                       	r|s	fdt          
          D             n
t!          	          dk    r	d         	t#          |          }t%          ||	            fd}t                    5  t          d	             |g|R i |}t'          ||          cd d d            S # 1 swxY w Y   d S )
Nzdim fallback batch_tensor for r   Fc              3   B   K   | ]}                     |          V  d S r   rQ   )r    r   re   s     r   r!   z$_wrap.<locals>.fn.<locals>.<genexpr>[  s-      ::FLLOO::::::r   c                 "    g | ]\  }}|v	|S ru   ru   )r    r*   r   dim_indicess      r   r   z%_wrap.<locals>.fn.<locals>.<listcomp>]  s'    RRR1Qk=Q=Q!=Q=Q=Qr   r   r   c                 `    t          |           r                    | j                  S | S r   )r   ra   rK   )r[   r^   r{   
new_levelsrb   s    r   r   z_wrap.<locals>.fn.<locals>.wraph  s6    !Z(( O--aT=MNNNHr   zdim used batch_tensor for )r   _not_presentr   r   r   r   r   r   rK   rH   rI   rJ   r%   rM   r8   r9   r:   rT   r   r	   )rb   r   r   r   r   r[   r   r   r+   r   re   r   r   r^   r{   dim_name
dim_offsetkeepdim_offsetr   r
   r$   s   `        @@@r   fnz_wrap.<locals>.fnN  s   h
D&,GG,:jc6J6J	**  =t==>>>**D*<T<<<V<<d>N                 HNXGI~tVUCCCSX 	 L%"5"5	6S$+0':FF::::T::::: 	 ' 	 RRRR	&(9(9RRRJJJ{q  %K Dzz(JfkBBB	 	 	 	 	 	 	 	
 J'' 	% 	%5t55666Q((((((AD!$$	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	%s$   <BBB.F<<G G )r   r   r^   r{   )
r   r   r   r   r$   r
   r   r   r^   r{   s
   `````` @@@r   _wrapr   I  st     *)))))))))"% "% "% "% "% "% "% "% "% "% "% "% "%H Ir   c           	          ddl m} t          t          j        |           }t          || t          |g|R i |           d S )Nr   rF   )r   rG   getattrr   r^   setattrr   )r   r   r   rG   r   s        r   _defr   u  sU    5<&&DGT577777788888r   c                   "    e Zd ZddZd Zd ZdS )dim_trackerreturnNc                 :    t                      | _        g | _        d S r   )rI   r   count)rb   s    r   __init__zdim_tracker.__init__  s    GG	


r   c                     || j         vr6| j                             |           | j                            d           d S d S r   )r   rR   r   rb   r   s     r   recordzdim_tracker.record  sI    DIIQJa      r   c                 L    | j         | j                            |                   S r   )r   r   rQ   r   s     r   __getitem__zdim_tracker.__getitem__  s    z$)//!,,--r   )r   N)rr   rs   rt   r   r   r   ru   r   r   r   r     sF           ! ! !
. . . . .r   r   c                 4  *+, ddl m*m}m}m}m}m} t          ||           o8t          |t          t          f           ot          ||          o
|j
        dk     }|r>t          | *          r*                    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          ||          r1||j        rt          |          ndz  }|
                    |           x|	|dur|dz  }| j
        }||k    rt#          d| d| d	          |	:||z
  }||	         }|du rt$          g|z  ||	|	dz   <   n|                    |           t)          |
          D ]}||         |||dz   <   d}d
}|                                 }g }t-                      +*+fd} ||            g }t          |          D ]2\  }}|"t$          ||<   |                    d           d}*||         }t          ||          r2||_        +                    |           |                    |           nt          |t          t          f          r}|r{t          |d         |          re|D ]}+                    |           t1          ||d|            |                    d |D                        d}|                    |           n  ||           |                    |           |dz  }4|r
 | j        | } t)          |          D ]}||         |||dz   <   t          | *          rB| j        t          | j                  }}t;          |          ,,fd|D             }| j        }d}n| |}}|j
        t          |          z
  }d}g }g }d } i }!d
}"t          |          D ]\  }}#t          |#|          r,+|#         dk    r t$          ||<   |                    |#           At          |#|          rOd}"| t          |          } t?          |#          \  }$}}%||!|<   |$||<   |D ]}&|&|vr|                    |&           d}"|                    d           | ||| | <   |!                                 D ]\  }}tC          ||         ||          ||<    |"rt          ||          }'n|}'d}(|dk    r|                    dg|z             t          t)          |                    D ]'\  }})t          |)tD                    r|(|d|z
  <   |(dz  }((|#                    |'||          S )Nr   )rG   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                 j    t          |           sd S | j        D ]}                    |           d S r   )r   r   r   )r[   r   rG   	dims_seens     r   add_dimszt__getitem__.<locals>.add_dims  sL    !W%% 	F 	  	 AQ	  	 r   Tzoffset c              3   $   K   | ]}|j         V  d S r   r7   r   s     r   r!   zt__getitem__.<locals>.<genexpr>  s$      !6!6Q!&!6!6!6!6!6!6r   c                 \    g | ](}t          |t                    rt                    n|)S ru   )r   r"   next)r    r   input_its     r   r   z t__getitem__.<locals>.<listcomp>  s2    SSSqAs););BtH~~~SSSr   r   )$r   rG   r   r   r   r^   r{   r   r8   rT   rM   r   _orig_getitemr9   r)   r:   rR   
IndexErrorno_slicebind_lenreversedr-   r   r   rD   r   rV   rH   rJ   iterrK   rO   itemsr\   r"   ra   )-rb   r   r   r   r   r^   r{   	is_simpledims_indexedexpanding_objectdimlistsr*   smsgrM   expanding_ndimsobjrZ   r-   
view_sizesr   	dim_packsr?   szr   ptensor_selfre   flat_inputs
has_deviceto_padr   index_levelstensor_insert_pointr   requires_getindexrN   rd   r   r   r   next_positionalr+   rG   r   r   s-                                             @@@r   t__getitem__r     sP   OOOOOOOOOOOOOOOO uc""" 	@55$-000	@ z**>uzQ?   .dG$$ 	.--mTD%=QQQ u--- eU## ULH%    188z!W--8aj8+F+,F F3CF F  )(--- a!! 	aj7CFFFa7LOOA]q||AL9DdgggUYggg
 
 	
 #-$%#::>> E"%5%99:: LL)))h $ $ 8a!a%iLM99;;DJI            HTNNNIE""  3;E!Ha    MMl#B#s## &  %%%!!"%%%%C%// 	&C 	&Js1vs<S<S 	& * *A$$S))))"2sMaMM:::!!!6!6#!6!6!6666 $  ####!!"%%%ALL &ty*%i   $ $ 8a!a%i $   
#|T$,-?-?f;;SSSSFSSS%
$(%k"S%5%55
MLIK(( $ $3c3 	$IcNa$7$7%KN  %%%%Z(( 	$ $"*&)-&8&8#!/!4!4GVQ!IaL$KN + +L(( ''***+ !%  ####&AM)*==>__&& M M	6&{1~v|LLA |[99OzzaS6\***(=1122 ! !1a 	!$3M"q&!q O!!&-DDDr   c                    t          |t                    r*t          j        | ||                              ||          S d }|t          ||d          \  }}g }| D ]M}t          ||d          \  }}|||k    r|                    ||          }n|}|                    |           Nt          j        |||          }	|	                    ||dz   f||f          S )NT)rc   )outr   )r   r"   r   stackrQ   rg   move_dimrR   )
tensorsnew_dimr   r  rQ   ptensorsr[   ptpiprs
             r   r  r  B  s    #s B{7C--33CAAAE
+CFFF
UH  '34@@@BuR''BBE	Xu#	.	.	.B88UEAI&#777r   c                    ddl m}m} t          |t                    st          d |D                       r1t          |          rt          d          t          | |          S t          |          r0t          | |          sJ d             t          |           \  } | 	                              }d}g }g }t          |          D ][\  }	}
|
j        r%|                    |
j	                   ||
j	        z  }1|                    d           |                    |	           \|r`||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   )rG   r   c              3   @   K   | ]}t          |t                    V  d S r   )r   r"   )r    r[   s     r   r!   zsplit.<locals>.<genexpr>Z  s=       6 6 
1c6 6 6 6 6 6r   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: r4   z ()z)result dimensions do not match original: c              3   J   K   | ]\  }}|                     |          V  d S r   r   )r    r   r[   r   s      r   r!   zsplit.<locals>.<genexpr>  sG        Aq 	
Q     r   )r   rG   r   r   r"   anyrS   _orig_splitrg   r-   r9   r)   rR   r:   minr8   zip)rb   split_size_or_sectionsr   rG   r   r-   total_bound_sizeunboundr   r*   r   remaining_size
chunk_sizeur   s     `            r   splitr  W  s   (#.. B# 6 6$:6 6 6 3 3 B c3 	]   4!7SAAAA#s 6$((QQ*QC*Q*QQQQ*455	c99S>>DGE011  1: 	LL   &LLOOONN1 o$$$q:JqqPTqqXnqqq %$$ 00&#g,,67
 	! 	!AZ00B-/"1%*E!Hb NN		! $$$n7GnnTnnUknnn %$$    .D%S0Q0Q0QR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%   rD   rO   r\   rg   rk   rm   rT   rI   r8   r#   
empty_dictclassmethodr   r   r   r_   objectr   r   r   r   r   slicer   r^   r   r   r   r   r  r  r  ru   r   r   <module>r"     s    " " " " " "       ( ( ( ( ( ( , , , , , , , , *        C'((	& & &	 	 	7 7 7  65 5 5  .R R R R*         	 	 	 	 	D$ 	 	 		 	 	 	 	T5 	 	 	 
 5? L* L* L* L*^/ / /d     vxx% % %   TX) ) ) )X9 9 9 5;;(. . . . . . . .oE oE oEf8 8 8 8$ l . . . . . .r   