U
    yhD                  
   @  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m	Z	 ddl
Z
ddlmZmZ e	r|ddlmZmZmZmZmZmZmZ d{d
dddddZd|dd
dddddZd
dddZd
dddZd
dddZdd Zd}ddZd~dd d!d"Zdd#d$d%dd&d'd(Zddd)d#d%dd*d+d,ZeZ ddd)d#d%dd*d-d.Z!ddd)d#d%dd*d/d0Z"ddd)d#d%dd*d1d2Z#dddd)d#d$d%dd3d4d5Z$dd
d
d6d7d8Z%dd9d:Z&dd;d<Z'd=d> Z(dd
d?d@dAZ)dd
d?dBdCZ*d
d?dDdEZ+d
d?dFdGZ,d
d?dHdIZ-d
d
dJdKdLZ.dd
dMdNdOZ/dd
d
d%dRdSdTZ0dd
d
d%dRdUdVZ1dd%dXdYdZZ2ddd[d\d\d\d%dd]d^d_Z3ddd[d%dddadbdcZ4dd
d%dddddedfZ5ddd[d
d%dddgdhdiZ6dd
d%dddjdkdlZ7ddd[d%dddadmdnZ8dd
d%dddjdodpZ9ddd[d%dddadqdrZ:dd
d%dddjdsdtZ;ddudvZ<dddXd
dwd%dxdydzZ=dddXd
dwdwdwd%d{d|d}Z>d~d Z?dd
d
dddZ@dd
d
dddZAddwd
dddZBdd
d\d\dddZCd
dddZDd
dddZEdd
dddZFd
dddZGdd
dddZHd
dddZId
dddZJdd
dddZKdd
ddddZLddl
mMZM d	dd
ddddZNdQd	ddd
dddZOePd	fd%dXddZQdd
dddZRdd
dddZSdddZTdddZUdd
dddZVdd
dddZWddd[d%ddddZXdd
d
dJddZYdd
d
dJddÄZZdddńZ[dd
d
dƜddȄZ\d
d
dƜddʄZ]dd
dd̜dd΄Z^dd
d
d$ddМdd҄Z_d
d
dӜddՄZ`ddd
d
dd֜dd؄Zad
d
d
dٜddۄZbdd
d#d$ddܜddބZcddQdߜd
dddddZdd
dddZed
dddZfd
dddZgdd
dwdwd$dddZhdd
ddddZid
dddZjdd
dddZkdd
dddZldd
d%d$dddZmddd[d%dddaddZnddd[d%ddddZodd
ddd Zpdd
dddZqdddZrd
dddZsdd
d
dd	d
Ztd
d
dJddZudd
d
dJddZvdd
d
d$dddZwd
d
dJddZxdd
d
d$dddZydd
d
dJddZzddddd	dddZ{dd Z|dd
ddd d!Z}dd
ddd"d#Z~dd
d
dwd%d&d'Zd
dd(d)Zd
dd*d+Zdd
dd,d-Zdd
dd.d/Zdd
dd0d1Zdd
ddd2d3Zdd
dd4d5Zdd
ddd6d7Zdd
dwdwd8d9d:Zdd
d;d<d=Zd
dMd>d?Zddd@d
dAdBdCZdd
d$dDdEdFZeZeZdd
ddHdIZd
ddJdKZd
ddLdMZd
dMdNdOZd
dMdPdQZd
dMdRdSZd
dMdTdUZdd
d$dVdWdXZdd
d$dVdYdZZd
dMd[d\Zd]d^ Zd_d` Zdadb Zdcdd Zdedf Zdgdh Ze
je
je
jgde
je
jggZe
jde
jde
jde
jde
jdiZd
didjdkZdd
d
dwdmdndoZddwdwdpdqdrZddwdwdpdsdtZd
ddudvZdd
d
dxdydzZdS (  zA thin pytorch / numpy compat layer.

Things imported from here have numpy-compatible signatures but operate on
pytorch tensors.
    )annotationsN)OptionalSequenceTYPE_CHECKING   )_dtypes_impl_util)	ArrayLikeArrayLikeOrScalarCastingModes	DTypeLikeNDArrayNotImplementedTypeOutArrayKFr	   r   aordersubokc                 C  s   |   S Ncloner    r   J/var/www/html/venv/lib/python3.8/site-packages/torch/_numpy/_funcs_impl.pycopy!   s    r   	same_kindr   zOptional[CastingModes]dstsrccastingwherec                 C  s$   t j|f| j|d\}| | d S )Nr   )r   typecast_tensorsdtypecopy_r   r   r   r   copyto'   s    r%   )arysc                  G  s$   t j|  }t|trt|S |S d S r   )torch
atleast_1d
isinstancetuplelistr&   resr   r   r   r(   1   s    

r(   c                  G  s$   t j|  }t|trt|S |S d S r   )r'   
atleast_2dr)   r*   r+   r,   r   r   r   r.   9   s    

r.   c                  G  s$   t j|  }t|trt|S |S d S r   )r'   
atleast_3dr)   r*   r+   r,   r   r   r   r/   A   s    

