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.3-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.9 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ x86-64

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

Uploaded CPython 3.14macOS 11.0+ ARM64

zyx_py-0.15.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.9 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

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

Uploaded CPython 3.13macOS 11.0+ ARM64

zyx_py-0.15.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.9 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

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

Uploaded CPython 3.12macOS 11.0+ ARM64

zyx_py-0.15.3-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.3-cp311-cp311-macosx_11_0_arm64.whl (3.2 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

zyx_py-0.15.3-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.3-cp310-cp310-macosx_11_0_arm64.whl (3.2 MB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

zyx_py-0.15.3-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.3-cp39-cp39-macosx_11_0_arm64.whl (3.2 MB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

zyx_py-0.15.3-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.3-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.3-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for zyx_py-0.15.3-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 c70d12433862170f8d49694d93f97b5f46da72d42442ea4bc8bb923d476e38e4
MD5 d078e37c31b6cd5f66f719ea3d59c440
BLAKE2b-256 31c10f867c9c3c108df6d1d18d8be9a98daf160b748fd99dfd6c65dc9709b88f

See more details on using hashes here.

Provenance

The following attestation bundles were made for zyx_py-0.15.3-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.3-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for zyx_py-0.15.3-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 cdaf15c00c930009c0be15edbd222ca264e5593dfa5f0a2caab2b38e41087d30
MD5 fe2d05dcecfe10475e765debd680a23b
BLAKE2b-256 816962a582a017b96e97263dbf5fd47d2416fff9caf6a031b060f2a5357b9912

See more details on using hashes here.

Provenance

The following attestation bundles were made for zyx_py-0.15.3-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.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for zyx_py-0.15.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 aa8d6da20c0119608cfec60c8c8e14fc19299fe2c3121be51f27dc55ab9fd598
MD5 316132405560256809ed37e0b845fca0
BLAKE2b-256 0b7b55174f9580099cd8954cd0c67128419922ec8e018593dc05dedfbef4937e

See more details on using hashes here.

Provenance

The following attestation bundles were made for zyx_py-0.15.3-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.3-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for zyx_py-0.15.3-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 9141b18f7891030e30595aa2574d0c5bd00cddb934b969e248608292b4aa1675
MD5 030f6084345c04c793e60ea8d7d6d6da
BLAKE2b-256 0ef4fe7b5f9741c13d533bd35df195a18b0acb4e2397ec008532867c19dd94cb

See more details on using hashes here.

Provenance

The following attestation bundles were made for zyx_py-0.15.3-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.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for zyx_py-0.15.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 11f956d66f045871be63faadf894e03f4247edf0dabdfe59d099a82e8cb28c9a
MD5 fd929d685d7f6a0dbdda09a1bd7e0506
BLAKE2b-256 ba6dea22d5bf32d7ef42353f738c6b3e52365cd3e94dd8bf11e5aef43fedcbc2

See more details on using hashes here.

Provenance

The following attestation bundles were made for zyx_py-0.15.3-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.3-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for zyx_py-0.15.3-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 96980ee4762bdce89accbe59ed6435b0c2c283dd772102c8c11fe4ff409b2ee9
MD5 c2442f7b33a8ec98129c796fbe699a50
BLAKE2b-256 03775859b7640b2c9c6962e26d9eaa0d51559bfec4c07536fe6150cbf70175db

See more details on using hashes here.

Provenance

The following attestation bundles were made for zyx_py-0.15.3-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.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for zyx_py-0.15.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 173c7ed33e6880db56f11754fc6347167aa9b8b69b40a6e75c1b0752130e6f30
MD5 760e109857bd96c1768aa24d8de76a41
BLAKE2b-256 d5deef4658445eaf51a74be2277491c3d78d3b9eb0aaa0695affc77480a1c082

See more details on using hashes here.

Provenance

The following attestation bundles were made for zyx_py-0.15.3-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.3-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for zyx_py-0.15.3-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 75b5ebf4747b558686d16ed1bfd899af3612cbb041fa5c843a55c1aea54ded46
MD5 b23233e8e1fdec697796fc851f28c814
BLAKE2b-256 42a61ad31d37390d581b260a65b628cdc3be2ce4f0c8fce06083edebec1e5c56

See more details on using hashes here.

Provenance

The following attestation bundles were made for zyx_py-0.15.3-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.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for zyx_py-0.15.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 6497a89be5ebc0ce7be0902d3d6f5fd29b457725b3977ed876e4ce334d07bfad
MD5 d4f4a3fda6ee7d7079aa0422569d5adb
BLAKE2b-256 903208930b1a45f29887c2c8d1af08c06209eb79e7b721bb80eb24a3938f9e19

See more details on using hashes here.

Provenance

The following attestation bundles were made for zyx_py-0.15.3-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.3-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for zyx_py-0.15.3-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 5c913e840a3bea06cf1e261267cc169f4ad890e3c926937cda8ecc18ec29fd7c
MD5 b2aac858848e29a9f237ee1590d5456a
BLAKE2b-256 6562723e267154aa1bd6cca010e5006862a708eef05b7f7aa1acdfcb7e8093e8

See more details on using hashes here.

Provenance

The following attestation bundles were made for zyx_py-0.15.3-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.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for zyx_py-0.15.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 32ec6022830c24b675917ed0a600aa2920eefb93bea47925aff8594a7635ce15
MD5 a5a4339dc03ec691c11bd7a24244323d
BLAKE2b-256 895f512431635b36e93cd9ecc90047345a2a94e8d9449d12a3006507e6079806

See more details on using hashes here.

Provenance

The following attestation bundles were made for zyx_py-0.15.3-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.3-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for zyx_py-0.15.3-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 9e41c3212f118d7fcdb2e6f0220cc8831c970b9fdd5f919396d18dfaa87d32a0
MD5 763df3532c121937168abc0dcb37a531
BLAKE2b-256 6b19364644892c078c5d8a5ebdcc9d65dbfd3aa312775422bd7c42c9ec296e4e

See more details on using hashes here.

Provenance

The following attestation bundles were made for zyx_py-0.15.3-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.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for zyx_py-0.15.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 595e6d5f755d62fe091cf565a2af40f260e0a8046c26108425e1c5de636b3e4c
MD5 013a0cd1a5bf3cec5c507af02748186e
BLAKE2b-256 b9ccb592eb0ff79d31e1b3cb1e6d5f6d8c8227703b2b89a886883624d8ee18f5

See more details on using hashes here.

Provenance

The following attestation bundles were made for zyx_py-0.15.3-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.3-cp38-cp38-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for zyx_py-0.15.3-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8ca378afa413d615a09e98d72d9d5544829d9a27da756fc91cf9b77738144bde
MD5 eb819b15ae9f575dbafd7a9001420071
BLAKE2b-256 fe03ea5c7ac0f1bae1da6d67461fbfa934975fd55eed5b940a34439d38011c82

See more details on using hashes here.

Provenance

The following attestation bundles were made for zyx_py-0.15.3-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