from ..quant_utils import FLOAT8_TYPES from .base_operator import QuantOperatorBase from .direct_q8 import Direct8BitOp, QDQDirect8BitOp class QMaxPool(Direct8BitOp): def __init__(self, onnx_quantizer, onnx_node): super().__init__(onnx_quantizer, onnx_node) def quantize(self): node = self.node assert node.op_type == "MaxPool" # if version is less than 12, go to normal quantize. if self.quantizer.opset_version < 12: QuantOperatorBase.quantize(self) return # FP8 types are not supported for MaxPool; emit node unquantized. if self.quantizer.activation_qType in FLOAT8_TYPES: return QuantOperatorBase.quantize(self) # Direct 8bits op return super().quantize() class QDQMaxPool(QDQDirect8BitOp): def __init__(self, onnx_quantizer, onnx_node): super().__init__(onnx_quantizer, onnx_node) def quantize(self): node = self.node assert node.op_type == "MaxPool" # if version is less than 12, just no change if self.quantizer.opset_version < 12: return # FP8 types are not supported for MaxPool; leave node unquantized. if self.quantizer.activation_qType in FLOAT8_TYPES: return # Direct 8bits op return super().quantize()