o
    Ih`                  
   @  s
  d Z ddlmZ ddlZddlZddlZddlmZmZ ddl	Z	ddl
mZmZ erBddlmZ ddlmZmZmZmZmZmZmZ 	
dzd{ddZ		d|d}ddZd~ddZd~ddZd~d d!Zd"d# Zdd$d%Z	ddd&d'Z				ddd.d/Zddd0dd2d3Z e Z!ddd0dd4d5Z"ddd0dd6d7Z#ddd0dd8d9Z$		dddd0dd;d<Z%ddd?d@Z&ddAdBZ'ddCdDZ(dEdF Z)dddHdIZ*dddJdKZ+ddLdMZ,ddNdOZ-ddPdQZ.ddSdTZ/dddVdWZ0	X	Y	
		ddd\d]Z1	X	Y		ddd^d_Z2	X	Y	`		dddadbZ3				dddcddgdhZ4		idddcddjdkZ5				
	dddmdnZ6		idddcddpdqZ7				
	dddrdsZ8		idddcddtduZ9				
	dddvdwZ:		idddcddxdyZ;				
	dddzd{Z<dd|d}Z=		Y		ddd~dddZ>		Y	
			ddd~dddZ?dd Z@ddddZAddddZBddddZC		ddddZDdddZEdddZFddddZGdddZHddddZIdddZJdddZKddddZLddddZMddl	mNZN d
ddddZOdYd
dddddZPeQd
fdddZRddddZSddddZTdddZUdddZVddddZWddddZX			dddcdddZYddddƄZZddddȄZ[dddʄZ\dddd΄Z]dddЄZ^	ddddӄZ_			ԐddddׄZ`dddلZa	ԐddddۄZbddd݄Zc		ԐddddZd	
	
	
	ddYddddZedddZfdddZgdddZh			ddddZiddddZjdddZkddddZlddddZm					dÐdddZn				idddcdddZodddcdd dZpddƐddZqddƐddZrdǐddZsdd	d
ZtddȐddZudddZvdǐdddZwddɐddZxdddZyddɐddZzdʐdddZ{ddd	dd
dddZ|dd  Z}dːd̐d!d"Z~dːd̐d#d$Z	d͐dΐd'd(Zdd)d*Zdd+d,Zddd-d.Zddd/d0Zddd1d2Zdϐd̐d3d4Zddd5d6Zdϐd̐d7d8Z				dАdѐd:d;ZddҐd=d>Zdd?d@ZdddAdӐdCdDZddԐdEdFZeZeZdՐddHdIZddJdKZddLdMZddNdOZddPdQZddRdSZddTdUZdd֐dVdWZdd֐dXdYZddZd[Zd\d] Zd^d_ Zd`da Zdbdc Zddde Zdfdg Ze	je	je	jgde	je	jggZe	jde	jde	jde	jde	jdiZdאdidjZ	k				dؐdِdmdnZ	k				dؐdڐdpdqZ	k				dؐdڐdrdsZddtduZdېdܐdxdyZdS (  zA thin pytorch / numpy compat layer.

Things imported from here have numpy-compatible signatures but operate on
pytorch tensors.
    )annotationsN)OptionalTYPE_CHECKING   )_dtypes_impl_util)Sequence)	ArrayLikeArrayLikeOrScalarCastingModes	DTypeLikeNDArrayNotImplementedTypeOutArrayKFar	   orderr   subokc                 C  s   |   S Nclone)r   r   r    r   L/var/www/vscode/kcb/lib/python3.10/site-packages/torch/_numpy/_funcs_impl.pycopy$   s   r   	same_kinddstr   srccastingOptional[CastingModes]wherec                 C  s$   t j|f| j|d\}| | d S )Nr   )r   typecast_tensorsdtypecopy_)r   r   r   r   r   r   r   copyto*   s   r$   arysc                  G      t j|  }t|trt|S |S r   )torch
atleast_1d
isinstancetuplelistr%   resr   r   r   r(   4      

r(   c                  G  r&   r   )r'   
atleast_2dr)   r*   r+   r,   r   r   r   r/   <   r.   r/   c                  G  r&   r   )r'   
atleast_3dr)   r*   r+   r,   r   r   r   r0   D   r.   r0   c                 C  s2   | dkrt d	 |d ur|d urtdd S d S )Nr   z&need at least one array to concatenatezQconcatenate() only takes `out` or `dtype` as an argument, but both were provided.)
ValueError	TypeError)tupr"   outr   r   r   _concat_checkL   s   r5   c                 C  sB   |dus|dur|du r|j jn|}ntj|  }t| ||} | S )z%Figure out dtypes, cast if necessary.N)r"   torch_dtyper   result_type_implr   r!   )tensorsr4   r"   r   	out_dtyper   r   r   _concat_cast_helperY   s
   
