Ë
    ÝÍ:ji`  ã                   ó  — 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y)é    N)ÚAttributeProtoÚ
GraphProtoÚ
ModelProtoÚ	NodeProtoÚTensorProtoÚhelperÚnumpy_helper)Úinfer_shapesÚinfer_shapes_path)Úversionc           
      ó”   — | D �cg c]8  }t        t        |j                  d«      «      dd j                  d«      d«      ‘Œ: c}S c c}w )z|
    Convert numpy float16 to python int.

    :param np_list: numpy float16 list
    :return int_list: python int list
    ÚHé   Né   )ÚintÚbinÚviewÚzfill)Únp_listÚ_s     úu/home/mcse/projects/srt_converter/srt-converter-venv/lib/python3.12/site-packages/onnxruntime/transformers/float16.pyÚ_npfloat16_to_intr      s?   € ð =DÖD°qŒC”�A—F‘F˜3“KÓ   Ð$×*Ñ*¨2Ó.°Õ2ÒDÐDùÒDs   …=Ac           	      óR  — d„ }| t        j                  | dkD  «         j                  d   dkD  r’| t        j                  | dkD  «         j                  «       }| t        j                  | dkD  «         j	                  «       }||k\  rt
        j                  d|› d|› �«       ||k  rt
        j                  d|› d|› �«       | t        j                  | dk  «         j                  d   dkD  r–| t        j                  | dk  «         j                  «       }| t        j                  | dk  «         j	                  «       }|| k  rt
        j                  d|› d| › �«       || k\  rt
        j                  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   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_float16r3   '   s	  € ò,ð ”—‘˜ A™Ó&Ñ'×-Ñ-¨aÑ0°1Ò4Ø¤§¡¨°A©Ó 6Ñ7×;Ñ;Ó=ˆØ¤§¡¨°A©Ó 6Ñ7×;Ñ;Ó=ˆØ˜>Ò)Ü�L‰LÐ.¨|¨nÐ<RÐSaÐRbÐcÔdØÐ+Ò+Ü�L‰LÐ.¨|¨nÐ<RÐScÐRdÐeÔfà”—‘˜ A™Ó&Ñ'×-Ñ-¨aÑ0°1Ò4Ø¤§¡¨°A©Ó 6Ñ7×;Ñ;Ó=ˆØ¤§¡¨°A©Ó 6Ñ7×;Ñ;Ó=ˆØ˜N˜?Ò*Ü�L‰LÐ.¨|¨nÐ<RÐTbÐSbÐRcÐdÔeØÐ,Ð,Ò,Ü�L‰LÐ.¨|¨nÐ<RÐTdÐSdÐReÐfÔgä�x‰x™  8Ð-=Ó>Ð@PÐRZÓ[€HÜ�x‰x™Ð!1Ð 1°8¸QÓ?ÐBRÐARÐT\Ó]€HÜ�x‰x™ °¼%À»,ÓGÈÐYaÓb€HÜ�x‰x™¤ f£¨x¸.¸ÓIÈNÈ?Ð\dÓe€HÜ�:‰:�hÓÐr"   c                 ó  — t        | t        «      st        dt        | «      › �«      ‚| j                  t        j
                  k(  rÃt        j                  | _        | j                  rSt        t        j                  | j                  «      ||«      }t        |«      }|| j                  dd g | j                  dd | j                  rCt        j                  | j                  d¬«      }t        |||«      }|j                  «       | _        | 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_datar3   r   Úarrayr   Ú
int32_dataÚraw_dataÚ
frombufferÚtobytes)Útensorr-   r.   Úfloat16_dataÚint_listÚfloat32_listÚfloat16_lists          r   Úconvert_tensor_float_to_float16rJ   I   sÚ   € ô �fœkÔ*ÜÐNÌtÐTZË|ÈnÐ]Ó^Ð^à×Ñœ;×,Ñ,Ò,Ü&×.Ñ.ˆÔà×ÒÜ0´·±¸&×:KÑ:KÓ1LÐN^Ð`nÓoˆLÜ(¨Ó6ˆHØ#+ˆF×Ñ™aÐ Ø#%ˆF×Ñ™aÐ à�?Š?äŸ=™=¨¯©À	ÔJˆLä0°Ð?OÐQ_Ó`ˆLà*×2Ñ2Ó4ˆFŒOØ€Mr"   c                 ó–   — t        j                  | «      j                  }t        j                  | j
                  | j                  |«      S r   )r	   Úto_arrayr%   r   Úmake_tensor_value_infoÚnamer<   )rE   r%   s     r   Úmake_value_info_from_tensorrO   n   s7   € Ü×!Ñ! &Ó)×/Ñ/€EÜ×(Ñ(¨¯©°f×6FÑ6FÈÓ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y)ÚInitializerTrackerz'Class for keeping track of initializer.Úinitializerc                 ó.   — || _         g | _        g | _        y r   )rr   Ú
fp32_nodesÚ
fp16_nodes)Úselfrr   s     r   Ú__init__zInitializerTracker.__init__›   s   € Ø&ˆÔØˆŒØˆ�r"   Únodec                 óv   — |r| j                   j                  |«       y | j                  j                  |«       y r   )rt   Úappendru   )rv   rx   Úis_node_blockeds      r   Úadd_nodezInitializerTracker.add_node    s)   € ÙØ�O‰O×"Ñ" 4Õ(à�O‰O×"Ñ" 4Õ(r"   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   rw   r   r|   © r"   r   rq   rq   ˜   s   „ Ù1ð Kó ð
)˜Yô )r"   rq   c
                 ód  — |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\  rn|slt        j                  t        j                  j                  |«      ¬«      5 }|j                   }t#        ||«       t        j$                  |«      } d}ddd«       nt        j$                  |«      } t        | t&        «      st)        dt+        | «      › �«      ‚d}|sAt        j                  t        j                  «      t        j                  d	«      k\  r	 t,        }	 |€t.        }|€g }t1        |«      }t1        |«      }t	        d
