o
    I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dXd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e e_G d@dA dAZdBdC ZdXdDdEdFd ddGdHdIZ dYddJdKdLZ!dXddJdMdNZ"dOdP Z#dQdR Z$dZdTdUZ%dVdW Z&dS )[    )annotationsN)Sequence   )_dtypes_dtypes_impl_funcs_ufuncs_util)	ArrayLikenormalize_array_like
normalizerNotImplementedType)C_CONTIGUOUSF_CONTIGUOUSOWNDATA	WRITEABLEALIGNEDWRITEBACKIFCOPYFNCFORCBEHAVEDCARRAYFARRAYr   r   r   r   r   r   r   r   r   )	CFOWAXBCA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)   I/var/www/vscode/kcb/lib/python3.10/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__attrstrc                 C  s0   |  r| tv r| |  S td| d)NzNo flag attribute '')islowerupperr&   AttributeError)r0   r2   r)   r)   r*   __getattr__7   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 'r4   )SHORTHAND_TO_FLAGSr.   r&   r/   KeyErrorNotImplementedError)r0   keyer)   r)   r*   __getitem__=   s   zFlags.__getitem__c                   s6   |  r| tv r|| | < d S t || d S r%   )r5   r6   r&   super__setattr__)r0   r2   value	__class__r)   r*   rA   H   s   zFlags.__setattr__c                 C  s,   |t v s
|t v rtdtd| d)Nz"Modifying flags is not implementedr9   r4   )r&   r:   r.   r<   r;   )r0   r=   rB   r)   r)   r*   __setitem__N   s   zFlags.__setitem__)r#   r$   )r2   r3   )	__name__
__module____qualname__r1   r8   r?   rA   rE   __classcell__r)   r)   rC   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      zcreate_method.<locals>.fzndarray.)rF   rH   )rM   namerN   r)   rL   r*   create_methodU   s
   
rQ   clipnonzerorepeatroundsqueezeswapaxesraveldiagonaldottraceargsortsearchsortedargmaxargminanyr-   max)minptpsumprodmeanvarstdcumsumcumprodtakechooseabsolutepositivenegativegreaterlessgreater_equal
less_equal)absinvertposneggtltgelesubtractmultiplydividefloor_dividepower	remainderbitwise_and
bitwise_orbitwise_xor
left_shift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dtypeint8int16int32uint8toint64tuple)indexr)   r)   r*   r      s   
r   c                   @  s   e Zd ZdS )_UnspecifiedN)rF   rG   rH   r)   r)   r)   r*   r      s    r   c                   @  s  e Zd Zdld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%dmd+d,Z&e'dndod2d3Z(e'dndod4d5Z)d6d7d8d9Z*e+j,e+j,fd:d;Z-e'dpd=d>Z.d?d@ Z/dAdB Z0dCdD Z1ee1Z2dEdF Z3dGdH Z4dIdJ Z5dKdL Z6dMdN Z7dOdP Z8dQdR Z9dSdT Z:dUdV Z;dWdX Z<dYdZ Z=d-d[d\d]Z>dqd_d`Z?dadb Z@dcdd ZAdedf ZBe	jCZCe	jDZDddgdhdiZEdjdk ZFdS )r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)r0   tr)   r)   r*   r1      s   
zndarray.__init__conj____rc                 C  s
   ||| S r%   r)   r0   otherrM   r)   r)   r*   <lambda>   s   
 zndarray.<lambda>__ic                 C  s   || || dS )N)outr)   r   r)   r)   r*   r      s    
