§
    1�Åj™j  ã                  ó&  — d dl mZ d dlZd dlZd dlmZ d dlmZmZ d dl	Z	d dl
Zd dlmZ d dlZd dlmZ erd dlmZ 	 	 dBdCd„ZdDd„ZdEd„ZdDd„ZdEd„ZdFd„ZdGd„ZdHdId „ZdJd"„ZdKdLd%„ZdMd)„Z	 dNdOd-„ZdPd1„ZdKdQd3„ZdRd7„Z	 dNdSd9„Z 	 dTdUd@„Z!dVdA„Z"dS )Wé    )ÚannotationsN)ÚSequence)ÚTYPE_CHECKINGÚAny)ÚhelperTÚupÚxú
np.ndarrayÚsaturateÚboolÚ
round_modeÚstrÚreturnc                óR  — t          j        | t           j        ¬¦  «        }|                     t           j        ¦  «        }|dz	  dz  }|                     t           j        ¦  «        }|dk    }t          j        |t           j        ¬¦  «        }d||<   | }|dk    rå|dz  dk                         t           j        ¦  «        }	|dz  dk                         t           j        ¦  «        }
|dz  dk                         t           j        ¦  «        }|dk                         t           j        ¦  «        }|	d	k    |
d	k    |d	k    z  |d	k    z  z  }t          j        |¦  «        }d	|||z  <   |r|d
k    |z  |z  }d||<   ||z  }n`|dk    rA|dz  dk    }||z  }|r|d
k    |z  }d||<   ||                     t           j        ¦  «        z  }n|dk    rnt          d|› �¦  «        ‚|                     t           j        ¦  «        }||         ||<   |                     t          j        ¦  «        S )ar  Convert float32 NumPy array to float8e8m0 representation. If the input
    is not a float32 array, it will be cast to one first.

    Args:
        x: Input array to convert.
        saturate: Whether to saturate at max/min float8e8m0 value.
        round_mode: "nearest", "up", or "down".

    Returns:
        np.ndarray: Array of ml_dtypes.float8_e8m0fnu values.
    ©Údtypeé   éÿ   Únearesti  @ r   i    iÿÿ é   éþ   r   iÿÿ FÚdownzUnsupported rounding mode: )ÚnpÚasarrayÚfloat32ÚviewÚuint32ÚastypeÚuint16Ú
zeros_likeÚuint8Ú
ValueErrorÚ	ml_dtypesÚfloat8_e8m0fnu)r	   r   r   Úx_f32Úf_bitsÚexponentÚspecial_maskÚoutputÚnormal_maskÚgÚrÚsÚlsbÚround_upÚ	incrementÚmax_maskÚhas_fractions                    úBC:\Projects\Historical\venv\Lib\site-packages\onnx/numpy_helper.pyÚto_float8e8m0r4      s>  € õ  ŒJ�q¥¤
Ð+Ñ+Ô+€EØ�ZŠZ�œ	Ñ"Ô"€Fð ˜"‘ Ñ$€HØ�ŠÝ
Œ	ñô €Hð
 ˜tÒ#€LÝŒ]˜8­2¬8Ð4Ñ4Ô4€FØ€Fˆ<Ñð  �-€Kà�YÒÐà�xÑ 1Ò$×,Ò,­R¬XÑ6Ô6ˆØ�xÑ 1Ò$×,Ò,­R¬XÑ6Ô6ˆØ�xÑ 1Ò$×,Ò,­R¬XÑ6Ô6ˆØ˜!Š|×#Ò#¥B¤HÑ-Ô-ˆà˜’F  Q¢¨1°ª6Ñ2°c¸Q²hÑ?Ñ@ˆå”M (Ñ+Ô+ˆ	Ø,-ˆ	�(˜[Ñ(Ñ)àð 	$Ø  DÒ(¨HÑ4°{ÑBˆHØ"#ˆI�hÑà�IÑˆˆà	�tÒ	Ð	Ø Ñ)¨QÒ.ˆØ +Ñ-ˆàð 	'Ø  DÒ(¨HÑ4ˆHØ!&ˆH�XÑà�H—O’O¥B¤IÑ.Ô.Ñ.ˆˆà	�vÒ	Ð	Øõ ÐC°zÐCÐCÑDÔDÐDð �Š�rœxÑ(Ô(€Hà" ;Ô/€Fˆ;Ñà�;Š;•yÔ/Ñ0Ô0Ð0ó    Údataúnpt.NDArray[np.uint8]ÚdimsúSequence[int]c                óú  — t          j        | j        dz  g| j        ¬¦  «        }| t          j        d¦  «        z  }| t          j        d¦  «        z  }|t          j        d¦  «        z  }||ddd…<   ||ddd…<   t          j        |¦  «        }|j        |dz   k    r
|dd	…         }||j        k    r3t          d
| j        › d|j        › dt          |¦  «        › d|› d�	¦  «        ‚| 	                    |d¬¦  «         |S )a  Convert a packed uint4 array to unpacked uint4 array represented as uint8.

    Args:
        data: A numpy array.
        dims: The dimensions are used to reshape the unpacked buffer.

    Returns:
        A numpy array of int8/uint8 reshaped to dims.
    é   r   é   éð   é   r   Nr   éÿÿÿÿzPacked 4-bit data (ú bytes, ú8 elements unpacked) is too small for the declared shape ú (ú elements required).F©Úrefcheck)
r   ÚemptyÚsizer   r!   ÚmathÚprodr"   ÚlistÚresize)r6   r8   ÚresultÚ	array_lowÚ
array_highÚexpected_elementss         r3   Ú_unpack_4bitrP   a   s&  € õ ŒX�t”y 1‘}�o¨T¬ZÐ8Ñ8Ô8€FØ•r”x ‘~”~Ñ%€IØ�œ ™œÑ&€JØ•2”8˜A‘;”;Ñ€JØ€Fˆ1ˆ4ˆaˆ4�LØ€Fˆ1ˆ4ˆaˆ4�LÝœ	 $™œÐØ„{Ð'¨!Ñ+Ò+Ð+à˜˜˜”ˆØ˜6œ;Ò&Ð&Ýð8 $¤)ð 8ð 8°V´[ð 8ð 8Ý37¸±:´:ð8ð 8à!ð8ð 8ð 8ñ
ô 
ð 	
ð
 ‡M‚M�$ €MÑ'Ô'Ð'Ø€Mr5   Úarrayc                ó@  — |                       ¦   «                              t          j        ¦  «                             ¦   «         }| j        }|dz  dk    }|r|                     |dz   gd¬¦  «         |dz  }|ddd…xx         dz  cc<   |ddd…         |ddd…         z  S )	z[Convert a numpy array to flatten, packed int4/uint4. Elements must be in the correct range.r;   r   FrD   r<   Nr>   r   ©Úravelr   r   r!   ÚcopyrG   rK   )rQ   Ú
array_flatrG   Ú	odd_sizeds       r3   Ú_pack_4bitx2rX   �   sµ   € ð —’‘”×#Ò#¥B¤HÑ-Ô-×2Ò2Ñ4Ô4€JØŒ:€DØ�q‘˜A’€IØð 6Ø×Ò˜4 !™8˜*¨uÐÑ5Ô5Ð5Ø�$Ñ€JØˆqˆt�!ˆtÐÐÔ˜ÑÐÐÑØ�a�d˜�dÔ˜j¨¨¨A¨Ô.Ñ.Ð.r5   c                ó´  — t          j        | j        dz  g| j        ¬¦  «        }| dz  |ddd…<   | dz	  dz  |ddd…<   | dz	  dz  |ddd…<   | dz	  dz  |ddd…<   t	          j        |¦  «        }|j        |k    r
|d|…         }||j        k    r3t          d	| j        › d
|j        › dt          |¦  «        › d|› d�	¦  «        ‚|                     |d¬¦  «         |S )a  Convert a packed uint2 array to unpacked uint2 array represented as uint8.

    Args:
        data: A numpy array.
        dims: The dimensions are used to reshape the unpacked buffer.

    Returns:
        A numpy array of int8/uint8 reshaped to dims.
    r>   r   é   r   Nr;   r   é   zPacked 2-bit data (r@   rA   rB   rC   FrD   )	r   rF   rG   r   rH   rI   r"   rJ   rK   )r6   r8   rL   rO   s       r3   Ú_unpack_2bitr\   Ž   s,  € õ ŒX�t”y 1‘}�o¨T¬ZÐ8Ñ8Ô8€FØ˜$‘;€Fˆ1ˆ4ˆaˆ4�LØ˜A‘I Ñ%€Fˆ1ˆ4ˆaˆ4�LØ˜A‘I Ñ%€Fˆ1ˆ4ˆaˆ4�LØ˜A‘I Ñ%€Fˆ1ˆ4ˆaˆ4�LÝœ	 $™œÐØ„{Ð&Ò&Ð&àÐ*Ð*Ð*Ô+ˆØ˜6œ;Ò&Ð&Ýð8 $¤)ð 8ð 8°V´[ð 8ð 8Ý37¸±:´:ð8ð 8à!ð8ð 8ð 8ñ
ô 
ð 	
ð
 ‡M‚M�$ €MÑ'Ô'Ð'Ø€Mr5   c                óº  — |                       ¦   «                              t          j        ¦  «                             ¦   «         }| j        }|dz  }|r|                     |d|z
  z   gd¬¦  «         |dz  }|ddd…xx         dz  cc<   |ddd…xx         dz  cc<   |ddd…xx         dz  cc<   |d	dd…         |ddd…         z  |ddd…         z  |ddd…         z  S )
z[Convert a numpy array to flatten, packed int2/uint2. Elements must be in the correct range.r>   FrD   rZ   r   Nr;   r[   r   rS   )rQ   rV   rG   Úpad_lens       r3   Ú_pack_2bitx4r_   ­   s  € ð —’‘”×#Ò#¥B¤HÑ-Ô-×2Ò2Ñ4Ô4€JØŒ:€DØ�Q‰h€GØð BØ×Ò˜4 1 w¡;Ñ/Ð0¸5ÐÑAÔAÐAØ�$Ñ€JØˆqˆt�!ˆtÐÐÔ˜ÑÐÐÑØˆqˆt�!ˆtÐÐÔ˜ÑÐÐÑØˆqˆt�!ˆtÐÐÔ˜ÑÐÐÑØ�a�d˜�dÔ˜j¨¨¨A¨Ô.Ñ.°¸A¸D¸q¸DÔ1AÑAÀJÈqÈtÐRSÈtÔDTÑTÐTr5   Úvaluesc                ó€  — |                       t          j        d¬¦  «                             ¦   «         dz  }|j        }t          j        |dz  dz  ¦  «        }| dz  }|r4t          j        |t          j        |t          j        ¬¦  «        g¦  «        }|dd	d…         |d
d	d…         |dd	d…         |dd	d…         f\  }}}}t          j	        |j        dft          j        ¬¦  «        }	||dz  dz  z  |	d	d	…df<   |dz	  |dz  dz  z  |	d	d	…d
f<   |dz	  |dz  z  |	d	d	…df<   |	 
                    d¦  «        d	|…         S )zVPack a flat uint8 array of 6-bit codes 4-at-a-time into 3 bytes (LSB-first bit order).F©rU   é?   r[   é   r>   r   r   Nr   r;   rZ   r<   r?   )r   r   r!   rT   rG   rH   ÚceilÚconcatenateÚzerosrF   Úreshape)
r`   ÚflatÚnÚpacked_sizeÚpadÚv0Úv1Úv2Úv3Úpackeds
             r3   Ú