r:   c                 C  s.   t j| d|i\} }t| |||} t| |S )Naxis)r   axis_none_flattenr:   r'   cat)r8   r;   r4   r"   r   r   r   r   _concatenateh   s   r>   ar_tupleSequence[ArrayLike]r4   Optional[OutArray]r"   Optional[DTypeLike]c                 C  s$   t | ||d t| ||||d}|S )Nr4   )r;   r4   r"   r   )r5   r>   )r?   r;   r4   r"   r   resultr   r   r   concatenateq   s   rE   r"   r   r3   c                C  &   t | |d d t| ||d}t|S NrC   rF   )r5   r:   r'   vstackr3   r"   r   r8   r   r   r   rI   }      
rI   c                C  rG   rH   )r5   r:   r'   hstackrJ   r   r   r   rL      rK   rL   c                C  rG   rH   )r5   r:   r'   dstackrJ   r   r   r   rM      s   
rM   c                C  rG   rH   )r5   r:   r'   column_stackrJ   r   r   r   rN      s   	
rN   arraysc                C  sD   t | ||d t| ||d}|d jd }t||}tj||dS )NrC   rF   r   r   r;   )r5   r:   ndimr   normalize_axis_indexr'   stack)rO   r;   r4   r"   r   r8   result_ndimr   r   r   rS      s
   rS   arrvaluesc                 C  s<   |d u r| j dkr|  } | }| j d }t| |f|dS )Nr   rP   )rQ   flattenr>   )rU   rV   r;   r   r   r   append   s   

rX   c                 C  sD   t |trt| |||S t |ttfrt| t||S tdt|)Nzsplit_helper: )r)   int_split_helper_intr+   r*   _split_helper_listr2   type)tensorindices_or_sectionsr;   strictr   r   r   _split_helper   s
   
r`   c           	      C  s   t |ts	tdt|| j}| j| |}}|dkrt|| dkr1||| }}|g| }n|r7td|| || d }}|g| }||d g||  7 }t	| ||S )Nzsplit: indices_or_sectionsr   z0array split does not result in an equal divisionr   )
r)   rY   NotImplementedErrorr   rR   rQ   shaper1   r'   split)	r]   r^   r;   r_   lnnumszlstr   r   r   rZ      s   

rZ   c                   s   t |ts	td fdd|D }t|t| }|j   |d gdd t|dd  |d d D  }|dg| 7 }t| S )Nz split: indices_or_sections: listc                   s   g | ]}|j   kr|qS r   )rb   .0xr;   r]   r   r   
<listcomp>   s    z&_split_helper_list.<locals>.<listcomp>r   c                 S  s   g | ]\}}|| qS r   r   )rj   r   br   r   r   rm      s    r   )	r)   r+   ra   lenrX   rb   zipr'   rc   )r]   r^   r;   rh   	num_extrar   rl   r   r[      s   
"r[   aryc                 C  s   t | ||S r   r`   rs   r^   r;   r   r   r   array_split     rv   c                 C  s   t | ||ddS )NTr_   rt   ru   r   r   r   rc     s   rc   c                 C  s4   | j dkr	td| j dkrdnd}t| ||ddS )Nr   z3hsplit only works on arrays of 1 or more dimensionsr   Trx   rQ   r1   r`   ru   r   r   r   hsplit  s   
rz   c                 C  "   | j dk r	tdt| |dddS )N   z3vsplit only works on arrays of 2 or more dimensionsr   Trx   ry   rs   r^   r   r   r   vsplit     
r~   c                 C  r{   )N   z3dsplit only works on arrays of 3 or more dimensionsr|   Trx   ry   r}   r   r   r   dsplit  r   r   rn   c                 C     t | |S r   )r'   kron)r   rn   r   r   r   r     rw   r   rk   c                 C     t | ||S r   )r'   vander)rk   N
increasingr   r   r   r   "     r   2   Tstartstopc                 C  s8   |dks|s|s
t |d u rt j}tj| |||dS Nr   r"   )ra   r   default_dtypesfloat_dtyper'   linspace)r   r   rf   endpointretstepr"   r;   r   r   r   r   )  s
   	
r   c                 C  sX   |dks|st t||  d|d  }t|}tjt| | t|| ||dS )Nr         ?r   )base)ra   r'   powloglogspace)r   r   rf   r   r"   r;   r   logbaser   r   r   	geomspace:  s   
r         $@c                 C  s$   |dks|st tj| ||||dS )Nr   )r   r"   )ra   r'   r   )r   r   rf   r   r   r"   r;   r   r   r   r   N  s   	r   )likeOptional[ArrayLikeOrScalar]stepr   c                C  s   |dkrt |d u r| d u rt|d u rd| } }| d u rd} |d u r9tdd | ||fD r4t jnt j}|jr?tj	n|}tdd | ||fD rOt
|dkrW| |ks_|dk rf| |k rftjd|dS tj| |||d}t||}|S )Nr   c                 s      | ]}t |V  qd S r   )r   is_float_or_fp_tensorri   r   r   r   	<genexpr>s      zarange.<locals>.<genexpr>c                 s  r   r   )r   is_complex_or_complex_tensorri   r   r   r   r   y  r   r   )ZeroDivisionErrorr2   anyr   r   r   	int_dtype
is_complexr'   float64ra   emptyaranger   cast_if_needed)r   r   r   r"   r   
work_dtyperD   r   r   r   r   \  s*   
 r   Cc                C      |d u r	t  j}tj| |dS Nr   )r   r   r   r'   r   rb   r"   r   r   r   r   r   r        
r   	prototypec                 C  $   t j| |d}|d ur||}|S r   )r'   
empty_likereshape)r   r"   r   r   rb   rD   r   r   r   r        
r   
fill_valuec                C  sB   t | tr| f} |d u r|j}t | ttfs| f} tj| ||dS r   )r)   rY   r"   r*   r+   r'   full)rb   r   r"   r   r   r   r   r   r     s   
r   c                 C  s&   t j| ||d}|d ur||}|S r   )r'   	full_liker   )r   r   r"   r   r   rb   rD   r   r   r   r     s   	
r   c                C  r   r   )r   r   r   r'   onesr   r   r   r   r     r   r   c                 C  r   r   )r'   	ones_liker   r   r"   r   r   rb   rD   r   r   r   r     r   r   c                C  r   r   )r   r   r   r'   zerosr   r   r   r   r     r   r   c                 C  r   r   )r'   
zeros_liker   r   r   r   r   r     r   r   c                 C  s   |durRd| j  }|dkr| d| | j } |s#| jd dkr#| j} |  } d|j  }|dkr:|d| |j }|sF|jd dkrF|j}| }t| |fdd} | S )z$Prepare inputs for cov and corrcoef.Nr|   r   r   r   rP   )rQ   viewrb   mTr   r>   )x_tensory_tensorrowvar
ndim_extrar   r   r   _xy_helper_corrcoef  s   

r   r   yOptional[ArrayLike]c          	      C  sf   |d us|d ur
t t| ||}|jtjko|j}|rtj}t||}t	|}|r1|
tj}|S r   )ra   r   r"   r'   float16is_cpufloat32r   r   corrcoefto)	rk   r   r   biasddofr"   	xy_tensoris_halfrD   r   r   r   r     s   	
r   mfweightsaweightsc          
      C  sr   t | ||} |d u r|dkrdnd}| jtjko| j}|r tj}t| |} tj| |||d}	|r7|		tj}	|	S )Nr   r   )
correctionr   r   )
r   r"   r'   r   r   r   r   r   covr   )
r   r   r   r   r   r   r   r"   r   rD   r   r   r   r   /  s   r   c                 C  s   t | |}t| |} t||}|dkr|jd d n|}|dkr0|jd d dkr0td| d d d f }|d d d d f }tjjj	|||d}|dd d f S )Nr   r   r   samer|   z#mode='same' and even-length weights)padding)
r   r7   r   r   rb   ra   r'   nn
functionalconv1d)r   vmodedtr   aavvrD   r   r   r   _conv_corr_implM  s   r   r   c                 C  s6   | j d |j d k r|| } }t|d}t| ||S )Nr   r   )rb   r'   flipr   r   r   r   r   r   r   convolved  s   
r   validc                 C  s   t |}t| ||S r   )r'   conj_physicalr   r   r   r   r   	correlateo  s   
r   weightsc                C  sF   |   dkr| jdtd} t j}tj| f|dd\} t	| ||S )Nr   r   safer    )
numel	new_emptyrY   r   r   r   r   r!   r'   bincount)rk   r   	minlengthr   r   r   r   r   w  s
   
r   	conditionc                C  s`   |d u |d u krt d| jtjkr| tj} |d u r'|d u r't| }|S t| ||}|S )Nz1either both or neither of x and y should be given)r1   r"   r'   boolr   r   )r   rk   r   rD   r   r   r   r     s   
c                 C  s   | j S r   )rQ   r   r   r   r   rQ     s   rQ   c                 C  s
   t | jS r   )r*   rb   r   r   r   r   rb        
