
    bIg)D                        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m	Z	m
Z
mZ d dlmZ d dlmZ d dlmZmZmZmZ d dlmZmZ  G d d	e      Zy)
    )annotationsN)TensorProtohelpersubbyte)Base)expect)float32_to_float8e4m3float32_to_float8e5m2make_tensortensor_dtype_to_field)float8e4m3_to_float32float8e5m2_to_float32c                  0    e Zd Zedd       Zedd       Zy)Castc            
     j   d} g d}t        j                  t              }t        j                  t              }t        j                  d       }t        j                  d       }d}|D 	]  \  }}d }	d }
|dk(  s|dk(  r8t        j                  g dt         j
                        }t        j                  d	k(  }|j                  t         j                        }|r|d
d d   n|dd d   }|dk(  r|dk(  sJ |j                  ddg      }|j                  ddg      }t        j                  j                  t        t        j                         |j"                        }	t        j                  j                  t        t        j$                        |j"                        }
n|dk(  sJ |j                  ddg      }t        j&                  t)        |      dz  ft         j                        }|r	||d
d d<   n||dd d<   |j                  t         j
                        }|j                  ddg      }t        j                  j                  t        t        j$                        |j"                        }	t        j                  j                  t        t        j                         |j"                        }
n	||v s||v rt        j                  g dt         j
                        }|dk(  r0|}t+        dt        j                   ddg|j-                               }n|dk(  rj|j/                  t         j0                        j/                  t         j
                        }t+        dt        j2                  ddg|j-                               }n!|dk(  r>t5         ||            }t+        dt        j6                  ddg|j-                               }n|dk(  rBt5         ||d      d      }t+        dt        j8                  ddg|j-                               }n|dk(  r>t;         ||            }t+        dt        j<                  ddg|j-                               }nT|dk(  rDt;         ||dd      dd      }t+        dt        j>                  ddg|j-                               }ntA        d      |dk(  rt5         ||            }n|dk(  rt5         ||d      d      }n|dk(  rt;         ||            }nr|dk(  rt;         ||dd      dd      }nU|dk(  r=|j/                  t         j0                        j/                  t         j
                        }n|dk(  r|}ntA        d      t+        dtC        t        |      ddg|j-                               }|}n)|dv s|dv rt        jD                  dd      j/                  t         j
                        }d}|dk(  r-|}t+        dt        j                   ||j-                               }n|dk(  rJ|j/                  t         j0                        }t+        dt        j2                  ||j-                               }n{|d k(  r3 ||      }t+        dt        jF                  ||j-                               }nC|d!k(  r3 ||      }t+        dt        jH                  ||j-                               }ntA        d      |d k(  r& ||      j/                  tJ        jL                        }n|d!k(  r& ||      j/                  tJ        jN                        }n|dk(  r |j/                  t         j0                        }n]|dk(  r|}nU|d"k(  r |j/                  t         jP                        }n0|d#k(  r |j/                  t         jR                        }ntA        d      t+        d$tC        t        |      ||j-                               }|}t        j                  j                  tC        t        |      |      }	t        j                  j                  tC        t        |      |      }
n|d%k7  rt         jT                  jW                  |       j/                  t        jX                  tC        t        |                  }|d%k(  rg }|j[                         D ]>  }t]        |      j_                  d&      }|ja                  d&      }|jc                  |       @ t        j                  |      j/                  td              j                  ddg      }n|j/                  t        jX                  tC        t        |                  }nst        j                  g dt        jf                  td                    j                  ddg      }|j/                  t        jX                  tC        t        |                  }t        j                  ji                  d'd(gd)gtC        t        |      *      }|	r"|
r tk        ||g|gd+|z   d,z   |z   |	g|
g-       	tk        ||g|gd+|z   d,z   |z   .       	 y )/N)      )$)FLOATFLOAT16)r   DOUBLE)r   r   )r   r   )r   r   )r   r   )r   STRING)r   r   )r   BFLOAT16)r   r   r   FLOAT8E4M3FNr   r   r   FLOAT8E4M3FNUZr   r   )r   r   )r   r   )r   r   )r   r   r   
FLOAT8E5M2r   r    r   FLOAT8E5M2FNUZr   r#   )r    r   )r    r   )r#   r   )r#   r   )r   UINT4)r   r%   )r   INT4)r   r&   )r%   r   )r%   r   )r%   UINT8)r&   r   )r&   r   )r&   INT8c                0    t        j                  | d      S )NFsignedr   float32_to_4bit_unpackedxs    ]/var/www/html/answerous/venv/lib/python3.12/site-packages/onnx/backend/test/case/node/cast.py<lambda>zCast.export.<locals>.<lambda>F   s    g66qG     c                0    t        j                  | d      S )NTr*   r,   r.   s    r0   r1   zCast.export.<locals>.<lambda>I   s    g66qF r2   )r   r   r    r#   r   )
0.47892547
0.48033667
0.49968487
0.81910545
0.47031248z0.816468z
0.21087195	0.7229038NaNINF+INF-INFdtypelittle      r   r   r   r   r4   r5   r6   r7   r8   r9   1000000z1e-7r:   r;   r<   r=   z
-0.0000001z	0.0000001z-1000000r/      r   r   r   T)uzr    r#   )fnrF   7Conversion from {from_type} to {to_type} is not tested.)r%   r&   i   )rE   rE   r%   r&   r'   r(   yr   zutf-8r   inputoutput)inputsoutputsto
test_cast__to_)rM   rN   nameinput_type_protosoutput_type_protosrM   rN   rR   )6np	vectorizer	   r
   arrayfloat32sys	byteorderviewuint16reshapeonnxr   make_tensor_type_protointr   r   shaper   zeroslenr   tolistastypefloat16r   r   r   r   r   r    r#   
