§
    kŠtji`  ã                   ó  — d dl Z d dlZd dlZd dlZd dlZd dl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 d dlmZ  ej        e¦  «        Zd„ Zdd„Zdd	„Zd
„ Zg d¢ZdgddgddgdœZ G d„ d¦  «        Z	 	 	 	 	 	 	 	 	 dd„Zdd„ZdS )é    N)ÚAttributeProtoÚ
GraphProtoÚ
ModelProtoÚ	NodeProtoÚTensorProtoÚhelperÚnumpy_helper)Úinfer_shapesÚinfer_shapes_path)Úversionc                 ó   — d„ | D ¦   «         S )z|
    Convert numpy float16 to python int.

    :param np_list: numpy float16 list
    :return int_list: python int list
    c           	      ó¤   — g | ]M}t          t          |                     d ¦  «        ¦  «        dd…                              d¦  «        d¦  «        ‘ŒNS )ÚHé   Né   )ÚintÚbinÚviewÚzfill)Ú.0Ú_s     ú^/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/onnxruntime/transformers/float16.pyú
<listcomp>z%_npfloat16_to_int.<locals>.<listcomp>$   sK   € ÐDÐDÐD°q�C•�A—F’F˜3‘K”KÑ Ô    Ô$×*Ò*¨2Ñ.Ô.°Ñ2Ô2ÐDÐDÐDó    © )Únp_lists    r   Ú_npfloat16_to_intr      s   € ð EÐD¸GÐDÑDÔDÐDr   çÛ"•“\ÿo>ç     üï@c           	      óà  — d„ }| t          j        | dk    ¦  «                 j        d         dk    r¬| t          j        | dk    ¦  «                                      ¦   «         }| t          j        | dk    ¦  «                                      ¦   «         }||k    r t
                               d|› d|› �¦  «         ||k    r t
                               d|› d|› �¦  «         | t          j        | dk     ¦  «                 j        d         dk    r°| t          j        | dk     ¦  «                                      ¦   «         }| t          j        | dk     ¦  «                                      ¦   «         }|| k    r!t
                               d|› d| › �¦  «         || k    r!t
                               d|› d| › �¦  «         t          j         |d| |¦  «        || ¦  «        } t          j         || | d¦  «        | | ¦  «        } t          j         ||| t          d¦  «        ¦  «        || ¦  «        } t          j         |t          d¦  «        | | ¦  «        | | ¦  «        } t          j        | ¦  «        S )a?  
    Convert float32 numpy array to float16 without changing sign or finiteness.
    Positive values less than min_positive_val are mapped to min_positive_val.
    Positive finite values greater than max_finite_val are mapped to max_finite_val.
    Similar for negative values. NaN, 0, inf, and -inf are unchanged.
    c                 ó<   — t          j        | |k     ||k     ¦  «        S ©N)ÚnpÚlogical_and)ÚaÚbÚcs      r   Úbetweenz&convert_np_to_float16.<locals>.between/   s   € ÝŒ~˜a !še Q¨¢UÑ+Ô+Ð+r   r   zthe float32 number z will be truncated to Úinfz-inf)	r#   ÚwhereÚshapeÚmaxÚminÚloggerÚdebugÚfloatÚfloat16)Únp_arrayÚmin_positive_valÚmax_finite_valr(   Úpositive_maxÚpositive_minÚnegative_maxÚnegative_mins           r   Úconvert_np_to_float16r9   '   sj  € ð,ð ,ð ,ð •”˜ AšÑ&Ô&Ô'Ô-¨aÔ0°1Ò4Ð4Ø¥¤¨°AªÑ 6Ô 6Ô7×;Ò;Ñ=Ô=ˆØ¥¤¨°AªÑ 6Ô 6Ô7×;Ò;Ñ=Ô=ˆØ˜>Ò)Ð)Ý�LŠLÐc¨|ÐcÐcÐSaÐcÐcÑdÔdÐdØÐ+Ò+Ð+Ý�LŠLÐe¨|ÐeÐeÐScÐeÐeÑfÔfÐfà•”˜ AšÑ&Ô&Ô'Ô-¨aÔ0°1Ò4Ð4Ø¥¤¨°AªÑ 6Ô 6Ô7×;Ò;Ñ=Ô=ˆØ¥¤¨°AªÑ 6Ô 6Ô7×;Ò;Ñ=Ô=ˆØ˜N˜?Ò*Ð*Ý�LŠLÐd¨|ÐdÐdÐTbÐSbÐdÐdÑeÔeÐeØÐ,Ð,Ò,Ð,Ý�LŠLÐf¨|ÐfÐfÐTdÐSdÐfÐfÑgÔgÐgåŒx˜˜  8Ð-=Ñ>Ô>Ð@PÐRZÑ[Ô[€HÝŒx˜˜Ð!1Ð 1°8¸QÑ?Ô?ÐBRÐARÐT\Ñ]Ô]€HÝŒx˜˜ °½%À¹,¼,ÑGÔGÈÐYaÑbÔb€HÝŒx˜˜¥ f¡¤¨x¸.¸ÑIÔIÈNÈ?Ð\dÑeÔe€HÝŒ:�hÑÔÐr   c                 óþ  — t          | t          ¦  «        st          dt          | ¦  «        › �¦  «        ‚| j        t          j        k    r³t          j        | _        | j        rOt          t          j
        | j        ¦  «        ||¦  «        }t          |¦  «        }|| j        dd…<   g | j        dd…<   | j        rEt          j        | j        d¬¦  «        }t          |||¦  «        }|                     ¦   «         | _        | S )a…  Convert tensor float to float16.

    Args:
        tensor (TensorProto): the tensor to convert.
        min_positive_val (float, optional): minimal positive value. Defaults to 1e-7.
        max_finite_val (float, optional): maximal finite value. Defaults to 1e4.

    Raises:
        ValueError: input type is not TensorProto.

    Returns:
        TensorProto: the converted tensor.
    ú3Expected input type is an ONNX TensorProto but got NÚfloat32©Údtype)Ú
isinstancer   Ú
ValueErrorÚtypeÚ	data_typeÚFLOATÚFLOAT16Ú
float_datar9   r#   Úarrayr   Ú
int32_dataÚraw_dataÚ
frombufferÚtobytes)Útensorr3   r4   Úfloat16_dataÚint_listÚfloat32_listÚfloat16_lists          r   Úconvert_tensor_float_to_float16rP   I   sö   € õ �f�kÑ*Ô*ð _ÝÐ]ÍtÐTZÉ|Ì|Ð]Ð]Ñ^Ô^Ð^àÔ�;Ô,Ò,Ð,Ý&Ô.ˆÔàÔð 	&Ý0µ´¸&Ô:KÑ1LÔ1LÐN^Ð`nÑoÔoˆLÝ(¨Ñ6Ô6ˆHØ#+ˆFÔ˜a˜a˜aÑ Ø#%ˆFÔ˜a˜a˜aÑ àŒ?ð 	5åœ=¨¬À	ÐJÑJÔJˆLå0°Ð?OÐQ_Ñ`Ô`ˆLà*×2Ò2Ñ4Ô4ˆFŒOØ€Mr   c                 ót   — t          j        | ¦  «        j        }t          j        | j        | j        |¦  «        S r"   )r	   Úto_arrayr+   r   Úmake_tensor_value_infoÚnamerB   )rK   r+   s     r   Úmake_value_info_from_tensorrU   n   s/   € ÝÔ! &Ñ)Ô)Ô/€EÝÔ(¨¬°fÔ6FÈÑNÔNÐNr   )ÚArrayFeatureExtractorÚ	BinarizerÚCastMapÚCategoryMapperÚDictVectorizerÚFeatureVectorizerÚImputerÚLabelEncoderÚLinearClassifierÚLinearRegressorÚ
NormalizerÚOneHotEncoderÚRandomUniformLikeÚSVMClassifierÚSVMRegressorÚScalerÚTreeEnsembleClassifierÚTreeEnsembleRegressorÚTreeEnsembleÚZipMapÚNonMaxSuppressionÚTopKÚRoiAlignÚRangeÚCumSumÚMinÚMaxÚUpsampler   é   )ÚResizeÚ	GroupNormÚSkipGroupNormc                   ó*   — e Zd ZdZdefd„Zdefd„ZdS )ÚInitializerTrackerz'Class for keeping track of initializer.Úinitializerc                 ó0   — || _         g | _        g | _        d S r"   )rx   Ú
fp32_nodesÚ
fp16_nodes)Úselfrx   s     r   Ú__init__zInitializerTracker.__init__›   s   € Ø&ˆÔØˆŒØˆŒˆˆr   Únodec                 óv   — |r| j                              |¦  «         d S | j                             |¦  «         d S r"   )rz   Úappendr{   )r|   r~   Úis_node_blockeds      r   Úadd_nodezInitializerTracker.add_node    sB   € Øð 	)ØŒO×"Ò" 4Ñ(Ô(Ð(Ð(Ð(àŒO×"Ò" 4Ñ(Ô(Ð(Ð(Ð(r   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r}   r   r‚   r   r   r   rw   rw   ˜   sP   € € € € € Ø1Ð1ð Kð ð ð ð ð
)˜Yð )ð )ð )ð )ð )ð )r   rw   Fc
                 ó
  ‡— |dk    s