r/   c                 C  s,   | dkrt d|d k	r(|d k	r(td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_checkI   s    r4   c                 C  sB   |dk	s|dk	r&|dkr |j jn|}n
tj|  }t| ||} | S )z%Figure out dtypes, cast if necessary.N)r#   Ztorch_dtyper   result_type_implr   r"   )tensorsr3   r#   r   Z	out_dtyper   r   r   _concat_cast_helperV   s
    
r7   r!   c                 C  s.   t j| d|i\} }t| |||} t| |S )Naxis)r   axis_none_flattenr7   r'   cat)r6   r8   r3   r#   r   r   r   r   _concatenatee   s    r;   zSequence[ArrayLike]zOptional[OutArray]zOptional[DTypeLike])ar_tupler3   r#   r   c                 C  s$   t | ||d t| ||||d}|S )Nr3   )r8   r3   r#   r   )r4   r;   )r<   r8   r3   r#   r   resultr   r   r   concatenaten   s    r?   r#   r   )r2   r#   r   c                C  s&   t | |d d t| ||d}t|S Nr=   r@   )r4   r7   r'   vstackr2   r#   r   r6   r   r   r   rB   z   s    rB   c                C  s&   t | |d d t| ||d}t|S rA   )r4   r7   r'   hstackrC   r   r   r   rD      s    rD   c                C  s&   t | |d d t| ||d}t|S rA   )r4   r7   r'   dstackrC   r   r   r   rE      s    rE   c                C  s&   t | |d d t| ||d}t|S rA   )r4   r7   r'   column_stackrC   r   r   r   rF      s    	rF   )arraysr3   r#   r   c                C  sD   t | ||d t| ||d}|d jd }t||}tj||dS )Nr=   r@   r   r   r8   )r4   r7   ndimr   normalize_axis_indexr'   stack)rG   r8   r3   r#   r   r6   Zresult_ndimr   r   r   rK      s
    rK   )arrvaluesc                 C  s<   |d kr,| j dkr|  } | }| j d }t| |f|dS )Nr   rH   )rI   flattenr;   )rL   rM   r8   r   r   r   append   s    

rO   c                 C  sH   t |trt| |||S t |ttfr6t| t||S tdt|d S )Nzsplit_helper: )r)   int_split_helper_intr+   r*   _split_helper_listr1   type)tensorindices_or_sectionsr8   strictr   r   r   _split_helper   s
    
rW   c           	      C  s   t |tstdt|| j}| j| | }}|dkr<t|| dkrb|||  }}|g| }n,|rntd|| || d  }}|g| }||d g||  7 }t	| ||S )Nzsplit: indices_or_sectionsr   z0array split does not result in an equal divisionr   )
r)   rP   NotImplementedErrorr   rJ   rI   shaper0   r'   split)	rT   rU   r8   rV   lnnumszlstr   r   r   rQ      s    

rQ   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   )rY   .0xr8   rT   r   r   
<listcomp>   s      z&_split_helper_list.<locals>.<listcomp>r   c                 S  s   g | ]\}}|| qS r   r   )ra   r   br   r   r   rd      s     r   )	r)   r+   rX   lenrO   rY   zipr'   rZ   )rT   rU   r8   r_   Z	num_extrar   rc   r   rR      s    
"rR   )aryc                 C  s   t | ||S r   rW   ri   rU   r8   r   r   r   array_split   s    rl   c                 C  s   t | ||ddS )NTrV   rj   rk   r   r   r   rZ     s    rZ   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   Trm   rI   r0   rW   rk   r   r   r   hsplit  s    
ro   c                 C  s"   | j dk rtdt| |dddS )N   z3vsplit only works on arrays of 2 or more dimensionsr   Trm   rn   ri   rU   r   r   r   vsplit  s    
rr   c                 C  s"   | j dk rtdt| |dddS )N   z3dsplit only works on arrays of 3 or more dimensionsrp   Trm   rn   rq   r   r   r   dsplit  s    
rt   r   re   c                 C  s   t | |S r   )r'   kronru   r   r   r   rv     s    rv   rb   c                 C  s   t | ||S r   )r'   vander)rb   NZ
increasingr   r   r   rx     s    rx   2   T)startstopr#   c                 C  s8   |dks|s|st |d kr&t j}tj| |||dS Nr   r#   )rX   r   default_dtypesfloat_dtyper'   linspace)r{   r|   r]   endpointZretstepr#   r8   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)rX   r'   powloglogspace)r{   r|   r]   r   r#   r8   r   Zlogbaser   r   r   	geomspace7  s    
r         $@r~   c                 C  s$   |dks|st tj| ||||dS )Nr   )r   r#   )rX   r'   r   )r{   r|   r]   r   r   r#   r8   r   r   r   r   K  s    	r   )likezOptional[ArrayLikeOrScalar])r{   r|   stepr#   r   c                C  s   |dkrt |d kr | d kr t|d kr2d|  } }| d kr>d} |d krrtdd | ||fD rht jnt j}|jr~tj	n|}tdd | ||fD rt
|dkr| |ks|dk r| |k rtjd|dS tj| |||d}t||}|S )Nr   c                 s  s   | ]}t |V  qd S r   )r   Zis_float_or_fp_tensorr`   r   r   r   	<genexpr>p  s     zarange.<locals>.<genexpr>c                 s  s   | ]}t |V  qd S r   )r   Zis_complex_or_complex_tensorr`   r   r   r   r   v  s     r~   )ZeroDivisionErrorr1   anyr   r   r   	int_dtype
is_complexr'   float64rX   emptyaranger   cast_if_needed)r{   r|   r   r#   r   Z
work_dtyper>   r   r   r   r   Y  s*    
 r   C)r#   r   r   c                C  s    |d krt  j}tj| |dS Nr~   )r   r   r   r'   r   rY   r#   r   r   r   r   r   r     s    
