U
    ©Ê¹j<  ã                   @  sª  d dl mZ d dlZd dlZd dlZd dlmZ d dlZddlm	Z	m
Z
mZmZmZ ddlmZmZmZmZ dZddd	d
dddddddgZddd	d
ddddddœ	ZG dd„ dƒZdFdd„ZdddddddddddddddddddddddddddddœZdddddddddœZdd d!d"d#d$d%d&d'd(d)d*dd+œZd,d-„ ZG d.d/„ d/ƒZd0d1„ ZdGd2d3d4d dd5œd6d7„ZdHdd8œd9d:„ZdIdd8œd;d<„Z d=d>„ Z!d?d@„ Z"dJdBdC„Z#dDdE„ Z$dS )Ké    )ÚannotationsN)ÚSequenceé   )Ú_dtypesÚ_dtypes_implÚ_funcsÚ_ufuncsÚ_util)Ú	ArrayLikeÚnormalize_array_likeÚ
normalizerÚNotImplementedTypeÚC_CONTIGUOUSÚF_CONTIGUOUSÚOWNDATAÚ	WRITEABLEZALIGNEDZWRITEBACKIFCOPYZFNCZFORCZBEHAVEDZCARRAYZFARRAY)	ÚCÚFÚOÚWÚAÚXÚBÚCAZFAc                      sH   e Zd Zddœdd„Zddœdd„Zd	d
„ Z‡ fdd„Zdd„ Z‡  ZS )ÚFlagsÚdict)Úflag_to_valuec                 C  s$   t dd„ | ¡ D ƒƒst‚|| _d S )Nc                 s  s   | ]}|t kV  qd S ©N)ÚFLAGS)Ú.0Úk© r!   úT/var/www/html/bwave/python/venv/lib/python3.8/site-packages/torch/_numpy/_ndarray.pyÚ	<genexpr>1   s     z!Flags.__init__.<locals>.<genexpr>)ÚallÚkeysÚAssertionErrorÚ_flag_to_value)Úselfr   r!   r!   r"   Ú__init__0   s    zFlags.__init__Ústr)Úattrc                 C  s4   |  ¡ r | ¡ tkr | | ¡  S td|› d�ƒ‚d S )NzNo flag attribute 'ú')ÚislowerÚupperr   ÚAttributeError)r(   r+   r!   r!   r"   Ú__getattr__4   s    zFlags.__getattr__c              
   C  sr   |t  ¡ krt | }|tkr^z| j| W S  tk
rZ } ztd|›�ƒ|‚W 5 d }~X Y qnX ntd|› d�ƒ‚d S )Nzkey=úNo flag key 'r,   )ÚSHORTHAND_TO_FLAGSr%   r   r'   ÚKeyErrorÚNotImplementedError)r(   ÚkeyÚer!   r!   r"   Ú__getitem__:   s    $zFlags.__getitem__c                   s4   |  ¡ r"| ¡ tkr"|| | ¡ < ntƒ  ||¡ d S r   )r-   r.   r   ÚsuperÚ__setattr__)r(   r+   Úvalue©Ú	__class__r!   r"   r9   E   s    zFlags.__setattr__c                 C  s2   |t ks|t ¡ krtdƒ‚ntd|› d�ƒ‚d S )Nz"Modifying flags is not implementedr1   r,   )r   r2   r%   r4   r3   )r(   r5   r:   r!   r!   r"   Ú__setitem__K   s    
zFlags.__setitem__)	Ú__name__Ú
__module__Ú__qualname__r)   r0   r7   r9   r=   Ú__classcell__r!   r!   r;   r"   r   /   s
   r   c                   s,   |pˆ j }‡ fdd„}||_ d|› �|_|S )Nc                    s
   ˆ | |ŽS r   r!   )ÚargsÚkwargs©Úfnr!   r"   ÚfU   s    zcreate_method.<locals>.fzndarray.)r>   r@   )rE   ÚnamerF   r!   rD   r"   Úcreate_methodR   s
    