rb   c                 C  s   |d u r|   S | j| S r   )r   rb   )r   r;   r   r   r   size  s   
r   c                 C  s   t | j|}| |S r   )r   expand_shaperb   r   )r   r;   rb   r   r   r   expand_dims  s   
r   c                 C  s2   |d u rt t| j}nt|| j}t| |S r   )r*   rangerQ   r   normalize_axis_tupler'   r   )r   r;   r   r   r   r     s   r   c                 C  
   t | S r   )r'   flipudr   r   r   r   r     r   r   c                 C  r   r   )r'   fliplrr   r   r   r   r     r   r   r   r   c                 C  s   t || j}t| ||S r   )r   r   rQ   r'   rot90)r   kaxesr   r   r   r     s   r   arrayc                 C     t j| |dS )N)r   )r'   broadcast_to)r   rb   r   r   r   r   r    r   r  )broadcast_shapes)r   argsc                 G  s
   t j| S r   )r'   broadcast_tensors)r   r  r   r   r   broadcast_arrays  r   r  xy)r   sparseindexingxic                   s   t |}|dvrtdd|   fddt|D }|dkrA|dkrA|d d	 d
d   |d< |d d d
d   |d< |sHtj| }| rQdd |D }t|S )N)r  ijz.Valid values for `indexing` are 'xy' and 'ij'.r   c                   s6   g | ]\}}|  d | d  |d d   qS )N)ro   r   )r   )rj   irk   s0r   r   rm     s   6 zmeshgrid.<locals>.<listcomp>r  r   r   )r   ro   r|   )ro   r   c                 S  s   g | ]}|  qS r   r   ri   r   r   r   rm         )rp   r1   	enumerater   r'   r  r+   )r   r  r  r	  rQ   outputr   r  r   meshgrid  s   
r  c           	      C  s   t | } t| }d| }|rd}n
tj|f|  |d}t| D ])\}}tj||d|d | |f ||d d   }|rD||f }q|||< q|S )Nr   r   r   r   )r*   rp   r'   r   r  r   r   )	
dimensionsr"   r  r   rb   r-   r  dimidxr   r   r   indices  s    
r  c                 C  r   r   )r'   trilr   r   r   r   r   r    rw   r  c                 C  r   r   )r'   triur  r   r   r   r    rw   r  c                 C     |d u r| }t j| ||dS Noffset)r'   tril_indicesre   r   r   r   r   r   r       r  c                 C  r  r  )r'   triu_indicesr  r   r   r   r     r  r   c                 C  .   | j dkr	tdtj| jd | jd |dS Nr|   zinput array must be 2-dr   r   r  )rQ   r1   r'   r  rb   rU   r   r   r   r   tril_indices_from     
r$  c                 C  r!  r"  )rQ   r1   r'   r   rb   r#  r   r   r   triu_indices_from  r%  r&  c                C  s,   |d u r| }t j| |f|d}t j||dS )Nr   )diagonal)r'   r   r  )r   Mr   r"   r   r]   r   r   r   tri%  s   r)  h㈵>:0yE>c                 C  8   t | |}t| |} t||}tj| ||||dS N)rtolatol	equal_nan)r   r7   r   r   r'   iscloser   rn   r.  r/  r0  r"   r   r   r   r1  6     r1  c                 C  r,  r-  )r   r7   r   r   r'   allcloser2  r   r   r   r4  =  r3  r4  c                 C  s@   | j |j krdS | |k}|r|t| t|@ B }|  S NF)rb   r'   isnanallitem)a1a2r0  condr   r   r   _tensor_equalD  s   r<  r9  r:  c                 C  s   t | ||dS )Nr0  )r<  )r9  r:  r0  r   r   r   array_equalN  r   r>  c                 C  s4   z
t | |\}}W n
 ty   Y dS w t||S r5  )r'   r  RuntimeErrorr<  )r9  r:  a1_ta2_tr   r   r   array_equivR  s   
