o
    wi                     @  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mZ d dlmZmZmZmZ d dlmZ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
float4e2m1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unpacked_float4e2m1_to_float32)TensorProto)OpRunc                   sR  | j tkrF| j jd d dkrF|tjkr| S |  }tj|jd tj	d}t
|jd D ]}t|| }|||< q,t|}||| 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 ]P\\}	}
}}| j |	kr| j jd d |
kr||kr|   S |  }tj|jd tj	d}t
|jd D ]}||| }|||< qt|}||| j  S qh|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 ]b\}}}}| j |kr'| j jd d |kr'||kr|   S t|}| |  S ||kr^| tj	 }tj|j|d }t
|jd D ]}tj || |d}|||< qE|| j  S qt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 ];\}	\}}||	kr| tj	 }tj|j|d }t
|jd D ]}||| }|||< q|| j  S q| j t!kr| j jd d dkr|tj"kr| S t#| }|tj$kr|tj	S |tj%kr|tj&S |tj"kr| tj	}t'|t!}|| jS |tj(kr | tj)S t|}| |S )Nr   r   )dtypee4m3fne4m3fnuzc                  W  s   t | ddiS )NuzT)r   args r   W/home/ubuntu/sommelier/.venv/lib/python3.10/site-packages/onnx/reference/ops/op_cast.py<lambda>5       zcast_to.<locals>.<lambda>e5m2e5m2fnuzc                  W  s   t | dddS )NT)fnr   )r   r   r   r   r   r   ;       T)truncater   Fr
   )signedc                       t | d iS Nsaturater   r   r(   r   r   r   i   r   c                    s   t | d dS )NT)r   r(   r)   r   r*   r   r   r   m   r#   c                    r&   r'   r   r   r*   r   r   r   q   r   c                    s   t | dd dS )NT)r"   r   r(   r+   r   r*   r   r   r   u   s    r   )*r   r   descrr   BFLOAT16ravelnpemptyshapefloat32ranger   r   astypereshaper   FLOAT8E4M3FNr   r   FLOAT8E4M3FNUZr   
FLOAT8E5M2r   r	   FLOAT8E5M2FNUZitemsr   r   UINT4r
   INT4r   float32_to_4bit_unpackedr   
FLOAT4E2M1r   FLOATFLOAT16float16float32_to_float4e2m1_unpackedSTRINGstr_)xtor(   xrxfielr   f8dtst
proto_typecvtyi4np_typenp_desctensor_typer%   to_typef8backnpdtresr   r*   r   cast_to#   s   




"







"
rY   c                   @     e Zd ZdddZdS )Cast_1Nc                 C  s   t ||ddfS )NTr*   rY   )selfrE   rF   r   r   r   _run   s   zCast_1._runN__name__
__module____qualname__r^   r   r   r   r   r[          r[   c                   @  rZ   )Cast_19Nc                 C  s   t |||fS r_   r\   )r]   rE   rF   r(   r   r   r   r^      s   zCast_19._run)NNr`   r   r   r   r   re      rd   re   ) 
__future__r   numpyr/   onnxr   onnx._custom_element_typesr   r   r   r   r   r	   r
   r   onnx.helperr   r   r   r   onnx.numpy_helperr   r   r   r   onnx.onnx_pbr   onnx.reference.op_runr   rY   r[   re   r   r   r   r   <module>   s   (
u