rH   )ZclipZnonzeroÚrepeatÚroundZsqueezeZswapaxesÚravelZdiagonalÚdotÚtraceZargsortZsearchsortedZargmaxZargminÚanyr$   ÚmaxÚminZptpÚsumÚprodZmeanÚvarZstdZcumsumZcumprodÚtakeÚchooseÚabsoluteZpositiveÚnegativeZgreaterÚlessZgreater_equalZ
less_equal)ÚabsÚinvertÚposÚnegÚgtÚltÚgeÚleÚsubtractÚmultiplyÚdivideZfloor_divideÚpowerÚ	remainderZbitwise_andZ
bitwise_orZbitwise_xorZ
left_shiftZright_shift)ÚaddÚsubÚmulÚtruedivÚfloordivÚpowÚmodÚandÚorÚxorÚlshiftÚrshiftÚmatmulc                 C  sT   t | tjƒr4| jtjtjtjtjfkrP|  tj	¡S nt | t
ƒrPt
dd„ | D ƒƒS | S )Nc                 s  s   | ]}t |ƒV  qd S r   )Ú_upcast_int_indices)r   Úir!   r!   r"   r#   ¥   s     z&_upcast_int_indices.<locals>.<genexpr>)Ú
isinstanceÚtorchÚTensorÚdtypeZint8Zint16Zint32Zuint8ÚtoZint64Útuple)Úindexr!   r!   r"   rs       s    
rs   c                   @  s  e Zd Zdfdd„Ze ¡ D ]&\ZZee	ep,eƒZ
ee
eƒeƒ e< qeejdƒZeejƒZe ¡ D ]2\ZZeeepreƒZ
de› d�Zee
eƒeƒ e< q`e ¡ D ]z\ZZeeep®eƒZ
de› d�Zee
eƒeƒ e< de› d�Zee
fdd„eƒeƒ e< d	e› d�Zee
fd
d„eƒeƒ e< qœeejdƒZedd„ dƒZ[[[[[
[edd„ ƒZedd„ ƒZedd„ ƒZedd„ ƒZedd„ ƒZedd„ ƒZedd„ ƒZedd„ ƒZ edd„ ƒZ!ed d!„ ƒZ"ed"d#„ ƒZ#e#j$d$d#„ ƒZ#ed%d&„ ƒZ%e%j$d'd&„ ƒZ%d(d)„ Z&e'dgd+d,d-œd.d/„ƒZ(e'dhd+d,d-œd0d1„ƒZ)d2d3œd4d5„Z*d6d7„ Z+e'd+d8œd9d:„ƒZ,d;d<„ Z-d=d>„ Z.ee.ƒZ/d?d@„ Z0dAdB„ Z1dCdD„ Z2dEdF„ Z3dGdH„ Z4dIdJ„ Z5dKdL„ Z6dMdN„ Z7dOdP„ Z8dQdR„ Z9dSdT„ Z:d*dUœdVdW„Z;didYdZ„Z<d[d\„ Z=d]d^„ Z>d_d`„ Z?e	j@Z@e	jAZAddaœdbdc„ZBddde„ ZCdS )jÚndarrayNc                 C  s4   |d krt  ¡ | _nt|t jƒr(|| _ntdƒ‚d S )NzSndarray constructor is not recommended; prefereither array(...) or zeros/empty(...))rv   rw   Útensorru   Ú
ValueError)r(   Útr!   r!   r"   r)   ¯   s    ÿzndarray.__init__ÚconjÚ__Ú__rc                 C  s
   ||| ƒS r   r!   ©r(   ÚotherrE   r!   r!   r"   Ú<lambda>Í   ó    zndarray.<lambda>Z__ic                 C  s   || || d�S )N)Úoutr!   rƒ   r!   r!   r"   r…   Ð   r†   Ú
__divmod__c                 C  s   t  || ¡S r   )r   Údivmod©r(   r„   r!   r!   r"   r…   Ö   r†   Ú__rdivmod__c                 C  s   t | jjƒS r   )rz   r}   Úshape©r(   r!   r!   r"   rŒ   Ü   s    zndarray.shapec                 C  s
   | j  ¡ S r   )r}   Únumelr�   r!   r!   r"   Úsizeà   s    zndarray.sizec                 C  s   | j jS r   )r}   Úndimr�   r!   r!   r"   r�   ä   s    zndarray.ndimc                 C  s   t  | jj¡S r   )r   rx   r}   r�   r!   r!   r"   rx   è   s    zndarray.dtypec                   s&   | j  ¡ ‰ t‡ fdd„| j  ¡ D ƒƒS )Nc                 3  s   | ]}|ˆ  V  qd S r   r!   )r   Ústride©Zelsizer!   r"   r#   ï   s     z"ndarray.strides.<locals>.<genexpr>)r}   Úelement_sizerz   r‘   r�   r!   r’   r"   Ústridesì   s    