rB          c                 C  sN   |   rtj| j|||d}tj| j|||d}|d|  S tj| |||dS )N)nanposinfneginfy              ?)r   r'   
nan_to_numrealimag)rk   r   rD  rE  rF  reimr   r   r   rG  \  s
   rG  raiser   c                 C  sD   t j| |d\\} }t || j}td f| |df }| | }|S )NrP   .)r   r<   rR   rQ   slice)r   r  r;   r4   r   r  rD   r   r   r   takek  s
   rN  c                 C  s0   t j| |d\\} }t || j}t| ||S NrP   )r   r<   rR   rQ   r'   take_along_dim)rU   r  r;   r   r   r   take_along_axisy  s   rQ  c                 C  s   | | j}| | kr(| |  d |  }|d|f|j }| | k r<| }|d |  }| || d S Nr   r   )r\   r"   r   	unsqueezeexpandrb   rW   put_)r   r  rV   r   r   ratior   r   r   put  s   rW  c                 C  sf   t j| |d\\} }t || j}t||\}}t || j}t| |||}| 	|
| j d S rO  )r   r<   rR   rQ   r'   r  r   r"   scatterr#   r   rb   )rU   r  rV   r;   rD   r   r   r   put_along_axis  s   rY  choicesc                   s>   t t j    fddt jD }| |d<  | dS )Nc                   s<   g | ]\}}t |d | |f d  j| d   qS )r   r   )r'   r   r   rQ   )rj   r  r  rZ  r   r   rm     s    *zchoose.<locals>.<listcomp>r   )r'   rS   r  r  rb   squeeze)r   rZ  r4   r   idx_listr   r[  r   choose  s   
r^  r=  arreturn_indexr0  c                C  s8   t j| |d\\} }t || j}tj| |||d}|S )NrP   )return_inversereturn_countsr  )r   r<   rR   rQ   r'   unique)r_  r`  ra  rb  r;   r0  rD   r   r   r   rc    s   	rc  c                 C  s   t j| ddS )NTas_tuple)r'   nonzeror   r   r   r   rf    r   rf  c                 C  r   r   )r'   argwherer   r   r   r   rg    r   rg  c                 C  s   t | jddd S )NTrd  r   )r'   rW   rf  r   r   r   r   flatnonzero  s   rh  minmaxc                 C  r   r   )r'   clamp)r   ri  rj  r4   r   r   r   clip  s   rl  repeatsr
   c                 C  r   r   )r'   repeat_interleave)r   rm  r;   r   r   r   repeat  r   ro  Ac                 C  s   t |tr|f}t| |S r   )r)   rY   r'   tile)rp  repsr   r   r   rq    s   
rq  c                 C  s   |d u r| S t |tr|f}|  } d}|D ]}||9 }|dk r$tdq|  dks/|dkr7tj|| jdS | |    }t| f| d | } t	| |S )Nr   r   z0all elements of `new_shape` must be non-negativer   )
r)   rY   rW   r1   r   r'   r   r"   rE   r   )r   	new_shapenew_size
dim_lengthrm  r   r   r   resize  s    