„ | j2                  D «       d¬«      }t5        t6        «      }|dk  rdg|d<   t8        j;                  d|› d|› d|› d|› d|› d|› d|› �«       g }g }g }g }|� || «      } |j=                  | «       i }t1        «       }t1        «       }| j>                  j@                  D �cg c]@  }|j*                  jB                  jD                  tF        jH                  k(  sŒ5|j                   ‘ŒB }}| j>                  jJ                  D �cg c]@  }|j*                  jB                  jD                  tF        jH                  k(  sŒ5|j                   ‘ŒB }}t        |tL        «      r)|D �cg c]	  }||v sŒ|‘Œ }}|D �cg c]	  }||v sŒ|‘Œ }}n|sg }g }tO        | j>                  j@                  «      D �]<  \  }}|j                   |v sŒdt        |«      z   }|||j                   <   |jQ                  |j                   «       dt        |«      z   }| j>                  jR                  jQ                  «       }|jU                  |«       ||_        tF        jV                  |j*                  jB                  _"        tY        jZ                  d|j                   g|gtF        jV                  |¬«      g}| j>                  j\                  j_                  |«       |j=                  |«       |jQ                  |«       �Œ? tO        | j>                  jJ                  «      D �].  \  }}|j                   |v sŒdt        |«      z   } | ||j                   <   |jQ                  |j                   «       dt        |«      z   }| j>                  jR                  jQ                  «       }|jU                  |«       | |_        tF        jV                  |j*                  jB                  _"        tY        jZ                  d| g|j                   gd|¬«      g}| j>                  j\                  j_                  |«       |j=                  |«       |jQ                  |«       �Œ1 i }!|�r¤g }"|D �]–  }#t        |#t&        «      r|"j=                  |#j>                  «       t        |#t`        «      �r6|#jb                  D ]H  }|jd                  tF        jH                  k(  sŒ!|j                   |!vsJ ‚tg        |«      |!|j                   <   ŒJ |#j\                  D �]Ï  }|j                   |v rŒti        tk        |j@                  «      «      D ]3  }|j@                  |   |v sŒ||j@                  |      |j@                  |<   Œ5 ti        tk        |jJ                  «      «      D ]3  }|jJ                  |   |v sŒ||jJ                  |      |jJ                  |<   Œ5 |jl                  |v xs |j                   |v }$tO        |j@                  «      D ]a  \  }} | |!v sŒ|$xs> ||jo                  |jl                  g «      v xr ||
jo                  |jl                  g «      v}%|!|    jq                  ||%«       Œc |$r|j=                  |«       �Œg|jl                  dk(  rU|jr                  D ]F  }&|&j                   dk(  sŒ|&jt                  tF        jH                  k(  sŒ1tF        jV                  |&_:         n |jl                  dv r¦d}'|jr                  D ]G  }&|&j                   d k(  sŒd}'|&jt                  tF        jH                  k(  sŒ3tF        jV                  |&_:        ŒI |jl                  d!v r@|'s>|jr                  j_                  tY        jv                  d tF        jV                  «      g«       |jl                  |vs|jl                  |
v r$|jr                  D ]  }&|"j=                  |&«       Œ �Œ¿|j=                  |«       �ŒÒ t        |#tx        «      r‹|"j=                  |#jz                  «       |#j|                  D ]  }|"j=                  |«       Œ |#j~                  jU                  t�        |#j~                  ||«      «       |#j‚                  D ]  }t�        |||«      }Œ t        |#t`        «      s�Œ#t…        j†                  |#j@                  |#jJ                  |#jR                  «      D �];  }|j*                  jB                  jD                  tF        jH                  k(  rH|j                   |vr:tF        jV                  |j*                  jB                  _"        |j=                  |«       |j*                  j‰                  d"«      sŒ™|j*                  jŠ                  jD                  jB                  jD                  tF        jH                  k(  sŒß|j                   |vsŒîtF        jV                  |j*                  jŠ                  jD                  jB                  _"        |j=                  |«       �Œ> �Œ™ |"}|r�Œ¤|!j�                  «       D ]ƒ  }(|s|(jŽ                  sŒt�        |(jb                  ||«      |(_1        |j=                  t‘        |(jb                  «      «       |(j’                  sŒ_|rŒbt8        j•                  d#|(jŽ                  › �«       Œ… |D �]+  })tO        |)j@                  «      D �]  \  }} |||)jl                     vs||
jo                  |)jl                  g «      v rŒ7|D ]Ô  }*| |*j                   k(  sŒ| j>                  jR                  jQ                  «       }|jU                  |*«       | d$z   }||_        tF        jH                  |j*                  jB                  _"        | d%z   }tY        jZ                  d| g|gd|¬«      g}| j>                  j\                  j_                  |«       ||)j@                  |<    �Œ �Œ �Œ. |	rtF        j–                  ntF        jH                  }+|D �]û  })ti        tk        |)j@                  «      «      D ]Û  }|)j@                  |   } |D ]Å  }*| |*j                   k(  sŒ| j>                  jR                  jQ                  «       }|jU                  |*«       | d$z   }||_        |+|j*                  jB                  _"        | d%z   }tY        jZ                  d| g|g|+|¬«      g}| j>                  j\                  j_                  |«       ||)j@                  |<    ŒÛ ŒÝ ti        tk        |)jJ                  «      «      D ]Û  }|)jJ                  |   },|D ]Å  }*|,|*j                   k(  sŒ| j>                  jR                  jQ                  «       }|jU                  |*«       |,d&z   }-|-|_        |+|j*                  jB                  _"        |,d'z   }tY        jZ                  d|-g|,gd|¬«      g}| j>                  j\                  j_                  |«       |-|)jJ                  |<    ŒÛ ŒÝ �Œþ | S # 1 sw Y   �ŒuxY w# w xY wc c}w c c}w c c}w c c}w )(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.
    çÛ"•“\ÿo>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   óR   K  — | ]  }|j                   d v sŒ|j                  –— Œ! y­w))Ú zai.onnxN)Údomainr   )Ú.0Úos     r   ú	<genexpr>z+convert_float_to_float16.<locals>.<genexpr>ô   s   è ø€ Ò[ A¸q¿x¹xÈ?Ò?Z�a—i•iÑ[ùs   ‚'–'é   )Údefaulté
   rl   rm   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=Úgraph_input_cast_Úgraph_input_castÚCast)ÚtorN   Úgraph_output_cast_Úgraph_output_castr‘   )ÚEyeLikeÚMultinomialÚRandomNormalÚRandomNormalLikeÚRandomUniformr\   ÚSequenceEmptyÚ	BernoulliFr8   )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)Lr*   r   Úfinfor+   r&   r9   Ústrr   ÚparseÚonnxÚ__version__ÚtempfileÚNamedTemporaryFileÚosÚpathÚdirnamerN   r   Úloadr   r:   r;   r
   ÚDEFAULT_OP_BLOCK_LISTÚsetÚopset_importÚdictÚALWAYS_FLOAT_INPUTSr(   r)   rz   ÚgraphÚinputÚtensor_typeÚ	elem_typer   r=   ÚoutputÚlistÚ	enumerateÚaddÚ