ValueErrorgetattraranger%   r&   customuint4int4uint8int8randomrandom_sampletensor_dtype_to_np_dtypeflattenstrencodedecodeappendobjectr?   	make_noder   )rb   
test_casesvect_float32_to_float8e4m3vect_float32_to_float8e5m2vect_float32_to_uint4vect_float32_to_int4f8_types	from_typeto_typeinput_type_protooutput_type_protonp_fp32little_endisannp_uint16_viewnp_bfp16rK   rL   np_fp32_zerosnp_fp32_from_bfloatinput_valuesexpectedexpected_tensorinput_shapessissunodes                               r0   exportzCast.export   sT	   %

N &(\\2G%H"%'\\2G%H" "G!
  "||F 
 V", G	Iw# $J&'Z*?(( **" "%(!:!(BII!>,:N14a4(qtRSt@T  j($///#OOQF3E%--q!f5F'+{{'I'IK--.($ )-(J(JK0016<<)% #g---$,,aV4E$&HHc(ma.?-A$SM%.6add+.6add+*7*<*<2::*<*N'088!Q@F'+{{'I'IK0015;;($ )-(J(JK--.)% h&'X*=((" **%* '#*L'[..A8HE )+#*>>"**#=#D#DRZZ#PL'[001a&,:M:M:OE .0#827;$L ([551v|?R?R?TE "22#827tD$L ([77!QATATAVE ,.#827;$L ([33aV\=P=P=RE "22#827tM$L
 ([77!QATATAVE %Q  n,42<@ H  0042<DId H ,42<@ H  0042<DTR H
 	)+222::>EEbjjQH'+H$Q  #.g6A@Q# )//7>O3O))B+222::>$'#*L'[..\=P=P=RE )+#*>>"**#=L'[00+|?R?R?TE ')#8#AL'[..\=P=P=RE &(#7#@L'[--{L<O<O<QE %Q  g%4\BII&,,WH&3LAHHUH	)+222::>H'+H'+22288<H&+22277;H$Q  #.g6X__EV# )#';;#E#EK3[$  %)KK$F$FK1;%! h&		//6==33GK4ST h&B"]]_ &FMM'2XXg.		"&
  XXb\008@@!QHF"\\77W8UVF  ((6*  '1a&/! " 33GK4QR ;;((y!
;0	 ) D  $5!7#H%	1F:WD'7&8(9': !7#H%	1F:WD	EG	r2   c            
        g d} t        j                  t              }t        j                  t              }| D ]  \  }}t        j                  g dt         j
                        }|dk(  r/|}t        dt        j                  ddg|j                               }ny|dk(  ri|j                  t         j                        j                  t         j
                        }t        dt        j                  ddg|j                               }nt        d	      |d
k(  r ||d      }n>|dk(  r ||dd      }n-|dk(  r ||d      }n|dk(  r ||ddd      }nt        d	      t        |D 	cg c]  }	t        |	       c}	      }
t               }t!        t        |      |_        d|_        |j&                  j)                  ddg       t+        |j"                        }t!        ||      j)                  |
       |}t,        j.                  j1                  ddgdgt!        t        |      d      }t3        ||g|gd|z   dz   |z           y c c}	w )N)r   r   r   r   r   r!   r"   r$   rC   r>   r   r/   r   rE   r   rH   r   F)saturater   T)rF   r   r    r#   )rG   rF   r   r   rK   rL   r   )rM   rN   rO   r   test_cast_no_saturate_rQ   rU   )rV   rW   r	   r
   rX   rY   r   r   r   re   rf   rg   r   rh   bytesra   ri   	data_typerR   dimsextendr   r_   r   ry   r   )rz   r{   r|   r   r   r   r   rK   r   r   ivalstensorfieldrL   r   s                  r0   export_saturate_falsezCast.export_saturate_falseW  s=   	

 &(\\2G%H"%'\\2G%H"", J	Iwhh" jj%G* G#&#C):):QFGNNDTUi'&~~bjj9@@L#,,q!fl6I6I6K !M  .(5lUS,,5 TE L(5lUS,,5 TdU !M  84a3q645E ]F&{G<FFKKK1v&)&*:*:;EFE"))%0F;;((y!
;0 ) D w-	9FBWL	KJ	h 5s   +I
N)returnNone)__name__
__module____qualname__staticmethodr   r    r2   r0   r   r      s-    { {z	 X Xr2   r   )
__future__r   rZ   numpyrV   r_   onnx._custom_element_types_custom_element_typesrk   r   r   r   onnx.backend.test.case.baser   onnx.backend.test.case.noder   onnx.helperr	   r
   r   r   onnx.numpy_helperr   r   r   r   r2   r0   <module>r      s@    # 
   + - - , .  KX4 Xr2   