Skip to main content

High-performance machine learning library with lazy evaluation and automatic kernel fusion

Project description

zyx - Python Bindings

PyPI version License: LGPL 3.0

zyx is a high-performance machine learning library for Python, powered by Rust. It features lazy evaluation, automatic kernel fusion, and multi-backend support (CPU, GPU via OpenCL/CUDA/WebGPU).

Note: Install with pip install zyx-py, then import as import zyx

Installation

pip install zyx-py

Requirements:

  • Python 3.5+
  • Linux x86_64 (more platforms coming soon)

Quick Start

import zyx

# Create tensors
x = zyx.Tensor([1.0, -2.0, 3.0])
y = zyx.Tensor([4.0, 5.0, 6.0])

# Lazy evaluation - operations build a graph
z = x.relu() + y

# Realize to compute the result
z.realize()
print(z.numpy())  # [5.0, 5.0, 9.0]

# Random tensors
a = zyx.Tensor.randn(3, 3)
b = zyx.Tensor.randn(3, 3)
c = a @ b  # Matrix multiplication
c.realize()

Key Features

  • Lazy Evaluation - Operations accumulate until realize(), reducing temporary allocations
  • Kernel Fusion - Multiple operations compile into single optimized GPU kernels
  • Immutable Tensors - No in-place modification errors common in other frameworks
  • Explicit Gradient Tape - Control what's recorded, no no_grad() semantics needed
  • Arbitrary-Order Gradients - Native support for 2nd, 3rd, and higher-order derivatives
  • Cross-Platform - OpenCL (CPU/GPU), WebGPU, CUDA/ROCm backends

Tensor Operations

Creation

import zyx

# From Python lists
t1 = zyx.Tensor([1, 2, 3])

# Random initialization
t2 = zyx.Tensor.randn(100, 100)
t3 = zyx.Tensor.rand((50, 50), dtype=zyx.DType.F32)

# Constant tensors
zeros = zyx.Tensor.zeros(10, 10)
ones = zyx.Tensor.ones(10, 10)
eye = zyx.Tensor.eye(5)

# Full tensor with specific value
filled = zyx.Tensor.full((3, 3), 2.5)

# With numpy arrays
import numpy as np
arr = np.array([[1, 2], [3, 4]])
t = zyx.Tensor(arr)

Math Operations

x = zyx.Tensor.randn(100, 100)

# Unary operations
y = x.relu()
y = x.sigmoid()
y = x.tanh()
y = x.gelu()
y = x.softmax(dim=-1)
y = x.log_softmax(dim=-1)

# Binary operations
a = zyx.Tensor.randn(100, 100)
b = zyx.Tensor.randn(100, 100)
c = a + b
c = a - b
c = a * b
c = a / b
c = a.matmul(b)  # Matrix multiplication

# Reduction operations
mean = x.mean(dim=0)
sum_val = x.sum(dim=1)
max_val = x.max(dim=-1)
min_val = x.min(dim=-1)
argmax = x.argmax(dim=-1)
argmin = x.argmin(dim=-1)

# Shape operations
y = x.reshape(10, 10)
y = x.transpose(0, 1)
y = x.permute(1, 0, 2)
y = x.squeeze()
y = x.unsqueeze(0)

# Realize to get numpy array
result = y.numpy()

Automatic Differentiation

import zyx

# Create a gradient tape
tape = zyx.GradientTape()

# Forward pass
x = zyx.Tensor([1.0, 2.0, 3.0])
w = zyx.Tensor([0.5, 0.5, 0.5])
y = (x * w).sum()

# Compute gradients
grads = tape.gradient(y, [w])
print(grads[0].numpy())  # [1.0, 2.0, 3.0]

# Higher-order gradients
tape2 = zyx.GradientTape()
y = x.relu().sum()
grads = tape2.gradient(y, [x])

Neural Network Modules

import zyx
import zyx.nn as nn

# Linear layer
linear = nn.Linear(in_features=128, out_features=64)

# Convolutional layer
conv = nn.Conv2d(in_channels=3, out_channels=16, kernel_size=(3, 3))

# Normalization layers
ln = nn.LayerNorm(normalized_shape=(128,))
bn = nn.BatchNorm(num_features=64)
gn = nn.GroupNorm(num_groups=8, num_channels=64)
rn = nn.RMSNorm(dim=128)

# Activation functions
x = zyx.Tensor.randn(10, 128)
y = x.relu()
y = x.gelu()
y = x.silu()