r   )	prototyper#   r   r   c                 C  s$   t j| |d}|d k	r ||}|S r   )r'   
empty_likereshape)r   r#   r   r   rY   r>   r   r   r   r     s    
r   )
fill_valuer#   r   r   c                C  sB   t | tr| f} |d kr|j}t | ttfs2| f} tj| ||dS r   )r)   rP   r#   r*   r+   r'   full)rY   r   r#   r   r   r   r   r   r     s    
r   )r   r#   r   r   c                 C  s&   t j| ||d}|d k	r"||}|S r   )r'   	full_liker   )r   r   r#   r   r   rY   r>   r   r   r   r     s    	
r   c                C  s    |d krt  j}tj| |dS r   )r   r   r   r'   onesr   r   r   r   r     s    
r   c                 C  s$   t j| |d}|d k	r ||}|S r   )r'   	ones_liker   r   r#   r   r   rY   r>   r   r   r   r     s    
r   c                C  s    |d krt  j}tj| |dS r   )r   r   r   r'   zerosr   r   r   r   r     s    
r   c                 C  s$   t j| |d}|d k	r ||}|S r   )r'   
zeros_liker   r   r   r   r   r     s    
r   c                 C  s   |dk	rd| j  }|dkr.| d| | j } |sF| jd dkrF| j} |  } d|j  }|dkrt|d| |j }|s|jd dkr|j}| }t| |fdd} | S )z$Prepare inputs for cov and corrcoef.Nrp   r   r   r   rH   )rI   viewrY   ZmTr   r;   )Zx_tensorZy_tensorrowvarZ
ndim_extrar   r   r   _xy_helper_corrcoef  s    

r   zOptional[ArrayLike])rb   yr#   c          	      C  sf   |d k	s|d k	rt t| ||}|jtjko0|j}|r<tj}t||}t	|}|rb|
tj}|S r   )rX   r   r#   r'   float16is_cpufloat32r   r   corrcoefto)	rb   r   r   biasddofr#   Z	xy_tensoris_halfr>   r   r   r   r     s    	
r   )mr   fweightsaweightsr#   c          
      C  sr   t | ||} |d kr$|dkr dnd}| jtjko4| j}|r@tj}t| |} tj| |||d}	|rn|		tj}	|	S )Nr   r   )Z
correctionr   r   )
r   r#   r'   r   r   r   r   r   covr   )
r   r   r   r   r   r   r   r#   r   r>   r   r   r   r   ,  s    r   c                 C  s   t | |}t| |} t||}|dkr:|jd d n|}|dkr`|jd d dkr`td| d d d f }|d d d d f }tjjj	|||d}|dd d f S )Nr   r   r   Zsamerp   z#mode='same' and even-length weights)padding)
r   r5   r   r   rY   rX   r'   nn
functionalZconv1d)r   vmodedtr   Zaavvr>   r   r   r   _conv_corr_implJ  s    r   )r   r   c                 C  s6   | j d |j d k r||  } }t|d}t| ||S )Nr   r   )rY   r'   flipr   r   r   r   r   r   r   convolvea  s    
r   validc                 C  s   t |}t| ||S r   )r'   Zconj_physicalr   r   r   r   r   	correlatel  s    
r   )weightsrb   c                C  sF   |   dkr| jdtd} t j}tj| f|dd\} t	| ||S )Nr   r~   safer!   )
numelZ	new_emptyrP   r   r   r   r   r"   r'   bincount)rb   r   Z	minlengthr   r   r   r   r   t  s
    
r   )	conditionrb   r   c                C  s^   |d k|d kkrt d| jtjkr0| tj} |d krL|d krLt| }nt| ||}|S )Nz1either both or neither of x and y should be given)r0   r#   r'   boolr   r    )r   rb   r   r>   r   r   r   r      s    r    r   c                 C  s   | j S r   )rI   r   r   r   r   rI     s    rI   c                 C  s
   t | jS r   )r*   rY   r   r   r   r   rY     s    rY   c                 C  s   |d kr|   S | j| S d S r   )r   rY   )r   r8   r   r   r   size  s    r   c                 C  s   t | j|}| |S r   )r   Zexpand_shaperY   r   )r   r8   rY   r   r   r   expand_dims  s    r   r   c                 C  s2   |d krt t| j}nt|| j}t| |S r   )r*   rangerI   r   normalize_axis_tupler'   r   )r   r8   r   r   r   r     s    r   c                 C  s
   t | S r   )r'   flipudr   r   r   r   r     s    r   c                 C  s
   t | S r   )r'   fliplrr   r   r   r   r     s    r   r   r   c                 C  s   t || j}t| ||S r   )r   r   rI   r'   rot90)r   kaxesr   r   r   r     s    r   )arrayr   c                 C  s   t j| |dS )N)r   )r'   broadcast_to)r   rY   r   r   r   r   r     s    r   )broadcast_shapes)r   )argsr   c                 G  s
   t j| S r   )r'   broadcast_tensors)r   r   r   r   r   broadcast_arrays  s    r   xy)r   sparseindexing)xic                   s   t |}|dkrtdd|   fddt|D }|dkr|dkr|d d	 d
