§
    kŠtjc  ã                  óš   — d dl mZ d dlmZ d dlZd dlZddlmZm	Z	m
Z
mZmZ ddlmZ ddlmZ  G d	„ d
e¦  «        Z G d„ de¦  «        ZdS )é    )Úannotations)ÚAnyNé   )ÚTENSOR_NAME_QUANT_SUFFIXÚQuantizedValueÚQuantizedValueTypeÚattribute_to_kwargÚquantize_nparrayé   )ÚQuantOperatorBase)ÚQDQOperatorBasec                  ó(   ‡ — e Zd Zˆ fd„Zˆ fd„Zˆ xZS )ÚQPadc                óL   •— t          ¦   «                              ||¦  «         d S ©N©ÚsuperÚ__init__©ÚselfÚonnx_quantizerÚ	onnx_nodeÚ	__class__s      €úd/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/onnxruntime/quantization/operators/pad.pyr   zQPad.__init__   ó#   ø€ Ý‰Œ×Ò˜¨Ñ3Ô3Ð3Ð3Ð3ó    c                óZ  •— | j         }|j        dk    sJ ‚| j        j        dk     s|j        d         | j        j        vr"t          ¦   «                              ¦   «          d S | j        j        |j        d                  }i }|j        D ]&}t          |¦  «        }| 
                    |¦  «         Œ'd|vs|d         dk    �rÙt          |j        ¦  «        dk    �rf|j        d         dk    �rT| j        j                             |j        ¦  «        }| j        j                             |j        ¦  «        }|�|€"t          ¦   «                              ¦   «          d S | j        j                             |j        d         ¦  «        }|��Et           j                             |¦  «        }	|	j        dk    r|	                     ¦   «         n|	d         }