_pack_6bitrr   ¼   sV  € à�=Š=�œ¨ˆ=Ñ.Ô.×4Ò4Ñ6Ô6¸Ñ=€DØŒ	€AÝ”)˜A ™E A™IÑ&Ô&€KØˆ"ˆq‰&€CØ
ð EÝŒ~˜t¥R¤X¨c½¼Ð%BÑ%BÔ%BÐCÑDÔDˆØ˜!˜$˜Q˜$”Z  a d¨ d¤¨T°!°$°Q°$¬Z¸¸a¸dÀ¸d¼ÐC�N€BˆˆB�ÝŒX�r”w �l­"¬(Ð3Ñ3Ô3€FØ˜"˜t™)¨Ñ)Ñ*€Fˆ1ˆ1ˆ1ˆaˆ4�LØ˜!‘G  d¡¨qÑ 0Ñ1€Fˆ1ˆ1ˆ1ˆaˆ4�LØ˜!‘G  a¡Ñ(€Fˆ1ˆ1ˆ1ˆaˆ4�LØ�>Š>˜"ÑÔ˜l˜{˜lÔ+Ð+r5   c           	     óÊ  — t          j        |¦  «        }| dz   }|dz  }| dz  dz   }|                      t          j        d¬¦  «        } | j        |k     r+t          d| j        › dt          |¦  «        › d	|› d
�¦  «        ‚t          | j        |¦  «        dz  dz  }|dz  }t          j	        |dft          j        ¬¦  «        }| d|d…         | d|d…         | d|d…         }}
}	|	dz  |d|…df<   |	dz	  dz  |
dz  dz  z  |d|…df<   |
dz	  dz  |dz  dz  z  |d|…df<   |dz	  dz  |d|…df<   ||k     rt          j
        dt          j        ¬¦  «        }| |d…         }||d|j        …<   |\  }}}|dz  ||df<   |dz	  dz  |dz  dz  z  ||df<   |dz	  dz  |dz  dz  z  ||df<   |dz	  dz  ||df<   |                     d¦  «        d|…                              |¦  «        S )zTUnpack a 6-bit packed buffer (see _pack_6bit) back into a uint8 array of given dims.r>   rZ   r[   rd   Frb   zPacked 6-bit data (z, bytes) is too small for the declared shape rB   z bytes required).r   r   r   r;   rc   Nr<   r?   )rH   rI   r   r   r!   rG   r"   rJ   ÚminrF   rg   rh   )r6   r8   Úoriginal_sizeÚ
