a
    hA                     @  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g dZdd	d
ddddddd	ZG dd dZdGd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e e_G d/d0 d0Zd1d2 ZdHd3d4d5d dd6d7d8Z dIdd9d:d;Z!dJdd9d<d=Z"d>d? Z#d@dA Z$dKdCdDZ%dEdF Z&dS )L    )annotationsN)Sequence   )_dtypes_dtypes_impl_funcs_ufuncs_util)	ArrayLikenormalize_array_like
normalizerNotImplementedType)C_CONTIGUOUSF_CONTIGUOUSOWNDATA	WRITEABLEALIGNEDWRITEBACKIFCOPYZFNCZFORCBEHAVEDCARRAYFARRAYr   r   r   r   r   r   r   r   r   )	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J || _d S )Nc                 s  s   | ]}|t v V  qd S N)FLAGS).0k r&   C/var/www/auris/lib/python3.9/site-packages/torch/_numpy/_ndarray.py	<genexpr>4       z!Flags.__init__.<locals>.<genexpr>)allkeys_flag_to_value)selfr!   r&   r&   r'   __init__3   s    zFlags.__init__str)attrc                 C  s4   |  r | tv r | |  S td| dd S )NzNo flag attribute '')islowerupperr#   AttributeError)r-   r0   r&   r&   r'   __getattr__7   s    zFlags.__getattr__c              
   C  st   |t  v rt | }|tv r`z| j| W S  ty\ } ztd||W Y d }~qpd }~0 0 ntd| dd S )Nzkey=No flag key 'r1   )SHORTHAND_TO_FLAGSr+   r#   r,   KeyErrorNotImplementedError)r-   keyer&   r&   r'   __getitem__=   s    (zFlags.__getitem__c                   s4   |  r"| tv r"|| | < nt || d S r"   )r2   r3   r#   super__setattr__)r-   r0   value	__class__r&   r'   r>   H   s    zFlags.__setattr__c                 C  s2   |t v s|t v rtdntd| dd S )Nz"Modifying flags is not implementedr6   r1   )r#   r7   r+   r9   r8   )r-   r:   r?   r&   r&   r'   __setitem__N   s    
zFlags.__setitem__)	__name__
__module____qualname__r.   r5   r<   r>   rB   __classcell__r&   r&   r@   r'   r   2   s
   r   c                   s,   |p j } fdd}||_ d| |_|S )Nc                    s    | i |S r"   r&   )argskwargsfnr&   r'   fX   s    zcreate_method.<locals>.fzndarray.)rC   rE   )rJ   namerK   r&   rI   r'   create_methodU   s
    
rM   )ZclipZnonzerorepeatroundZsqueezeZswapaxesravelZdiagonaldottraceZargsortZsearchsortedZargmaxZargminanyr*   maxminZptpsumprodmeanvarZstdZcumsumZcumprodtakechooseabsoluteZpositivenegativeZgreaterZ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v 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(      r)   z&_upcast_int_indices.<locals>.<genexpr>)
isinstancetorchTensordtypeZint8int16int32Zuint8toint64tuple)indexr&   r&   r'   rx      s    
rx   c                   @  s   e Zd ZdS )_UnspecifiedN)rC   rD   rE   r&   r&   r&   r'   r      s   r   c                   @  s   e Zd Zdkd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pe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< qe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%dld+d,Z&e'dmd.d/d0d1d2Z(e'dnd.d/d0d3d4Z)d5d6d7d8Z*e+j,e+j,fd9d:Z-e'd.d;d<d=Z.d>d? Z/d@dA Z0dBdC Z1ee1Z2dDdE Z3dFdG Z4dHdI Z5dJdK Z6dLdM Z7dNdO Z8dPdQ Z9dRdS Z:dTdU Z;dVdW Z<dXdY Z=d-dZd[d\Z>dod^d_Z?d`da Z@dbdc ZAddde ZBe	jCZCe	jDZDddfdgdhZEdidj ZFdS )pndarrayNc                 C  s4   |d u rt  | _nt|t jr(|| _ntdd S )NzSndarray constructor is not recommended; prefereither array(...) or zeros/empty(...))r{   r|   tensorrz   
ValueError)r-   tr&   r&   r'   r.      s    zndarray.__init__conj__Z__rc                 C  s
   ||| S r"   r&   r-   otherrJ   r&   r&   r'   <lambda>   r)   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"   )r   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   r}   r   r   r&   r&   r'   r}      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(      r)   z"ndarray.strides.<locals>.<genexpr>)r   element_sizer   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 u ddS )NT)r   r   r   r   )r   r   is_contiguousT_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    KunsafeTc                 C  sx   |dkrt d| d|dkr0t d| d|sDt d| d|sXt d| dt|j}| j|}t|S )Nr   zastype(..., order= is not implemented.r   zastype(..., casting=zastype(..., subok=zastype(..., copy=)r9   r   r}   torch_dtyper   r   r   )r-   r}   ordercastingsubokcopyr   r   r&   r&   r'   astype)  s    
