o
    H&iX?                     @  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dVddZi 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$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d0d1d2d3d4d5d6d7d8d9d:dd;Zd<d= ZG d>d? d?Zd@dA ZdVdBdCdDd ddEdFdGZdWddHdIdJZdVddHdKdLZ dMdN Z!dOdP Z"dXdRdSZ#dTdU Z$dS )Y    )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                      s@   e Zd ZdddZdddZd	d
 Z fddZdd Z  ZS )Flagsflag_to_valuedictc                 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:\wamp64\www\opt\env\Lib\site-packages\torch/_numpy/_ndarray.py	<genexpr>1       z!Flags.__init__.<locals>.<genexpr>)allkeys_flag_to_value)selfr    r&   r&   r'   __init__0   s   
zFlags.__init__attrstrc                 C  s0   |  r| tv r| |  S td| d)NzNo flag attribute '')islowerupperr#   AttributeError)r-   r/   r&   r&   r'   __getattr__4   s   zFlags.__getattr__c              
   C  sb   |t  v r
t | }|tv r)z| j| W S  ty( } ztd||d }~ww td| d)Nzkey=No flag key 'r1   )SHORTHAND_TO_FLAGSr+   r#   r,   KeyErrorNotImplementedError)r-   keyer&   r&   r'   __getitem__:   s   zFlags.__getitem__c                   s6   |  r| tv r|| | < d S t || d S r"   )r2   r3   r#   super__setattr__)r-   r/   value	__class__r&   r'   r>   E   s   zFlags.__setattr__c                 C  s,   |t v s
|t v rtdtd| d)Nz"Modifying flags is not implementedr6   r1   )r#   r7   r+   r9   r8   )r-   r:   r?   r&   r&   r'   __setitem__K   s   zFlags.__setitem__)r    r!   )r/   r0   )	__name__
__module____qualname__r.   r5   r<   r>   rB   __classcell__r&   r&   r@   r'   r   /   s    

r   c                   s,   |p j } fdd}||_ d| |_|S )Nc                    s    | i |S r"   r&   )argskwargsfnr&   r'   fU      zcreate_method.<locals>.fzndarray.)rC   rE   )rJ   namerK   r&   rI   r'   create_methodR   s
   
rN   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takeZ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  sV   t | tjr| jtjtjtjtjfv r| tj	S | S t | t
r)t
dd | D S | S )Nc                 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int8Zint16Zint32Zuint8toZint64tuple)indexr&   r&   r'   rz      s   
rz   c                   @  s  e Zd Zdid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 ]\ZZeeep9eZ
de dZee
ee e< q0e D ]=\ZZeeepWe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< qNe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'djdkd/d0Z(e'djdkd1d2Z)d3d4d5d6Z*d7d8 Z+e'dld:d;Z,d<d= Z-d>d? Z.d@dA Z/ee/Z0dBdC Z1dDdE Z2dFdG Z3dHdI Z4dJdK Z5dLdM Z6dNdO Z7dPdQ Z8dRdS Z9dTdU Z:dVdW Z;d*dXdYdZZ<dmd\d]Z=d^d_ Z>d`da Z?dbdc Z@e	jAZAe	jBZBddddedfZCdgdh ZDdS )nndarrayNc                 C  s4   |d u rt  | _d S t|t jr|| _d S td)NzSndarray constructor is not recommended; prefereither array(...) or zeros/empty(...))r}   r~   tensorr|   
ValueError)r-   tr&   r&   r'   r.      s   
zndarray.__init__conj____rc                 C  s
   ||| S r"   r&   r-   otherrJ   r&   r&   r'   <lambda>   s   
 zndarray.<lambda>Z__ic                 C  s   || || dS )N)outr&   r   r&   r&   r'   r      s    
__divmod__c                 C  s   t || S r"   )r   divmodr-   r   r&   r&   r'   r      s    __rdivmod__c                 C  s   t | jjS r"   )r   r   shaper-   r&   r&   r'   r         zndarray.shapec                 C  
   | j  S r"   )r   numelr   r&   r&   r'   size      
zndarray.sizec                 C  s   | j jS r"   )r   ndimr   r&   r&   r'   r         zndarray.ndimc                 C  s   t | jjS r"   )r   r   r   r   r&   r&   r'   r         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  r   r"   )r   r   r   r&   r&   r'   itemsize   r   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  r   r"   )r   Zdata_ptrr   r&   r&   r'   data  r   zndarray.datac                 C  s   | j   S r"   )r   Zstoragenbytesr   r&   r&   r'   r     r   zndarray.nbytesc                 C     |   S r"   )	transposer   r&   r&   r'   r   	  r   z	ndarray.Tc                 C  
   t | S r"   )r   realr   r&   r&   r'   r     r   zndarray.realc                 C     t |j| j_d S r"   )asarrayr   r   r-   r?   r&   r&   r'   r        c                 C  r   r"   )r   imagr   r&   r&   r'   r     r   zndarray.imagc                 C  r   r"   )r   r   r   r   r&   r&   r'   r     r   c                 C      t |j}| j|}t|S r"   )r   r   torch_dtyper   r   r   )r-   r   r   r   r&   r&   r'   astype     zndarray.astyper   r-   r
   orderr   c                 C  r   r"   )cloner-   r   r&   r&   r'   copy#  r   zndarray.copyc                 C  r   r"   )r}   flattenr   r&   r&   r'   r   '  r   zndarray.flattenF)refcheckc                G  s   |r
