o
    fi                     @   s  U d dl Z d dlmZ d dlmZmZmZ eeef Z	d dl
Z
dee dee fddZdee dee dee fd	d
Zdee dedee fddZdee dee fddZdee fddZdee fddZdee dee fddZdee dee fddZdee dee defddZdee dedee fd d!Zdee fd"dZdee dee fd#d$Zd%d&dee dee d'efd(d)Zdee d*eee  d+ed,efd-d.Zdee d/ed+efd0d1Zd2ed3efd4d5Zd6ed7ed8ed9ed:ed;ed<efd=d>Zd6ed7ed8ed:ed;ed<efd?d@ZdAee dBedCedDedEedFedGedHedIedJedKedLedMedNefdOdPZdAee dQee d:ee dRee d;ee d<efdSdTZ dAee dQee d:ee dRee d;ee d<efdUdVZ!dAee dWeee  dXeee  fdYdZZ"dee d[ee fd\d]Z#dee d^ee fd_d`Z$dee daee fdbdcZ%ddee d/efdedfZ&ddee fdgdhZ'ddee d/efdidjZ(ddee dkee fdldmZ)dee d/ednee fdodpZ*	q	%	%dbdree dsee dteduedvef
dwdxZ+dydz Z,dee d/ed{ee d|ee d}ef
d~dZ-deee  fddZ.d/edeee  fddZ/d^ee fddZ0dee dee dednefddZ1deee  d/efddZ2deee  d/efddZ3dee d/ednefddZ4dee dee fddZ5dee fddZ6dee dedefddZ7dAee dree deee  fddZ8dee dee d[ee dedef
ddZ9dee defddZ:dAee dee deee  d:ee dRee d;ee defddZ;dee dee deee  d:ee dRee d;ee defddZ<dAee dree deee  d:ee dRee d;ee defddZ=dAee dree deee  d:ee dRee d;ee defddZ>dee dAee dree deee  fddZ?						dcdAee dree deee  d:eee  dReee  deee  ded;eee  dee fddZ@dAee dree deee  d:ee dRee d;ee dedee dedee fddZAdAee dree deee  d:ee dRee d;ee dedee dedededededee fddĄZBdAee dreee  deee  deee  deee  dedededefdd˄ZCdAee dree deee  d:ee dRee d;ee defdd̈́ZDddd/ededefdd҄ZEdAefddԄZFddee fddքZGd|e	dedededef
ddۄZHd{e	d|e	dedededefdd݄ZId{e	d|e	d}e	dedededefdd߄ZJdAee dkee fddZKdee dee dee dee fddZLdAee dedefddZMdAee fddZNdAee fddZOdee d/edefddZP	%dedee d/ee dedee fddZQdee d[ee dee fddZRdee dee fddZSdfdee ded/edeTee ee f fddZUdee dee dreee  dedeTee ee f f
ddZVdAee dee deTee ee ee f fdd ZWdAee dreee  deee  deee  deee  dedeTee ee ee f fddZXdAee dreee  deee  deee  deee  deTee ee ee ee f fddZY				dgdee dee dreee  dedededee fd	d
ZZ	 e
j[j\Z]i a^e_e`e]f ead< i Zbe_e`eTe]e]f f ead< i Zce_ee]f ead< defddZdde`defddZede`dedefddZfeede eede eede eede eedeF eedeF eede eede eed eH eed!eI eed"eJ eed#e' eed$e( eed%e) eed&e& eed'e- eed(e4 eed)e* eed*e eed+e eed,e eed-e eed.e+ eed/e# eed0e$ eed1e% eed2e5 eed3e8 eed4e  eed5e! eed6e6 eed7e7 eed8e= eed9e> eed:eC eed;eD eed<e? eed=eA eed>eB eed?e@ eed@eM eedAe2 eedBe3 eedCeK eedDeL eedEe eedFe eedGe eedHe eedIe eedJe eedKeF eedLeF eedMe9 eedNe" eedOe eedPe eedQe eedRe eedSeQ eedTeR eedUeS eedVeU eedWeV eedXeW eedYeX eedZeX eed[eX eed\eY eed]eZ eed^e eed_e eed`e efdaeNeO dS (h      N)Callable)AnyOptionalUnionabc                 C   s   t | }t |}t||}g }t|D ]L}|d | }|d | }|d | }	|dkr/| | nd}
|	dkr9||	 nd}|
|krT|
dkrT|dkrTtd|
 d| d| ||
dkr\|n|
 q|S )N   r   zThe size of tensor a z" must match the size of tensor b (z) at non-singleton dimension )lenmaxrangeAssertionErrorappend)r   r   dimsAdimsBndimexpandedSizesioffsetdimAdimBsizeAsizeB r   d/var/www/addictedbytheproject.nl/epg/venv/lib/python3.10/site-packages/torch/jit/_shape_functions.py	broadcast   s    
r   cc                 C   s   t t | ||S Nr   r   r   r   r   r   r   broadcast_three4      r   c                 C   s
   t | |S r   r   r   r   r   r   broadcast_one_three8      
r!   selfoutc                 C   s   t |dkrtdt | t | dks$t | dks$tdt |  tdt | D ]}| | dkr;td| d	q+g }tdt | d D ]	}|| |  qG|D ]}|| qS|S )
N   z'Expected out to have length 2, but got       z-Expected self to have length 3 or 4, but got r   r   zExpected self[z] to be non-zero, but got 0)r	   r   r   r   )r#   r$   r   shapeelemr   r   r   adaptive_avg_pool2d<   s    r*   c                 C   s   g }| D ]}| | q|S r   r   )r#   r$   r)   r   r   r   _copyO   s   r,   c                 C   s   t | S r   r,   r#   r   r   r   unaryV      r/   c                 C   s   t | }t |}||krtd| d| dt|D ]'}|| | }| | }|dkr/|| nd}||krB|dkrBtd|||qt| S )NzThe dims of tensor b (z6) must be less than or equal to the dims of tensor a (z) r   r   zZThe size of tensor a {} must match the size of tensor b ({}) at non-singleton dimension {})r	   r   r   formatr,   )r   r   r   r   r   r   r   r   r   r   r   broadcast_inplaceZ   s"   
r2   sizesc           
      C   s   t |t | k rtdt | dt |  dt |}t | }|dkr't|S g }t|D ]H}|d | }|d | }|dkrC| | nd}|| }	|	dkr[|dk rYtd| d|}	||	krp|dkrntd	| d
|	 d|	}|| q-|S )NzExpected len(sizes) (z) >= len(self) ()r   r   Expected dim (z) >= 0 when targetSize is -1zExpected size (z ) == 1 when size != targetSize ()r	   r   r,   r   r   )
r#   r3   r   
tensor_dimr$   r   r   dimsize
targetSizer   r   r   expandn   s4   r;   inp0c                 C   
   t | |S r   )r;   )r#   r3   r<   r   r   r   expand_one_unused   r"   r>   r(   numelreturnc                 C   s   d}d }t t| D ]#}| | dkr|d urtd|}q
| | dkr*|| | 9 }q
td||ksD|d ur@|dkr@|| dksDtdt| }|d urR|| ||< |S )Nr   r5   z"only one dimension can be inferredr   zinvalid shape dimensionszinvalid shape)r   r	   r   r,   )r(   r?   newsize	infer_dimr8   r$   r   r   r   infer_size_impl   s"   rC   c                 C   s   d}| D ]}||9 }q|S Nr   r   )r3   r?   r)   r   r   r   r?         
c                 C   s   t |t| S r   )rC   r?   )r#   r3   r   r   r   view   s   rF   F)implicitrG   c                C   r=   r   )rF   )r#   r3   rG   r   r   r   view_one_unused   r"   rH   opt_dimskeep_dimdtc           	      C   s   g }|d u st |dkrttt | }n|}tt | D ]%}d}|D ]}|t|t | kr0d}q#|r;|r:|d q|| |  q|S )Nr   FTr   )r	   listr   maybe_wrap_dimr   )	r#   rI   rJ   rK   r$   dimsidxis_mean_dim
reduce_dimr   r   r   sum_mean_dim   s    
rR   r8   c                 C   s   t | |g|d }||fS r   )rR   )r#   r8   rJ   r$   r   r   r   max_dim   s   rS   xyc                 C   s   | | S r   r   )rT   rU   r   r   r   div_rtn   r0   rV   	inputSize
kernelSizepad_lpad_rstridedilation	ceil_modec                 C   sZ   t | | | ||d   d |r|d nd |d }|r+|d | | | kr+|d }|S Nr   r   )rV   )rW   rX   rY   rZ   r[   r\   r]   
outputSizer   r   r   pooling_output_shape_pad_lr   s*   

	r`   c                 C   s$   |dkrt dt| ||||||S )Nr   zstride should not be zero)r   r`   )rW   rX   rY   r[   r\   r]   r   r   r   pooling_output_shape   s
   ra   inputkHkWdHdWpadHpadW	dilationH	dilationWnInputPlaneinputHeight
inputWidthoutputHeightoutputWidthc              
   C   sB  t | }|dkr|dkstd| d| d|dkr|dks*td| d| d|dkr2|dks=td| d| d| d	 dkoH| d
 dk}|dkrU| d dkrU|sk|dkra|ra| d dksktd| d|  |d
 |krw|d
 |kstd|d
  d| d|d
  d| d	|d	kr|d	kstd| d| dd S )Nr   zExpected kW (z) > 0 and kH (z) > 0zExpected dW (z) > 0 and dH (zExpected dilationH (z) > 0 and dilationW (r   r%   r&   r'   zInvalid input dimensions: ndim=z, input=zExpected kW//2 (z) >= padW (z) and kH//2 (z) >= padH (r4   zExpected outputWidth (z) >= 1 and outputHeight (z) >= 1r	   r   )rb   rc   rd   re   rf   rg   rh   ri   rj   rk   rl   rm   rn   ro   r   
valid_dimsr   r   r   pool2d_shape_check   s>   rr   kernel_sizepaddingc                 C   s  t |dkst |dkstd|d }t |dkr|n|d }t |dks6t |dks6t |dks6tdt |dkr>|n|d }t |dkrK|}	nt |dkrT|}	n|d }	t |dksht |dkshtd|d }
t |dkrt|
n|d }t |dkst |dkstd|d }t |dkr|n|d }t | dkst | d	kstd
t |  t | d	kr| d nd}| d }| d }| d }t|||
|||}t||||	||}t| ||||	|
|||||||| t | dkr|||gS ||||gS )Nr   r%   zKmax_pool2d: kernel_size must either be a single int, or a tuple of two intsr   zOmax_pool2d: stride must either be omitted, a single int, or a tuple of two intszGmax_pool2d: padding must either be a single int, or a tuple of two intszHmax_pool2d: dilation must be either a single int, or a tuple of two intsr&   r'   z&Expected input length 3 or 4, but got r5   )r	   r   ra   rr   )rb   rs   r[   rt   r\   r]   rc   rd   re   rf   rg   rh   ri   rj   nbatchrk   rl   rm   rn   ro   r   r   r   
max_pool2d/  sn   $
ry   c                 C   s   t | |||||}||fS r   )ry   )rb   rs   r[   rt   r\   r]   r$   r   r   r   max_pool2d_with_indicesz  s   rz   output_sizescale_factorsc                 C   s   g }| | d  | | d  |d u r|d u rtd|d urE|d ur(tdt|dkr7tdt| | |d  | |d  |d urz|d urQtdt|dkr`tdt| | t| d |d   | t| d |d   |S )	Nr   r   z5Either output_size or scale_factors must be presentedz9Must specify exactly one of output_size and scale_factorsr%   z/Expected output_size to have length 2, but got z1Expected scale_factors to have length 2, but got r&   )r   r   r	   int)rb   r{   r|   r$   r   r   r   upsample_nearest2d  s8   r~   mat2c                 C   s|   t | dkrtdt |  dt |dkr tdt | d| d |d kr6td| d  d|d  | d |d gS )	Nr%   zself must be a matrix (got z dimensions)zmat2 must be a matrix (got r   r   z.Matrix dimensions don't match for mm: self[1]=
, mat2[0]=rp   r#   r   r   r   r   mm  s   r   tensorc                 C   sh   t | dkrt |dkstdt |  dt | | d |d kr0td| d  d|d  g }|S )Nr   z+Expected 1D tensors for dot, got len(self)=z, len(tensor)=r   z(Dot product dimension mismatch: self[0]=z, tensor[0]=rp   )r#   r   r$   r   r   r   dot  s   r   vecc                 C   sj   t | dkrt |dkstdt |  dt | | d |d kr0td| d  d|d  | d gS )Nr%   r   z0Expected 2D matrix and 1D vector, got len(self)=z, len(vec)=r   z*Matrix-vector dimension mismatch: self[1]=z	, vec[0]=rp   )r#   r   r   r   r   mv  s   
r   lic                 C   s*   t |t| d }t| }||d |S rD   )rM   r	   r,   insert)r   r8   r$   r   r   r   	unsqueeze  s   r   c                 C   s4   g }t t| D ]}| | dkr|| |  q|S rD   )r   r	   r   )r   r$   r   r   r   r   squeeze_nodim  s   r   c                 C   sZ   g }t |t| }tt| D ]}||kr#| | dkr"|| |  q|| |  q|S rD   )rM   r	   r   r   )r   r8   r$   wrapped_dimr   r   r   r   squeeze  s   r   rN   c                 C   s   t |dkr| S t|}tt |D ]}t|| t | ||< qg }tt | D ]}| | dkr<||vr;|| |  q(|| |  q(|S Nr   r   )r	   r,   r   rM   r   )r   rN   wrapped_dimsr   resultr   r   r   squeeze_dims  s   r   indexc                 C   s   t |t| }t|}t|dkrtdt| |dks1|t| k s1td| dt|  dg }tt| D ]}||krE|| q9|| |  q9|S )Nr   z"Expected len(index) <= 1, but got r   r6   z) == 0 or dim < len(self) (r4   )rM   r	   multiply_integersr   r   r   )r#   r8   r   r?   result_sizer   r   r   r   index_select  s   r   r5   weightindicespadding_idxscale_grad_by_freqsparsec                 C   sR   t | dkrtdt |  dt |dkrt| d|S t|}|| d  |S )Nr%   z"Expected weight to be 2D, but got Dr   r   )r	   r   r   r,   r   )r   r   r   r   r   r9   r   r   r   	embedding  s   r   c                   C   s   dS )Nl    r   r   r   r   r   max_int#  s   r   startendstepc           
      C   s   t | }|dkrtdt||}|d ur|nd}|d ur|nt }|dkr-td| |t kr4d}|dk r>|| | 7 }|dk rH|| | 7 }|dk rOd}n