t           j                             |¦  «        }|j        dk    r|                     ¦   «         n|d         }t           j                             |¦  «        }t+          | j        j        |||
¦  «        }|j        d         t.          z   }t           j                             ||¦  «        }| j        j                             |¦  «         | j        j                             |¦  «         ||j        d<   nÎ| j                             |d| j        j        |j        |j        |j        ¬¦  «        }| j        j                             |¦  «         |d         j        d         |j        d<   nZt          |j        ¦  «        dk    r |j                              |j        ¦  «         n"|j        d         dk    sJ ‚|j        |j        d<   tC          |j        d         |j        d         t.          z   |j        |j        tD          j#        ¦  «        }|| j        j        |j        d         <   |j$        |j        d<   |j$        |j        d<   | j        xj        |gz  c_        d S )	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*   zQPad.quantize   sô  ø€ ØŒyˆØŒ|˜uÒ$Ð$Ð$Ð$ð ŒNÔ(¨2Ò-Ð-°4´:¸a´=ÈÌÔHjÐ3jÐ3jÝ‰GŒG×ÒÑÔÐØˆFØ $¤Ô BÀ4Ä:ÈaÄ=Ô QÐàˆØœð 	ð 	ˆIÝ# IÑ.Ô.ˆBØ�MŠM˜"ÑÔÐÐà˜ÐÐ 6¨&¤>°[Ò#@Ñ#@Ý�4”:‰Œ Ò"Ñ" t¤z°!¤}¸Ò':Ñ':Ø œNÔ0×@Ò@ÐAVÔA^Ñ_Ô_�	Ø#œ~Ô3×CÒCÐDYÔDdÑeÔe�ØÐ$¨Ð(<Ý‘G”G×$Ò$Ñ&Ô&Ð&Ø�Fà/3¬~Ô/C×/SÒ/SÐTXÔT^Ð_`ÔTaÑ/bÔ/bÐ,Ø/Ñ;Ý#Ô0×9Ò9¸)ÑDÔD�HØ2:´-À1Ò2DÐ2D˜xŸ}š}™œ˜È(ÐSTÌ+�HÝ"&Ô"3×"<Ò"<¸\Ñ"JÔ"J�KØ8CÔ8HÈAÒ8MÐ8M +×"2Ò"2Ñ"4Ô"4Ð"4ÐS^Ð_`ÔSa�KÝ-1Ô->×-GÒ-GÐHdÑ-eÔ-eÐ*Ý7GØœÔ7Ø.Ø#Ø ñ	8ô 8Ð4ð 7;´jÀ´mÕF^Ñ6^Ð3Ý=AÔ=N×=YÒ=YØ8Ø7ñ>ô >Ð:ð
 ”NÔ(×;Ò;Ð<XÑYÔYÐYØ”NÔ(×8Ò8Ð9_Ñ`Ô`Ð`Ø$C�D”J˜q‘M�Mð (,¤~×'OÒ'OØØØœÔ7Ø-Ô8Ø-Ô5Ø%1Ô%;ð (Pñ (ô (Ð$ð ”NÔ,×3Ò3Ð4DÑEÔEÐEØ$4°QÔ$7Ô$>¸qÔ$A�D”J˜q‘M�Mõ �t”z‘?”? aÒ'Ð'à”J×%Ò%Ð&;Ô&CÑDÔDÐDÐDð  œ: aœ=¨BÒ.Ð.Ð.Ð.Ø$9Ô$A�D”J˜q‘Mõ "0ØŒK˜ŒNØŒK˜ŒNÕ5Ñ5Ø!Ô,Ø!Ô)ÝÔ$ñ"
ô "
Ðð >TˆŒÔ*¨4¬;°q¬>Ñ:à-Ô4ˆŒ
�1‰Ø/Ô6ˆŒ�A‰ØŒÐ Ô  T FÑ*Ð Ô Ð Ð r   )Ú__name__Ú
__module__Ú__qualname__r   r*   Ú__classcell__©r   s   @r   r   r      sZ   ø€ € € € € ð4ð 4ð 4ð 4ð 4ðS+ð S+ð S+ð S+ð S+ð S+ð S+ð S+ð S+r   r   c                  ó4   ‡ — e Zd Zˆ fd„Zd
d„Zdd„Zd	„ Zˆ xZS )ÚQDQPadc                óL   •— t          ¦   «                              ||¦  «         d S r   r   r   s      €r   r   zQDQPad.__init__r   r   r   Ú
attrs_dictúdict[str, Any]Úreturnúnp.ndarray | Nonec                ó  — d}| j         j                             | j        j        d         ¦  «        }|€dS t
          j                             |j        ¦  «        }| j         j	        dk     r+t          j        |                     dd¦  «        |¬¦  «        }nut          | j        j        ¦  «        dk    rB| j        j        d         r0| j         j                             | j        j        d         ¦  «        }nt          j        d|¬¦  «        }|S )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&   r.   Úget_tensor_typer$   r(   r2   ÚhelperÚtensor_dtype_to_np_dtypeÚ	elem_typer'   ÚnpÚarrayÚgetr-   Úget_constant_value)r   r[   Ú	const_valÚonnx_tensor_typeÚnp_dtypes        r   Ú_get_pad_const_valzQDQPad._get_pad_const_valu   sç   € ð
 ˆ	Øœ>Ô/×?Ò?ÀÄ	ÄÐPQÔ@RÑSÔSÐØÐ#Ø�4å”;×7Ò7Ð8HÔ8RÑSÔSˆØŒ>Ô'¨"Ò,Ð,Ýœ §¢°¸Ñ!;Ô!;À8ÐLÑLÔLˆIˆIÝ�””Ñ!Ô! QÒ&Ð&¨4¬9¬?¸1Ô+=Ð&ØœÔ,×?Ò?ÀÄ	ÄÐPQÔ@RÑSÔSˆIˆIåœ ¨(Ð3Ñ3Ô3ˆIàÐr   Úboolc                ój  — i }| j         j        D ]&}t          |¦  «        }|                     |¦  «         Œ'|                     dd¦  «        }|dv rdS |dk    r[|                      |¦  «        }|�D|j        t          j        t          j	        fv r%t          |                     ¦   «         ¦  «        dk    S dS )zf
        Returns true if Pad's output should use the same quantization parameters as input[0]
        r    r!   )s   reflects   edges   wrapTNr   F)r$   r+   r	   r,   ri   rn   ra   rg   Úfloat32Úfloat16Úfloatr6   )r   r[   r+   rE   Úpad_modeÚpad_vals         r   Ú%_should_quantize_output_same_as_inputz,QDQPad._should_quantize_output_same_as_input‰   sÂ   € ð ˆ
ØœÔ,ð 	"ð 	"ˆIÝ# IÑ.Ô.ˆBØ×Ò˜bÑ!Ô!Ð!Ð!à—>’> &¨+Ñ6Ô6ˆØÐ5Ð5Ð5ð �4ð �{Ò"Ð"Ø×-Ò-¨jÑ9Ô9ˆGØÐ" w¤}½¼ÅRÄZÐ8PÐ'PÐ'PÝ˜WŸ\š\™^œ^Ñ,Ô,°Ò1Ð1àˆur   c                óž  — | j         j        dk    sJ ‚| j         j        D ]}|r| j                             |¦  «         Œ| j        sˆ|                      ¦   «         rH| j                             | j         j        d         | j         j        d         | j         j	        ¦  «         d S | j                             | j         j        d         ¦  «         d S d S )Nr   r   )
r$   r%   r(   r&   Úquantize_activation_tensorÚdisable_qdq_for_node_outputrv   Úquantize_output_same_as_inputr?   Úname)r   Ú
input_names     r   r*   zQDQPad.quantize¡   sÞ   € ØŒyÔ  EÒ)Ð)Ð)Ð)àœ)œ/ð 	Fð 	FˆJØð FØ”×9Ò9¸*ÑEÔEÐEøàÔ/ð 	OØ×9Ò9Ñ;Ô;ð OØ”×<Ò<¸T¼YÔ=MÈaÔ=PÐRVÔR[ÔRaÐbcÔRdÐfjÔfoÔftÑuÔuÐuÐuÐuà”×9Ò9¸$¼)Ô:JÈ1Ô:MÑNÔNÐNÐNÐNð		Oð 	Or   )r[   r\   r]   r^   )r]   ro   )rS   rT   rU   r   rn   rv   r*   rV   rW   s   @r   rY   rY   q   sv   ø€ € € € € ð4ð 4ð 4ð 4ð 4ðð ð ð ð(ð ð ð ð0Oð Oð Oð Oð Oð Oð Or   rY   )Ú
__future__r   Útypingr   Únumpyrg   r2   Úquant_utilsr   r   r   r	   r
   Úbase_operatorr   Úqdq_base_operatorr   r   rY   © r   r   ú<module>r„      s  ðð
 #Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð Ð Ð à Ð Ð Ð Ø €€€ðð ð ð ð ð ð ð ð ð ð ð ð ð ð -Ð ,Ð ,Ð ,Ð ,Ð ,Ø .Ð .Ð .Ð .Ð .Ð .ðW+ð W+ð W+ð W+ð W+Ðñ W+ô W+ð W+ðt;Oð ;Oð ;Oð ;Oð ;Oˆ_ñ ;Oô ;Oð ;Oð ;Oð ;Or   