num_groupsÚneeded_bytesÚ	min_bytesÚ
bulk_bytesÚbulk_groupsÚunpackedÚb0Úb1Úb2ÚtailÚrestÚt0Út1Út2s                    r3   Ú_unpack_6bitr„   Ì   sŒ  € å”I˜d‘O”O€MØ!�> QÑ&Ð'€JØ ‘>€Lð !�. 1Ñ$¨Ñ)Ð*€IØ�;Š;•r”x eˆ;Ñ,Ô,€DØ„y�9ÒÐÝð@ $¤)ð @ð @Ý˜$‘Z”Zð@ð @Ø#,ð@ð @ð @ñ
ô 
ð 	
õ �T”Y Ñ-Ô-°Ñ2°QÑ6€JØ ‘/€KÝŒx˜ Q˜­r¬xÐ8Ñ8Ô8€HØ�a˜
 1�nÔ% t¨A¨j¸¨NÔ';¸TÀ!ÀJÈqÀ.Ô=QˆBˆ€BØ " T¡	€Hˆ\ˆkˆ\˜1ˆ_ÑØ"$¨¡'¨TÑ!1°r¸D±yÀQÑ6FÑ G€Hˆ\ˆkˆ\˜1ˆ_ÑØ"$¨¡'¨TÑ!1°r¸D±yÀQÑ6FÑ G€Hˆ\ˆkˆ\˜1ˆ_ÑØ!# q¡¨DÑ 0€Hˆ\ˆkˆ\˜1ˆ_ÑØ�ZÒÐÝŒx˜¥¤Ð*Ñ*Ô*ˆØ�J�K�KÔ ˆØ ˆˆ[ˆtŒyˆ[ÑØ‰
ˆˆB�Ø#%¨¡9ˆ�˜a�Ñ Ø%'¨1¡W°Ñ$4¸"¸t¹)ÈÑ9IÑ#Jˆ�˜a�Ñ Ø%'¨1¡W°Ñ$4¸"¸t¹)ÈÑ9IÑ#Jˆ�˜a�Ñ Ø$&¨!¡G¨tÑ#3ˆ�˜a�Ñ Ø×Ò˜BÑÔ   Ô/×7Ò7¸Ñ=Ô=Ð=r5   Ú Útensorúonnx.TensorProtoÚbase_dirc                ó>  — |                       d¦  «        rt          d¦  «        ‚| j        t          j        j        k    rt          d¦  «        ‚| j        }t          j        |¦  «        }t          j        t          j	        |¦  «        ¦  «        }t          j
        |¦  «        }| j        }| j        t          j        j        k    rVt          | |¦  «        }d„ |D ¦   «         }t          j        |¦  «                             |¦  «                             |¦  «        S d}	t          j                             | ¦  «        r t          j                             | |¦  «        }	|	€|                       d¦  «        �rÅ|	�|	n| j        }
t,          j        dk    r:t          j        |
|¬¦  «                             ¦   «                              ¦   «         }
|t          j        j        t          j        j        t          j        j        hv rCt          j        |
t          j        ¬¦  «        }t?          ||¦  «                              |¦  «        S |t          j        j!        t          j        j"        hv rCt          j        |
t          j        ¬¦  «        }tG          ||¦  «                              |¦  «        S |t          j        j$        t          j        j%        hv rEt          j        |
t          j        ¬¦  «        }tM          ||¦  «        }|                      |¦  «        S t          j        |
|¬¦  «                             |¦  «        S |t          j        j'        t          j        j(        t          j        j)        t          j        j*        hv r…t          j+        | j,        t          j-        ¬¦  «                              t          j.        ¦  «                             t          j/        ¦  «                             |¦  «                              |¦  «        S |t          j        j0        t          j        j1        t          j        j2        t          j        j3        t          j        j4        t          j        j5        hv r…t          j+        | j,        t          j-        ¬¦  «                              t          j.        ¦  «                             t          j        ¦  «                              |¦  «                             |¦  «        S |t          j        j$        t          j        j%        hv rˆt          j+        | j,        t          j-        ¬¦  «                              t          j.        ¦  «                             t          j        ¦  «        d	z                        |¦  «                             |¦  «        S |t          j        j        t          j        j        t          j        j        hv r‚t          j+        | j,        t          j-        ¬¦  «                              t          j.        ¦  «                             t          j        ¦  «        }t?          ||¦  «                              |¦  «        S |t          j        j!        t          j        j"        hv r‚t          j+        | j,        t          j-        ¬¦  «                              t          j.        ¦  «                             t          j        ¦  «        }tG          ||¦  «                              |¦  «        S t          | |¦  «        }|t          j        j6        t          j        j7        fv r=t          j+        ||¬¦  «                              |¬¦  «                             |¦  «        S t          j        ||¬¦  «                             |¦  «                             |¦  «        S )
a6  Converts a tensor def object to a numpy array.

    This function uses ml_dtypes if the dtype is not a native numpy dtype.

    Args:
        tensor: a TensorProto object.
        base_dir: if external tensor exists, base_dir can help to find the path to it

    Returns:
        arr: the converted array.
    Úsegmentz*Currently not supporting loading segments.z2The element type in the input tensor is UNDEFINED.c                ó8   — g | ]}|                      d ¦  «        ‘ŒS )úutf-8)Údecode)Ú.0r-   s     r3   ú