d   |d< |d d d
d   |d< |stj| }| rdd |D }t|S )N)r   Zijz.Valid values for `indexing` are 'xy' and 'ij'.r   c                   s6   g | ].\}}|  d | d  |d d   qS )N)rf   r   )r   )ra   irb   s0r   r   rd     s     zmeshgrid.<locals>.<listcomp>r   r   r   )r   rf   rp   )rf   r   c                 S  s   g | ]}|  qS r   r   r`   r   r   r   rd     s     )rg   r0   	enumerater   r'   r   r+   )r   r   r   r   rI   outputr   r   r   meshgrid  s    
r   c           	      C  s   t | } t| }d| }|r$t  }ntj|f|  |d}t| D ]R\}}tj||d|d | |f ||d d   }|r||f }q@|||< q@|S )Nr   r~   r   )r*   rg   r'   r   r   r   r   )	
dimensionsr#   r   ry   rY   r-   r   dimidxr   r   r   indices  s     
r   c                 C  s   t | |S r   )r'   trilr   r   r   r   r   r      s    r   c                 C  s   t | |S r   )r'   triur   r   r   r   r     s    r   c                 C  s   |d kr| }t j| ||dS Noffset)r'   tril_indicesr\   r   r   r   r   r   r     s    r   c                 C  s   |d kr| }t j| ||dS r   )r'   triu_indicesr   r   r   r   r     s    r   )rL   c                 C  s.   | j dkrtdtj| jd | jd |dS Nrp   zinput array must be 2-dr   r   r   )rI   r0   r'   r   rY   rL   r   r   r   r   tril_indices_from  s    
r   c                 C  s.   | j dkrtdtj| jd | jd |dS r   )rI   r0   r'   r   rY   r   r   r   r   triu_indices_from  s    
r   )r#   r   c                C  s,   |d kr| }t j| |f|d}t j||dS )Nr~   )diagonal)r'   r   r   )ry   Mr   r#   r   rT   r   r   r   tri"  s    r   h㈵>:0yE>c                 C  s8   t | |}t| |} t||}tj| ||||dS N)rtolatol	equal_nan)r   r5   r   r   r'   iscloser   re   r   r   r   r#   r   r   r   r   3  s    r   c                 C  s8   t | |}t| |} t||}tj| ||||dS r   )r   r5   r   r   r'   allcloser   r   r   r   r   :  s    r   c                 C  s@   | j |j krdS | |k}|r4|t| t|@ B }|  S NF)rY   r'   isnanallitem)a1a2r   Zcondr   r   r   _tensor_equalA  s    r  )r  r  c                 C  s   t | ||dS )Nr   )r  )r  r  r   r   r   r   array_equalK  s    r	  c                 C  s6   zt | |\}}W n tk
r*   Y dS X t||S r  )r'   r   RuntimeErrorr  )r  r  Za1_tZa2_tr   r   r   array_equivO  s
    r          )rb   r   c                 C  sR   |   r<tj| j|||d}tj| j|||d}|d|  S tj| |||dS d S )N)nanposinfneginfy              ?)r   r'   
nan_to_numrealimag)rb   r   r  r  r  reZimr   r   r   r  Y  s
    r  raise)r   r   r3   r   c                 C  sD   t j| |d\\} }t || j}td f| |df }| | }|S )NrH   .)r   r9   rJ   rI   slice)r   r   r8   r3   r   r   r>   r   r   r   takeh  s
    r  )rL   r   c                 C  s0   t j| |d\\} }t || j}t| ||S NrH   )r   r9   rJ   rI   r'   Ztake_along_dim)rL   r   r8   r   r   r   take_along_axisv  s    r  )r   r   rM   r   c                 C  s   | | j}| | krP| |  d |  }|d|f|j }| | k rx| }|d |  }| || d S Nr   r   )rS   r#   r   	unsqueezeexpandrY   rN   Zput_)r   r   rM   r   r   ratior   r   r   put|  s    r  )rL   r   rM   c                 C  sf   t j| |d\\} }t || j}t||\}}t || j}t| |||}| 	|
| j d S r  )r   r9   rJ   rI   r'   r   r   r#   Zscatterr$   r   rY   )rL   r   rM   r8   r>   r   r   r   put_along_axis  s    r  )r   choicesr3   r   c                   s>   t t j    fddt jD }| |d<  | dS )Nc                   s<   g | ]4\}}t |d | |f d  j| d   qS )r   r   )r'   r   r   rI   )ra   r   r   r  r   r   rd     s   zchoose.<locals>.<listcomp>r   )r'   rK   r   r   rY   squeeze)r   r  r3   r   Zidx_listr   r   r   choose  s    
r"  r  )arreturn_indexr   c                C  s8   t j| |d\\} }t || j}tj| |||d}|S )NrH   )return_inversereturn_countsr   )r   r9   rJ   rI   r'   unique)r#  r$  r%  r&  r8   r   r>   r   r   r   r'    s    	   r'  c                 C  s   t j| ddS )NTas_tuple)r'   nonzeror   r   r   r   r*    s    r*  c                 C  s
   t | S r   )r'   argwherer   r   r   r   r+    s    r+  c                 C  s   t | jddd S )NTr(  r   )r'   rN   r*  r   r   r   r   flatnonzero  s    r,  r   minmaxr3   c                 C  s   t | ||S r   )r'   clampr-  r   r   r   clip  s    r1  r
   )r   repeatsc                 C  s   t | ||S r   )r'   Zrepeat_interleave)r   r2  r8   r   r   r   repeat  s    r3  )Ac                 C  s   t |tr|f}t| |S r   )r)   rP   r'   tile)r4  Zrepsr   r   r   r5    s    
r5  c                 C  s   |d kr| S t |tr|f}|  } d}|D ]}||9 }|dk r,tdq,|  dks^|dkrntj|| jdS | |    }t| f| d | } t	| |S )Nr   r   z0all elements of `new_shape` must be non-negativer~   )
r)   rP   rN   r0   r   r'   r   r#   r?   r   )r   Z	new_shapenew_sizeZ
dim_lengthr2  r   r   r   resize  s    

r7  c                 C  s,   t || j}t || j}t| |||S r   )r   rJ   rI   r'   r   )r   r   axis1axis2r   r   r   r     s    r   )r   r#   r3   c                 C  s    t j| |||djd|d}|S )N)Zdim1Zdim2rf   r~   )r'   r   sum)r   r   r8  r9  r#   r3   r>   r   r   r   trace	  s    r;  c                C  sB   |d krt  j}|d kr| }tj| ||d}||d |S )Nr~   r   )r   r   r   r'   r   r   Zfill_)ry   r   r   r#   r   r   zr   r   r   eye  s    	
r=  c                C  s   t j| |dS r   )r'   r=  )r\   r#   r   r   r   r   identity'  s    r>  )r   c                 C  s   t | |S r   )r'   diagr   r   r   r   r   r?  +  s    r?  c                 C  s   t | |S r   )r'   diagflatr@  r   r   r   rA  /  s    rA  rp   c                 C  s   t | }|f| S r   )r'   r   )r\   rI   r   r   r   r   diag_indices3  s    
rB  c                 C  sH   | j dkstd| j}|dd  |d d kr8tdt|d | j S )Nrp   z input array must be at least 2-dr   rf   z/All dimensions of input must be of equal lengthr   )rI   r0   rY   rB  )rL   sr   r   r   diag_indices_from8  s    
rD  )r   valc           
      C  s  | j dk rtd| dkr0|s0| | | S |j dkrD|d}| j dkr| jd | jd k}|rj|s|  }||d |   q| j\}}t	|||d   }|| }|| }	|d |  | |	|d  | |f< nt
| }|d | jd  | |< | S )Nrp   zarray must be at least 2-dr   r   )rI   r0   r   Zfill_diagonal_r  rY   r   r$   r'   r   rD  )
r   rE  wrapZtallr?  Zmax_Zmin_r   moddivr   r   r   fill_diagonalC  s(    





&rI  c                C  s   t | |\}}|jdkr"| }|jdkr4| }t||}|t jkoT|jpT|j}|t jk}|rlt j	}n
|rvt j
}t||}t||}t ||}|r|t j}n|r|t j}|S Nr   )r'   r(   rI   rN   r   r5   r   r   r   r   uint8r   r   vdotr   )r   re   Zt_aZt_br#   r   is_boolr>   r   r   r   rL  e  s(    


rL  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)   rP   )ra   axr   r   r   rd     s     ztensordot.<locals>.<listcomp>)Zdims)	r)   r+   r*   r   r5   r   r   r'   	tensordot)r   re   r   target_dtyper   r   r   rP    s    rP  r   re   r3   c                 C  sv   t | |}|tjk}|r tj}t| |} t||}| jdksL|jdkrV| | }nt| |}|rr|	tj}|S )Nr   )
r   r5   r'   r   rK  r   r   rI   matmulr   )r   re   r3   r#   rM  r>   r   r   r   dot  s    

rT  c                C  s   t | |}|tjko | jp |j}|tjk}|r8tj}n
|rBtj}t	| |} t	||}t
| |}|rx|tj}n|r|tj}|S r   )r   r5   r'   r   r   r   r   rK  r   r   innerr   )r   re   r#   r   rM  r>   r   r   r   rU    s    
rU  c                 C  s   t | |S r   )r'   outerrR  r   r   r   rV    s    rV  rf   c                 C  s  |d k	r|fd \}}}t || j}t ||j}t| |d} t||d}d}| jd dksp|jd dkrxt|t| d j|d j}| jd dks|jd dkr|d7 }t |t|}t	
| |}tj||d}	t | |} t ||}| d }
| d }| jd dkr| d	 }|d }|d }|jd dkrD|d	 }|	jd
krx|	jd dkrx|	d }|	d }|	d	 }| jd dkr|jd dkr|
| ||  |	d< |	S |jd dkst|| |d< |
 | |d< |
| ||  |d< n| jd dkst|jd dkrV|| ||  |d< || |
|  |d< |
| ||  |d< nB|jd dksjt| | |d< || |d< |
| ||  |d< t|	d|S )Nrs   rf   zDincompatible dimensions for cross product
(dimension must be 2 or 3))rp   rs   ).r   )rs   r~   ).r   ).rp   r   rp   .)r   rJ   rI   r'   moveaxisrY   r0   r   rg   r   r5   r   r   AssertionError)r   re   ZaxisaZaxisbZaxiscr8   msgrY   r#   cpZa0r  r  Zb0b1b2Zcp0Zcp1Zcp2r   r   r   cross  s^    r]  r   )r3   r#   r   r   optimizec                   s(  ddl m} ddlm}m m}m}	m}
 |	|}||}| d k	rRt| |sRt	d|dkrbt
dt|d t }|r|d d d d d	 }n|d |dd   }} fd
d|D }|d krtj| n|}|tjkotdd |D }|rtj}|tjtjtjtjfk}|rtj}t|||}ddlm} z| r~tjjj}tjjj}|dkr`d}n|dkrtd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&|f| }W 5 | r|tjj_|tjj_X || |}|
|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   rf   rp   c                   s   g | ]} |qS r   r   )ra   opra  r   r   rd   *  s     zeinsum.<locals>.<listcomp>c                 s  s   | ]}|j V  qd S r   )r   )ra   tr   r   r   r   .  s     zeinsum.<locals>.<genexpr>)
opt_einsumTautoF)'Z_ndarrayr_  _normalizationsr`  ra  rb  rc  rd  r)   r1   rX   strr   r5   r'   r   r  r   rK  int8int16int32int64r   r"   Ztorch.backendsrh  Zis_availablebackendsZstrategyZenabledrg   r+   	itertoolschainfrom_iterablerh   rO   einsum)r3   r#   r   r   r^  Zoperandsr_  r`  rb  rc  rd  Zsublist_formatZarray_operandsZ
subscriptsr6   rQ  r   Zis_short_intrh  Zold_strategyZold_enabledZsublistsZhas_sublistoutZ
sublistoutr>   r   rf  r   rt    s\    










