Source code for mlprodict.onnxrt.ops_cpu.op_clip

# -*- encoding: utf-8 -*-
# pylint: disable=E0203,E1101,C0111
"""
Runtime operator.


:githublink:`%|py|7`
"""
from collections import OrderedDict
import numpy
from onnx.defs import onnx_opset_version
from ._op import OpRunUnaryNum


[docs]class Clip_6(OpRunUnaryNum): atts = {'min': -3.4028234663852886e+38, 'max': 3.4028234663852886e+38}
[docs] def __init__(self, onnx_node, desc=None, **options): OpRunUnaryNum.__init__(self, onnx_node, desc=desc, expected_attributes=Clip_6.atts, **options)
[docs] def _run(self, data): # pylint: disable=W0221 if self.inplaces.get(0, False): return self._run_inplace(data) res = numpy.clip(data, self.min, self.max) return (res, ) if res.dtype == data.dtype else (res.astype(data.dtype), )
[docs] def _run_inplace(self, data): return (numpy.clip(data, self.min, self.max, out=data), )
[docs] def to_python(self, inputs): return ("import numpy", "return numpy.clip(%s, min_, max_)" % inputs[0])
[docs]class Clip_11(OpRunUnaryNum): version_higher_than = 11 mandatory_inputs = ['X'] optional_inputs = OrderedDict([ ('min', -3.4028234663852886e+38), ('max', 3.4028234663852886e+38) ])
[docs] def __init__(self, onnx_node, desc=None, **options): OpRunUnaryNum.__init__(self, onnx_node, desc=desc, **options)
[docs] def run(self, x, *minmax): # pylint: disable=E0202,W0221 """ Calls method ``_run``. :githublink:`%|py|53` """ try: res = self._run(x, *minmax) except TypeError as e: raise TypeError("Issues with types {} (binary operator {}).".format( ", ".join(str(type(_)) for _ in [x]), self.__class__.__name__)) from e return res
[docs] def _run(self, data, *minmax): # pylint: disable=W0221 if self.inplaces.get(0, False): return self._run_inplace(data, *minmax) le = len(minmax) amin = minmax[0] if le > 0 else None # -3.4028234663852886e+38 amax = minmax[1] if le > 1 else None # 3.4028234663852886e+38 res = numpy.clip(data, amin, amax) return (res, ) if res.dtype == data.dtype else (res.astype(data.dtype), )
[docs] def _run_inplace(self, data, *minmax): # pylint: disable=W0221 le = len(minmax) amin = minmax[0] if le > 0 else None # -3.4028234663852886e+38 amax = minmax[1] if le > 1 else None # 3.4028234663852886e+38 res = numpy.clip(data, amin, amax, out=data) return (res, )
[docs] def infer_shapes(self, x, *minmax): # pylint: disable=E0202,W0221 try: return self._infer_shapes(x) except TypeError as e: raise TypeError("Issues with types {} (operator {}).".format( x.dtype, self.__class__.__name__)) from e
[docs] def to_python(self, inputs): return ("import numpy", "return numpy.clip(%s, min_, max_)" % inputs[0])
if onnx_opset_version() >= 11: Clip = Clip_11 else: Clip = Clip_6