<listcomp>zto_array.<locals>.<listcomp>  s$   € Ð6Ð6Ð6 Aˆa�hŠh�wÑÔÐ6Ð6Ð6r5   NÚraw_dataÚbigr   rc   )8ÚHasFieldr"   Ú	data_typeÚonnxÚTensorProtoÚ	UNDEFINEDÚ	TypeErrorr   Útensor_dtype_to_np_dtypeÚ$tensor_dtype_to_storage_tensor_dtypeÚtensor_dtype_to_fieldr8   ÚSTRINGÚgetattrr   r   r   rh   Úexternal_data_helperÚuses_external_dataÚ_read_external_data_bytesr�   ÚsysÚ	byteorderÚ
frombufferÚbyteswapÚtobytesÚINT4ÚUINT4Ú
FLOAT4E2M1r!   rP   r   ÚUINT2ÚINT2r\   Ú
FLOAT6E2M3Ú
FLOAT6E3M2r„   ÚBFLOAT16ÚFLOAT16ÚINT16ÚUINT16rQ   Ú
int32_dataÚint32r   r   ÚFLOAT8E4M3FNÚFLOAT8E4M3FNUZÚ
FLOAT8E5M2ÚFLOAT8E5M2FNUZÚ
FLOAT8E8M0ÚBOOLÚ	COMPLEX64Ú
COMPLEX128)r†   rˆ   Útensor_dtypeÚnp_dtypeÚstorage_np_dtypeÚstorage_fieldr8   Úutf8_stringsÚssÚexternal_raw_datar�   r6   r{   s                r3   Úto_arrayrÁ   ñ   s  € ð ‡‚�yÑ!Ô!ð GÝÐEÑFÔFÐFØÔ�4Ô+Ô5Ò5Ð5ÝÐLÑMÔMÐMàÔ#€LÝÔ.¨|Ñ<Ô<€HÝÔ6ÝÔ3°LÑAÔAñô Ðõ Ô0°Ñ>Ô>€MØŒ;€DàÔ�4Ô+Ô2Ò2Ð2Ý˜v }Ñ5Ô5ˆØ6Ð6¨Ð6Ñ6Ô6ˆÝŒz˜"‰~Œ~×$Ò$ XÑ.Ô.×6Ò6°tÑ<Ô<Ð<ð ÐÝÔ ×3Ò3°FÑ;Ô;ð 
Ý Ô5×OÒOØ�Hñ
ô 
Ðð Ð$¨¯ª¸
Ñ(CÔ(CÑ$ð "3Ð!>ÐÐÀFÄOð 	õ Œ=˜EÒ!Ð!å”} X°XÐ>Ñ>Ô>×GÒGÑIÔI×QÒQÑSÔSˆHàÝÔÔ!ÝÔÔ"ÝÔÔ'ð
ð 
ð 
õ
 ”= µ´Ð:Ñ:Ô:ˆDÝ  dÑ+Ô+×0Ò0°Ñ:Ô:Ð:àÝÔÔ"ÝÔÔ!ð
ð 
ð 
õ ”= µ´Ð:Ñ:Ô:ˆDÝ  dÑ+Ô+×0Ò0°Ñ:Ô:Ð:à�DÔ,Ô7½Ô9IÔ9TÐUÐUÐUõ
 ”= µ´Ð:Ñ:Ô:ˆDÝ# D¨$Ñ/Ô/ˆHØ—=’= Ñ*Ô*Ð*åŒ}˜X¨XÐ6Ñ6Ô6×>Ò>¸tÑDÔDÐDàÝÔÔ!ÝÔÔ ÝÔÔÝÔÔð	ð ð õ ŒH�VÔ&­b¬hÐ7Ñ7Ô7ßŠT•"”)‰_Œ_ßŠV•B”IÑÔßŠW�T‰]Œ]ßŠT�(‰^Œ^ð	
ð ÝÔÔ%ÝÔÔ'ÝÔÔ#ÝÔÔ'ÝÔÔ#ÝÔÔðð ð õ ŒH�VÔ&­b¬hÐ7Ñ7Ô7ßŠT•"”)‰_Œ_ßŠV•B”HÑÔßŠT�(‰^Œ^ßŠW�T‰]Œ]ð	
ð ÝÔÔ#ÝÔÔ#ðð ð õ ”˜Ô*µ"´(Ð;Ñ;Ô;ß’•b”i‘”ß’�œÑ!Ô!Øñ÷
 ŠT�(‰^Œ^ßŠW�T‰]Œ]ð		
ð ÝÔÔÝÔÔÝÔÔ#ðð ð õ ŒH�VÔ&­b¬hÐ7Ñ7Ô7×<Ò<½R¼YÑGÔG×NÒNÍrÌxÑXÔXð 	õ ˜D $Ñ'Ô'×,Ò,¨XÑ6Ô6Ð6àÝÔÔÝÔÔðð ð õ
 ŒH�VÔ&­b¬hÐ7Ñ7Ô7×<Ò<½R¼YÑGÔG×NÒNÍrÌxÑXÔXð 	õ ˜D $Ñ'Ô'×,Ò,¨XÑ6Ô6Ð6å�6˜=Ñ)Ô)€DØ�Ô(Ô2µDÔ4DÔ4OÐPÐPÐPÝŒx˜Ð$4Ð5Ñ5Ô5×:Ò:ÀÐ:ÑJÔJ×RÒRÐSWÑXÔXÐXåŒ:�dÐ"2Ð3Ñ3Ô3×:Ò:¸8ÑDÔD×LÒLÈTÑRÔRÐRr5   Úbytesc                óä   — | j         j        dk    s t          j        dk    r=| j         j        dk    r-|                      | j                              d¦  «        ¦  «        } |                      ¦   «         S )záConverts an array into bytes in little endian byte order.

    Args:
        array: a numpy array.

    Returns:
        bytes: Byte representation of passed array in little endian byte order.

    .. versionadded:: 1.20
    ú>r‘   ú=ú<)r   r¡   r    r   Únewbyteorderr¤   )rQ   s    r3   Útobytes_little_endianrÈ   †  sa   € ð „{Ô Ò#Ð#ÝŒ˜ÒÐ 5¤;Ô#8¸CÒ#?Ð#?ð —’˜Uœ[×5Ò5°cÑ:Ô:Ñ;Ô;ˆà�=Š=‰?Œ?Ðr5   Únameú
str | Nonec               ó\  — t          j        ¦   «         }|j                             | j        ¦  «         |r||_        | j        t          k    s$t          j	        | j        t          j
        ¦  «        rÂt           j        j        |_        |                      ¦   «         }|D ]“}t          |t          ¦  «        r.|j                             |                     d¦  «        ¦  «         ŒEt          |t&          ¦  «        r|j                             |¦  «         Œut)          dt+          |¦  «        › �¦  «        ‚|S t-          j        | j        ¦  «        }|t           j        j        t           j        j        t           j        j        hv rt7          | ¦  «        } |t           j        j        t           j        j        hv rt=          | ¦  «        } |t           j        j        t           j        j         hv r,tC          |  "                    t          j#        ¦  «        ¦  «        } tI          | ¦  «        |_%        ||_        |S )zÊConverts an array into a TensorProto including

    Args:
        array: a numpy array.
        name: (optional) the name of the tensor.

    Returns:
        TensorProto: the converted tensor def.
    rŒ   zMUnrecognized object in the object array, expect a string, or array of bytes: )&r”   r•   r8   ÚextendÚshaperÉ   r   Úobjectr   Ú
