U
    qh                     @  s   d dl mZ d dlZd dlmZ d dlmZmZm	Z	m
Z
mZmZmZ d dlmZmZmZmZ d dlmZmZmZ d dlmZ d dlmZ d	d
 ZG dd deZG dd deZdS )    )annotationsN)subbyte)bfloat16float8e4m3fnfloat8e4m3fnuz
float8e5m2float8e5m2fnuzint4uint4)float32_to_bfloat16float32_to_float8e4m3float32_to_float8e5m2tensor_dtype_to_np_dtype)bfloat16_to_float32float8e4m3_to_float32float8e5m2_to_float32)TensorProto)OpRunc                   s  | j tkr| j jd d dkr|tjkr,| S |  }tj|jd tj	d}t
|jd D ]}t|| }|||< qXt|}||| jS tdtjfttdtjfdd tdtjfttd	tjfd
d i}| D ]\\}	}
}}| j |	kr| j jd d |
kr||kr|   S |  }tj|jd tj	d}t
|jd D ]}||| }|||< q:t|}||| j  S q|tjkr| tj	 }tj|jtd }t
|jd D ]}t|| dd}|||< q|| jS tdtjdftdtjdfg}|D ]\}}}}| j |krV| j jd d |krV||kr@|   S t|}| |  S ||kr | tj	 }tj|j|d }t
|jd D ] }tj || |d}|||< q|| j  S q tjt fddftjt fddftjt fddftjt fddfi}| D ]v\}	\}}||	kr| tj	 }tj|j|d }t
|jd D ]}||| }|||< qd|| j  S q|tj!kr| tj"S t|}| |S )Nr   r   )dtypeZe4m3fnZe4m3fnuzc                  W  s   t | ddiS )NuzT)r   args r   >/tmp/pip-unpacked-wheel-xnis5xre/onnx/reference/ops/op_cast.py<lambda>3       zcast_to.<locals>.<lambda>Ze5m2Ze5m2fnuzc                  W  s   t | dddS )NT)fnr   )r   r   r   r   r   r   9   r   T)truncater
   Fr	   )signedc                    s   t | d iS Nsaturater   r   r    r   r   r   g   r   c                    s   t | d dS )NT)r   r    r!   r   r"   r   r   r   k   r   c                    s   t | d iS r   r   r   r"   r   r   r   o   r   c                    s   t | dd dS )NT)r   r   r    r#   r   r"   r   r   r   s   s
      )#r   r   descrr   ZBFLOAT16ZravelnpemptyshapeZfloat32ranger   r   ZastypeZreshaper   ZFLOAT8E4M3FNr   r   ZFLOAT8E4M3FNUZr   Z
FLOAT8E5M2r   r   ZFLOAT8E5M2FNUZitemsr   r
   ZUINT4r	   ZINT4r   Zfloat32_to_4bit_unpackedSTRINGZstr_)xtor    ZxrZxfielr   Zf8dtstZ
proto_typecvtyi4Znp_typeZnp_descZtensor_typer   Zto_typeZf8backZnpdtr   r"   r   cast_to!   s    


 
 
"






r4   c                   @  s   e Zd ZdddZdS )Cast_1Nc                 C  s   t ||ddfS )NTr"   r4   )selfr+   r,   r   r   r   _run   s    zCast_1._run)N__name__
__module____qualname__r8   r   r   r   r   r5      s   r5   c                   @  s   e Zd ZdddZdS )Cast_19Nc                 C  s   t |||fS )Nr6   )r7   r+   r,   r    r   r   r   r8      s    zCast_19._run)NNr9   r   r   r   r   r=      s   r=   )
__future__r   Znumpyr%   Zonnxr   Zonnx._custom_element_typesr   r   r   r   r   r	   r
   Zonnx.helperr   r   r   r   Zonnx.numpy_helperr   r   r   Zonnx.onnx_pbr   Zonnx.reference.op_runr   r4   r5   r=   r   r   r   r   <module>   s   $	g