# Multihead attention
attn = nn.MultiheadAttention(embed_dim=512, num_heads=8)
query = zyx.Tensor.randn(32, 128, 512)  # batch, seq, embed
key = zyx.Tensor.randn(32, 128, 512)
value = zyx.Tensor.randn(32, 128, 512)
output, _ = attn(query, key, value)

# Transformer layers
encoder_layer = nn.TransformerEncoderLayer(d_model=512, nhead=8)
transformer = nn.TransformerEncoder(encoder_layer, num_layers=6)

Optimizers

import zyx
import zyx.nn as nn
import zyx.optim as optim

# Create model
model = nn.Linear(10, 5)

# Create optimizer
optimizer = optim.Adam(learning_rate=0.001)
# or: optim.SGD(learning_rate=0.01, momentum=0.9)
# or: optim.AdamW(learning_rate=0.001, weight_decay=0.01)
# or: optim.RMSprop(learning_rate=0.001)

# Training loop
tape = zyx.GradientTape()
x = zyx.Tensor.randn(32, 10)
target = zyx.Tensor.randn(32, 5)

# Forward
pred = model(x)
loss = ((pred - target) ** 2).mean()

# Backward
grads = tape.gradient(loss, model.get_params())
optimizer.update(model, grads)

# Realize all pending computations
zyx.Tensor.realize_all()

Training Example

import zyx
import zyx.nn as nn
import zyx.optim as optim

# Set random seed
zyx.manual_seed(42)

# Create model
class SimpleNet:
    def __init__(self):
        self.fc1 = nn.Linear(784, 128)
        self.fc2 = nn.Linear(128, 10)

    def forward(self, x):
        x = self.fc1(x).relu()
        x = self.fc2(x)
        return x

    def get_params(self):
        return self.fc1.get_params() + self.fc2.get_params()

    def set_params(self, params):
        self.fc1.set_params(params[:2])
        self.fc2.set_params(params[2:])

model = SimpleNet()
optimizer = optim.Adam(learning_rate=0.001)

# Training loop
for epoch in range(10):
    tape = zyx.GradientTape()

    # Dummy data
    x = zyx.Tensor.randn(64, 784)
    y = zyx.Tensor.randint(0, 10, (64,))

    # Forward pass
    logits = model.forward(x)
    loss = logits.cross_entropy(y)

    # Backward pass
    grads = tape.gradient(loss, model.get_params())
    optimizer.update(model, grads)

    # Compute accuracy
    pred = logits.argmax(dim=-1)
    acc = (pred == y).float().mean()

    zyx.Tensor.realize_all()
    print(f"Epoch {epoch}, Loss: {loss.numpy():.4f}, Acc: {acc.numpy():.4f}")

Data Types

import zyx

# Supported dtypes
zyx.DType.F32    # 32-bit float
zyx.DType.F64    # 64-bit float
zyx.DType.F16    # 16-bit float
zyx.DType.BF16   # BFloat16
zyx.DType.I8     # 8-bit int
zyx.DType.I16    # 16-bit int
zyx.DType.I32    # 32-bit int
zyx.DType.I64    # 64-bit int
zyx.DType.U8     # 8-bit uint
zyx.DType.U16    # 16-bit uint
zyx.DType.U32    # 32-bit uint
zyx.DType.U64    # 64-bit uint
zyx.DType.Bool   # Boolean

# Create tensor with specific dtype
t = zyx.Tensor([1, 2, 3], dtype=zyx.DType.F32)

Device Support

zyx automatically selects the best available backend:

  • OpenCL - CPU and GPU support via POCL or vendor drivers
  • WebGPU - Modern cross-platform GPU API
  • CUDA/ROCm - NVIDIA and AMD GPU support

To check or set the runtime backend, use environment variables:

export ZYX_BACKEND=opencl    # Use OpenCL backend
export ZYX_BACKEND=wgpu      # Use WebGPU backend
export ZYX_BACKEND=cuda      # Use CUDA backend

Debug Options

Enable debug output with the ZYX_DEBUG environment variable:

ZYX_DEBUG=1    # Print hardware devices
ZYX_DEBUG=2    # Print performance info
ZYX_DEBUG=4    # Print kernel scheduling
ZYX_DEBUG=8    # Print kernel IR
ZYX_DEBUG=16   # Print native assembly

Combine flags: ZYX_DEBUG=18 (2 + 16) for perf + assembly output.

Why zyx?

Feature zyx PyTorch
Gradient recording Explicit GradientTape Implicit, requires no_grad()
Tensor mutability Immutable (no in-place errors) Mutable (can cause back-prop failures)
Higher-order gradients Arbitrary order natively Supported but more complex
Kernel fusion Automatic via lazy graph Manual or via torch.compile
Disk I/O Lazy loading parallel to compute Typically blocking

