o
    
j                     @   s`   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 deZG d	d
 d
e
ZdS )    N   )TENSOR_NAME_QUANT_SUFFIXQuantizedValueQuantizedValueTypeattribute_to_kwarg	ms_domain   )QuantOperatorBase)QDQOperatorBasec                       s$   e Zd Zdd Z fddZ  ZS )QLinearWherec                 C   s   dS )NT )selfr   r   [/home/kuhnn/.local/lib/python3.10/site-packages/onnxruntime/quantization/operators/where.pyshould_quantize	   s   zQLinearWhere.should_quantizec              	      sf  | j }|jdks
J | jjs| j j|g7  _d S | j|jd \}}}}}| j|ddg\}}}}	|r:|d u r?t 	 S |jd t
 }
|jrN|jd nd}t|jd |
||tj}|| jj|jd < i }|jD ]	}|t| qjt|d< |jd |d |d |d |d |d |d ||g	}tjjd||
g|fi |}| j j|	7  _| j j|g7  _d S )	NWherer   r   r   _quant domainr   )nodeop_type	quantizerforce_quantize_no_input_check	new_nodes_get_quantization_paramsoutputquantize_activationsuperquantizer   namer   r   Inputquantized_value_map	attributeupdater   r   inputonnxhelper	make_node)r   r   
data_foundoutput_scale_nameoutput_zp_name_q_input_nameszero_point_namesscale_namesnodesqlinear_outputqlinear_output_nameq_outputkwargsr!   qlwhere_inputsqlwhere_node	__class__r   r   r      sf   


zQLinearWhere.quantize)__name__
__module____qualname__r   r   __classcell__r   r   r5   r   r      s    r   c                   @   s   e Zd Zdd ZdS )QDQWherec                 C   s   | j }|jdks
J | jjrE| j|jd s | j|jd  | j|jd s2| j|jd  | jsA|jD ]
}| j| q8d S d S | j|jd rf| j|jd rh| jsj|jD ]}| j| q]d S d S d S d S )Nr   r   r   )	r   r   r   r   is_tensor_quantizedr#   quantize_activation_tensordisable_qdq_for_node_outputr   )r   r   r   r   r   r   r   F   s,   

zQDQWhere.quantizeN)r7   r8   r9   r   r   r   r   r   r;   E   s    r;   )r$   quant_utilsr   r   r   r   r   base_operatorr	   qdq_base_operatorr
   r   r;   r   r   r   r   <module>   s    =