rt  c                 C  sN   | j jrtd| j  dtj| |d\\} }t|| j}|dk}| ||fS )Nzsorting z is not supportedrH   stable)r#   r   rX   r   r9   rJ   rI   )rT   r8   kindr   ru  r   r   r   _sort_helperd  s    rw  r   r   c                 C  s*   t | |||\} }}tj| ||d}|jS N)r   ru  )rw  r'   sortrM   )r   r8   rv  r   ru  r>   r   r   r   rz  o  s    rz  c                 C  s$   t | |||\} }}tj| ||dS ry  )rw  r'   argsort)r   r8   rv  r   ru  r   r   r   r{  v  s    r{  left)r   r   sorterc                 C  s*   | j jrtd| j  tj| |||dS )Nzsearchsorted with dtype=)sider}  )r#   r   rX   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   rI   r'   rW  )r   r  r  r   r   r   rW    s    rW  c                 C  s*   t || j}t || j}t| ||S r   )r   rJ   rI   r'   swapaxes)r   r8  r9  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 rn|d8 }||krz| S ttd|}|| ||| | |S )Nr   z5'%s' arg requires %d <= %s < %d, but %d was passed inr   r{   )	rI   r   rJ   Z	AxisErrorr+   r   removeinsertr   )r   r8   r{   r\   rY  r   r   r   r   rollaxis  s    
r  c                 C  s@   |d k	r2t j|| jdd}t|ts2|ft| }t| ||S )NT)Zallow_duplicate)r   r   rI   r)   r*   rg   r'   roll)r   shiftr8   r   r   r   r    s
    