issubdtypeÚstr_r›   r“   ÚflattenÚ
isinstancer   Ústring_dataÚappendÚencoderÂ   ÚNotImplementedErrorÚtyper   Únp_dtype_to_tensor_dtyper¥   r¦   r§   rX   r¨   r©   r_   rª   r«   rr   r   r!   rÈ   r�   )rQ   rÉ   r†   Ú
flat_arrayÚer   s         r3   Ú
from_arrayrÛ   š  s÷  € õ ÔÑÔ€FØ
„K×Ò�u”{Ñ#Ô#Ð#Øð ØˆŒØ„{•fÒÐ¥¤¨e¬k½2¼7Ñ CÔ CÐåÔ+Ô2ˆÔð —]’]‘_”_ˆ
Øð 	ð 	ˆAÝ˜!�SÑ!Ô!ð ØÔ"×)Ò)¨!¯(ª(°7Ñ*;Ô*;Ñ<Ô<Ð<Ð<Ý˜A�uÑ%Ô%ð ØÔ"×)Ò)¨!Ñ,Ô,Ð,Ð,å)ØmÕdhÐijÑdkÔdkÐmÐmñô ð ð ˆåÔ+¨E¬KÑ8Ô8€EØÝÔÔÝÔÔÝÔÔ#ðð ð õ ˜UÑ#Ô#ˆàÝÔÔÝÔÔðð ð õ
 ˜UÑ#Ô#ˆàÝÔÔ#ÝÔÔ#ðð ð õ
 ˜5Ÿ:š:¥b¤hÑ/Ô/Ñ0Ô0ˆå+¨EÑ2Ô2€F„OØ€FÔØ€Mr5   Úsequenceúonnx.SequenceProtoú	list[Any]c                ó^  — | j         }|t          j        j        k    rd„ | j        D ¦   «         S |t          j        j        k    rd„ | j        D ¦   «         S |t          j        j        k    rd„ | j        D ¦   «         S |t          j        j	        k    rd„ | j
        D ¦   «         S t          d¦  «        ‚)z“Converts a sequence def to a Python list.

    Args:
        sequence: a SequenceProto object.

    Returns:
        list: the converted list.
    c                ó,   — g | ]}t          |¦  «        ‘ŒS © ©rÁ   ©rŽ   Úvs     r3   r�   zto_list.<locals>.<listcomp>æ  s   € Ð<Ð<Ð< •˜‘”Ð<Ð<Ð<r5   c                ó,   — g | ]}t          |¦  «        ‘ŒS rá   râ   rã   s     r3   r�   zto_list.<locals>.<listcomp>è  s   € ÐCÐCÐC •˜‘”ÐCÐCÐCr5   c                ó,   — g | ]}t          |¦  «        ‘ŒS rá   )Úto_listrã   s     r3   r�   zto_list.<locals>.<listcomp>ê  s   € Ð=Ð=Ð=˜q•˜‘