zndarray.astyper   r
   r   r-   r   c                 C  s   |   S r"   )cloner   r&   r&   r'   r   8  s    zndarray.copyc                 C  s
   t | S r"   )r{   flattenr   r&   r&   r'   r   <  s    zndarray.flattenF)refcheckc                G  s   |rt d| d|dv r d S t|dkr4|d }t|trD|f}tdd |D r`tdt|| j	
  }}| j	| ||kr| j	 sJ | j	 }||d    d S )	Nzresize(..., refcheck=r   )r&   r"   r   r   c                 s  s   | ]}|d k V  qdS )r   Nr&   r$   xr&   r&   r'   r(   O  r)   z!ndarray.resize.<locals>.<genexpr>z0all elements of `new_shape` must be non-negative)r9   lenrz   intbuiltinsrS   r   mathrW   r   r   Zresize_r   r   Zzero_)r-   r   Z	new_shapeZ	new_numelZ	old_numelbr&   r&   r'   resize@  s$    


zndarray.resizec                 C  sJ   |t ju r| j}|t jur*td| dt|j}| j|}t|S )Nzview(..., type=r   )	r   unspecifiedr}   r9   r   r   r   viewr   )r-   r}   typer   Ztviewr&   r&   r'   r   \  s    

zndarray.view)r?   c                 C  s   | j | d S r"   )r   Zfill_r   r&   r&   r'   fille  s    zndarray.fillc                 C  s
   | j  S r"   )r   tolistr   r&   r&   r'   r   k  s    zndarray.tolistc                 C  s   dd | j  D S )Nc                 s  s   | ]}t |V  qd S r"   )r   r   r&   r&   r'   r(   o  r)   z#ndarray.__iter__.<locals>.<genexpr>)r   __iter__r   r&   r&   r'   r   n  s    zndarray.__iter__c                 C  s   t | jddddS )Nr   ztorch.ndarrayzdtype=torch.zdtype=)r/   r   replacer   r&   r&   r'   __str__q  s    
zndarray.__str__c              	   C  sD   zt | |W S  ttfy>   tj| jdtd}t| Y S 0 d S )NF)Z
fill_valuer}   )	r   equalRuntimeError	TypeErrorr{   fullr   boolr   )r-   r   Zfalsyr&   r&   r'   __eq__z  s
    zndarray.__eq__c                 C  s
   | |k S r"   r&   r   r&   r&   r'   __ne__  s    zndarray.__ne__c              
   C  sF   zt | j W S  ty@ } ztd|W Y d }~n