zndarray.stridesc                 C  s
   | j  ¡ S r   )r}   r“   r�   r!   r!   r"   Úitemsizeñ   s    zndarray.itemsizec                 C  s(   t | j ¡ | jj ¡ | jjd kddœƒS )NT)r   r   r   r   )r   r}   Úis_contiguousÚTZ_baser�   r!   r!   r"   Úflagsõ   s    

üÿzndarray.flagsc                 C  s
   | j  ¡ S r   )r}   Zdata_ptrr�   r!   r!   r"   Údata  s    zndarray.datac                 C  s   | j  ¡  ¡ S r   )r}   ZstorageÚnbytesr�   r!   r!   r"   rš     s    zndarray.nbytesc                 C  s   |   ¡ S r   )Ú	transposer�   r!   r!   r"   r—   	  s    z	ndarray.Tc                 C  s
   t  | ¡S r   )r   Úrealr�   r!   r!   r"   rœ     s    zndarray.realc                 C  s   t |ƒj| j_d S r   )Úasarrayr}   rœ   ©r(   r:   r!   r!   r"   rœ     s    c                 C  s
   t  | ¡S r   )r   Úimagr�   r!   r!   r"   rŸ     s    zndarray.imagc                 C  s   t |ƒj| j_d S r   )r�   r}   rŸ   rž   r!   r!   r"   rŸ     s    c                 C  s    t  |¡j}| j |¡}t|ƒS r   )r   rx   Útorch_dtyper}   ry   r|   )r(   rx   r    r   r!   r!   r"   Úastype  s    zndarray.astyper   r
   r   ©r(   Úorderc                 C  s   |   ¡ S r   )Úcloner¢   r!   r!   r"   Úcopy#  s    zndarray.copyc                 C  s
   t  | ¡S r   )rv   Úflattenr¢   r!   r!   r"   r¦   '  s    zndarray.flattenF)Úrefcheckc                G  sÆ   | j }|rtd|› d�ƒ‚|dkr&d S t|ƒdkr:|d }t|tƒrJ|f}| ¡ }t dd„ |D ƒ¡rntdƒ‚t	 
|¡}|| ¡ k r˜|d |…  |¡}n$t |¡}||d | ¡ …< | |¡}|| _ d S )	Nzresize(..., refcheck=z is not implemented.)r!   r   r   r   c                 s  s   | ]}|d k V  qdS )r   Nr!   )r   Úxr!   r!   r"   r#   @  s     z!ndarray.resize.<locals>.<genexpr>z0all elements of `new_shape` must be non-negative)r}   r4   Úlenru   Úintr¦   ÚbuiltinsrN   r~   ÚmathrR   rŽ   Úreshaperv   Zzeros)r(   r§   Z	new_shapeÚaZ	new_numelÚretÚbr!   r!   r"   Úresize+  s*    
ÿ



