o
    XiM                     @  sR   d dl mZ d dlmZmZ d dlZd dlmZm	Z	 d dl
mZ G dd dZdS )    )annotations)AnyOptionalN)ir
onnx_opset)autocastc                   @  sT  e Zd ZdZdQdRddZedSd	d
ZedTddZedUddZedVddZ	edWddZ
edTddZdXddZdUddZdTddZdYd!d"ZdTd#d$ZdTd%d&Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 Zd5d6 Zd7d8 Zd9d: Zd;d< Zd=d> Zd?d@ ZdAdB ZdCdD Z dEdF Z!dGdH Z"dIdJ Z#dKdL Z$dMdN Z%dOdP Z&dS )ZTensorzAn implementation of ONNX Tensors, based on a wrapper around numpy arrays.
    Serves to define overloaded ops with an ONNX/ONNXScript semantics.
    NnparrayOptional[np.ndarray]c                 C  s>   |d urt |tjstdt| d|| _|ptj| _d S )NUnexpected type z#. It must be a numpy array or None.)	
isinstancenpndarray	TypeErrortype_nparrayr   opset18_opset)selfr	   opset r   E/home/ubuntu/.local/lib/python3.10/site-packages/onnxscript/tensor.py__init__   s   zTensor.__init__return
np.ndarrayc                 C  s   | j d u r	td| j S )NzTensor does not have a value.)r   
ValueErrorr   r   r   r   value   s   
zTensor.valueintc                 C  s   t | jjS N)lenr   shaper   r   r   r   rank%   s   zTensor.rankboolc                 C  s
   | j dkS Nr   )r"   r   r   r   r   	is_scalar)   s   
zTensor.is_scalartuple[int, ...]c                 C     | j jS r   )r   r!   r   r   r   r   r!   -      zTensor.shapenp.dtypec                 C  r'   r   )r   dtyper   r   r   r   r*   1   r(   zTensor.dtypec                 C  s   t j| jS r   )r   DataType
from_numpyr*   r   r   r   r   
onnx_dtype5   s   zTensor.onnx_dtypestrc                 C  s   | j j d| jdS )N())	__class____name__r   r   r   r   r   __repr__9   s   zTensor.__repr__c                 C  
   t | jS r   )r#   r   r   r   r   r   __bool__<      
zTensor.__bool__c                 C  r4   r   )r   r   r   r   r   r   __int__?   r6   zTensor.__int__floatc                 C  r4   r   )r8   r   r   r   r   r   	__float__B   r6   zTensor.__float__c                 C  s
   | j d S r$   )r!   r   r   r   r   __len__E   r6   zTensor.__len__c                 C  s
   | j  S r   )r   	__index__r   r   r   r   r;   H   r6   zTensor.__index__c                 C  s  | j }|jdk rtdt|ts|f}t|| jkr(tdt| d| j dd |D }| j}g }g }g }g }t	|D ]\}}	t|	t
r|	jd u rW|	jd u rW|	jd u rWq>|	jd u sa|	jdkr{||	jpgd|	jd uro|	jn|| ||	jpwdg q>||	jd ur|	jn|| d |	jd ur|	jn|| d  ||	jg q>t|	tr|	jr||	|	d |dg || q>|||	f q>td	t|	 d
|s|s|s|| S |st|dkr|d }
||
 }|j| ||
d}nE|s|r1|| }tj|tjdj}t|d }t|d }t|d }t|d }|| ||||}|r0ttj|jt|d}n| }|D ]\}
}|j|||
d}q5|S )N   z$Indexing requires opset 13 or later.zNumber of indices z is greater than rank c                 S  s   g | ]}t |qS r   )r   cast_pyvalue_to_os_tensor).0xr   r   r   
<listcomp>Y   s    z&Tensor.__getitem__.<locals>.<listcomp>r      r   z: slice or int expected.)axis)r*         )r   versionRuntimeErrorr   tupler    r"   r   r!   	enumerateslicestartstopstepappendr   r%   r   r   IdentityGatherr   arrayint64TSlicesqueezer   )r   indexopr!   sliced_indicesscalar_indices
to_squeezenon_scalar_indicesaxis_srB   index_valueresultindicesstartsendsaxesstepsr   r   r   r   __getitem__K   sz   


	
	

zTensor.__getitem__c                 C  sB   | j tjjtjjtjjtjjhv r| jj| |ddS | j| |S )NrA   )fmod)	r-   r   r+   FLOATDOUBLEFLOAT16BFLOAT16r   Modr   otherr   r   r   __mod__   s   zTensor.__mod__c                 C  s   | j | |}| j |S r   )r   EqualNot)r   rl   tempr   r   r   __ne__   s   zTensor.__ne__c                 C  s   | j | S r   )r   Negr   r   r   r   __neg__   s   zTensor.__neg__c                 C     | j | |S r   r   Addrk   r   r   r   __add__      zTensor.__add__c                 C     | j || S r   ru   rk   r   r   r   __radd__   rx   zTensor.__radd__c                 C  rt   r   r   Andrk   r   r   r   __and__   rx   zTensor.__and__c                 C  ry   r   r{   rk   r   r   r   __rand__   rx   zTensor.__rand__c                 C  rt   r   r   Mulrk   r   r   r   __mul__   rx   zTensor.__mul__c                 C  ry   r   r   rk   r   r   r   __rmul__   rx   zTensor.__rmul__c                 C  rt   r   )r   MatMulrk   r   r   r   
__matmul__   rx   zTensor.__matmul__c                 C  rt   r   )r   Orrk   r   r   r   __or__   rx   zTensor.__or__c                 C  rt   r   )r   Powrk   r   r   r   __pow__   rx   zTensor.__pow__c                 C  rt   r   r   Subrk   r   r   r   __sub__   rx   zTensor.__sub__c                 C  ry   r   r   rk   r   r   r   __rsub__   rx   zTensor.__rsub__c                 C  rt   r   )r   Divrk   r   r   r   __truediv__   rx   zTensor.__truediv__c                 C  rt   r   )r   Lessrk   r   r   r   __lt__   rx   zTensor.__lt__c                 C  rt   r   )r   LessOrEqualrk   r   r   r   __le__   rx   zTensor.__le__c                 C  rt   r   )r   rn   rk   r   r   r   __eq__   rx   zTensor.__eq__c                 C  rt   r   )r   GreaterOrEqualrk   r   r   r   __ge__   rx   zTensor.__ge__c                 C  rt   r   )r   Greaterrk   r   r   r   __gt__   rx   zTensor.__gt__r   )r	   r
   )r   r   )r   r   )r   r#   )r   r&   )r   r)   )r   r.   )r   r8   )'r2   
__module____qualname____doc__r   propertyr   r"   r%   r!   r*   r-   r3   r5   r7   r9   r:   r;   rd   rm   rq   rs   rw   rz   r}   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r      sT    






V
r   )
__future__r   typingr   r   numpyr   
onnxscriptr   r   onnxscript._internalr   r   r   r   r   r   <module>   s   