U
    9%e<                     @  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/Darija-Ai-API/env/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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%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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    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.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   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	rt	|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   #
%  +"