License

LGPL-3.0-only - see LICENSE file for details.

Links

Status

Experimental - API is stabilizing, performance under active optimization. Not production-ready yet.

Project details


Download files

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

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

zyx_py-0.15.2-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.0 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ x86-64

zyx_py-0.15.2-cp314-cp314-macosx_11_0_arm64.whl (3.2 MB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

zyx_py-0.15.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.0 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

zyx_py-0.15.2-cp313-cp313-macosx_11_0_arm64.whl (3.2 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

zyx_py-0.15.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.0 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

zyx_py-0.15.2-cp312-cp312-macosx_11_0_arm64.whl (3.2 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

zyx_py-0.15.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.0 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

zyx_py-0.15.2-cp311-cp311-macosx_11_0_arm64.whl (3.2 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

zyx_py-0.15.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.0 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

zyx_py-0.15.2-cp310-cp310-macosx_11_0_arm64.whl (3.2 MB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

zyx_py-0.15.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.0 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

zyx_py-0.15.2-cp39-cp39-macosx_11_0_arm64.whl (3.2 MB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

zyx_py-0.15.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.0 MB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ x86-64

zyx_py-0.15.2-cp38-cp38-macosx_11_0_arm64.whl (3.2 MB view details)

Uploaded CPython 3.8macOS 11.0+ ARM64

File details

Details for the file zyx_py-0.15.2-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for zyx_py-0.15.2-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 a15fd42cf5d1549a65a2b2c2525f3abb92abb66acaf30274481e8dd81ab14355
MD5 84f7ce31f3b5109f5715319807dea991
BLAKE2b-256 4546b2bced8e0b68dcbebea76452859a79e39a90644c0bdd5b880b94fda94570

See more details on using hashes here.

Provenance

The following attestation bundles were made for zyx_py-0.15.2-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: build-wheels.yml on zk4x/zyx

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file zyx_py-0.15.2-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for zyx_py-0.15.2-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 dd73f3788d54e7acf9bf497894c28a799fd6e0b04637c0372e463d206cb8a31e
MD5 6283e4503c06e2c93cc23bc208d65d62
BLAKE2b-256 a65d940f2e8efcf03152714ca1331dac1e705d141bbb136aa1a4d85640c5c70e

See more details on using hashes here.

Provenance

The following attestation bundles were made for zyx_py-0.15.2-cp314-cp314-macosx_11_0_arm64.whl:

Publisher: build-wheels.yml on zk4x/zyx

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file zyx_py-0.15.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for zyx_py-0.15.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 7529346b7135d5b66db9968e68f1a8df2b67ed3a657216af8f1a782546333315
MD5 77414e209fe70b8d26a8678ab59660c5
BLAKE2b-256 128aaaddd7edbe681405825a215b241a97cc8c5e3441176d3ba5268a3445578e

See more details on using hashes here.

Provenance

The following attestation bundles were made for zyx_py-0.15.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: build-wheels.yml on zk4x/zyx

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file zyx_py-0.15.2-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for zyx_py-0.15.2-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f315d204e010315f1de4ef5bda5255d91f907adf1811061ced7dabdff01de977
MD5 1c56c9fb1a7f08ffc11a1d3fc330a579
BLAKE2b-256 37aa77bb02e2512096d108c09b72355c2f12a7787f03d322b0fe63ddf804d370

See more details on using hashes here.

Provenance

The following attestation bundles were made for zyx_py-0.15.2-cp313-cp313-macosx_11_0_arm64.whl:

Publisher: build-wheels.yml on zk4x/zyx

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file zyx_py-0.15.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for zyx_py-0.15.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 91108390ad8fed39ce97e87d76251500d15db835e69fb4b4f81eab3eea51ca0d
MD5 4fb24a159b0e324b36d23bae5c4c781f
BLAKE2b-256 a76f5c591e630c61bfa0f3cda6a8aa7c859cc0fcd20b0e210b4477014999cc80

See more details on using hashes here.

Provenance

The following attestation bundles were made for zyx_py-0.15.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: build-wheels.yml on zk4x/zyx

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file zyx_py-0.15.2-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for zyx_py-0.15.2-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 03d7a528b19ac4dafc3a8a8081730e5e075a8083702c3b1dbec367029d434950
MD5 e5c74948490d5a20fa0d7621176615f5
BLAKE2b-256 813cc5988484f62378bf00ee5dd5a63d8bfcb741b9da3bc99f17a6cb17d30a12

See more details on using hashes here.

Provenance

The following attestation bundles were made for zyx_py-0.15.2-cp312-cp312-macosx_11_0_arm64.whl:

Publisher: build-wheels.yml on zk4x/zyx

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file zyx_py-0.15.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for zyx_py-0.15.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 3fd50a23f1bddbd25c5d1614676d9e4c14857fdb93c7fee791a03a13e5528a8c
MD5 7097294d02135ac0709984575ef10374
BLAKE2b-256 e24261d969a53508e7f366d1b27c6c23f8af5e26e30e5fb9ddb15dce7d015fca

See more details on using hashes here.

Provenance

The following attestation bundles were made for zyx_py-0.15.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: build-wheels.yml on zk4x/zyx

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file zyx_py-0.15.2-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for zyx_py-0.15.2-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 96149eed5c33ffafcecced75934924412f8f6c75dd041dbc348535512940e9a8
MD5 fa53141cdcb500686aa488204532c2f6
BLAKE2b-256 fb5997320c22c4a6ecba6388658df02f0b89aeda8e788ac8320d95b32a0db711

See more details on using hashes here.

Provenance

The following attestation bundles were made for zyx_py-0.15.2-cp311-cp311-macosx_11_0_arm64.whl:

Publisher: build-wheels.yml on zk4x/zyx

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file zyx_py-0.15.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for zyx_py-0.15.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 1250d0241623fcd5c7b093b75f1808a489ae348576e08b774568fd8673adada6
MD5 ed4060b4395e0b22c36129461c3fe2f4
BLAKE2b-256 3fc68c1fd242f05f6d4aeb87e1acdbbae35ef33170ec5e9d0a1a51b350ad49fa

See more details on using hashes here.

Provenance

The following attestation bundles were made for zyx_py-0.15.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: build-wheels.yml on zk4x/zyx

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file zyx_py-0.15.2-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for zyx_py-0.15.2-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 510f51c4e352bef4fd293ff3586f3106fe3cf5dc36c21bae4e9843d0ccb72d82
MD5 5f6fce1af3de266aadbed6b3e714ba6e
BLAKE2b-256 b4e06c8e20121ba06af2fe8c9bce7efd06d822a8eacea52b38ef2a43e8f351fc

See more details on using hashes here.

Provenance

The following attestation bundles were made for zyx_py-0.15.2-cp310-cp310-macosx_11_0_arm64.whl:

Publisher: build-wheels.yml on zk4x/zyx

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file zyx_py-0.15.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for zyx_py-0.15.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 75d5d599e2c4783eb52949d162d47e4a372a05c4669526e52369d43f63a17297
MD5 be381a5466ca87f45db0810505ff2082
BLAKE2b-256 1833bc086614b2bbd106d6c1b331b8957fcd4aa2c8995328a0f84f53ef4e9c36

See more details on using hashes here.

Provenance

The following attestation bundles were made for zyx_py-0.15.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: build-wheels.yml on zk4x/zyx

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file zyx_py-0.15.2-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for zyx_py-0.15.2-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 86b68b1dcb260420ccf9ab3d63e15537f45fd71fc97fae1812a3d09b59f559f8
MD5 250c420b72e0a5c5c3b376d8dbca39d1
BLAKE2b-256 ba9c7a489c08425fdff5f3226ca18f296e714ee099790e2e0fbbe213691a82e8

See more details on using hashes here.

Provenance

The following attestation bundles were made for zyx_py-0.15.2-cp39-cp39-macosx_11_0_arm64.whl:

Publisher: build-wheels.yml on zk4x/zyx

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file zyx_py-0.15.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for zyx_py-0.15.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 e55047f3182d6009327265caffdfcda62bbd5e182b31ca3b4619308a2806128a
MD5 4b457c8fc3f98c6cfd5f16514303220d
BLAKE2b-256 572ebe7486148d77da6cb747eec92921f8ded14676af8a70c029a43998bab649

See more details on using hashes here.

Provenance

The following attestation bundles were made for zyx_py-0.15.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: build-wheels.yml on zk4x/zyx

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file zyx_py-0.15.2-cp38-cp38-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for zyx_py-0.15.2-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 11d51dbcbf4682fe3c81be12552df54361aea252bda55a42d6d671bcac45cbcd
MD5 1d2a534918f37ad3cb8a180610cda45c
BLAKE2b-256 4c165b937ca22f7d5acb7d527e2a5823edd536b88212ca1286bca73ca1612409

See more details on using hashes here.

Provenance

The following attestation bundles were made for zyx_py-0.15.2-cp38-cp38-macosx_11_0_arm64.whl:

Publisher: build-wheels.yml on zk4x/zyx

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

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