”
Ð=Ð=Ð=r5   c                ó,   — g | ]}t          |¦  «        ‘ŒS rá   )Úto_dictrã   s     r3   r�   zto_list.<locals>.<listcomp>ì  s   € Ð8Ð8Ð8˜q•˜‘
”
Ð8Ð8Ð8r5   z8The element type in the input sequence is not supported.)Ú	elem_typer”   ÚSequenceProtoÚTENSORÚtensor_valuesÚSPARSE_TENSORÚsparse_tensor_valuesÚSEQUENCEÚsequence_valuesÚMAPÚ
map_valuesr—   )rÜ   rê   s     r3   rç   rç   Û  s»   € ð Ô"€IØ•DÔ&Ô-Ò-Ð-Ø<Ð< XÔ%;Ð<Ñ<Ô<Ð<Ø•DÔ&Ô4Ò4Ð4ØCÐC XÔ%BÐCÑCÔCÐCØ•DÔ&Ô/Ò/Ð/Ø=Ð= HÔ$<Ð=Ñ=Ô=Ð=Ø•DÔ&Ô*Ò*Ð*Ø8Ð8 HÔ$7Ð8Ñ8Ô8Ð8Ý
ÐNÑ
OÔ
OÐOr5   Úlstr   ú
int | Nonec                ó¾  ‡ — t          j        ¦   «         }|r||_        |�|}nŒt          ‰ ¦  «        dk    rh‰ d         }t	          |t
          ¦  «        rt           j        j        }nJt	          |t          ¦  «        rt           j        j        }n#t           j        j	        }nt           j        j	        }||_
        t          ‰ ¦  «        dk    r*t          ˆ fd„‰ D ¦   «         ¦  «        st          d¦  «        ‚|t           j        j	        k    r@‰ D ]<}|j                             t          t!          j        |¦  «        ¦  «        g¦  «         Œ=n•|t           j        j        k    r.‰ D ]*}|j                             t'          |¦  «        g¦  «         Œ+nR|t           j        j        k    r.‰ D ]*}|j                             t+          |¦  «        g¦  «         Œ+nt          d¦  «        ‚|S )a]  Converts a list into a sequence def.

    Args:
        lst: a Python list
        name: (optional) the name of the sequence.
        dtype: (optional) type of element in the input list, used for specifying
                          sequence values when converting an empty list.

    Returns:
        SequenceProto: the converted sequence def.
    Nr   c              3  ó^   •K  — | ]'}t          |t          ‰d          ¦  «        ¦  «        V — Œ(dS )r   N)rÒ   r×   )rŽ   Úelemrô   s     €r3   ú	<genexpr>zfrom_list.<locals>.<genexpr>  s7   øè è € Ð!QÐ!QÀT¥*¨Tµ4¸¸A¼±<´<Ñ"@Ô"@Ð!QÐ!QÐ!QÐ!QÐ!QÐ!Qr5   zqThe element type in the input list is not the same for all elements and therefore is not supported as a sequence.zZThe element type in the input list is not a tensor, sequence, or map and is not supported.)r”   rë   rÉ   ÚlenrÒ   Údictrò   rJ   rð   rì   rê   Úallr—   rí   rÌ   rÛ   r   r   rñ   Ú	from_listró   Ú	from_dict)	rô   rÉ   r   rÜ   rê   Ú
first_elemr†   ÚseqÚmappings	   `        r3   rý   rý   ð  sú  ø€ õ Ô!Ñ#Ô#€HØð ØˆŒàÐØˆ	ˆ	Ý	ˆS‰Œ�AŠˆØ˜”Vˆ
Ý�j¥$Ñ'Ô'ð 	2ÝÔ*Ô.ˆIˆIÝ˜
¥DÑ)Ô)ð 	2ÝÔ*Ô3ˆIˆIåÔ*Ô1ˆIˆIõ Ô&Ô-ˆ	Ø"€HÔåˆC‰Œ�1Šˆ�cÐ!QÐ!QÐ!QÐ!QÈSÐ!QÑ!QÔ!QÑQÔQˆÝðMñ
ô 
ð 	
ð
 •DÔ&Ô-Ò-Ð-Øð 	Lð 	LˆFØÔ"×)Ò)­:µb´jÀÑ6HÔ6HÑ+IÔ+IÐ*JÑKÔKÐKÐKð	Là	•dÔ(Ô1Ò	1Ð	1Øð 	>ð 	>ˆCØÔ$×+Ò+­Y°s©^¬^Ð,<Ñ=Ô=Ð=Ð=ð	>à	•dÔ(Ô,Ò	,Ð	,Øð 	=ð 	=ˆGØÔ×&Ò&­	°'Ñ(:Ô(:Ð';Ñ<Ô<Ð<Ð<ð	=õ ð5ñ
ô 
ð 	
ð €Or5   Ú	map_protoúonnx.MapProtoúdict[Any, Any]c                ób  — g }| j         t          j        j        k    rt	          | j        ¦  «        }nt	          | j        ¦  «        }t          | j        ¦  «        }t          |¦  «        t          |¦  «        k    rt          d| j        › d�¦  «        ‚t          t          ||d¬¦  «        ¦  «        S )z�Converts a map def to a Python dictionary.

    Args:
        map_proto: a MapProto object.

    Returns:
        The converted dictionary.
    z2Length of keys and values for MapProto (map name: z) are not the same.F)Ústrict)Úkey_typer”   r•   r›   rJ   Ústring_keysÚkeysrç   r`   rú   Ú