d }~0 0 d S )Nz=only integer scalar arrays can be converted to a scalar index)operatorr   r   item	Exceptionr   )r-   excr&   r&   r'   	__index__  s    zndarray.__index__c                 C  s
   t | jS r"   )r   r   r   r&   r&   r'   __bool__  s    zndarray.__bool__c                 C  s
   t | jS r"   )r   r   r   r&   r&   r'   __int__  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  s6   z| j  }t||k}W n ty0   d}Y n0 |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   reshape)r-   r   r   r&   r&   r'   r     s    zndarray.reshapec              	   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   rP   r<   )r-   rG   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 ur|jdk s"|S t | f t |jtsJ|jd u sJJ t |jtsd|jd u sdJ |jrt|jd nd }|jr|jd nd }t|||j S )Nr   r   )rz   slicestepr{   Zflipstartr   stop)ry   sr   r   )r   r&   r'   neg_step  s    z%ndarray.__getitem__.<locals>.neg_stepc                 3  s   | ]\}} ||V  qd S r"   r&   )r$   ry   r   )r   r&   r'   r(     r)   z&ndarray.__getitem__.<locals>.<genexpr>r   )
r   rz   r   r   	enumerater	   ndarrays_to_tensorsrx   r   r<   )r-   r   r&   )r   r   r'   r<     s    
 

zndarray.__getitem__c                 C  sB   t |}t|}t|s4t|}t || jj}| j	||S r"   )
r	   r   rx   r   Z	is_scalarr   Zcast_if_neededr   r}   rB   )r-   r   r?   r&   r&   r'   rB     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   TT)r   )r   )r   NN)GrC   rD   rE   r.   methodsitemsmethodrL   getattrr   rJ   rM   varsr   	conjugater   dunder	ri_dunderplainZrvarZivarr   r   r   propertyr   r   r   r}   r   r   r   r   r   r   r   setterr   r   r   r   r   r   r   r   r   r   r   r   r   __repr__r   r   r   r   r   r   r   r   r   r   r   r   r   r   r<   rB   rZ   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'Recursively convert tensors into lists.)rz   listr   _tolistr   appendr   r   )objZa1elemr&   r&   r'   r     s    
r   Tr   F)r   r   r   ndminlikec          	      C  s   |durt d|d ur t d|dkr,t t| trT|du rT|d u rT|| jkrT| S t| ttfr| rtdd | D rt| } nt	| } t| tr| j
} d }|d urt|j}t| |||}t|S )NFz#'subok' parameter is not supported.z"'like' parameter is not supported.r   c                 s  s   | ]}t |tjV  qd S r"   )rz   r{   r|   r   r&   r&   r'   r(     r)   zarray.<locals>.<genexpr>)r9   rz   r   r   r   r   r*   r{   stackr   r   r   r}   r   r	   Z_coerce_to_tensor)	r   r}   r   r   r   r   r   r   r   r&   r&   r'   array  s4    
r  )r   c                C  s   t | |||dddS )NFr   )r}   r   r   r   r   )r  )ar}   r   r   r&   r&   r'   r   &  s    r   c                C  s(   t | ||d}|j s$|j |_|S )N)r}   r   )r   r   r   
contiguous)r  r}   r   Zarrr&   r&   r'   ascontiguousarray*  s    
r  c                C  s   t | }t|S r"   )r{   from_dlpackr   )r   r   r&   r&   r'   r  1  s    
r  c                 C  s0   zt | }W n ty*   t| j}Y n0 |S r"   )r   r}   r   r   )entrydtyr&   r&   r'   _extract_dtype6  s
    r	  safec                 C  s"   t | } t |}t| j|j|S r"   )r	  r   Zcan_cast_implr   )from_r   r   to_r&   r&   r'   can_cast>  s    r  c                  G  sn   g }| D ]P}zt |j}W n2 tttfyL   t|}tjd|j	d}Y n0 |
| qtj| }t|S )Nr   )r}   )r   r   r   r   r   r   r}   r{   emptyr   r   r   Zresult_type_impl)Zarrays_and_dtypesZtensorsr  r   r  r   r&   r&   r'   result_typeE  s    

r  )N)N)Nr   )N)r
  )'
__future__r   r   r   r   collections.abcr   r{    r   r   r   r   r	   Z_normalizationsr
   r   r   r   Znewaxisr#   r7   r   rM   r   r   r   rx   r   r   r   r   r  r   r  r  r	  r  r  r&   r&   r&   r'   <module>   s   #
%  6(