t d| d|dv rd S t|dkr|d }t|tr"|f}tdd |D r0tdt|| j	
 }}| j	| ||kr[| j	 sLJ | j	 }||d    d S 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(   :  r)   z!ndarray.resize.<locals>.<genexpr>z0all elements of `new_shape` must be non-negative)r9   lenr|   intbuiltinsrT   r   mathrX   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  r   r"   )r   r   r   r   viewr   )r-   r   r   Ztviewr&   r&   r'   r   G  r   zndarray.viewr?   c                 C  s   | j | d S r"   )r   Zfill_r   r&   r&   r'   fillL  s   zndarray.fillc                 C  r   r"   )r   tolistr   r&   r&   r'   r   R     
zndarray.tolistc                 C  s   dd | j  D S )Nc                 s  ry   r"   )r   r   r&   r&   r'   r(   V  r)   z#ndarray.__iter__.<locals>.<genexpr>)r   __iter__r   r&   r&   r'   r   U     zndarray.__iter__c                 C  s   t | jddddS )Nr   ztorch.ndarrayzdtype=torch.zdtype=)r0   r   replacer   r&   r&   r'   __str__X  s   zndarray.__str__c              	   C  s@   zt | |W S  ttfy   tj| jdtd}t| Y S w )NF)Z
fill_valuer   )	r   equalRuntimeError	TypeErrorr}   fullr   boolr   )r-   r   Zfalsyr&   r&   r'   __eq__a  s   zndarray.__eq__c                 C  s
   | |k S r"   r&   r   r&   r&   r'   __ne__i  r   zndarray.__ne__c              
   C  s6   z	t | j W S  ty } ztd|d }~ww )Nz=only integer scalar arrays can be converted to a scalar index)operatorr   r   item	Exceptionr   )r-   excr&   r&   r'   	__index__l  s   zndarray.__index__c                 C  
   t | jS r"   )r   r   r   r&   r&   r'   __bool__t  r   zndarray.__bool__c                 C  r   r"   )r   r   r   r&   r&   r'   __int__w  r   zndarray.__int__c                 C  r   r"   )floatr   r   r&   r&   r'   	__float__z  r   zndarray.__float__c                 C  r   r"   )complexr   r   r&   r&   r'   __complex__}  r   zndarray.__complex__c                 C  s6   z| j  }t||k}W |S  ty   d}Y |S w )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__     zndarray.__len__c                 C  s   | j |S r"   )r   __contains__)r-   r   r&   r&   r'   r     r   zndarray.__contains__c                 G  s   t | |S r"   )r   r   )r-   Zaxesr&   r&   r'   r     r   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  s8   |dkr	| j  S t|dkr|  |d  S | |S )Nr&   r   r   )r   r   r   rQ   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s%|jd u s%J t |jts2|jd u s2J |jr:|jd nd }|jrD|jd nd }t|||j S )Nr   r   )r|   slicestepr}   flipstartr   stop)r{   sr   r   )r   r&   r'   neg_step  s   z%ndarray.__getitem__.<locals>.neg_stepc                 3  s    | ]
\}} ||V  qd S r"   r&   )r$   r{   r   )r   r&   r'   r(     s    z&ndarray.__getitem__.<locals>.<genexpr>r   )
r   r|   r   type	enumerater	   ndarrays_to_tensorsrz   r   r<   )r-   r   r&   )r   r   r'   r<     s   
 

zndarray.__getitem__c                 C  sB   t |}t|}t|st|}t || jj}| j	||S r"   )
r	   r   rz   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     rL   zndarray.__dlpack__c                 C  r   r"   )r   __dlpack_device__r   r&   r&   r'   r     r   zndarray.__dlpack_device__r"   )r   )r-   r
   r   r   )r?   r
   )r   NN)ErC   rD   rE   r.   methodsitemsmethodrM   getattrr   rJ   rN   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   __repr__r   r   r   r   r   r   r   r   r   r   r   r   r   r   r<   rB   r[   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.)r|   listr   _tolistr   appendr   r   )objZa1elemr&   r&   r'   r    s   
r  TKF)r   r   subokndminlikec          	      C  s   |durt d|d urt d|dkrt  t| tr+|du r+|d u r+|| jkr+| S t| ttfrG| rCtdd | D rCt| } nt	| } t| trO| j
} d }|d ur[t|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"   )r|   r}   r~   r   r&   r&   r'   r(     s    zarray.<locals>.<genexpr>)r9   r|   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  s.   

r  )r  c                C  s   t | |||dddS )NFr   )r   r   r  r   r
  )r  )ar   r   r  r&   r&   r'   r     r   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    s   
r  c                 C  s0   zt | }W |S  ty   t| j}Y |S w r"   )r   r   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_r   ZcastingZto_r&   r&   r'   can_cast%  s   r  c                  G  sn   g }| D ](}zt |j}W n tttfy&   t|}tjd|j	d}Y nw |
| 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_type,  s   


r  r"   )Nr  )r  )%
__future__r   r   r   r   typingr   r}    r   r   r   r   r	   Z_normalizationsr
   r   r   r   Znewaxisr#   r7   r   rN   r   r   r   rz   r   r  r  r   r  r  r  r  r  r&   r&   r&   r'   <module>   s    
#	
%  ((