value_infoÚCopyFromr>   r   Ú	make_noderx   Úextendr   rr   r<   rq   ÚrangeÚlenÚop_typeÚgetr|   Ú	attributeÚiÚmake_attributer   ÚgÚgraphsÚtrJ   ÚtensorsÚ	itertoolsÚchainÚHasFieldr›   Úvaluesru   rO   rt   ÚinfoÚBFLOAT16).Úmodelr-   r.   Úkeep_io_typesÚ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ÚnÚfp32_inputsÚfp32_outputsrÁ   Úoutput_nameÚ	node_nameÚnew_value_infoÚnew_nodeÚ
input_nameÚfp32_initializersÚ
next_levelÚqr{   Úuse_fp32_weightÚattrÚ	has_dtypeÚvaluerx   r¸   Úaccuracy_typer´   Úoutput_cast_names.                                                 r   Úconvert_float_to_float16rô   §   sö  € ðH ˜xÒ'ð ØqóÐ'ð œU¤2§8¡8¬B¯J©JÓ#7×#;Ñ#;Ó<Ò<ÐtÐ>tÓtÐ<à#4Ð#<™RÐBSÐä�%œÔØˆ
Ü�=‰=œ×)Ñ)Ó*¬g¯m©m¸GÓ.DÒDÑM`ä×,Ñ,´·±·±ÀÓ1LÔMð +ÐQXØ)0¯©Ð&ä! *Ð.DÔEÜŸ	™	Ð"8Ó9�Ø&*Ð#÷+ð +ô —I‘I˜jÓ)ˆEä�eœZÔ(ÜÐ?ÄÀUÃ¸}ÐMÓNÐNàÐÙ¤7§=¡=´×1AÑ1AÓ#BÄgÇmÁmÐT[ÓF\Ò#\ð	Ü+Ðàð ÐÜ-ˆØÐØˆÜ˜Ó&€MÜ˜/Ó*€Oô
 Ñ[¨×);Ñ);Ô[ÐegÔh€JÜÔ2Ó3ÐØ�RÒØ)*¨Ð˜HÑ%ä
‡L�LØ
,Ð-=Ð,>Ð>NÈ~ÐN^Ð^mÐn{Ðm|ð  }Rð  Sfð  Rgð  gvð  wDð  vEð  EVð  Wfð  Vgð  g@ð  AXð  @Yð  	Zôð
 €EØ€OØ€Ið
 "$Ðð Ð#Ù  Ó'ˆØ	‡L�L�ÔØ€LÜ“uÐÜ‹u€Hà#(§;¡;×#4Ñ#4Öj˜a¸¿¹×8JÑ8J×8TÑ8TÔXc×XiÑXiÓ8i�1—6“6Ðj€KÐjØ$)§K¡K×$6Ñ$6Öl˜q¸!¿&¹&×:LÑ:L×:VÑ:VÔZe×ZkÑZkÓ:k�A—F“FÐl€LÐlÜ�-¤Ô&Ø"-ÖD˜Q°°mÒ1C’qÐDˆÐDØ#/ÖF˜a°1¸Ò3EšÐFˆÑFÙØˆØˆä˜%Ÿ+™+×+Ñ+Ó,ó $‰ˆˆ1Ø�6‰6�[Ò Ø-´°A³Ñ6ˆKØ#.ˆL˜Ÿ™Ñ Ø× Ñ  §¡Ô(à*¬S°«VÑ3ˆIØ"Ÿ[™[×3Ñ3×7Ñ7Ó9ˆNØ×#Ñ# AÔ&Ø"-ˆNÔÜ8C×8KÑ8KˆN×Ñ×+Ñ+Ô5ä×(Ñ(¨°!·&±&°¸K¸=Ì[×M`ÑM`ÐgpÔqÐrˆHØ�K‰K×Ñ×#Ñ# HÔ-Ø×"Ñ" >Ô2Ø�L‰L˜Ö#ð$ô" ˜%Ÿ+™+×,Ñ,Ó-ó $‰ˆˆ1Ø�6‰6�\Ò!Ø-´°A³Ñ6ˆJØ#-ˆL˜Ÿ™Ñ Ø× Ñ  §¡Ô(à+¬c°!«fÑ4ˆIà"Ÿ[™[×3Ñ3×7Ñ7Ó9ˆNØ×#Ñ# AÔ&Ø",ˆNÔÜ8C×8KÑ8KˆN×Ñ×+Ñ+Ô5Ü×(Ñ(¨°*°ÀÇÁ¸xÈAÐT]Ô^Ð_ˆHØ�K‰K×Ñ×#Ñ# HÔ-Ø×"Ñ" >Ô2Ø�L‰L˜Ö#ð$ð" 8:ÐÚ
Øˆ
Øó ^	:ˆAä˜!œZÔ(Ø×!Ñ! !§'¡'Ô*ä˜!œZÕ(ØŸ™ò J�AØ—{‘{¤k×&7Ñ&7Ó7Ø Ÿv™vÐ->Ñ>Ð>Ð>Ü4FÀqÓ4IÐ)¨!¯&©&Ò1ðJð
 Ÿ™ó :A�Að —v‘v Ñ)Ø Ü"¤3 q§w¡w£<Ó0ò B˜ØŸ7™7 1™:¨Ò5Ø)5°a·g±g¸a±jÑ)A˜AŸG™G AšJðBô #¤3 q§x¡x£=Ó1ò D˜ØŸ8™8 A™;¨,Ò6Ø*6°q·x±xÀ±{Ñ*C˜AŸH™H QšKðDð '(§i¡i°=Ð&@Ò&]ÀAÇFÁFÈoÐD]�OÜ)2°1·7±7Ó);ò W™˜˜:Ø%Ð):Ò:à.=ò /Ø !Ð%8×%<Ñ%<¸Q¿Y¹YÈÓ%KÐ Kò !WØ$%Ð-C×-GÑ-GÈÏ	É	ÐSUÓ-VÐ$Vð ,ð .¨jÑ9×BÑBÀ1ÀoÕVðWñ 'Ø!×(Ñ(¨Ö+àŸ9™9¨Ò.Ø()¯©ò * Ø#'§9¡9°Ó#4¸¿¹Ä;×CTÑCTÓ9TÜ-8×-@Ñ-@ D¤FÙ$)ð*ð
 Ÿ9™9ð 	)ñ 	ð ).˜IØ()¯©ò E Ø#'§9¡9°Ó#7Ø04 IØ'+§v¡v´×1BÑ1BÓ'BÜ1<×1DÑ1D¨­ð	Eð !"§	¡	Ð-_Ñ _ÑirØ !§¡× 2Ñ 2´F×4IÑ4IÈ'ÔS^×SfÑSfÓ4gÐ3hÔ ið Ÿ9™9Ð,?Ñ?À1Ç9Á9ÐPfÑCfØ()¯©ò 8 Ø *× 1Ñ 1°$Õ 7ò8ð 7×=Ñ=¸aÖ@ðu:Aô| ˜!œ^Ô,Ø×!Ñ! !§#¡#Ô&ØŸ™ò )�AØ×%Ñ% aÕ(ð)à—‘—‘Ô<¸Q¿S¹SÐBRÐTbÓcÔdØŸ™ò ]�AÜ7¸Ð;KÈ^Ó\‘Að]ô ˜!œZÖ(ô #Ÿ™¨¯©°!·(±(¸A¿L¹LÓIó 	:�AØ—v‘v×)Ñ)×3Ñ3´{×7HÑ7HÒHØŸ6™6Ð)9Ñ9Ü;F×;NÑ;N˜AŸF™F×.Ñ.Ô8Ø+×2Ñ2°1Ô5Ø—v‘v—‘ Õ7ØŸ6™6×/Ñ/×9Ñ9×EÑE×OÑOÔS^×SdÑSdÓdØ Ÿv™vÐ-=Ò=ÜWb×WjÑWj §¡× 4Ñ 4× >Ñ >× JÑ JÔ TØ /× 6Ñ 6°qÖ 9ò	:ðk^	:ð@ ˆóE ðH #×)Ñ)Ó+ò ˆá" e×&6Ó&6Ü ?À×@QÑ@QÐScÐesÓ tˆEÔØ×"Ñ"Ô#>¸u×?PÑ?PÓ#QÔRØ×ÓÒ(?Ü—‘ØnÐot×oÑoð  oAð  Bõðð +ó ˆÜ& t§z¡zÓ2ó 	‰MˆAˆzØÐ+¨D¯L©LÑ9Ñ9¸QÐBX×B\ÑB\Ð]a×]iÑ]iÐkmÓBnÑ=nØØ-ò �
Ø §¡Ó0à%*§[¡[×%;Ñ%;×%?Ñ%?Ó%A�NØ"×+Ñ+¨JÔ7Ø",¨Ñ">�KØ*5�NÔ'Ü@K×@QÑ@Q�N×'Ñ'×3Ñ3Ô=à *Ð-AÑ A�IÜ &× 0Ñ 0°¸*¸ÈÀ}ÐYZÐajÔ kÐl�HØ—K‘K×$Ñ$×+Ñ+¨HÔ5à$/�D—J‘J˜q‘MÚòò	ðñ( -P”K×(Ò(ÔU`×UfÑUf€Màó 'ˆô ”s˜4Ÿ:™:“Ó'ò 	ˆAØŸ™ A™ˆJØ-ò �
Ø §¡Ó0à%*§[¡[×%;Ñ%;×%?Ñ%?Ó%A�NØ"×+Ñ+¨JÔ7Ø",¨Ñ">�KØ*5�NÔ'Ø@M�N×'Ñ'×3Ñ3Ô=à *Ð-AÑ A�IÜ &× 0Ñ 0°¸*¸ÈÀ}ÐYfÐmvÔ wÐx�HØ—K‘K×$Ñ$×+Ñ+¨HÔ5à$/�D—J‘J˜q‘MÙñð	ô& ”s˜4Ÿ;™;Ó'Ó(ò 	ˆAØ—[‘[ ‘^ˆFØ-ò �
Ø˜ZŸ_™_Ó,à%*§[¡[×%;Ñ%;×%?Ñ%?Ó%A�NØ"×+Ñ+¨JÔ7Ø'-°Ñ'?Ð$Ø*:�NÔ'Ø@M�N×'Ñ'×3Ñ3Ô=à &Ð)=Ñ =�IÜ &× 0Ñ 0°Ð:JÐ9KÈfÈXÐZ\ÐclÔ mÐn�HØ—K‘K×$Ñ$×+Ñ+¨HÔ5à%5�D—K‘K ‘NÙñò	ð/'ðP €L÷e+ñ +ûð" üòP kùÚlùâDùÚFsH   Ã0~Æ~ É"6~Ê~Ë6~#Ë8~#Ì	~(Ì&~(Ì0	~-Ì:~-þ~þ~c                 ó  — t        | t        «      st        dt        | «      › �«      ‚| j                  t        j
                  k7  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.r5   z#Expected tensor data type is float.Nr6   r7   zexternal data not loaded!)r9   r   r:   r;   r<   r=   r?   r   r@   rB   rC   ÚRuntimeErrorr3   ÚamaxÚabsr6   )rE   r-   r.   Úfloat32_datarF   s        r   Úfloat_to_float16_max_diffrú   ë  sÈ   € ä�fœkÔ*ÜÐNÌtÐTZË|ÈnÐ]Ó^Ð^Ø×Ñœ;×,Ñ,Ò,ÜÐ>Ó?Ð?à€LØ×ÒÜ—x‘x × 1Ñ 1Ó2ˆà‡‚Ü—}‘} V§_¡_¸IÔFˆàÐÜÐ6Ó7Ð7ä(¨Ð7GÈÓX€LÜ�7‰7”2—6‘6˜,¬¯©°LÓ)AÑAÓBÓCÐCr"   )rƒ   ç     üï@)	rƒ   rû   FFNNFNF)rÇ   Úloggingr§   r¥   Únumpyr   r£   r   r   r   r   r   r   r	   Úonnx.shape_inferencer
   r   Ú	packagingr   Ú	getLoggerr}   r(   r   r3   rJ   rO   r«   r¯   rq   rô   rú   r�   r"   r   ú<module>r     s©   ðó Û Û 	Û ã Û ß e× eÑ eß @Ý à	ˆ×	Ñ	˜8Ó	$€òEó óD"òJOò
Ð ðD #$ °A°q°6ÈQÐPQÈFÑSÐ ÷)ñ )ð" ØØØØØØ!ØØ(-óAôH
Dr"   