IndexErrorrÉ   rû   Úzip)r  Úkey_listÚ
value_lists      r3   ré   ré   )  s¦   € ð €HØÔ�TÔ-Ô4Ò4Ð4Ý˜	Ô-Ñ.Ô.ˆˆå˜	œÑ'Ô'ˆå˜Ô)Ñ*Ô*€JÝ
ˆ8�}„}�˜J™œÒ'Ð'ÝØdÀÄÐdÐdÐdñ
ô 
ð 	
õ •�H˜j°Ð7Ñ7Ô7Ñ8Ô8Ð8r5   Údict_c                ó"  ‡‡	— t          j        ¦   «         }|r||_        | st          d¦  «        ‚t	          | ¦  «        }t          j        |d         ¦  «        Št          j        ‰¦  «        }t           j	        j
        t           j	        j        t           j	        j        t           j	        j        t           j	        j        t           j	        j        t           j	        j        t           j	        j        h}t%          ˆfd„|D ¦   «         ¦  «        st'          d¦  «        ‚t	          |                      ¦   «         ¦  «        }t          j        |d         ¦  «        Š	t%          ˆ	fd„|D ¦   «         ¦  «        st'          d¦  «        ‚t+          |¦  «        }||_        |t           j	        j        k    r|j                             |¦  «         n1||v r|j                             |¦  «         nt'          d|› �¦  «        ‚|j                             |¦  «         |S )zÂConverts a Python dictionary into a map def.

    Args:
        dict_: Python dictionary
        name: (optional) the name of the map.

    Returns:
        MapProto: the converted map def.
    z/Cannot convert an empty dictionary to MapProto.r   c              3  óH   •K  — | ]}t          j        |¦  «        ‰k    V — Œd S ©N©r   Úresult_type)rŽ   ÚkeyÚraw_key_types     €r3   rù   zfrom_dict.<locals>.<genexpr>^  s2   øè è € ÐDÐD¸•”˜sÑ#Ô# |Ò3ÐDÐDÐDÐDÐDÐDr5   zfThe key type in the input dictionary is not the same for all keys and therefore is not valid as a map.c              3  óH   •K  — | ]}t          j        |¦  «        ‰k    V — Œd S r  r  )rŽ   ÚvalÚraw_value_types     €r3   rù   zfrom_dict.<locals>.<genexpr>f  s2   øè è € ÐGÐG¸�rŒ~˜cÑ"Ô" nÒ4ÐGÐGÐGÐGÐGÐGr5   zjThe value type in the input dictionary is not the same for all values and therefore is not valid as a map.zUnsupported map key type: )r”   ÚMapProtorÉ   r"   rJ   r   r  r   rØ   r•   ÚINT8r®   ÚINT32ÚINT64ÚUINT8r¯   ÚUINT32ÚUINT64rü   r—   r`   rý   r  r›   r  rÌ   r	  ÚCopyFrom)
r  rÉ   r  r	  r  Úvalid_key_int_typesr`   Ú	value_seqr  r  s
           @@r3   rþ   rþ   @  sù  øø€ õ ”‘”€IØð Øˆ	ŒØð LÝÐJÑKÔKÐKÝ�‰;Œ;€DÝ”> $ q¤'Ñ*Ô*€LÝÔ.¨|Ñ<Ô<€Hõ 	ÔÔÝÔÔÝÔÔÝÔÔÝÔÔÝÔÔÝÔÔÝÔÔð	Ðõ ÐDÐDÐDÐD¸tÐDÑDÔDÑDÔDð 
Ýð@ñ
ô 
ð 	
õ
 �%—,’,‘.”.Ñ!Ô!€FÝ”^ F¨1¤IÑ.Ô.€NÝÐGÐGÐGÐGÀÐGÑGÔGÑGÔGð 
ÝðBñ
ô 
ð 	
õ
 ˜&Ñ!Ô!€Ià!€IÔØ•4Ô#Ô*Ò*Ð*ØÔ×$Ò$ TÑ*Ô*Ð*Ð*Ø	Ð(Ð	(Ð	(ØŒ×Ò˜dÑ#Ô#Ð#Ð#åÐ?°XÐ?Ð?Ñ@Ô@Ð@ØÔ×Ò˜iÑ(Ô(Ð(ØÐr5   Úoptionalúonnx.OptionalProtoú
Any | Nonec                óö  — | j         }|t          j        j        k    rdS |t          j        j        k    rt          | j        ¦  «        S |t          j        j        k    rt          | j        ¦  «        S |t          j        j	        k    rt          | j        ¦  «        S |t          j        j        k    rt          | j        ¦  «        S |t          j        j        k    rt!          | j        ¦  «        S t%          d¦  «        ‚)zœConverts an optional def to a Python optional.

    Args:
        optional: an OptionalProto object.

    Returns:
        opt: the converted optional.
    Nz8The element type in the input optional is not supported.)rê   r”   ÚOptionalProtor–   rì   rÁ   Útensor_valuerî   Úsparse_tensor_valuerð   rç   Úsequence_valuerò   ré   Ú	map_valueÚOPTIONALÚto_optionalÚoptional_valuer—   )r#  rê   s     r3   r-  r-  y  sÛ   € ð Ô"€IØ•DÔ&Ô0Ò0Ð0ØˆtØ•DÔ&Ô-Ò-Ð-Ý˜Ô-Ñ.Ô.Ð.Ø•DÔ&Ô4Ò4Ð4Ý˜Ô4Ñ5Ô5Ð5Ø•DÔ&Ô/Ò/Ð/Ý�xÔ.Ñ/Ô/Ð/Ø•DÔ&Ô*Ò*Ð*Ý�xÔ)Ñ*Ô*Ð*Ø•DÔ&Ô/Ò/Ð/Ý˜8Ô2Ñ3Ô3Ð3Ý
ÐNÑ
OÔ
OÐOr5   Úoptc                ó:  — t          j        ¦   «         }|r||_        |�:|t           j        j                             ¦   «         vrt          |› d�¦  «        ‚|}nst          | t          ¦  «        rt           j        j        }nLt          | t          ¦  «        rt           j        j
        }n%| €t           j        j        }nt           j        j        }||_        | �Æ|t           j        j        k    r(|j                             t!          | ¦  «        ¦  «         n‰|t           j        j
        k    r(|j                             t%          | ¦  «        ¦  «         nL|t           j        j        k    r(|j                             t)          | ¦  «        ¦  «         nt          d¦  «        ‚|S )a¬  Converts an optional value into a Optional def.

    Args:
        opt: a Python optional
        name: (optional) the name of the optional.
        dtype: (optional) type of element in the input, used for specifying
                          optional values when converting empty none. dtype must
                          be a valid OptionalProto.DataType value

    Returns:
        optional: the converted optional def.
    Nz( must be a valid OptionalProto.DataType.zUThe element type in the input is not a tensor, sequence, or map and is not supported.)r”   r'  rÉ   ÚDataTyper`   r—   rÒ   rû   rò   rJ   rð   r–   rì   rê   r(  r   rÛ   r*  rý   r+  rþ   )r/  rÉ   r   r#  rê   s        r3   Úfrom_optionalr2  ’  s{  € õ  Ô!Ñ#Ô#€HØð ØˆŒàÐà�Ô*Ô3×:Ò:Ñ<Ô<Ð<Ð<Ý˜uÐNÐNÐNÑOÔOÐOØˆ	ˆ	Ý	�C�Ñ	Ô	ð .ÝÔ&Ô*ˆ	ˆ	Ý	�C�Ñ	Ô	ð .ÝÔ&Ô/ˆ	ˆ	Ø	ˆÝÔ&Ô0ˆ	ˆ	åÔ&Ô-ˆ	à"€HÔà
