Skip to main content

Array (and numpy) API for ONNX

Project description

https://dev.azure.com/xavierdupre3/onnx-array-api/_apis/build/status/sdpython.onnx-array-api https://badge.fury.io/py/onnx-array-api.svg GitHub Issues MIT License size https://img.shields.io/badge/code%20style-black-000000.svg https://codecov.io/gh/sdpython/onnx-array-api/branch/main/graph/badge.svg?token=Wb9ZGDta8J

onnx-array-api implements APIs to create custom ONNX graphs. The objective is to speed up the implementation of converter libraries. The first one matches numpy API. It gives the user the ability to convert functions written following the numpy API to convert that function into ONNX as well as to execute it.

import numpy as np
from onnx_array_api.npx import absolute, jit_onnx
from onnx_array_api.plotting.text_plot import onnx_simple_text_plot

def l1_loss(x, y):
    return absolute(x - y).sum()


def l2_loss(x, y):
    return ((x - y) ** 2).sum()


def myloss(x, y):
    return l1_loss(x[:, 0], y[:, 0]) + l2_loss(x[:, 1], y[:, 1])


jitted_myloss = jit_onnx(myloss)

x = np.array([[0.1, 0.2], [0.3, 0.4]], dtype=np.float32)
y = np.array([[0.11, 0.22], [0.33, 0.44]], dtype=np.float32)

res = jitted_myloss(x, y)
print(res)

print(onnx_simple_text_plot(jitted_myloss.get_onnx()))
[0.042]
opset: domain='' version=18
input: name='x0' type=dtype('float32') shape=['', '']
input: name='x1' type=dtype('float32') shape=['', '']
Sub(x0, x1) -> r__0
  Abs(r__0) -> r__1
    ReduceSum(r__1, keepdims=0) -> r__2
output: name='r__2' type=dtype('float32') shape=None

It supports eager mode as well:

import numpy as np
from onnx_array_api.npx import absolute, eager_onnx


def l1_loss(x, y):
    err = absolute(x - y).sum()
    print(f"l1_loss={err.numpy()}")
    return err


def l2_loss(x, y):
    err = ((x - y) ** 2).sum()
    print(f"l2_loss={err.numpy()}")
    return err


def myloss(x, y):
    return l1_loss(x[:, 0], y[:, 0]) + l2_loss(x[:, 1], y[:, 1])


eager_myloss = eager_onnx(myloss)

x = np.array([[0.1, 0.2], [0.3, 0.4]], dtype=np.float32)
y = np.array([[0.11, 0.22], [0.33, 0.44]], dtype=np.float32)

res = eager_myloss(x, y)
print(res)
l1_loss=[0.04]
l2_loss=[0.002]
[0.042]

The second API or Light API tends to do every thing in one line. The euclidean distance looks like the following:

import numpy as np
from onnx_array_api.light_api import start
from onnx_array_api.plotting.text_plot import onnx_simple_text_plot

model = (
    start()
    .vin("X")
    .vin("Y")
    .bring("X", "Y")
    .Sub()
    .rename("dxy")
    .cst(np.array([2], dtype=np.int64), "two")
    .bring("dxy", "two")
    .Pow()
    .ReduceSum()
    .rename("Z")
    .vout()
    .to_onnx()
)

The library is released on pypi/onnx-array-api and its documentation is published at APIs to create ONNX Graphs.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

onnx-array-api-0.1.3.tar.gz (187.4 kB view details)

Uploaded Source

Built Distribution

onnx_array_api-0.1.3-py3-none-any.whl (205.6 kB view details)

Uploaded Python 3

File details

Details for the file onnx-array-api-0.1.3.tar.gz.

File metadata

  • Download URL: onnx-array-api-0.1.3.tar.gz
  • Upload date:
  • Size: 187.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.10.12

File hashes

Hashes for onnx-array-api-0.1.3.tar.gz
Algorithm Hash digest
SHA256 316b90e9493fef449ce0088beb251b703121096868e88ee080ec077d44609ea4
MD5 67cf6cfccc8fced22fb0402f34149592
BLAKE2b-256 63a381fc2dda2bfdd4bec20f0eff800fe2c6b6de04cd4ccd6bb9c45d70c3c034

See more details on using hashes here.

File details

Details for the file onnx_array_api-0.1.3-py3-none-any.whl.

File metadata

File hashes

Hashes for onnx_array_api-0.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 f5e04031a2292f11b5515e5a59d288b05485d2ae509a35c8bf332359be48c6a0
MD5 7e32e714f7d24c24adf869cd7675cf19
BLAKE2b-256 e4101a06cac33973323d253b7e2734908491b4ae31045762113e1084dab159a7

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page