rv  c                 C  s,   t || j}t || j}t| |||S r   )r   rR   rQ   r'   r'  )r   r  axis1axis2r   r   r   r'    s   r'  c                 C  s    t j| |||djd|d}|S )N)dim1dim2ro   r   )r'   r'  sum)r   r  rw  rx  r"   r4   rD   r   r   r   trace  s   r|  c                C  sB   |d u r	t  j}|d u r| }tj| ||d}||d |S )Nr   r   )r   r   r   r'   r   r'  fill_)r   r(  r   r"   r   r   zr   r   r   eye  s   	
r  c                C  r   r   )r'   r  )re   r"   r   r   r   r   identity*  r   r  c                 C  r   r   )r'   diagr   r   r   r   r   r  .  rw   r  c                 C  r   r   )r'   diagflatr  r   r   r   r  2  rw   r  r|   c                 C  s   t | }|f| S r   )r'   r   )re   rQ   r  r   r   r   diag_indices6  s   

r  c                 C  sH   | j dks	td| j}|dd  |d d krtdt|d | j S )Nr|   z input array must be at least 2-dr   ro   z/All dimensions of input must be of equal lengthr   )rQ   r1   rb   r  )rU   sr   r   r   diag_indices_from;  s   
r  valc           
      C  s  | j dk r	td| dkr|s| | | S |j dkr"|d}| j dkrr| jd | jd k}|r5|sF|  }||d |   | S | j\}}t	|||d   }|| }|| }	|d |  | |	|d  | |f< | S t
| }|d | jd  | |< | S )Nr|   zarray must be at least 2-dr   r   )rQ   r1   r   fill_diagonal_rS  rb   r'  r#   r'   r   r  )
r   r  wraptallr  max_min_r  moddivr   r   r   fill_diagonalF  s,   





$r  c                C  s   t | |\}}|jdkr| }|jdkr| }t||}|t jko*|jp*|j}|t jk}|r6t j	}n|r;t j
}t||}t||}t ||}|rW|t j}|S |r_|t j}|S Nr   )r'   r(   rQ   rW   r   r7   r   r   r   r   uint8r   r   vdotr   )r   rn   t_at_br"   r   is_boolrD   r   r   r   r  h  s*   


r  c                 C  sP   t |ttfrdd |D }t| |}t| |} t||}tj| ||dS )Nc                 S  s    g | ]}t |tr|gn|qS r   r)   rY   )rj   axr   r   r   rm     s     ztensordot.<locals>.<listcomp>)dims)	r)   r+   r*   r   r7   r   r   r'   	tensordot)r   rn   r   target_dtyper   r   r   r    s   r  c                 C  sv   t | |}|tjk}|rtj}t| |} t||}| jdks&|jdkr+| | }nt| |}|r9|	tj}|S Nr   )
r   r7   r'   r   r  r   r   rQ   matmulr   )r   rn   r4   r"   r  rD   r   r   r   dot  s   

r  c                C  s   t | |}|tjko| jp|j}|tjk}|rtj}n|r!tj}t	| |} t	||}t
| |}|r=|tj}|S |rE|tj}|S r   )r   r7   r'   r   r   r   r   r  r   r   innerr   )r   rn   r"   r   r  rD   r   r   r   r    s    
r  c                 C  r   r   )r'   outer)r   rn   r4   r   r   r   r    rw   r  ro   c                 C  s  |d ur|fd \}}}t || j}t ||j}t| |d} t||d}d}| jd dvs8|jd dvr<t|t| d j|d j}| jd dksU|jd dkra|d7 }t |t|}t	
| |}tj||d}	t | |} t ||}| d }
| d }| jd dkr| d	 }|d }|d }|jd dkr|d	 }|	jd
kr|	jd dkr|	d }|	d }|	d	 }| jd dkr|jd dkr|
| ||  |	d< |	S |jd dksJ || |d< |
 | |d< |
| ||  |d< nQ| jd dksJ |jd dkr#|| ||  |d< || |
|  |d< |
| ||  |d< n!|jd dks-J | | |d< || |d< |
| ||  |d< t|	d|S )Nr   ro   zDincompatible dimensions for cross product
(dimension must be 2 or 3))r|   r   ).r   )r   r   ).r   ).r|   r   r|   .)r   rR   rQ   r'   moveaxisrb   r1   r  rp   r   r7   r   r   )r   rn   axisaaxisbaxiscr;   msgrb   r"   cpa0r9  r:  b0b1b2cp0cp1cp2r   r   r   cross  s^   r  r   )r4   r"   r   r   optimizec                   s:  ddl m} ddlm}m m}m}	m}
 |	|}||}| d ur)t| |s)t	d|dkr1t
