Back to Onnx

Reference Implementation Pattern

.agents/skills/add-op/references/reference-impl-pattern.md

1.22.01.1 KB
Original Source

Reference Implementation Pattern

Example at onnx/reference/ops/op_<name>.py:

python
from __future__ import annotations

import numpy as np

from onnx.reference.ops._op import OpRunUnaryNum


class OpName(OpRunUnaryNum):
    def _run(self, x):
        return (np.some_operation(x),)

Base Classes

Base classUse case
OpRunGeneral-purpose (any signature)
OpRunUnarySingle input, single output
OpRunUnaryNumSingle numeric input, validates output dtype matches
OpRunBinaryTwo inputs
OpRunBinaryNumpyTwo inputs using a numpy function directly

Binary Op Example

python
from __future__ import annotations

import numpy as np

from onnx.reference.ops._op import OpRunBinaryNumpy


class Add(OpRunBinaryNumpy):
    def __init__(self, onnx_node, run_params):
        OpRunBinaryNumpy.__init__(self, np.add, onnx_node, run_params)

General Op Example

python
from __future__ import annotations

import numpy as np

from onnx.reference.op_run import OpRun


class Concat(OpRun):
    def _run(self, *inputs, axis=None):
        return (np.concatenate(inputs, axis=axis),)