zndarray.resizec                 C  s    t  |¡j}| j |¡}t|ƒS r   )r   rx   r    r}   Úviewr|   )r(   rx   r    Ztviewr!   r!   r"   r²   M  s    zndarray.view)r:   c                 C  s   | j  |¡ d S r   )r}   Zfill_rž   r!   r!   r"   ÚfillR  s    zndarray.fillc                 C  s
   | j  ¡ S r   )r}   Útolistr�   r!   r!   r"   r´   X  s    zndarray.tolistc                 C  s   t | jƒ dd¡ dd¡S )Nr}   ztorch.ndarrayzdtype=torch.zdtype=)r*   r}   Úreplacer�   r!   r!   r"   Ú__str__[  s    
 ÿ þÿzndarray.__str__c              	   C  sF   zt  | |¡W S  ttfk
r@   tj| jdtd�}t|ƒ Y S X d S )NF)Z
fill_valuerx   )	r   ÚequalÚRuntimeErrorÚ	TypeErrorrv   ÚfullrŒ   Úboolr�   )r(   r„   Zfalsyr!   r!   r"   Ú__eq__d  s
    zndarray.__eq__c                 C  s
   | |k S r   r!   rŠ   r!   r!   r"   Ú__ne__l  s    zndarray.__ne__c                 C  s4   zt  | j ¡ ¡W S  tk
r.   tdƒ‚Y nX d S )Nz=only integer scalar arrays can be converted to a scalar index)Úoperatorr{   r}   ÚitemÚ	Exceptionr¹   r�   r!   r!   r"   Ú	__index__o  s    ÿzndarray.__index__c                 C  s
   t | jƒS r   )r»   r}   r�   r!   r!   r"   Ú__bool__w  s    zndarray.__bool__c                 C  s
   t | jƒS r   )rª   r}   r�   r!   r!   r"   Ú__int__z  s    zndarray.__int__c                 C  s
   t | jƒS r   )Úfloatr}   r�   r!   r!   r"   Ú	__float__}  s    zndarray.__float__c                 C  s
   t | jƒS r   )Úcomplexr}   r�   r!   r!   r"   Ú__complex__€  s    zndarray.__complex__c                 C  s8   z| j  ¡ }t|ƒ|k}W n tk
r2   d}Y nX |S )NF)r}   r¿   rª   rÀ   )r(   ÚvÚresultr!   r!   r"   Ú
is_integerƒ  s    

zndarray.is_integerc                 C  s   | j jd S )Nr   )r}   rŒ   r�   r!   r!   r"   Ú__len__‹  s    zndarray.__len__c                 C  s   | j  |¡S r   )r}   Ú__contains__)r(   r¨   r!   r!   r"   rÌ   Ž  s    zndarray.__contains__c                 G  s   t  | |¡S r   )r   r›   )r(   Zaxesr!   r!   r"   r›   ‘  s    zndarray.transpose©r£   c                G  s   t j| ||d�S )NrÍ   )r   r­   )r(   r£   rŒ   r!   r!   r"   r­   •  s    zndarray.reshapeéÿÿÿÿc              	   C  s   t  | t  | |||¡¡ d S r   )r   ZcopytoÚsort)r(   ZaxisÚkindr£   r!   r!   r"   rÏ   ™  s    zndarray.sortc                 G  s<   |dkr| j  ¡ S t|ƒdkr.|  ¡ |d  S |  |¡S d S )Nr!   r   r   )r}   r¿   r©   rK   r7   )r(   rB   r!   r!   r"   r¿   �  s
    
zndarray.itemc                   sf   | j ‰‡fdd„‰ t|tƒr<t|ƒ‡ fdd„t|ƒD ƒƒ}n
ˆ d|ƒ}t |¡}t|ƒ}tˆ 	|¡ƒS )Nc                   sœ   t |tƒr|jd k	r|jdk s"|S t ˆ | f¡‰ t |jtƒsJ|jd ksJt‚t |jtƒsd|jd ksdt‚|jrt|jd nd }|jrˆ|jd nd }t|||j ƒS )Nr   r   )	ru   ÚsliceÚsteprv   ÚflipÚstartrª   r&   Ústop)rt   ÚsrÔ   rÕ   )r}   r!   r"   Úneg_step¬  s    z%ndarray.__getitem__.<locals>.neg_stepc                 3  s   | ]\}}ˆ ||ƒV  qd S r   r!   )r   rt   rÖ   )r×   r!   r"   r#   ¼  s     z&ndarray.__getitem__.<locals>.<genexpr>r   )
r}   ru   r   ÚtypeÚ	enumerater	   Úndarrays_to_tensorsrs   r|   r7   )r(   r{   r!   )r×   r}   r"   r7   ©  s    
 