dt|d t }|rG|d d d d d	 }n|d |dd  }} fd
d|D }|d u rdtj| n|}|tjkostdd |D }|rytj}|tjtjtjtjfv }|rtj}t|||}ddlm} zl| rtjjj}tjjj}|du rd}n	|du rdtjj_|tjj_|r|dd d	 }t|d	 dk}|r|d }t t!j"#t$||}|r|%| tj&| }n	tj&|g|R  }W | r|tjj_|tjj_n| r|tjj_|tjj_w || |}|
|S )Nr   )ndarray)maybe_copy_tonormalize_array_likenormalize_castingnormalize_dtypewrap_tensorsz'out' must be an arrayr   z#'order' parameter is not supported.r   ro   r|   c                   s   g | ]} |qS r   r   )rj   opr  r   r   rm   -  r  zeinsum.<locals>.<listcomp>c                 s  s    | ]}|j V  qd S r   )r   )rj   tr   r   r   r   1  s    zeinsum.<locals>.<genexpr>)
opt_einsumTautoF)'_ndarrayr  _normalizationsr  r  r  r  r  r)   r2   ra   strr   r7   r'   r   r7  r   r  int8int16int32int64r   r!   torch.backendsr  is_availablebackendsstrategyenabledrp   r+   	itertoolschainfrom_iterablerq   rX   einsum)r4   r"   r   r   r  operandsr  r  r  r  r  sublist_formatarray_operands
subscriptsr8   r  r   is_short_intr  old_strategyold_enabledsublistshas_sublistout
sublistoutrD   r   r  r   r  
  sf   










r  c                 C  sN   | j jrtd| j  dtj| |d\\} }t|| j}|dk}| ||fS )Nzsorting z is not supportedrP   stable)r"   r   ra   r   r<   rR   rQ   )r]   r;   kindr   r  r   r   r   _sort_helperg  s   
r  c                 C  s*   t | |||\} }}tj| ||d}|jS N)r  r  )r  r'   sortrV   )r   r;   r  r   r  rD   r   r   r   r  r  s   r  c                 C  s$   t | |||\} }}tj| ||dS r  )r  r'   argsort)r   r;   r  r   r  r   r   r   r  y  s   r  leftsorterc                 C  s*   | j jrtd| j  tj| |||dS )Nzsearchsorted with dtype=)sider  )r"   r   ra   r'   searchsorted)r   r   r  r  r   r   r   r  ~  s   r  c                 C  s.   t || jd}t || jd}t| ||S )Nsourcedestination)r   r   rQ   r'   r  )r   r  r  r   r   r   r    s   r  c                 C  s*   t || j}t || j}t| ||S r   )r   rR   rQ   r'   swapaxes)r   rw  rx  r   r   r   r    s   r  c                 C  s   | j }t||}|dk r||7 }d}d|  kr|d k s/n t|d| d|d |f ||k r7|d8 }||kr=| S ttd|}|| ||| | |S )Nr   z5'%s' arg requires %d <= %s < %d, but %d was passed inr   r   )	rQ   r   rR   	AxisErrorr+   r   removeinsertr   )r   r;   r   re   r  r   r   r   r   rollaxis  s   

r  c                 C  s@   |d urt j|| jdd}t|ts|ft| }t| ||S )NT)allow_duplicate)r   r   rQ   r)   r*   rp   r'   roll)r   shiftr;   r   r   r   r    s
   
r  c                 C  sX   |dkr| }|S |d u r|   }|S t|tr%| }|D ]}|  |}q|S |  |}|S )Nr   )r\  r)   r*   )r   r;   rD   r  r   r   r   r\    s   


r\  c                 C  s"   t |dkr
|d n|}| |S rR  )rp   r   )r   newshaper   r   r   r   r     s   
r   c                 C  s:   |dv rt tt| j}n
t|dkr|d }| |S )N)r   Nr   r   r   )r*   reversedr   rQ   rp   permute)r   r   r   r   r   	transpose  s
   
r  c                 C  r   r   )r'   rW   )r   r   r   r   r   ravel  r   r  prependc                 C  s   t || j}|dk rtd| |dkr| S |d ur5t| j}|jdkr+|j| nd||< t||}|d urRt| j}|jdkrH|j| nd||< t||}tj| ||||dS )Nr   z#order must be non-negative but got r   )r;   r  rX   )	r   rR   rQ   r1   r+   rb   r'   r  diff)r   re   r;   r  rX   rb   r   r   r   r    s   

r  r~  c                 C  s    t | }|r|dt j  }|S )N   )r'   anglepi)r~  degrD   r   r   r   r    s   
r  c                 C  r   r   )r'   sincrk   r   r   r   r    r   r  )r;   
edge_orderfc                G  s  | j }t|}|d u rtt|}nt||}t|}t|}|dkr+dg| }nq|dkrBt|d s=|d j dkrB|| }nZ||krt	|}t
|D ]H\}	}
t|
}
|
j dkr]qN|
j dkrftdt|
| j||	  krutd|
jjs|
jjs|
 }