r  c                 C  sR   |dkr| }n@|d kr |   }n.t|trD| }|D ]}|  |}q2n
|  |}|S )Nr   )r!  r)   r*   )r   r8   r>   rO  r   r   r   r!    s    


r!  c                 C  s"   t |dkr|d n|}| |S r  )rg   r   )r   Znewshaper   r   r   r   r     s    r   c                 C  s:   |dkrt tt| j}nt|dkr0|d }| |S )N)r   Nr   r   r   )r*   reversedr   rI   rg   Zpermute)r   r   r   r   r   	transpose  s
    r  c                 C  s
   t | S r   )r'   rN   rx  r   r   r   ravel  s    r  )r   prependrO   c                 C  s   t || j}|dk r$td| |dkr0| S |d k	rjt| j}|jdkrV|j| nd||< t||}|d k	rt| j}|jdkr|j| nd||< t||}tj| ||||dS )Nr   z#order must be non-negative but got r   )r8   r  rO   )	r   rJ   rI   r0   r+   rY   r'   r   diff)r   r\   r8   r  rO   rY   r   r   r   r    s    

r  )r<  c                 C  s    t | }|r|dt j  }|S )N   )r'   anglepi)r<  degr>   r   r   r   r    s    
r  c                 C  s
   t | S r   )r'   sincrw   r   r   r   r    s    r  )r8   