|| | krY| | }||k r`|}n
|| | krj| | }|| }t| }	|| d | |	|< |	S )Nr   z#Cannot slice a 0-dimensional tensorzExpected step > 0, but got r   )r	   r   rM   r   r,   )
r#   r8   r   r   r   r   	start_valend_val	slice_lenr$   r   r   r   slice'  s4   

r   tensorsc                 C   s"   | D ]}t |dkrtdqd S )Nr   z+Cannot concatenate tensor with 0 dimensionsrp   )r   r   r   r   r   check_cat_no_zero_dimF  s
   r   tensor_sizesc                 C   sL   d }|D ]}t |dkr|d dks|d u rt| t |}q|d u r$| }|S r^   )r	   rM   )r8   r   out_dimr9   r   r   r   legacy_cat_wrap_dimL  s   r   c                 C   s   t | dkot| dkS r   r?   r	   )r   r   r   r   should_skipW  s   r   firstsecond	dimensionc              
   C   s   t | }t |}||krtd| d| td|D ]"}||kr=| | || kr=td| d| |  d||  d| qd S )Nz1Tensors must have same number of dimensions, got z and r   z0Sizes of tensors must match except in dimension , got z at dimension )r	   r   r   )r   r   r   r   
first_dimssecond_dimsr8   r   r   r   check_cat_shape_except_dim[  s,   r   c                 C   s   t |  t|| }t| dkrtdd }| D ]}t|s|}q|d u r'dgS d}tt| D ]}| | }t|sFt|||| |||  }q/t|}|||< |S )Nr   z(Cannot concatenate empty list of tensors)r   r   r	   r   r   r   r   r,   )r   r8   not_skipped_tensorr   cat_dim_sizer   r   r   r   r   catn  s*   
r   c                 C   s,   g }| D ]}t ||}|| qt||S r   )r   r   r   )r   r8   unsqueezed_tensorsr   
unsqueezedr   r   r   stack  s
   

r   c                 C   s   t | }|dkrtdt||}| | }|| k s||kr+td| d| d| |dk r3||7 }g }t|D ]}||krF|| |  q9|S )Nr   z)Cannot select from a 0-dimensional tensorzIndex z  is out of bounds for dimension z with size )r	   r   rM   r   r   )r#   r8   r   r   r9   r$   r   r   r   r   select  s"   
r   tensor1tensor2c                 C   s6  t | }t |}|dkr|dkrt| |S |dkr"|dkr"t| |S |dkr5|dkr5ttt| d|dS |dkrB|dkrBt| |S |dkr|dkr|dkrR| d nd}g }t|d D ]	}|| |  q\|d }g }t|d D ]	}|||  qrt||}	|	}
|dkr|
| |dkr|
| |
S t	d)Nr   r%   r   rw   r5   z/both arguments to matmul need to be at least 1D)
r	   r   r   r   r   r   r   r   r   r   )r   r   dim_tensor1dim_tensor2nbatch_tensor1r   pbatch_tensor2expand_batch_portionoutput_shaper   r   r   matmul  s6   





r   c                 C   sX   t | dkrtdt |  t | }|dkrg }|S |dkr$| d gS | d | d gS )Nr%   z1Expected tensor to have <= 2 dimensions, but got r   r   rp   )r#   self_lenr$   r   r   r   t  s   
r   dim0dim1c                 C   s   t | }t||}t||}||krt| S g }t|D ]!}||kr*|| |  q||kr6|| |  q|| |  q|S r   )r	   rM   r,   r   r   )r#   r   r   ndimsr$   r   r   r   r   	transpose  s   

r   biasc                 C   s<   t | t|}|d urt|||krtd| d| |S )NzBias shape z& is not broadcastable to output shape )r   r   r   r   )rb   r   r   r$   r   r   r   linear  s   r   mat1betaalphac                 C   s   t | t||S r   )r   r   )r#   r   r   r   r   r   r   r   addmm  r    r   arrayc                 C   s   d}| D ]}|dk rd}q|S )NFr   Tr   )r   non_negativevalr   r   r   check_non_negative  s   r   weight_sizesgroupsc           
      C   s  t | }t |}t|rtd| t|rtd| ||kr-td| d| d|d |k r@td|d  d| d|d | dkrUtd|d  d	| d| d
 |d
 | krptd| d
  d|d
 |  d|d urt |d
kr|d |d kstd|d  d| td|D ]?}	| |	 d||	d    ||	d  ||	 d
  d
 k rtd| |	 d||	d     d||	d  ||	 d
  d
  d|	 qd S )Nz"Padding must be non-negative, got z!Stride must be non-negative, got zExpected weight_dim (z) == k (r4   r   zExpected weight_sizes[0] (z) >= groups (z) to be divisible by groups (r   zExpected input[1] (z) == weight_sizes[1] * groups (zFExpected bias to be None or have shape [1] with value weight_sizes[0]=r   r%   zCalculated padded input size (z)) is smaller than effective kernel size (z) at dimension )r	   r   r   r   )
rb   r   r   r[   rt   r\   r   k
weight_dimr   r   r   r   check_shape_forward  sZ   	
$r   
input_sizeweight_sizec                 C   s   t | |||||| t|dk}t| }g }	d}
d}|	| |
  |	||  td|D ]/}|r7||d  nd}||| d  d }|	| | d||d    | ||d   d  q-|	S )Nr   r%   r   )r   r	   r   r   )r   r   r   r[   rt   r\   r   has_dilationr8   r{   input_batch_size_dimweight_output_channels_dimd	dilation_kernelr   r   r   conv_output_size8  s"   	*r   c                 C   T   t |dkrtdt | dt | dkr tdt |  dt| ||||||S )Nr&   z#Expected 3D weight for conv1d, got r   z"Expected 3D input for conv1d, got r	   r   r   rb   r   r   r[   rt   r\   r   r   r   r   conv1dV  
   	r   c                 C   r   )Nr'   z#Expected 4D weight for conv2d, got r   z"Expected 4D input for conv2d, got r   r   r   r   r   conv2df  r   r   grad_outputbiasesc                 C   s   t |t || d gfS rD   r-   )r   rb   r   r   r   r   r   conv_backwardsv  s   r   r   output_paddingc                 C   s   |d u rddg}|d u rddg}|d u rddg}|d u r ddg}t |dk}t | }	g }
d}d}|
| |  |
|| |  td|	D ]5}|rO||d  nd}||| d  }|
| | d ||d   d||d    | ||d   d  qE|
S )Nr   r   r%   r	   r   r   )rb   r   r   r[   rt   r   r   r\   r   r8   r{   r   r   r   r   r   r   r   r   conv_transpose2d_input  s<   

r   
transposedc	                 C   s:  t |dk}	t |dk}
t | }g }d}|rdnd}|| |  |r-||| |  n|||  td|D ]a}|	rC||d  nd}|
rM||d  nd}|rw||| d  }|| | d ||d   d||d    | | d  q9||| d  d }|| | d||d    | ||d   d  q9|S )Nr   r   r%   r   )rb   r   r   r[   rt   r\   r   r   r   r   has_output_paddingr8   r{   r   r   r   r   output_padding_r   r   r   r   conv_forwards  s>   *r   	benchmarkdeterministiccudnn_enabled
allow_tf32c              
   C   s   t | ||||||||	S r   )r   )rb   r   r   r[   rt   r\   r   r   r   r   r   r   r   r   r   r   _conv_forwards  s   r   running_meanrunning_vartrainingmomentumepsc	                 C   s   g }	| D ]}
|	 |
 q|	S r   r+   )rb   r   r   r   r   r   r   r   r   r$   r)   r   r   r   
batch_norm  s   r   c                 C   r   )N   z#Expected 5D weight for conv3d, got r   z"Expected 5D input for conv3d, got r   r   r   r   r   conv3d  r   r   Tdim_post_exprwrap_scalarc                 C   sf   |dkr|s
t dd}| }|d }| |k s| |kr)t d|  d| d| d| dk r1| |7 } | S )Nr   z7Expected wrap_scalar to be True when dim_post_expr <= 0r   z
Dimension z( out of range (expected to be in range [z, z]))r   )r8   r   r   minr
   r   r   r   rM     s   rM   c                 C   s   g }|S r   r   )rb   r$   r   r   r   zero_dim_tensor!  s   r  c                 C   s   d}| D ]}|| }q|S rD   r   )r   r$   r)   r   r   r   r   &  rE   r   inp1inp2inp3c                 C   s(   | dk rt d|  dtt| gS )Nr   Expected end () >= 0r   r}   mathceil)r   r<   r  r  r  r   r   r   
arange_end-  s   r  c                 C   sJ   |dk rt d| d|| k rt d| d|  dtt||  gS )Nr   r  r  ) >= start (r4   r  )r   r   r<   r  r  r  r   r   r   arange_start3  s
   r  c                 C   sn   |dkrt d|dk r| |k rt d|  d| dn|| k r+t d| d|  dtt||  | gS )	Nr   zstep must not be zerozExpected start (z
) >= end (z) when step < 0r  r  z) when step > 0r  )r   r   r   r<   r  r  r  r   r   r   arange_start_step=  s   r  c                 C   s   t | t |krtdt |  dt | dt |}g }g }t|D ]}t|| |}|| || |  q#td|D ]}t|D ]}|| || krXtd||  dqDq>|S )NExpected len(input) (z) == len(dims) (r4   r   zRepeated dimension z in permute dimensions)r	   r   r   rM   r   )rb   rN   r   	seen_dimsnewSizesr   r8   jr   r   r   permuteO  s(   
r  sourcedestinationc                 C   s:  t | }|dkr
| S g }g }tt |D ]}|t|| | |t|| | qdd t|D }dd t|D }dd t|D }	tt |D ]}|| ||| < d||| < d|	|| < qLg }
g }|D ]}|dkrt|
| qi|	D ]}|dkr|| qw|t | }t|D ]
}|
| ||| < qt| |S )Nr   c                 S   s   g | ]}d qS r5   r   .0r   r   r   r   
<listcomp>m      zmovedim.<locals>.<listcomp>c                 S      g | ]}|qS r   r   r  r   r   r   r  n  r  c                 S   r  r   r   r  r   r   r   r  o  r  r5   )r	   r   r   rM   r  )r#   r  r  self_dimnormalized_srcnormalized_dstr   ordersrc_dimsdst_dimssource_dimsdestination_dimselerest_dimr   r   r   movedimd  s:   


r&  	start_dimend_dimc                 C   s   t |t| }t |t| }||krtd| d| dt| dkr&dgS ||kr8g }| D ]}|| q.|S d}t||d D ]}|| | 9 }qAg }t|D ]	}|| |  qP|| t|d t| D ]	}|| |  qh|S )NzExpected start_dim (z) <= end_dim (r4   r   r   )rM   r	   r   r   r   )rb   r'  r(  r$   r)   slice_numelr   r(   r   r   r   flatten  s*   
r*  c                 C   s   dt | gS Nr   r	   rb   r   r   r   nonzero_lower_bound  s   r.  c                 C   s   t | t| gS r   r   r-  r   r   r   nonzero_upper_bound  r    r/  keepdimc                 C   sJ   t |t| }g }t| D ]\}}||kr|r|d q|| q|S rD   )rM   r	   	enumerater   )r#   r8   r0  r$   r   r  r   r   r   _reduce_along_dim  s   
r2  c                 C   s   |d u rg S t | ||S r   )r2  )r#   r8   r0  r   r   r   argmax  s   r3  c                 C   s   t | dkrtdt |  dt |dkr tdt | d| d |d kr6td| d  d|d  | d |d krLtd	| d  d
|d  | d | d |d gS )Nr&   z"bmm only supports 3D tensors, got r   r   z%mismatching batch dimension: self[0]=r   r%   r   z+mismatching contracting dimension: self[2]=z
, mat2[1]=rp   r   r   r   r   bmm  s   r4  c                 C   s
   t | gS r   r,  r.   r   r   r   _shape_as_tensor  r"   r5  r   c                 C   sZ   t | dkrg }||fS || | kr!td| d| d| |  t| }|||< ||fS )Nr   zk (z) is too big for dimension z	 of size )r	   r   r,   )r#   r   r8   r   r   r   r   topk  s   r6  target	reductionc           
      C   s   t | }t |}d|  k rdksn td| |dkr%td| |dko,|dk}|sE| d |d ksEtd| d  d|d  | d }g }|d uret |dkr[|d |ksetd	| d
| |dkrv|dkrv| d g}	|	|fS |}	|	|fS )Nr   r%   z-Expected 0 < self_dim <= 2, but got self_dim=r   z"Expected target_dim <= 1, but got zBatch size mismatch: self[0]=z, target[0]=r5   z:Expected weight to be None or have shape [n_classes], got z with n_classes=rp   )
r#   r7  r   r8  r  
target_dimno_batch_dim	n_classesscalar_shapereduction_shaper   r   r   nll_loss_forward  s4    
r>  normalized_shapec                 C   s   g }t | t | }|dk rtdt |  dt | dt|D ]	}|| |  q!t|t | D ]}|d q2t| ||fS )Nr   r  z) >= len(normalized_shape) (r4   r   )r	   r   r   r   r,   )rb   r?  r=  num_unreduced_dimensionsr   r   r   r   native_layer_norm  s   rA  c                 C   s$   |r| d g}ndg}t | ||fS r^   r-   )rb   r   r   r   r   r   _sizer   r   r   native_batch_norm  s   rC  c                 C   s   | d g}t | ||dgfS r^   r-   )rb   r   r   r   r   rB  r   r   r   _batch_norm_with_update  s   
rD          ignore_indexlabel_smoothingc                 C   s   t | |||d }|S r+  )r>  )r#   r7  r   r8  rG  rH  result_shaper   r   r   cross_entropy_loss%  s   rJ  shape_compute_graph_mappingbounded_compute_graph_mappingscript_func_mapfuncc                 C   s\   | t vr*tj| }tj|j tdD ]}tj|j tj	|j q|t | < t |  S )Nr%   )
rM  torchjitscript_C_jit_pass_inlinegraphr   _jit_pass_peephole_jit_pass_constant_propagation)rN  scripted_func_r   r   r   process_funcJ  s   rY  operator_schemac                 C   s   t |t| < d S r   )rY  rK  )rZ  rN  r   r   r   add_shape_compute_mappingX  s   r[  lower_bound_funcupper_bound_funcc                 C   s   t |t |f}|t| < d S r   )rY  rL  )rZ  r\  r]  fnsr   r   r   add_bounded_compute_mapping^  s   r_  z^aten::contiguous(Tensor(a) self, *, MemoryFormat memory_format=contiguous_format) -> Tensor(a)zFaten::rsub.Tensor(Tensor self, Scalar other, Scalar alpha=1) -> Tensorz:aten::dropout(Tensor input, float p, bool train) -> TensorzDaten::adaptive_avg_pool2d(Tensor self, int[2] output_size) -> Tensorz,prim::NumToTensor.Scalar(Scalar a) -> Tensorz(prim::NumToTensor.bool(bool a) -> Tensorzuaten::zeros(int[] size, *, int? dtype=None, int? layout=None, Device? device=None, bool? pin_memory=None) -> (Tensor)z{aten::to.dtype(Tensor(a) self, int dtype, bool non_blocking=False, bool copy=False, int? memory_format=None) -> (Tensor(a))zvaten::arange(Scalar end, *, int? dtype=None, int? layout=None, Device? device=None, bool? pin_memory=None) -> (Tensor)zaten::arange.start(Scalar start, Scalar end, *, ScalarType? dtype=None, Layout? layout=None, Device? device=None, bool? pin_memory=None) -> Tensorzaten::arange.start_step(Scalar start, Scalar end, Scalar step, *, ScalarType? dtype=None, Layout? layout=None, Device? device=None, bool? pin_memory=None) -> Tensorz*aten::squeeze(Tensor(a) self) -> Tensor(a)z7aten::squeeze.dim(Tensor(a) self, int dim) -> Tensor(a)z:aten::squeeze.dims(Tensor(a) self, int[] dim) -> Tensor(a)z5aten::unsqueeze(Tensor(a) self, int dim) -> Tensor(a)zfaten::slice.Tensor(Tensor(a) self, int dim=0, int? start=None, int? end=None, int step=1) -> Tensor(a)zAaten::select.int(Tensor(a) self, int dim, int index) -> Tensor(a)z@aten::index_select(Tensor self, int dim, Tensor index) -> Tensorzaten::layer_norm(Tensor input, int[] normalized_shape, Tensor? weight=None, Tensor? bias=None, float eps=1e-05, bool cudnn_enable=True) -> TensorzIaten::softmax.int(Tensor self, int dim, ScalarType? dtype=None) -> Tensorzhaten::_no_grad_embedding_renorm_(Tensor weight, Tensor input, float max_norm, float norm_type) -> Tensorzgaten::embedding_renorm_(Tensor(a!) self, Tensor indices, float max_norm, float norm_type) -> Tensor(a!)z~aten::embedding(Tensor weight, Tensor indices, int padding_idx=-1, bool scale_grad_by_freq=False, bool sparse=False) -> Tensorz,aten::mm(Tensor self, Tensor mat2) -> Tensorz/aten::dot(Tensor self, Tensor tensor) -> Tensorz+aten::mv(Tensor self, Tensor vec) -> Tensorz1aten::matmul(Tensor self, Tensor other) -> TensorzFaten::linear(Tensor input, Tensor weight, Tensor? bias=None) -> Tensorzaten::max_pool2d(Tensor self, int[2] kernel_size, int[2] stride=[], int[2] padding=0, int[2] dilation=1, bool ceil_mode=False) -> Tensorzaten::max_pool2d_with_indices(Tensor self, int[2] kernel_size, int[2] stride=[], int[2] padding=0, int[2] dilation=1, bool ceil_mode=False) -> (Tensor, Tensor)z$aten::t(Tensor(a) self) -> Tensor(a)zDaten::transpose.int(Tensor(a) self, int dim0, int dim1) -> Tensor(a)zaten::conv1d(Tensor input, Tensor weight, Tensor? bias=None, int[1] stride=1, int[1] padding=0, int[1] dilation=1, int groups=1) -> Tensorzaten::conv2d(Tensor input, Tensor weight, Tensor? bias=None, int[2] stride=1, int[2] padding=0, int[2] dilation=1, int groups=1) -> Tensorzaten::batch_norm(Tensor input, Tensor? weight, Tensor? bias, Tensor? running_mean, Tensor? running_var, bool training, float momentum, float eps, bool cudnn_enabled) -> Tensorzaten::conv3d(Tensor input, Tensor weight, Tensor? bias=None, int[3] stride=1, int[3] padding=0, int[3] dilation=1, int groups=1) -> Tensorzaten::convolution_backward(Tensor grad_output, Tensor input, Tensor weight, int[]? bias_sizes, int[] stride, int[] padding, int[] dilation, bool transposed, int[] output_padding, int groups, bool[3] output_mask) -> (Tensor, Tensor, Tensor)zaten::convolution(Tensor input, Tensor weight, Tensor? bias, int[] stride, int[] padding, int[] dilation, bool transposed, int[] output_padding, int groups) -> Tensorzaten::_convolution(Tensor input, Tensor weight, Tensor? bias, int[] stride, int[] padding, int[] dilation, bool transposed, int[] output_padding, int groups, bool benchmark, bool deterministic, bool cudnn_enabled, bool allow_tf32) -> Tensorzaten::conv_transpose2d.input(Tensor input, Tensor weight, Tensor? bias=None, int[2] stride=1, int[2] padding=0, int[2] output_padding=0, int groups=1, int[2] dilation=1) -> TensorzVaten::flatten.using_ints(Tensor(a) self, int start_dim=0, int end_dim=-1) -> Tensor(a)z0aten::cat(Tensor[] tensors, int dim=0) -> Tensorz2aten::stack(Tensor[] tensors, int dim=0) -> Tensorz6aten::permute(Tensor(a) self, int[] dims) -> Tensor(a)zSaten::movedim.intlist(Tensor(a) self, int[] source, int[] destination) -> Tensor(a)z3aten::view(Tensor(a) self, int[] size) -> Tensor(a)z:aten::expand_as(Tensor(a) self, Tensor other) -> Tensor(a)zMaten::expand(Tensor(a) self, int[] size, *, bool implicit=False) -> Tensor(a)zaaten::mean.dim(Tensor self, int[1]? dim, bool keepdim=False, *, ScalarType? dtype=None) -> Tensorzhaten::sum.dim_IntList(Tensor self, int[1]? dim, bool keepdim=False, *, ScalarType? dtype=None) -> TensorzZaten::max.dim(Tensor self, int dim, bool keepdim=False) -> (Tensor values, Tensor indices)z<aten::mean(Tensor self, *, ScalarType? dtype=None) -> Tensorz;aten::sum(Tensor self, *, ScalarType? dtype=None) -> Tensorz^aten::addmm(Tensor self, Tensor mat1, Tensor mat2, *, Scalar beta=1, Scalar alpha=1) -> Tensorzbaten::upsample_nearest2d.vec(Tensor input, int[]? output_size, float[]? scale_factors) -> (Tensor)z_aten::quantize_per_tensor(Tensor self, float scale, int zero_point, ScalarType dtype) -> Tensorzraten::quantize_per_tensor.tensor_qparams(Tensor self, Tensor scale, Tensor zero_point, ScalarType dtype) -> Tensorz'aten::dequantize(Tensor self) -> TensorzNquantized::add(Tensor qa, Tensor qb, float scale, int zero_point) -> Tensor qczFaten::argmax(Tensor self, int? dim=None, bool keepdim=False) -> Tensorz-aten::bmm(Tensor self, Tensor mat2) -> Tensorz-aten::_shape_as_tensor(Tensor self) -> Tensorzraten::topk(Tensor self, int k, int dim=-1, bool largest=True, bool sorted=True) -> (Tensor values, Tensor indices)zaten::nll_loss_forward(Tensor self, Tensor target, Tensor? weight, int reduction, int ignore_index) -> (Tensor output, Tensor total_weight)zaten::native_layer_norm(Tensor input, int[] normalized_shape, Tensor? weight, Tensor? bias, float eps) -> (Tensor, Tensor, Tensor)zaten::native_batch_norm(Tensor input, Tensor? weight, Tensor? bias, Tensor? running_mean, Tensor? running_var, bool training, float momentum, float eps) -> (Tensor, Tensor, Tensor)zaten::_native_batch_norm_legit(Tensor input, Tensor? weight, Tensor? bias, Tensor running_mean, Tensor running_var, bool training, float momentum, float eps) -> (Tensor, Tensor, Tensor)zaten::_native_batch_norm_legit.no_stats(Tensor input, Tensor? weight, Tensor? bias, Tensor running_mean, Tensor running_var, bool training, float momentum, float eps) -> (Tensor, Tensor, Tensor)z_batch_norm_with_update(Tensor input, Tensor? weight, Tensor? bias, Tensor(a!) running_mean, Tensor(b!) running_var, float momentum, float eps) -> (Tensor, Tensor, Tensor, Tensor)zaten::cross_entropy_loss(Tensor self, Tensor target, Tensor? weight=None, int reduction=Mean, SymInt ignore_index=-100, float label_smoothing=0.0) -> TensorzCaten::lerp.Tensor(Tensor self, Tensor end, Tensor weight) -> TensorzMaten::where.ScalarSelf(Tensor condition, Scalar self, Tensor other) -> TensorzQaten::add_.Tensor(Tensor(a!) self, Tensor other, *, Scalar alpha=1) -> Tensor(a!)z&aten::nonzero(Tensor self) -> (Tensor))r5   FF)NNNNr   N)T)NFr  )Nr   rE  rF  )gr	  collections.abcr   typingr   r   r   r}   floatnumberrO  rL   r   r   r!   r*   r,   r/   r2   r;   r>   rC   r?   rF   boolrH   rR   rS   rV   r`   ra   rr   ry   rz   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rM   r  r   r  r  r  r  r&  r*  r.  r/  r2  r3  r4  r5  tupler6  r>  rA  rC  rD  rJ  rR  ScriptFunctionScriptFnrK  dictstr__annotations__rL  rM  rY  r[  r_  r   r   r   r   <module>   s  
"$



	

0
K



'


)&*
	

6












	
'
	

+
	





	





*!
"2