t|
}||d k r|d }|||	< qNntd|dkrtdg }td g| }td g| }td g| }td g| }| j}t|ttfv r|  } tj}t||D ]\}}| j| |d k rtd	tj| |d
}t|p|j dk}tdd||< td d||< tdd||< tdd ||< |r1| t| | t|  d|  |t|< nY|dd }|dd  }| |||   }|| ||  }||||   }dg| }d||< ||}||}||}|| t|  || t|   || t|   |t|< |dkrd||< d||< d||< |r|n|d }| t| | t|  | |t|< d||< d||< d||< |r|n|d }| t| | t|  | |t|< nd||< d||< d||< d||< |rd| }d| }d| }n&|d }|d }d| |  |||   }|| ||  }| |||   }|| t|  || t|   || t|   |t|< d||< d||< d||< d||< |r`d| }d| }d| }n%|d }|d }||||   }||  ||  }d| | |||   }|| t|  || t|   || t|   |t|< || td ||< td ||< td ||< td ||< q|dkr|d S |S )Nr   r   r   z&distances must be either scalars or 1dzGwhen 1d, distances must match the length of the corresponding dimensionzinvalid number of argumentsr|   z)'edge_order' greater than 2 not supportedzlShape of array too small to calculate a numerical gradient, at least (edge_order + 1) elements are required.r   ro   g       @g      g      g      ?g       g      ?)rQ   r   ndarrays_to_tensorsr*   r   r   rp   r   	is_scalarr+   r  r'   	as_tensorr1   rb   r"   is_floating_pointr   doubler  r7  r2   rM  python_type_for_torchrY   r   r   rq   r   r   rX   )r  r;   r  varargsr   r   len_axesre   dxr  	distancesdiffxoutvalsslice1slice2slice3slice4otypeax_dxr4   uniform_spacingdx1dx2r   rn   crb   dx_0dx_nr   r   r   gradient  s   
$





*



.

$&
.

.


r  c                 C  sR   |   rtj| |d}|S |  r%ttj| j|dtj| j|d}|S | }|S )N)decimals)r  r'   roundr   complexrH  rI  )r   r  r4   rD   r   r   r   r    s   
r  d   c                 C  sJ   t | s| S |dkr|t | jj }t | j|k }| r#| jS | S r  )	r'   r   finfor"   epsabsrI  r7  rH  )r   tolmaskr   r   r   real_if_close  s   
r  c                 C  r   r   )r'   rH  r   r   r   r   rH    r   rH  c                 C  s   |   r| jS t| S r   )r   rI  r'   r   r   r   r   r   rI    s   
rI  c                 C  s$   t | r
| jdkS t j| t jdS r   )r'   r   rI  r   r   r  r   r   r   	iscomplex     

r  c                 C  s$   t | r
| jdkS t j| t jdS r   )r'   r   rI  r   r   r  r   r   r   isreal  r  r  c                 C  r   r   r'   r   r  r   r   r   iscomplexobj  r   r   c                 C  s   t |  S r   r  r  r   r   r   	isrealobj  rw   r!  c                 C  r   r   )r'   isneginfrk   r4   r   r   r   r"    r   r"  c                 C  r   r   )r'   isposinfr#  r   r   r   r$    r   r$  c                 C  s   t j| S r   )r'   speciali0r  r   r   r   r&    rw   r&  c                 C  s8   ddl m} z|| }| dkW S  ty   Y dS w )Nr   r  F)r  r  r   	Exception)r   r  r  r   r   r   isscalar
  s   r(  c                 C     t  j}tj| d|dS NF)periodicr"   )r   r   r   r'   hamming_windowr(  r"   r   r   r   hamming     
r.  c                 C  r)  r*  )r   r   r   r'   hann_windowr-  r   r   r   hanning  r/  r1  c                 C  s   t  j}tj| |d|dS )NF)betar+  r"   )r   r   r   r'   kaiser_window)r(  r2  r"   r   r   r   kaiser"  s   
r4  c                 C  r)  r*  )r   r   r   r'   blackman_windowr-  r   r   r   blackman'  r/  r6  c                 C  r)  r*  )r   r   r   r'   bartlett_windowr-  r   r   r   bartlett,  r/  r8  r8   c                  G  sz   d}d}| D ](}|j }t|rd}|js|jsd}nt|d }|d u r(tdt||}q|r7t	d | S t	d | S )NFr   Tr|   z+can't get common type for non-numeric arrayr   )
r"   r   r  r   array_precisiongetr2   builtinsrj  
array_type)r8   r   	precisionr   r  pr   r   r   common_typeC  s   r?  
   binsc           
      C  s  |d urt d|d ur|jjrtd| jjp| jj }|d u p%|jj }|r,|  } |d ur7t|| j}t|t	j
rO|jdkrHt|}nt|| j}|d u rat	j| ||t|d\}}	nt	j| |||t|d\}}	|sw|rw| }|r}|	 }	||	fS )N3normed argument is deprecated, use density= insteadzcomplex weights histogram.r   )weightdensity)r   rC  rD  )r1   r"   r   ra   r  r  r   r   r)   r'   TensorrQ   operatorindex	histogramr   long)
r   rA  r   normedr   rD  is_a_intis_w_inthrn   r   r   r   rH  Z  s0   

rH  r   c           
      C  s   t | t |krtdzt |}W n ty   d}Y nw |dkr*|dkr*||g}t| |f|||||\}}	||	d |	d fS )Nz"x and y must have the same length.r   r|   r   )rp   r1   r2   histogramdd)
rk   r   rA  r   rJ  r   rD  r   rM  er   r   r   histogram2d  s   
rP  c                   sZ  |d urt dddlm}m} t ttfr| j n|  t	   j
js2 j
js2   t|tp@tdd |D  }|rX||}dd |D }	 fdd|D }|d urb|  }|d ur jd	d
}
t|
ddj }t| }t| j
}d|i}ni }tj ||fdt|i|\}}|rdd t||	D }||fS )NrB  r   )r  normalize_seq_array_likec                 s  s    | ]}t |tV  qd S r   r  rj   rn   r   r   r   r     r   zhistogramdd.<locals>.<genexpr>c                 S  s   g | ]}|j qS r   r   rR  r   r   r   rm     s    zhistogramdd.<locals>.<listcomp>c                   s   g | ]	}t | jqS r   )r   r   r"   rR  sampler   r   rm     s    r   )r  r|   ro   rC  rD  c                 S  s   g | ]
\}}t ||qS r   )r   r   )rj   bbdtypr   r   r   rm     s    )r1   r  r  rQ  r)   r+   r*   Tr'   r/   r"   r  r   r  rY   r;  r7  rW   tolistaminmaxr=   r   r   r   rN  r   rq   )rT  rA  r   rJ  r   rD  r  rQ  bins_is_arraybins_dtypesmmw_kwdrM  rn   r   rS  r   rN    s8   


"rN  c                C  sd  ddl m} |  dkr|| jS | jtjkrtj}||S | jjrXttj}| jtj	kpK|j
| j  ko:|jkn  oK|j
| j  koI|jkn  }|rQtj	ntj}||S | jjrtjtjtjfD ]}t|}|j
|   krw|jkrn qd|} ||S qd||S tjtjtjtjtjfD ]}t|}|j
|   kr|jkrn q|} ||S q||S )Nr   )DType)_dtypesr^  r   r"   r'   r   r   r  r   	complex64ri  rH  rj  rI  
complex128r  r   r   r  r  r  r  r  iinfo)r   r^  r"   fifits_in_singler   iir   r   r   min_scalar_type  s<   
:


rf  constant	pad_widthc                 K  sf   |dkrt |dd}t| j}||}t|| jdf}t|d	 }tj
jj| t||dS )Nrg  constant_valuesr   r|   r   )value)ra   r:  r   r  r"   r'   r  rQ   r   rW   r   r   padr*   )r   rh  r   kwargsrj  typr   r   r   rk    s   rk  )r   F)r   r	   r   r   r   r   )r   N)r   r   r   r	   r   r   r   r   )r%   r	   )NNr   )r   NNr   )r   r   )r?   r@   r4   rA   r"   rB   r   r   )r3   r@   r"   rB   r   r   )r   N)rO   r@   r4   rA   r"   rB   r   r   r   )rU   r	   rV   r	   )Fr   )rs   r	   )r   r	   rn   r	   r5  )rk   r	   )r   TFNr   )r   r	   r   r	   r"   rB   )r   TNr   )r   Tr   Nr   )r"   rB   )NNr   N)
r   r   r   r   r   r   r"   rB   r   r   )Nr   )r"   rB   r   r   r   r   )Nr   FN)r   r	   r"   rB   r   r   r   r   )r   r	   r"   rB   r   r   r   r   )r   r	   r"   rB   r   r   r   r   )NT)NTNN)rk   r	   r   r   r"   rB   )NTFNNN)
r   r	   r   r   r   r   r   r   r"   rB   )r   )r   r	   r   r	   )r   r  )r   r   rk   r	   )NN)r   r	   rk   r   r   r   )r   r	   )r   r	   )r   r   )r   r	   r   r   )r  r	   r   r   )r	  r	   )rU   r	   )Nr   N)r"   rB   r   r   )r*  r+  F)r9  r	   r:  r	   )TrC  NN)rk   r	   r   r   )NNrL  )r   r	   r  r	   r4   rA   r   r   )rU   r	   r  r	   )rL  )r   r   r  r	   rV   r	   r   r   )rU   r	   r  r	   rV   r	   )NrL  )r   r	   rZ  r@   r4   rA   r   r   )FFFN)r_  r	   r`  r   r0  r   )NNN)r   r	   ri  r   rj  r   r4   rA   )r   r	   rm  r
   )rp  r	   )r   r   r   )r   r   r   NN)r   r	   r"   rB   r4   rA   )Nr   Nr   )r   r	   )r|   )r   r	   r  r	   )r   r	   rn   r	   r4   rA   )ro   ro   ro   N)ro   NN)r   r	   r   r   )r  N)r   r	   r   r	   r  r   )r   )r   ro   NN)r   r	   r  r   rX   r   )r~  r	   )r  r	   )r   r	   r4   rA   )r  )rk   r	   r4   rA   )r8   r	   )r@  NNNN)r   r	   rA  r	   r   r   )r   r   r   r   )rg  )r   r	   rh  r	   )__doc__
__future__r   r;  r  rF  typingr   r   r'    r   r   collections.abcr   r  r	   r
   r   r   r   r   r   r   r$   r(   r/   r0   r5   r:   r>   rE   rI   	row_stackrL   rM   rN   rS   rX   r`   rZ   r[   rv   rc   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   rQ   rb   r   r   r   r   r   r   r  r  r  r  rY   r  r  r  r  r   r$  r&  r)  r1  r4  r<  r>  rB  rG  rN  rQ  rW  rY  r^  rc  rf  rg  rh  rl  ro  rq  rv  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  aroundround_r  rH  rI  r  r  r   r!  r"  r$  r&  r(  r.  r1  r4  r6  r8  r   r   r   r`  ra  r<  r9  r?  rH  rP  rN  rf  rk  r   r   r   r   <module>   s`  $	


.	
		

	" H]
  1	/:%