edge_order)fc                G  s  | j }t|}|d kr&tt|}nt||}t|}t|}|dkrVdg| }n|dkrt|d sz|d j dkr|| }n||kr:t	|}t
|D ]\}	}
t|
}
|
j dkrqn|
j dkrtdt|
| j||	  krtd|
jjs
|
jjs
|
 }
t|
}||d k r.|d }|||	< qntd|dkrTtdg }td g| }td g| }td g| }td g| }| j}t|ttfk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 ||< |rt| t| | t|  d|  |t|< n|dd }|dd  }| |||   }|| ||  }||||   }dg| }d||< ||}||}||}|| t|  || t|   || t|   |t|< |dkrd||< d||< d||< |rR|n|d }| t| | t|  | |t|< d||< d||< d||< |r|n|d }| t| | t|  | |t|< nd||< d||< d||< d||< |rd| }d| }d| }nL|d }|d }d| |  |||   }|| ||  }| |||   }|| t|  || t|   || t|   |t|< d||< d||< d||< d||< |rd| }d| }d| }nJ|d }|d }||||   }||  ||  }d| | |||   }|| t|  || t|   || t|   |t|< || td ||< td ||< td ||< td ||< q|dkr|d S |S d 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 argumentsrp   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~   rf   g       @g      g      g      ?g       g      ?)rI   r   Zndarrays_to_tensorsr*   r   r   rg   r   Z	is_scalarr+   r   r'   Z	as_tensorr0   rY   r#   is_floating_pointr   doubler  r  r1   r  python_type_for_torchrP   r   r   rh   r   r   rO   )r  r8   r  varargsry   r   Zlen_axesr\   Zdxr   Z	distancesZdiffxZoutvalsZslice1Zslice2Zslice3Zslice4otypeZax_dxr3   Zuniform_spacingZdx1Zdx2r   re   crY   Zdx_0Zdx_nr   r   r   gradient  s    
$






*



.

$(
.

.


r  )r   r3   c                 C  sN   |   rtj| |d}n2|  rFttj| j|dtj| j|d}n| }|S )N)decimals)r  r'   roundr   complexr  r  )r   r  r3   r>   r   r   r   r    s    r  d   c                 C  sJ   t | s| S |dkr(|t | jj }t | j|k }| rF| jS | S rJ  )	r'   r   finfor#   epsabsr  r  r  )r   Ztolmaskr   r   r   real_if_close  s    
r  c                 C  s
   t | S r   )r'   r  r   r   r   r   r    s    r  c                 C  s   |   r| jS t| S r   )r   r  r'   r   r   r   r   r   r    s    r  c                 C  s$   t | r| jdkS t j| t jdS r}   )r'   r   r  r   r   rw   r   r   r   	iscomplex  s    

r  c                 C  s$   t | r| jdkS t j| t jdS r}   )r'   r   r  r   r   rw   r   r   r   isreal  s    

r  c                 C  s
   t | S r   r'   r   rw   r   r   r   iscomplexobj  s    r  c                 C  s   t |  S r   r  rw   r   r   r   	isrealobj  s    r  rb   r3   c                 C  s
   t | S r   )r'   isneginfr  r   r   r   r    s    r  c                 C  s
   t | S r   )r'   isposinfr  r   r   r   r    s    r  c                 C  s   t j| S r   )r'   speciali0rw   r   r   r   r    s    r  c                 C  s>   ddl m} z|| }| dkW S  tk
r8   Y dS X d S )Nr   rf  F)rj  ra  r   	Exception)r   ra  rg  r   r   r   isscalar  s    r  c                 C  s   t  j}tj| d|dS NF)periodicr#   )r   r   r   r'   Zhamming_windowr   r#   r   r   r   hamming  s    
r  c                 C  s   t  j}tj| d|dS r  )r   r   r   r'   Zhann_windowr  r   r   r   hanning  s    
r  c                 C  s   t  j}tj| |d|dS )NF)betar  r#   )r   r   r   r'   Zkaiser_window)r   r  r#   r   r   r   kaiser  s    
r  c                 C  s   t  j}tj| d|dS r  )r   r   r   r'   Zblackman_windowr  r   r   r   blackman$  s    
r  c                 C  s   t  j}tj| d|dS r  )r   r   r   r'   Zbartlett_windowr  r   r   r   bartlett)  s    
r  )r6   c                  G  s~   d}d}| D ]P}|j }t|r"d}|js4|js4d}nt|d }|d krPtdt||}q|rnt	d | S t	d | S d S )NFr   Trp   z+can't get common type for non-numeric arrayr   )
r#   r  r  r   array_precisiongetr1   builtinsr/  
array_type)r6   r   	precisionr   rg  pr   r   r   common_type@  s    r  
   )r   binsr   c           
      C  s  |d k	rt d|d k	r(|jjr(td| jjp6| jj }|d kpJ|jj }|rX|  } |d k	rnt|| j}t|t	j
