
    hc                        S SK Jr  S SKJr  S SKrS SKrSSKJrJ	r	J
r
JrJr  SSKJr  SSKJr   " S	 S
\5      r " S S\5      rg)    )annotations)AnyN   )TENSOR_NAME_QUANT_SUFFIXQuantizedValueQuantizedValueTypeattribute_to_kwargquantize_nparray   )QuantOperatorBase)QDQOperatorBasec                  4   ^  \ rS rSrU 4S jrU 4S jrSrU =r$ )QPad   c                $   > [         TU ]  X5        g Nsuper__init__selfonnx_quantizer	onnx_node	__class__s      `/var/www/fran/franai/venv/lib/python3.13/site-packages/onnxruntime/quantization/operators/pad.pyr   QPad.__init__       3    c           	     	  > U R                   nUR                  S:X  d   eU R                  R                  S:  d'  UR                  S   U R                  R
                  ;  a  [        TU ]  5         g U R                  R
                  UR                  S      n0 nUR                   H  n[        U5      nUR                  U5        M!     SU;  d
  US   S:X  Ga2  [        UR                  5      S:  Ga  UR                  S   S:w  Ga  U R                  R                  R                  UR                  5      nU R                  R                  R                  UR                  5      nUb  Uc  [        TU ]  5         g U R                  R                  R                  UR                  S   5      nUGbY  [         R"                  R%                  U5      n	U	R&                  S:X  a  U	R)                  5       OU	S   n
[         R"                  R%                  U5      nUR&                  S:X  a  UR)                  5       OUS   n[         R"                  R%                  U5      n[+        U R                  R,                  UUU
5      nUR                  S   [.        -   n[         R"                  R1                  UU5      nU R                  R                  R3                  U5        U R                  R                  R5                  U5        XR                  S'   GOU R                  R7                  USU R                  R,                  UR                  UR                  UR8                  S9nU R                  R:                  R=                  U5        US   R>                  S   UR                  S'   Om[        UR                  5      S:X  a&  UR                  RA                  UR                  5        O.UR                  S   S:X  d   eUR                  UR                  S'   [C        UR>                  S   UR>                  S   [.        -   UR                  UR                  [D        RF                  5      nUU R                  R
                  UR>                  S   '   URH                  UR                  S'   URH                  UR>                  S'   U R                  =R:                  U/-  sl        g )	NPad   r   mode   constantr    )initial_type)%nodeop_type	quantizeropset_versioninputquantized_value_mapr   quantize	attributer	   updatelenmodelget_initializerzp_name
scale_nameonnxnumpy_helperto_arrayndimitemr
   activation_qTyper   
from_arrayremove_initializeradd_initializer_get_quantize_input_nodes	data_type	new_nodesextendoutputappendr   r   Inputq_name)r   r&   quantized_input_valuekwargsr-   kv	zp_tensorscale_tensorpadding_constant_initializerzp_arrayzp_valuescale_arrayscale_valuepadding_constant_array quantized_padding_constant_arrayquantized_padding_constant_name&quantized_padding_constant_initializerpad_value_qnodesquantized_output_valuer   s                      r   r,   QPad.quantize   s   yy||u$$$ NN((2-4::a=HjHj3jG $ B B4::a= QI#I.BMM" ( 6&>[#@4::"tzz!}': NN00@@AVA^A^_	#~~33CCDYDdDde$(<G$&/3~~/C/C/S/STXT^T^_`Ta/b,/;#0099)DH2:--12Dx}}(ST+H"&"3"3"<"<\"JK8C8H8HA8M+"2"2"4S^_`SaK-1->->-G-GHd-e*7G77.# 	84 7;jjmF^6^3=A=N=N=Y=Y87>:
 NN((;;<XYNN((889_`$CJJqM (,~~'O'O77-88-55%1%;%; (P ($ NN,,334DE$4Q$7$>$>q$ADJJqM tzz?a'JJ%%&;&C&CD  ::a=B...$9$A$ADJJqM "0KKNKKN55!,,!))$$"
 >T**4;;q>:-44

1/66A  TF* r    )__name__
__module____qualname____firstlineno__r   r,   __static_attributes____classcell__r   s   @r   r   r      s    4S+ S+r   r   c                  B   ^  \ rS rSrU 4S jrSS jrSS jrS rSrU =r	$ )	QDQPadq   c                $   > [         TU ]  X5        g r   r   r   s      r   r   QDQPad.__init__r   r   r   c                   SnU R                   R                  R                  U R                  R                  S   5      nUc  g[
        R                  R                  UR                  5      nU R                   R                  S:  a'  [        R                  " UR                  SS5      US9nU$ [        U R                  R                  5      S:  a\  U R                  R                  S   (       a>  U R                   R                  R                  U R                  R                  S   5      nU$ [        R                  " SUS9nU$ )z
Returns the Pad's constant padding value. Returns `None` if the padding value is
not constant (i.e., comes from a dynamic input).
Nr   r!   value)dtype   r   )r(   r0   get_tensor_typer&   r*   r4   helpertensor_dtype_to_np_dtype	elem_typer)   nparraygetr/   get_constant_value)r   
attrs_dict	const_valonnx_tensor_typenp_dtypes        r   _get_pad_const_valQDQPad._get_pad_const_valu   s    
 	>>//??		PQ@RS#;;778H8R8RS>>''",!;8LI  !Q&499??1+=,,??		PQ@RSI  (3Ir   c                t   0 nU R                   R                   H  n[        U5      nUR                  U5        M!     UR	                  SS5      nUS;   a  gUS:X  a^  U R                  U5      nUbJ  UR                  [        R                  [        R                  4;   a  [        UR                  5       5      S:H  $ g)zV
Returns true if Pad's output should use the same quantization parameters as input[0]
r"   r#   )s   reflects   edges   wrapTr   F)r&   r-   r	   r.   rm   rs   re   rk   float32float16floatr8   )r   ro   r-   rG   pad_modepad_vals         r   %_should_quantize_output_same_as_input,QDQPad._should_quantize_output_same_as_input   s     
,,I#I.Bb! - >>&+655  {"--j9G"w}}RZZ8P'PW\\^,11r   c                0   U R                   R                  S:X  d   eU R                   R                   H'  nU(       d  M  U R                  R	                  U5        M)     U R
                  (       d  U R                  5       (       a`  U R                  R                  U R                   R                  S   U R                   R                  S   U R                   R                  5        g U R                  R	                  U R                   R                  S   5        g g )Nr    r   )
r&   r'   r*   r(   quantize_activation_tensordisable_qdq_for_node_outputr{   quantize_output_same_as_inputrA   name)r   
input_names     r   r,   QDQPad.quantize   s    yy  E)))))//Jz99*E * //99;;<<TYY=M=Ma=PRVR[R[RaRabcRdfjfofoftftu99$)):J:J1:MN	 0r   rV   )ro   zdict[str, Any]returnznp.ndarray | None)r   bool)
rW   rX   rY   rZ   r   rs   r{   r,   r[   r\   r]   s   @r   r_   r_   q   s    4(0O Or   r_   )
__future__r   typingr   numpyrk   r4   quant_utilsr   r   r   r	   r
   base_operatorr   qdq_base_operatorr   r   r_   rV   r   r   <module>r      sC   
 #     - .W+ W+t;O_ ;Or   