Source code for mlprodict.onnxrt.ops_cpu.op_pad

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


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


[docs]def _pad_impl(data, raw_pads, mode, constant_values=0.0): input_rank = data.ndim if input_rank * 2 != raw_pads.size: raise RuntimeError( # pragma: no cover 'The number of elements in raw_pads should be 2 * data_rank') half = raw_pads.shape[0] // 2 pad_width = tuple((raw_pads[i], raw_pads[i + half]) for i in range(0, half)) if mode == 'constant': return numpy.pad(data, pad_width=pad_width, mode=mode, constant_values=constant_values) return numpy.pad(data, pad_width=pad_width, mode=mode)
[docs]class Pad(OpRun): atts = {'mode': b'constant'}
[docs] def __init__(self, onnx_node, desc=None, **options): OpRun.__init__(self, onnx_node, desc=desc, expected_attributes=Pad.atts, **options) self.mode_ = self.mode.decode('ascii')
[docs] def _run(self, data, pads, constant_value=None): # pylint: disable=W0221 return (_pad_impl(data, pads, mode=self.mode_, constant_values=constant_value), )
[docs] def _infer_shapes(self, data, pads, constant_value=None): # pylint: disable=E0202,W0221 """ Returns an empty shape by default. :githublink:`%|py|45` """ return (ShapeObject(None, data.dtype), )