__divmod__c                 C  s   t || S r%   )r   divmodr0   r   r)   r)   r*   r      s    __rdivmod__c                 C  s   t | jjS r%   )r   r   shaper0   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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   data_ptrr   r)   r)   r*   data  r   zndarray.datac                 C  s   | j   S r%   )r   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   r0   rB   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   KunsafeTc                 C  sx   |dkrt d| d|dkrt d| d|s"t d| d|s,t d| dt|j}| j|}t|S )Nr   zastype(..., order= is not implemented.r   zastype(..., casting=zastype(..., subok=zastype(..., copy=)r<   r   r   torch_dtyper   r   r   )r0   r   ordercastingsubokcopyr   r   r)   r)   r*   astype)  s   
zndarray.astyper   r0   r
   r   r   c                 C  r   r%   )cloner0   r   r)   r)   r*   r   8  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=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)r<   lenr   intbuiltinsr`   r   mathre   r   r   resize_r   r   zero_)r0   r   	new_shape	new_numel	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   r<   r   r   r   viewr   )r0   r   typer   tviewr)   r)   r*   r   \  s   

zndarray.viewrB   c                 C  s   | j | d S r%   )r   fill_r   r)   r)   r*   fille  s   zndarray.fillc                 C  r   r%   )r   tolistr   r)   r)   r*   r   k     
zndarray.tolistc                 C  s   dd | j  D S )Nc                 s  r   r%   )r   r   r)   r)   r*   r+   o  r,   z#ndarray.__iter__.<locals>.<genexpr>)r   __iter__r   r)   r)   r*   r   n     zndarray.__iter__c                 C  s   t | jddddS )Nr   ztorch.ndarrayzdtype=torch.zdtype=)r3   r   replacer   r)   r)   r*   __str__q  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)
fill_valuer   )	r   equalRuntimeError	TypeErrorr   fullr   boolr   )r0   r   falsyr)   r)   r*   __eq__z  s   zndarray.__eq__c                 C  s
   | |k S r%   r)   r   r)   r)   r*   __ne__  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   )r0   excr)   r)   r*   	__index__  s   zndarray.__index__c                 C  
   t | jS r%   )r   r   r   r)   r)   r*   __bool__  r   zndarray.__bool__c                 C  r	  r%   )r   r   r   r)   r)   r*   __int__  r   zndarray.__int__c                 C  r	  r%   )floatr   r   r)   r)   r*   	__float__  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  )r0   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__)r0   r   r)   r)   r*   r    r  zndarray.__contains__c                 G  s   t | |S r%   )r   r   )r0   axesr)   r)   r*   r     r   zndarray.transposer   c                G  s   t j| ||dS )Nr  )r   reshape)r0   r   r   r)   r)   r*   r    s   zndarray.reshapec              	   C  s   t | t | ||| d S r%   )r   copytosort)r0   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   rX   r?   )r0   rJ   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   r   	enumerater	   ndarrays_to_tensorsr   r   r?   )r0   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&  r   r   	is_scalarr   cast_if_neededr   r   rE   )r0   r   rB   r)   r)   r*   rE     s   

zndarray.__setitem__streamc                C  s   | j j|dS )Nr)  )r   
__dlpack__)r0   r*  r)   r)   r*   r+    rO   zndarray.__dlpack__c                 C  r   r%   )r   __dlpack_device__r   r)   r)   r*   r,    r   zndarray.__dlpack_device__r%   )r   r   TT)r   )r0   r
   r   r   )rB   r
   )r  NN)GrF   rG   rH   r1   methodsitemsmethodrP   getattrr   rM   rQ   varsr   	conjugater   dunder	ri_dunderplainrvar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?   rE   rk   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   )obj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r*|du r*|d u r*|| jkr*| S t| ttfrF| rBtdd | D rBt| } nt	| } t| trN| j
} d }|d urZt|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>)r<   r   r   r   r<  r   r-   r   stackr=  r   r   r   r   r	   _coerce_to_tensor)	r?  r   r   r   r   rB  rC  r   r   r)   r)   r*   array  s.   

rF  )rC  c                C  s   t | |||dddS )NFr   )r   r   rC  r   rB  )rF  )ar   r   rC  r)   r)   r*   r   &  r   r   c                C  s(   t | ||d}|j s|j |_|S )N)r   rC  )r   r   r   
contiguous)rG  r   rC  arrr)   r)   r*   ascontiguousarray*  s   
rJ  c                C  s   t | }t|S r%   )r   from_dlpackr   )r   r   r)   r)   r*   rK  1  s   
rK  c                 C  s0   zt | }W |S  ty   t| j}Y |S w r%   )r   r   r  r   )entrydtyr)   r)   r*   _extract_dtype6  s   rN  safec                 C  s"   t | } t |}t| j|j|S r%   )rN  r   can_cast_implr   )from_r   r   to_r)   r)   r*   can_cast>  s   rS  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   result_type_impl)arrays_and_dtypestensorsrL  r   rM  r   r)   r)   r*   result_typeE  s   


rX  r%   )Nr   )rO  )'
__future__r   r   r   r  collections.abcr   r    r   r   r   r   r	   _normalizationsr
   r   r   r   newaxisr&   r:   r"   rQ   r-  r3  r4  r   r   r   r   r=  rF  r   rJ  rK  rN  rS  rX  r)   r)   r)   r*   <module>   s   
#	
%  6(
