Source code for mlprodict.onnxrt.ops_cpu.op_cum_sum

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


:githublink:`%|py|7`
"""
import numpy
from ._op import OpRun


[docs]class CumSum(OpRun): atts = {'exclusive': 0, 'reverse': 0} python_inputs = ['x', 'axis=None']
[docs] def __init__(self, onnx_node, desc=None, **options): OpRun.__init__(self, onnx_node, desc=desc, expected_attributes=CumSum.atts, **options)
[docs] def _run(self, x, *axis): # pylint: disable=W0221 axis = None if len(axis) == 0 else axis[0] if axis is None: if self.reverse or self.exclusive: raise NotImplementedError( # pragma no cover 'reverse=1 or exclusive=1 not implemented') if self.inplaces.get(0, False): return (numpy.cumsum(x, out=x), ) return (numpy.cumsum(x), ) if not isinstance(axis, (numpy.int32, numpy.int64)): if (len(axis.shape) > 1 or (len(axis.shape) > 0 and axis.shape[0] != 1)): raise RuntimeError( # pragma no cover "axis must be an array of one number not {} " "(shape {})".format(axis, axis.shape)) if len(axis.shape) > 0: axis = axis[0] if self.reverse or self.exclusive: raise NotImplementedError( 'reverse=1 or exclusive=1 not implemented') if self.inplaces.get(0, False): return (numpy.cumsum(x, axis=axis, out=x), ) return (numpy.cumsum(x, axis=axis), )
[docs] def _infer_shapes(self, x, *axis): # pylint: disable=W0221 return (x, )
[docs] def to_python(self, inputs): lines = ['if exclusive or reverse:', ' raise NotImplementedError("reverse=1 or exclusive=1 not implemente")', 'if axis is None:', ' return numpy.cumsum(x)', 'return numpy.cumsum(x, axis=axis[0])'] return 'import numpy', "\n".join(lines)