r|jdkrt|}nt|| j}|d krt	j| ||t|d\}}	nt	j| |||t|d\}}	|s|r| }|r|	 }	||	fS )N3normed argument is deprecated, use density= insteadzcomplex weights histogram.r   )weightdensity)r   r  r  )r0   r#   r   rX   r  r  r   r   r)   r'   ZTensorrI   operatorindex	histogramr   long)
r   r  r   normedr   r  Zis_a_intZis_w_inthre   r   r   r   r  W  s8    
    
r  )r   r   c           
      C  s   t | t |krtdzt |}W n tk
r<   d}Y nX |dkrV|dkrV||g}t| |f|||||\}}	||	d |	d fS )Nz"x and y must have the same length.r   rp   r   )rg   r0   r1   histogramdd)
rb   r   r  r   r  r   r  ry   r  er   r   r   histogram2d  s    

r  c                   s^  |d k	rt dddlm}m} t ttfr:| j n|  t	   j
jsd j
jsd   t|tptdd |D  }|r||}dd |D }	 fdd|D }|d k	r|  }|d k	r jd	d
}
t|
ddj }t| }t| j
}d|i}ni }tj ||fdt|i|\}}|rVdd t||	D }||fS )Nr  r   )ra  normalize_seq_array_likec                 s  s   | ]}t |tV  qd S r   rN  ra   re   r   r   r   r     s     zhistogramdd.<locals>.<genexpr>c                 S  s   g | ]
}|j qS r   r~   r  r   r   r   rd     s     zhistogramdd.<locals>.<listcomp>c                   s   g | ]}t | jqS r   )r   r   r#   r  sampler   r   rd     s     r   )r   rp   rf   r  r  c                 S  s   g | ]\}}t ||qS r   )r   r   )ra   ZbbZdtypr   r   r   rd     s     )r0   rj  ra  r  r)   r+   r*   Tr'   r.   r#   r  r   r  rP   r  r  rN   tolistZaminmaxr:   r   r   r   r  r   rh   )r  r  r   r  r   r  ra  r  Zbins_is_arrayZbins_dtypesmmZw_kwdr  re   r   r  r   r    s8    



"r  c                C  sP  ddl m} |  dkr"|| jS | jtjkr8tj}n| jjrttj}| jtj	kp|j
| j  kop|jkn  o|j
| j  ko|jkn  }|rtj	ntj}n| jjrtjtjtjfD ]2}t|}|j
|   kr|jkrn q|} qqnTtjtjtjtjtjfD ]:}t|}|j
|   kr6|jkrn n
|} qHq||S )Nr   )DType)Z_dtypesr  r   r#   r'   r   r   r  r   	complex64r.  r  r/  r  
complex128r  r   r   rK  rl  rm  rn  ro  Ziinfo)r   r  r#   fiZfits_in_singler   iir   r   r   min_scalar_type  s.    

:

 
r  constant)r   	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 )Nr  Zconstant_valuesr   rp   r   )value)rX   r  r   r  r#   r'   r   rI   r   rN   r   r   padr*   )r   r  r   kwargsr  typr   r   r   r    s    r  )r   F)r   N)NNr   )r   NNr   )r   NNr   )r   N)N)F)F)r   )r   )NF)rz   TFNr   )rz   TNr   )rz   Tr   Nr   )NNr   N)Nr   )Nr   FN)Nr   )Nr   FN)Nr   )Nr   FN)Nr   )Nr   FN)NT)NTNN)NTFNNN)r   )r   )Nr   )NN)N)N)r   r   )F)r   )r   )r   N)r   N)r   )r   )Nr   N)r   r   F)r   r   F)F)F)Tr  NN)NNr  )r  )Nr  )FFFN)NNN)N)N)r   r   r   )r   r   r   NN)Nr   Nr   )N)r   )r   )rp   )F)rp   )N)N)rf   rf   rf   N)rf   NN)rf   NN)r|  N)r   )N)N)r   )N)r   )r   rf   NN)F)r   N)r  )N)N)r  NNNN)r  NNNN)r  NNNN)r  )__doc__
__future__r   r  rq  r  typingr   r   r   r'    r   r   rj  r	   r
   r   r   r   r   r   r   r%   r(   r.   r/   r4   r7   r;   r?   rB   Z	row_stackrD   rE   rF   rK   rO   rW   rQ   rR   rl   rZ   ro   rr   rt   rv   rx   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    rI   rY   r   r   r   r   r   r   r   r   r   r   rP   r   r   r   r   r   r   r   r   r   r   r  r	  r  r  r  r  r  r  r"  r'  r*  r+  r,  r1  r3  r5  r7  r   r;  r=  r>  r?  rA  rB  rD  rI  rL  rP  rT  rU  rV  r]  rt  rw  rz  r{  r  rW  r  r  r  r!  r   r  r  r  r  r  r  r  aroundZround_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   <module>   sv  $  	 
          

              .                        	 
		  
        
      	       " H]  
     1     	    /        :%