zndarray.__getitem__c                 C  sF   t  |¡}t|ƒ}t|ƒtjkr8t|ƒ}t  || jj	¡}| j 
||¡S r   )r	   rÚ   rs   rØ   r   ZSCALAR_TYPESr   Zcast_if_neededr}   rx   r=   )r(   r{   r:   r!   r!   r"   r=   Ã  s    
zndarray.__setitem__©Ústreamc                C  s   | j j|d�S )NrÛ   )r}   Ú
__dlpack__)r(   rÜ   r!   r!   r"   rÝ   Ð  s    zndarray.__dlpack__c                 C  s
   | j  ¡ S r   )r}   Ú__dlpack_device__r�   r!   r!   r"   rÞ   Ó  s    zndarray.__dlpack_device__)N)r   )r   )rÎ   NN)Dr>   r?   r@   r)   ÚmethodsÚitemsÚmethodrG   Úgetattrr   rE   rH   Úvarsr   Ú	conjugater€   ÚdunderÚ	ri_dunderÚplainZrvarZivarr‰   rˆ   r‹   ÚpropertyrŒ   r�   r�   rx   r”   r•   r˜   r™   rš   r—   rœ   ÚsetterrŸ   r¡   r   r¥   r¦   r±   r²   r³   r´   r¶   Ú__repr__r¼   r½   rÁ   rÂ   rÃ   rÅ   rÇ   rÊ   rË   rÌ   r›   r­   rÏ   r¿   r7   r=   rT   ÚputrÝ   rÞ   r!   r!   r!   r"   r|   ®   s®   


 ÿ ÿ













"

r|   c                 C  sN   g }| D ]@}t |ttfƒr"t|ƒ}t |tƒr>| |j ¡ ¡ q| |¡ q|S )z'Recusrively convert tensors into lists.)ru   Úlistrz   Ú_tolistr|   Úappendr}   r´   )ÚobjZa1Úelemr!   r!   r"   rí   ×  s    
rí   TÚKF)r¥   r£   ÚsubokÚndminÚlikec          	      C  sª   |dk	rt dƒ‚|d k	r t dƒ‚|dkr,t ‚t| tƒrT|dkrT|d krT|| jkrT| S t| ttfƒrjt| ƒ} t| tƒrz| j} d }|d k	r’t 	|¡j
}t | |||¡}t|ƒS )NFz#'subok' parameter is not supported.z"'like' parameter is not supported.rñ   )r4   ru   r|   r�   rì   rz   rí   r}   r   rx   r    r	   Z_coerce_to_tensor)	rï   rx   r¥   r£   rò   ró   rô   r    r}   r!   r!   r"   Úarrayè  s0    ÿþýü
rõ   )rô   c                C  s   t | |||ddd�S )NFr   )rx   r£   rô   r¥   ró   )rõ   )r®   rx   r£   rô   r!   r!   r"   r�   
  s    r�   c                C  s(   t | ||d�}|j ¡ s$|j ¡ |_|S )N)rx   rô   )r�   r}   r–   Ú
contiguous)r®   rx   rô   Zarrr!   r!   r"   Úascontiguousarray  s    
r÷   c                C  s   t  | ¡}t|ƒS r   )rv   Úfrom_dlpackr|   )r¨   r   r!   r!   r"   rø     s    
rø   c                 C  s2   zt  | ¡}W n tk
r,   t| ƒj}Y nX |S r   )r   rx   rÀ   r�   )ÚentryÚdtyr!   r!   r"   Ú_extract_dtype  s
    rû   Úsafec                 C  s"   t | ƒ} t |ƒ}t | j|j|¡S r   )rû   r   Zcan_cast_implr    )Zfrom_ry   ZcastingZto_r!   r!   r"   Úcan_cast"  s    rý   c                  G  sp   g }| D ]R}zt |ƒj}W n4 tttfk
rN   t |¡}tjd|j	d�}Y nX | 
|¡ qtj|Ž }t |¡S )Nr   )rx   )r�   r}   r¸   r~   r¹   r   rx   rv   Úemptyr    rî   r   Zresult_type_impl)Zarrays_and_dtypesZtensorsrù   r   rú   r    r!   r!   r"   Úresult_type)  s    

rÿ   )N)N)Nrñ   )N)rü   )%Ú
__future__r   r«   r¬   r¾   Útypingr   rv   Ú r   r   r   r   r	   Z_normalizationsr
   r   r   r   Znewaxisr   r2   r   rH   rß   rå   ræ   rs   r|   rí   rõ   r�   r÷   rø   rû   rý   rÿ   r!   r!   r!   r"   Ú<module>   sÀ   õ÷#
ß%øó  +"