€Ø�Ô*Ô1Ò1Ð1ØÔ!×*Ò*­:°c©?¬?Ñ;Ô;Ð;Ð;Ø�$Ô,Ô5Ò5Ð5ØÔ#×,Ò,­Y°s©^¬^Ñ<Ô<Ð<Ð<Ø�$Ô,Ô0Ò0Ð0ØÔ×'Ò'­	°#©¬Ñ7Ô7Ð7Ð7åð9ñô ð ð €Or5   r   Úinput_shapeú
tuple[int]únp.dtypeÚseedÚintc           	     ó¦  — t           j                             |¦  «         |t           j        t           j        t           j        t           j        t           j        t           j        t           j	        t           j
        fv rÅt          t          j        |¦  «        j        t          j        t           j	        ¦  «        j        ¦  «        }t          t          j        |¦  «        j        t          j        t           j	        ¦  «        j        ¦  «        }t           j                             ||| ¬¦  «                             |¦  «        S t!          |› d�¦  «        ‚)a'  Create random integer array for backend/test/case/node.

    Args:
        input_shape: The shape for the returned integer array.
        dtype: The NumPy data type for the returned integer array.
        seed: The seed for np.random.

    Returns:
        np.ndarray: Random integer array.
    )rG   z' is not supported by create_random_int.)r   Úrandomr6  r!   r   r   Úuint64Úint8Úint16r±   Úint64rt   ÚiinfoÚmaxÚrandintr   r—   )r3  r   r6  ÚendÚstarts        r3   Úcreate_random_intrC  Å  sè   € õ „I‡N‚N�4ÑÔÐØÝ
ŒÝ
Œ	Ý
Œ	Ý
Œ	Ý
ŒÝ
ŒÝ
ŒÝ
Œð	ð 	ð 	õ •"”(˜5‘/”/Ô%¥r¤xµ´Ñ'9Ô'9Ô'=Ñ>Ô>ˆÝ•B”H˜U‘O”OÔ'­¬µ"´(Ñ);Ô);Ô)?Ñ@Ô@ˆÝŒy× Ò  ¨°+Ð Ñ>Ô>×EÒEÀeÑLÔLÐLÝ
�uÐEÐEÐEÑ
FÔ
FÐFr5   c                ó€  — t          j        |t           j        ¦  «        s0|t          j        t          j        t          j        t          j        fv r)t          j        |¦  «        }t          j	        | ¦  «        } nt          j
        |¦  «        }t          j        | |j        |j        ¦  «                             |¦  «        S )zÑSaturate cast for numeric types.

    This function ensures that values outside the representable range
    of the target dtype are clamped to the maximum or minimum representable
    value of that dtype.
    )r   rÏ   Úintegerr#   Úint4Úuint4Úint2Úuint2r>  ÚroundÚfinfoÚcliprt   r?  r   )r	   r   Úinfos      r3   Úsaturate_castrN  ä  s”   € õ 
„}�U�BœJÑ'Ô'ð 	&¨5ÝŒÝŒÝŒÝŒð	5ð ,ð ,õ Œ˜uÑ%Ô%ˆÝŒH�Q‰KŒKˆˆåŒ˜uÑ%Ô%ˆåŒ7�1�d”h ¤Ñ)Ô)×0Ò0°Ñ7Ô7Ð7r5   )Tr   )r	   r
   r   r   r   r   r   r
   )r6   r7   r8   r9   r   r7   )rQ   r
   r   r7   )r`   r
   r   r7   )r6   r
   r8   r9   r   r7   )r…   )r†   r‡   rˆ   r   r   r
   )rQ   r
   r   rÂ   r  )rÉ   rÊ   rQ   r
   r   r‡   )rÜ   rÝ   r   rÞ   )NN)rô   rÞ   rÉ   rÊ   r   rõ   r   rÝ   )r  r  r   r  )r  r  rÉ   rÊ   r   r  )r#  r$  r   r%  )r/  r%  rÉ   rÊ   r   rõ   r   r$  )r   )r3  r4  r   r5  r6  r7  r   r
   )r	   r
   r   r5  r   r
   )#Ú
__future__r   rH   r    Úcollections.abcr   Útypingr   r   r#   Únumpyr   Únumpy.typingÚnptÚonnx.external_data_helperr”   r   r4   rP   rX   r\   r_   rr   r„   rÁ   rÈ   rÛ   rç   rý   ré   rþ   r-  r2  rC  rN  rá   r5   r3   ú<module>rV     s�  ðð #Ð "Ð "Ð "Ð "Ð "à €€€Ø 
€
€
€
Ø $Ð $Ð $Ð $Ð $Ð $Ø %Ð %Ð %Ð %Ð %Ð %Ð %Ð %à Ð Ð Ð Ø Ð Ð Ð Ø Ð Ð Ð Ð Ð à  Ð  Ð  Ð  Ø Ð Ð Ð Ð Ð àð )Ø(Ð(Ð(Ð(Ð(Ð(ð
 ØðH1ð H1ð H1ð H1ð H1ðVð ð ð ð@
/ð 
/ð 
/ð 
/ðð ð ð ð>Uð Uð Uð Uð,ð ,ð ,ð ,ð ">ð ">ð ">ð ">ðJRSð RSð RSð RSð RSðjð ð ð ð(>ð >ð >ð >ð >ðBPð Pð Pð Pð, BFð6ð 6ð 6ð 6ð 6ðr9ð 9ð 9ð 9ð.6ð 6ð 6ð 6ð 6ðrPð Pð Pð Pð4 CGð0ð 0ð 0ð 0ð 0ðh ;<ðGð Gð Gð Gð Gð>8ð 8ð 8ð 8ð 8ð 8r5   