J d¦   «         ‚|t          t          j        t          j        ¦  «        j        ¦  «        k    s
J d¦   «         ‚|€i n|}
t          | t          ¦  «        rÄ| }t          j        t          j
        ¦  «        t          j        d¦  «        k    rz|sxt          j        t          j                             |¦  «        ¬¦  «        5 }|j        }t#          ||¦  «         t          j        |¦  «        } d}ddd¦  «         n# 1 swxY w Y   nt          j        |¦  «        } t          | t&          ¦  «        st)          dt+          | ¦  «        › �¦  «        ‚d}|sBt          j        t          j
        ¦  «        t          j        d	¦  «        k    r	 t,          }n# w xY w|€t.          }|€g }t1          |¦  «        }t1          |¦  «        }t	          d
„ | j        D ¦   «         d¬¦  «        }t5          t6          ¦  «        }|dk    rdg|d<   t8                               d|› d|› d‰› d|› d|› d|› d|› �¦  «         g }g }g }g }|� || ¦  «        } |                     | ¦  «         i }t1          ¦   «         }t1          ¦   «         }d„ | j        j         D ¦   «         }d„ | j        j!        D ¦   «         }t          ‰tD          ¦  «        rˆfd„|D ¦   «         }ˆfd„|D ¦   «         }n‰sg }g }tG          | j        j         ¦  «        D �]!\  }}|j        |v �rdt          |¦  «        z   }|||j        <   | $                    |j        ¦  «         dt          |¦  «        z   }| j        j%         $                    ¦   «         }| &                    |¦  «         ||_        tN          j(        |j        j)        _*        tW          j,        d|j        g|gtN          j(        |¬¦  «        g}| j        j-         .                    |¦  «         |                     |¦  «         | $                    |¦  «         �Œ#tG          | j        j!        ¦  «        D �]\  }}|j        |v �rdt          |¦  «        z   } | ||j        <   | $                    |j        ¦  «         d t          |¦  «        z   }| j        j%         $                    ¦   «         }| &                    |¦  «         | |_        tN          j(        |j        j)        _*        tW          j,        d| g|j        gd|¬¦  «        g}| j        j-         .                    |¦  «         |                     |¦  «         | $                    |¦  «         �Œi }!|�rµg }"|D �]ª}#t          |#t&          ¦  «        r|"                     |#j        ¦  «         t          |#t^          ¦  «        �r¯|#j0        D ]9}|j1        tN          j2        k    r"|j        |!vsJ ‚tg          |¦  «        |!|j        <   Œ:|#j-        D �]e}|j        |v rŒti          tk          |j         ¦  «        ¦  «        D ],}|j         |         |v r||j         |                  |j         |<   Œ-ti          tk          |j!        ¦  «        ¦  «        D ],}|j!        |         |v r||j!        |                  |j!        |<   Œ-|j6        |v p|j        |v }$tG          |j         ¦  «        D ]a\  }} | |!v rX|$p9|| 7                    |j6        g ¦  «        v o||
 7                    |j6        g ¦  «        v}%|!|           8                    ||%¦  «         Œb|$r|                     |¦  «         �ŒJ|j6        dk    r=|j9        D ]5}&|&j        d!k    r(|&j:        tN          j2        k    rtN          j(        |&_:         nŒ6|j6        d"v r‚d#}'|j9        D ]5}&|&j        d$k    r(d}'|&j:        tN          j2        k    rtN          j(        |&_:        Œ6|j6        d%v r:|'s8|j9         .                    tW          j;        d$tN          j(        ¦  «        g¦  «         |j6        |vs	|j6        |
v r!|j9        D ]}&|"                     |&¦  «         Œ�ŒP|                     |¦  «         �Œgt          |#tx          ¦  «        r‚|"                     |#j=        ¦  «         |#j>        D ]}|"                     |¦  «         Œ|#j?         &                    t�          |#j?        ||¦  «        ¦  «         |#jA        D ]}t�          |||¦  «        }Œt          |#t^          ¦  «        �rt…          jC        |#j         |#j!        |#j%        ¦  «        D ]à}|j        j)        j*        tN          j2        k    r9|j        |vr0tN          j(        |j        j)        _*        |                     |¦  «         |j         D                    d&¦  «        rl|j        jE        j*        j)        j*        tN          j2        k    rC|j        |vr:tN          j(        |j        jE        j*        j)        _*        |                     |¦  «         Œá�Œ¬|"}|�°µ|! F                    ¦   «         D ]x}(|s|(jG        rmt�          |(j0        ||¦  «        |(_0        |                     t‘          |(j0        ¦  «        ¦  «         |(jI        r$|s"t8           J                    d'|(jG        › �¦  «         Œy|D �] })tG          |)j         ¦  «        D ]è\  }} |||)j6                 vs||
 7                    |)j6        g ¦  «        v rŒ2|D ]³}*| |*j        k    r¦| j        j%         $                    ¦   «         }| &                    |*¦  «         | d(z   }||_        tN          j2        |j        j)        _*        | d)z   }tW          j,        d| g|gd|¬¦  «        g}| j        j-         .                    |¦  «         ||)j         |<    nŒ´Œé�Œ|	rtN          jK        ntN          j2        }+|D �]½})ti          tk          |)j         ¦  «        ¦  «        D ]»}|)j         |         } |D ]©}*| |*j        k    rœ| j        j%         $                    ¦   «         }| &                    |*¦  «         | d(z   }||_        |+|j        j)        _*        | d)z   }tW          j,        d| g|g|+|¬¦  «        g}| j        j-         .                    |¦  «         ||)j         |<    nŒªŒ¼ti          tk          |)j!        ¦  «        ¦  «        D ]»}|)j!        |         },|D ]©}*|,|*j        k    rœ| j        j%         $                    ¦   «         }| &                    |*¦  «         |,d*z   }-|-|_        |+|j        j)        _*        |,d+z   }tW          j,        d|-g|,gd|¬¦  «        g}| j        j-         .                    |¦  «         |-|)j!        |<    nŒªŒ¼�Œ¿| S ),a§  Convert tensor float type in the input ONNX model to tensor float16.

    Args:
        model (ModelProto or str): The ONNX model or path of the model to convert.
        min_positive_val (float, optional): minimal positive value. Defaults to 5.96e-08.
        max_finite_val (float, optional): maximal finite value of float16. Defaults to 65504.
        keep_io_types (Union[bool, List[str]], optional): It could be boolean or a list of float32 input/output names.
                                                          If True, model inputs/outputs should be left as float32.
                                                          Defaults to False.
        disable_shape_infer (bool, optional): Skips running onnx shape/type inference.
                                              Useful if shape inference has been done. Defaults to False.
        op_block_list (List[str], optional): List of op types to leave as float32.
                                             Defaults to None, which will use `float16.DEFAULT_OP_BLOCK_LIST`.
        node_block_list (List[str], optional): List of node names to leave as float32. Defaults to None.
        force_fp16_initializers(bool): force converting all float initializers to float16.
                                       Default to false, which will convert only the one needed to avoid precision loss.
        force_fp16_inputs(Dict[str, List[int]]): Force the conversion of the inputs of some operators to float16, even if
                                                 this script's preference it to keep them in float32.
    Raises:
        ValueError: input type is not ModelProto.

    Returns:
        ModelProto: converted model.
    r   zginvalid min_positive_val. smallest positive float16 value: subnormal 5.96e-08, and normalized 6.104e-05z4invalid max_finite_val. largest float16 value: 65504Nz1.8.0)ÚdirTz$Expected an ONNX ModelProto but got z1.2.0c              3   ó6   K  — | ]}|j         d v ¯|j        V — ŒdS ))Ú zai.onnxN)Údomainr   )r   Úos     r   ú	<genexpr>z+convert_float_to_float16.<locals>.<genexpr>ô   s0   è è € Ð[Ð[ A¸q¼xÈ?Ð?ZÐ?Z�a”iÐ?ZÐ?ZÐ?ZÐ?ZÐ[Ð[r   é   )Údefaulté
   rr   rs   z"fp16 parameters: min_positive_val=z max_finite_val=z keep_io_types=z disable_shape_infer=z op_block_list=z node_block_list=z force_fp16_initializers=c                 óZ   — g | ](}|j         j        j        t          j        k    ¯!|j        ‘Œ)S r   ©rA   Útensor_typeÚ	elem_typer   rC   rT   ©r   Úns     r   r   z,convert_float_to_float16.<locals>.<listcomp>  s0   € ÐjÐjÐj˜a¸¼Ô8JÔ8TÕXcÔXiÒ8iÐ8i�1”6Ð8iÐ8iÐ8ir   c                 óZ   — g | ](}|j         j        j        t          j        k    ¯!|j        ‘Œ)S r   r’   r•   s     r   r   z,convert_float_to_float16.<locals>.<listcomp>  s0   € ÐlÐlÐl˜q¸!¼&Ô:LÔ:VÕZeÔZkÒ:kÐ:k�A”FÐ:kÐ:kÐ:kr   c                 ó   •— g | ]}|‰v ¯|‘Œ	S r   r   ©r   r–   Úkeep_io_typess     €r   r   z,convert_float_to_float16.<locals>.<listcomp>  s#   ø€ ÐDÐDÐD˜Q°°mÐ1CÐ1C�qÐ1CÐ1CÐ1Cr   c                 ó   •— g | ]}|‰v ¯|‘Œ	S r   r   r™   s     €r   r   z,convert_float_to_float16.<locals>.<listcomp>  s#   ø€ ÐFÐFÐF˜a°1¸Ð3EÐ3E˜Ð3EÐ3EÐ3Er   Úgraph_input_cast_Úgraph_input_castÚCast)ÚtorT   Úgraph_output_cast_Úgraph_output_castrŸ   )ÚEyeLikeÚMultinomialÚRandomNormalÚRandomNormalLikeÚRandomUniformrb   ÚSequenceEmptyÚ	BernoulliFr>   )r¤   r¦   r§   Úsequence_typezXinitializer is used by both fp32 and fp16 nodes. Consider add these nodes to block list:Ú_cast_to_fp32Ú_cast_to_fp32_nodeÚ_cast_to_fp16Ú_cast_to_fp16_node)Lr0   r#   Úfinfor1   r,   r?   Ústrr   ÚparseÚonnxÚ__version__ÚtempfileÚNamedTemporaryFileÚosÚpathÚdirnamerT   r   Úloadr   r@   rA   r
   ÚDEFAULT_OP_BLOCK_LISTÚsetÚopset_importÚdictÚALWAYS_FLOAT_INPUTSr.   r/   r€   ÚgraphÚinputÚoutputÚlistÚ	enumerateÚaddÚ
value_infoÚCopyFromr   rD   r“   r”   r   Ú	make_noder~   Úextendr   rx   rB   rC   rw   ÚrangeÚlenÚop_typeÚgetr‚   Ú	attributeÚiÚmake_attributer   ÚgÚgraphsÚtrP   ÚtensorsÚ	itertoolsÚchainÚHasFieldr©   Úvaluesr{   rU   rz   ÚinfoÚBFLOAT16).Úmodelr3   r4   rš   Údisable_shape_inferÚop_block_listÚnode_block_listÚforce_fp16_initializersÚforce_fp16_inputsÚ#use_bfloat16_as_blocked_nodes_dtypeÚforce_fp16_inputs_dictÚ
model_pathÚtmpfileÚshape_infer_model_pathÚfunc_infer_shapeÚ
onnx_opsetÚalways_float_inputsÚqueueÚvalue_info_listÚ	node_listÚmixed_float_type_node_listÚname_mappingÚgraph_io_to_skipÚio_castsÚfp32_inputsÚfp32_outputsrÍ   r–   Úoutput_nameÚ	node_nameÚnew_value_infoÚnew_nodeÚ
input_nameÚfp32_initializersÚ
next_levelÚqr�   Úuse_fp32_weightÚattrÚ	has_dtypeÚvaluer~   rÄ   Úaccuracy_typerÀ   Úoutput_cast_names.      `                                          r   Úconvert_float_to_float16rþ   §   s  ø€ ðH ˜xÒ'Ð'Ð'Øqñ (Ô'Ð'ð �U¥2¤8­B¬JÑ#7Ô#7Ô#;Ñ<Ô<Ò<Ð<Ð<Ð>tÑ<Ô<Ð<à#4Ð#<˜R˜RÐBSÐå�%�ÑÔð *Øˆ
ÝŒ=�Ô)Ñ*Ô*­g¬m¸GÑ.DÔ.DÒDÐDÐM`ÐDåÔ,µ´·²ÀÑ1LÔ1LÐMÑMÔMð +ÐQXØ)0¬Ð&å! *Ð.DÑEÔEÐEÝœ	Ð"8Ñ9Ô9�Ø&*Ð#ð+ð +ð +ñ +ô +ð +ð +ð +ð +ð +ð +øøøð +ð +ð +ð +øõ ”I˜jÑ)Ô)ˆEå�e�ZÑ(Ô(ð OÝÐMÅÀUÁÄÐMÐMÑNÔNÐNàÐØð ¥7¤=µÔ1AÑ#BÔ#BÅgÄmÐT[ÑF\ÔF\Ò#\Ð#\ð	Ý+ÐàøˆDˆDˆDˆDð ÐÝ-ˆØÐØˆÝ˜Ñ&Ô&€MÝ˜/Ñ*Ô*€Oõ
 Ð[Ð[¨Ô);Ð[Ñ[Ô[ÐegÐhÑhÔh€JÝÕ2Ñ3Ô3ÐØ�RÒÐØ)*¨Ð˜HÑ%å
‡L‚Lð 	ZÐ-=ð  	Zð  	ZÈ~ð  	Zð  	ZÐn{ð  	Zð  	Zð  Sfð  	Zð  	Zð  wDð  	Zð  	Zð  Wfð  	Zð  	Zð  AXð  	Zð  	Zñô ð ð
 €EØ€OØ€Ið
 "$Ðð Ð#Ø Ð  Ñ'Ô'ˆØ	‡L‚L�ÑÔÐØ€LÝ‘u”uÐÝ‰uŒu€HàjÐj 5¤;Ô#4ÐjÑjÔj€KØlÐl E¤KÔ$6ÐlÑlÔl€LÝ�-¥Ñ&Ô&ð ØDÐDÐDÐD +ÐDÑDÔDˆØFÐFÐFÐF <ÐFÑFÔFˆˆØð ØˆØˆå˜%œ+Ô+Ñ,Ô,ð $ñ $‰ˆˆ1ØŒ6�[Ð Ñ Ø-µ°A±´Ñ6ˆKØ#.ˆL˜œÑ Ø× Ò  ¤Ñ(Ô(Ð(à*­S°©V¬VÑ3ˆIØ"œ[Ô3×7Ò7Ñ9Ô9ˆNØ×#Ò# AÑ&Ô&Ð&Ø"-ˆNÔÝ8CÔ8KˆNÔÔ+Ô5åÔ(¨°!´&°¸K¸=Í[ÔM`ÐgpÐqÑqÔqÐrˆHØŒKÔ×#Ò# HÑ-Ô-Ð-Ø×"Ò" >Ñ2Ô2Ð2Ø�LŠL˜Ñ#Ô#Ð#ùå˜%œ+Ô,Ñ-Ô-ð $ñ $‰ˆˆ1ØŒ6�\Ð!Ñ!Ø-µ°A±´Ñ6ˆJØ#-ˆL˜œÑ Ø× Ò  ¤Ñ(Ô(Ð(à+­c°!©f¬fÑ4ˆIà"œ[Ô3×7Ò7Ñ9Ô9ˆNØ×#Ò# AÑ&Ô&Ð&Ø",ˆNÔÝ8CÔ8KˆNÔÔ+Ô5ÝÔ(¨°*°ÀÄ¸xÈAÐT]Ð^Ñ^Ô^Ð_ˆHØŒKÔ×#Ò# HÑ-Ô-Ð-Ø×"Ò" >Ñ2Ô2Ð2Ø�LŠL˜Ñ#Ô#Ð#ùà79ÐØ
ñ bØˆ
Øð ^	:ñ ^	:ˆAå˜!�ZÑ(Ô(ð +Ø×!Ò! !¤'Ñ*Ô*Ð*å˜!�ZÑ(Ô(ñ @AØœð Jð J�AØ”{¥kÔ&7Ò7Ð7Ø œvÐ->Ð>Ð>Ð>Ð>Ý4FÀqÑ4IÔ4IÐ)¨!¬&Ñ1øàœð :Añ :A�Að ”v Ð)Ð)Ø Ý"¥3 q¤w¡<¤<Ñ0Ô0ð Bð B˜Øœ7 1œ:¨Ð5Ð5Ø)5°a´g¸a´jÔ)A˜AœG A™JøÝ"¥3 q¤x¡=¤=Ñ1Ô1ð Dð D˜Øœ8 Aœ;¨,Ð6Ð6Ø*6°q´xÀ´{Ô*C˜AœH Q™Køà&'¤i°=Ð&@Ð&]ÀAÄFÈoÐD]�OÝ)2°1´7Ñ);Ô);ð Wð W™˜˜:Ø%Ð):Ð:Ð:à.=ð /Ø !Ð%8×%<Ò%<¸Q¼YÈÑ%KÔ%KÐ Kð !WØ$%Ð-C×-GÒ-GÈÌ	ÐSUÑ-VÔ-VÐ$Vð ,ð .¨jÔ9×BÒBÀ1ÀoÑVÔVÐVøà&ð $AØ!×(Ò(¨Ñ+Ô+Ð+Ñ+àœ9¨Ò.Ð.Ø()¬ð *ð * Ø#'¤9°Ò#4Ð#4¸¼Å;ÔCTÒ9TÐ9TÝ-8Ô-@ D¤FØ$) Eøàœ9ð 	)ð 	ð 	ð ).˜IØ()¬ð Eð E Ø#'¤9°Ò#7Ð#7Ø04 IØ'+¤vµÔ1BÒ'BÐ'BÝ1<Ô1D¨¬øð !"¤	Ð-_Ð _Ð _ÐirÐ _Ø !¤× 2Ò 2µFÔ4IÈ'ÕS^ÔSfÑ4gÔ4gÐ3hÑ iÔ iÐ ið œ9Ð,?Ð?Ð?À1Ä9ÐPfÐCfÐCfØ()¬ð 8ð 8 Ø *× 1Ò 1°$Ñ 7Ô 7Ð 7Ð 7ñ8ð 7×=Ò=¸aÑ@Ô@Ð@Ñ@õ ˜!�^Ñ,Ô,ð ]Ø×!Ò! !¤#Ñ&Ô&Ð&Øœð )ð )�AØ×%Ò% aÑ(Ô(Ð(Ð(Ø”—’Õ<¸Q¼SÐBRÐTbÑcÔcÑdÔdÐdØœð ]ð ]�AÝ7¸Ð;KÈ^Ñ\Ô\�A�Aå˜!�ZÑ(Ô(ñ :õ #œ¨¬°!´(¸A¼LÑIÔIð 	:ð 	:�AØ”vÔ)Ô3µ{Ô7HÒHÐHØœ6Ð)9Ð9Ð9Ý;FÔ;N˜AœFÔ.Ô8Ø+×2Ò2°1Ñ5Ô5Ð5Ø”v—’ Ñ7Ô7ð :Øœ6Ô/Ô9ÔEÔOÕS^ÔSdÒdÐdØ œvÐ-=Ð=Ð=ÝWbÔWj ¤Ô 4Ô >Ô JÔ TØ /× 6Ò 6°qÑ 9Ô 9Ð 9øùàˆðE ñ bðH #×)Ò)Ñ+Ô+ð ð ˆà"ð 	 eÔ&6ð 	Ý ?ÀÔ@QÐScÐesÑ tÔ tˆEÔØ×"Ò"Õ#>¸uÔ?PÑ#QÔ#QÑRÔRÐRØÔð Ð(?ð Ý—’ð BÐotÔoð  Bð  Bñô ð øð
 +ð ñ ˆÝ& t¤zÑ2Ô2ð 	ð 	‰MˆAˆzØÐ+¨D¬LÔ9Ð9Ð9¸QÐBX×B\ÒB\Ð]aÔ]iÐkmÑBnÔBnÐ=nÐ=nØØ-ð ð �
Ø ¤Ò0Ð0à%*¤[Ô%;×%?Ò%?Ñ%AÔ%A�NØ"×+Ò+¨JÑ7Ô7Ð7Ø",¨Ñ">�KØ*5�NÔ'Ý@KÔ@Q�NÔ'Ô3Ô=à *Ð-AÑ A�IÝ &Ô 0°¸*¸ÈÀ}ÐYZÐajÐ kÑ kÔ kÐl�HØ”KÔ$×+Ò+¨HÑ5Ô5Ð5à$/�D”J˜q‘MØ�Eð 1øñ		ð& -PÐf•KÔ(Ð(ÕU`ÔUf€Màð 'ñ 'ˆõ •s˜4œ:‘”Ñ'Ô'ð 	ð 	ˆAØœ AœˆJØ-ð ð �
Ø ¤Ò0Ð0à%*¤[Ô%;×%?Ò%?Ñ%AÔ%A�NØ"×+Ò+¨JÑ7Ô7Ð7Ø",¨Ñ">�KØ*5�NÔ'Ø@M�NÔ'Ô3Ô=à *Ð-AÑ A�IÝ &Ô 0°¸*¸ÈÀ}ÐYfÐmvÐ wÑ wÔ wÐx�HØ”KÔ$×+Ò+¨HÑ5Ô5Ð5à$/�D”J˜q‘MØ�Eð 1øõ  •s˜4œ;Ñ'Ô'Ñ(Ô(ð 	ð 	ˆAØ”[ ”^ˆFØ-ð ð �
Ø˜Zœ_Ò,Ð,à%*¤[Ô%;×%?Ò%?Ñ%AÔ%A�NØ"×+Ò+¨JÑ7Ô7Ð7Ø'-°Ñ'?Ð$Ø*:�NÔ'Ø@M�NÔ'Ô3Ô=à &Ð)=Ñ =�IÝ &Ô 0°Ð:JÐ9KÈfÈXÐZ\ÐclÐ mÑ mÔ mÐn�HØ”KÔ$×+Ò+¨HÑ5Ô5Ð5à%5�D”K ‘NØ�Eð -øñ	ð" €Ls   Ã.DÄDÄDÆF$ Æ$F&c                 óô  — t          | t          ¦  «        st          dt          | ¦  «        › �¦  «        ‚| j        t          j        k    rt          d¦  «        ‚d}| j        rt          j        | j        ¦  «        }| j	        rt          j
        | j	        d¬¦  «        }|€t          d¦  «        ‚t          |||¦  «        }t          j        t          j        |t          j        |¦  «        z
  ¦  «        ¦  «        S )zSMeasure the maximum absolute difference after converting a float tensor to float16.r;   z#Expected tensor data type is float.Nr<   r=   zexternal data not loaded!)r?   r   r@   rA   rB   rC   rE   r#   rF   rH   rI   ÚRuntimeErrorr9   ÚamaxÚabsr<   )rK   r3   r4   Úfloat32_datarL   s        r   Úfloat_to_float16_max_diffr  ë  sæ   € å�f�kÑ*Ô*ð _ÝÐ]ÍtÐTZÉ|Ì|Ð]Ð]Ñ^Ô^Ð^ØÔ�;Ô,Ò,Ð,ÝÐ>Ñ?Ô?Ð?à€LØÔð 3Ý”x Ô 1Ñ2Ô2ˆà„ð GÝ”} V¤_¸IÐFÑFÔFˆàÐÝÐ6Ñ7Ô7Ð7å(¨Ð7GÈÑXÔX€LÝŒ7•2”6˜,­¬°LÑ)AÔ)AÑAÑBÔBÑCÔCÐCr   )r   r   )	r   r   FFNNFNF)rÓ   Úloggingrµ   r³   Únumpyr#   r±   r   r   r   r   r   r   r	   Úonnx.shape_inferencer
   r   Ú	packagingr   Ú	getLoggerrƒ   r.   r   r9   rP   rU   r¹   r½   rw   rþ   r  r   r   r   ú<module>r
     sµ  ðð Ð Ð Ð Ø €€€Ø 	€	€	€	Ø €€€à Ð Ð Ð Ø €€€Ø eÐ eÐ eÐ eÐ eÐ eÐ eÐ eÐ eÐ eÐ eÐ eÐ eÐ eÐ eÐ eÐ eÐ eØ @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ø Ð Ð Ð Ð Ð à	ˆÔ	˜8Ñ	$Ô	$€ðEð Eð Eð ð  ð  ð  ðD"ð "ð "ð "ðJOð Oð Oð
ð ð Ð ðD #$ °A°q°6ÈQÐPQÈFÐSÐSÐ ð)ð )ð )ð )ð )ñ )ô )ð )ð" ØØØØØØ!ØØ(-ðAð Að Að AðH
Dð Dð Dð Dð Dð Dr   