Skip to main content

Einsum tree operations.

Project description

The etops package provides a Python interface for the Tiled Execution IR (TEIR). It enables users to define, configure, optimize, and execute complex tensor contractions and elementwise operations. The package is built on top of the einsum_ir C++ backend and exposes advanced features such as dimension fusion, dimension splitting, and backend-specific optimizations.

Main Features

  • Abstractions for tensor operations and configuration

  • Support for multiple data types (float32, float64)

  • Primitive operations: zero, copy, relu, gemm, brgemm, etc.

  • Dimension execution strategies: primitive, sequential, shared, space-filling curve (SFC)

  • Dimension and stride configuration for advanced memory layouts

  • Interface for built-in contraction optimizer

  • Pythonic API with dataclass-based configuration

Installation

Install the package using pip:

pip install etops

Unary Examples

Below are some examples showing how to configure and execute unary tensor operations:

import etops

# ---------------------------------------
# First example:
#   Matrix transpose using copy primitive
#   Compares the result with NumPy
# ---------------------------------------
# Define a transpose configuration
top_config = etops.TensorOperationConfig(
    backend    =   "tpp",
    data_type  =   etops.float32,
    prim_first =   etops.prim.none,
    prim_main  =   etops.prim.copy,
    prim_last  =   etops.prim.none,
    dim_types  =   (etops.dim.c,     etops.dim.c    ),
    exec_types =   (etops.exec.prim, etops.exec.prim),
    dim_sizes  =   (3,               4              ),
    strides    = (((4,               1               ),   # in
                   (1,               3               )),) # out
)

# Create the TensorOperation instance
top = etops.TensorOperation(top_config)

# Create input and output arrays
import numpy as np
A = np.random.randn(3,4).astype(np.float32)
B = np.random.randn(4,3).astype(np.float32)

top.execute(A, None, B)

B_np = np.einsum("ij->ji", A)

# Check correctness
error_abs = np.max( np.abs(B - B_np) )
print("Matrix Transpose using copy primitive:")
print(f"  Max absolute error: {error_abs:.6e}")

# -------------------------------------------------
# Second example:
#   Permutation of a 4D tensor using copy primitive
#   Compares the result with NumPy
# -------------------------------------------------
# Define a permutation configuration
perm_config = etops.TensorOperationConfig(
    backend     =   "tpp",
    data_type   =   etops.float32,
    prim_first  =   etops.prim.none,
    prim_main   =   etops.prim.copy,
    prim_last   =   etops.prim.none,
    dim_types   =   (etops.dim.c,    etops.dim.c,     etops.dim.c,     etops.dim.c    ),
    exec_types  =   (etops.exec.seq, etops.exec.seq,  etops.exec.prim, etops.exec.prim),
    dim_sizes   =   (2,              4,               3,               5              ),
    strides     = (((3*4*5,          5,               4*5,             1              ),   # in
                    (3,              2*3,             1,               4*2*3          )),) # out
)

# Create the TensorOperation instance
perm_op = etops.TensorOperation(perm_config)

# Create input and output arrays
A = np.random.randn(2,3,4,5).astype(np.float32)
B = np.random.randn(5,4,2,3).astype(np.float32)

perm_op.execute(A, None, B)

B_np = np.einsum("abcd->dcab", A)

# Check correctness
error_abs = np.max( np.abs(B - B_np) )
print("4D Tensor Permutation using copy primitive:")
print(f"  Max absolute error: {error_abs:.6e}")

# -------------------------------------------------
# Third example:
#   Permutation of a 4D tensor using copy primitive
#   Uses the built-in optimization routine
#   Compares the result with NumPy
# -------------------------------------------------
perm_config = etops.TensorOperationConfig(
    data_type   =   etops.float32,
    prim_first  =   etops.prim.none,
    prim_main   =   etops.prim.copy,
    prim_last   =   etops.prim.none,
    dim_types   =   (etops.dim.c,    etops.dim.c,     etops.dim.c,    etops.dim.c   ),
    exec_types  =   (etops.exec.seq, etops.exec.seq,  etops.exec.seq, etops.exec.seq),
    dim_sizes   =   (2,              4,               3,              5             ),
    strides     = (((3*4*5,          5,               4*5,            1             ),   # in
                    (3,              2*3,             1,              4*2*3         )),) # out
)

# Use default optimization config
optimized_config = etops.optimize(perm_config)

# Create the TensorOperation instance
perm_op = etops.TensorOperation(optimized_config)

# Create input and output arrays
A = np.random.randn(2,3,4,5).astype(np.float32)
B = np.random.randn(5,4,2,3).astype(np.float32)

# Execute the operation
perm_op.execute(A, None, B)

B_np = np.einsum("abcd->dcab", A)

# Check correctness
error_abs = np.max( np.abs(B - B_np) )
print("4D Tensor Permutation using optimized copy primitive:")
print(f"  Max absolute error: {error_abs:.6e}")

Binary Examples

Below are some examples showing how to configure and execute binary tensor operations:

import etops

# -----------------------------------------
# First example:
#   Column-major GEMM operation
#   Compares the result with NumPy's einsum
# -----------------------------------------
# Define a column-major GEMM configuration
top_config = etops.TensorOperationConfig(
    backend    =   "tpp",
    data_type  =   etops.float32,
    prim_first =   etops.prim.zero,
    prim_main  =   etops.prim.gemm,
    prim_last  =   etops.prim.none,
    dim_types  =   (etops.dim.m,     etops.dim.n,     etops.dim.k    ),
    exec_types =   (etops.exec.prim, etops.exec.prim, etops.exec.prim),
    dim_sizes  =   (64,              32,              128            ),
    strides    = (((1,               0,               64             ),   # in0
                   (0,               128,             1              ),   # in1
                   (1,               64,              0              )),) # out
)

# Create the TensorOperation instance
top = etops.TensorOperation(top_config)

# Create input and output arrays
import numpy as np
A = np.random.randn(128,64).astype(np.float32)
B = np.random.randn(32,128).astype(np.float32)
C = np.random.randn(32, 64).astype(np.float32)

# Execute the operation
top.execute(A, B, C)

C_np = np.einsum("km,nk->nm", A, B)

# Compute absolute and relative errors
error_abs = np.max( np.abs(C - C_np) )
error_rel = np.max( np.abs(C - C_np) / (np.abs(C_np) + 1e-8) )
print("Column-major GEMM operation:")
print(f"  Max absolute error: {error_abs:.6e}")
print(f"  Max relative error: {error_rel:.6e}")

# -----------------------------------------
# Second example:
#   Batched GEMM operation
#   Compares the result with torch's einsum
# -----------------------------------------
# Define a batched GEMM configuration
batched_config =    etops.TensorOperationConfig(
    backend    =    "tpp",
    data_type  =    etops.float32,
    prim_first =    etops.prim.zero,
    prim_main  =    etops.prim.gemm,
    prim_last  =    etops.prim.none,
    dim_types  =   (etops.dim.c,       etops.dim.m,     etops.dim.n,     etops.dim.k    ),
    exec_types =   (etops.exec.shared, etops.exec.prim, etops.exec.prim, etops.exec.prim),
    dim_sizes  =   (48,                64,              32,              128            ),
    strides    = (((128*64,            1,               0,               64             ),   # in0
                   (32*128,            0,               128,             1              ),   # in1
                   (32*64,             1,               64,              0              )),) # out
)
# Create the batched TensorOperation instance
top = etops.TensorOperation(batched_config)

import torch
# Create input and output arrays
A = torch.randn(48, 128, 64, dtype=torch.float32)
B = torch.randn(48, 32, 128, dtype=torch.float32)
C = torch.randn(48, 32, 64,  dtype=torch.float32)

# Execute the operation
top.execute(A, B, C)

C_torch = torch.einsum("bkm,bnk->bnm", A, B)

# Compute absolute and relative errors
error_abs = torch.max(torch.abs(C - C_torch))
error_rel = torch.max(torch.abs(C - C_torch) / (torch.abs(C_torch) + 1e-8))

print("Batched GEMM operation:")
print(f"  Max absolute error: {error_abs:.6e}")
print(f"  Max relative error: {error_rel:.6e}")

#--------------------------------------------
# Third example:
#   GEMM operation with row-major first input
#   packed to column-major
#   Compares the result with NumPy's einsum
# -------------------------------------------

# Define a row-major GEMM configuration with packing
top_config = etops.TensorOperationConfig(
    backend    =   "tpp",
    data_type  =   etops.float32,
    prim_first =   etops.prim.zero,
    prim_main  =   etops.prim.gemm,
    prim_last  =   etops.prim.none,
    dim_types  =   (etops.dim.m,     etops.dim.n,     etops.dim.k    ),
    exec_types =   (etops.exec.prim, etops.exec.prim, etops.exec.prim),
    dim_sizes  =   (64,              32,              128            ),
    strides    = (((1,               0,               64             ),   # in 0
                   (0,               128,             1              ),   # in 1
                   (1,               64,              0              )),  # out
                  ((128,             0,               1              ),   # packing in 0
                   (0,               0,               0              ),   # packing in 1
                   (0,               0,               0              )),) # packing out
)

# Create the TensorOperation instance
top = etops.TensorOperation(top_config)

# Create input and output arrays
import numpy as np
A = np.random.randn(64,128).astype(np.float32)
B = np.random.randn(32,128).astype(np.float32)
C = np.random.randn(32, 64).astype(np.float32)

# Execute the operation
top.execute(A, B, C)

A_T = np.transpose(A)
C_np = np.einsum("km,nk->nm", A_T, B)

# Compute absolute and relative errors
error_abs = np.max( np.abs(C - C_np) )
error_rel = np.max( np.abs(C - C_np) / (np.abs(C_np) + 1e-8) )
print("GEMM operation with packing:")
print(f"  Max absolute error: {error_abs:.6e}")
print(f"  Max relative error: {error_rel:.6e}")

# -----------------------------------------------
# Fourth example:
#   Batch-reduce GEMM operation with optimization
#   Compares the result with torch's einsum
# -----------------------------------------------
# Define a batch-reduce GEMM configuration
batched_config =   etops.TensorOperationConfig(
    data_type  =   etops.float32,
    prim_first =   etops.prim.zero,
    prim_main  =   etops.prim.gemm,
    prim_last  =   etops.prim.none,
    dim_types  =   (etops.dim.k,    etops.dim.m,    etops.dim.n,    etops.dim.k   ),
    exec_types =   (etops.exec.seq, etops.exec.seq, etops.exec.seq, etops.exec.seq),
    dim_sizes  =   (48,             64,             32,             128           ),
    strides    = (((128*64,         1,              0,              64            ),   # in0
                   (32*128,         0,              128,            1             ),   # in1
                   (0,              1,              64,             0             )),) # out
)

# Optimize the configuration
optimized_config = etops.optimize(
    batched_config,
    {
        "target_m":            16,
        "target_n":            12,
        "target_k":            64,
        "num_threads":         4,
        "br_gemm_support":     True,
        "packed_gemm_support": True
    }
)

# Create the optimized TensorOperation instance
top = etops.TensorOperation(optimized_config)

import torch
# Create input and output arrays
A = torch.randn(48, 128, 64, dtype=torch.float32)
B = torch.randn(48, 32, 128, dtype=torch.float32)
C = torch.randn(    32, 64,  dtype=torch.float32)

# Execute the operation
top.execute(A, B, C)

C_torch = torch.einsum("bkm,bnk->nm", A, B)

# Compute absolute and relative errors
error_abs = torch.max(torch.abs(C - C_torch))
error_rel = torch.max(torch.abs(C - C_torch) / (torch.abs(C_torch) + 1e-8))
print("Batch-reduce GEMM operation:")
print(f"  Max absolute error: {error_abs:.6e}")
print(f"  Max relative error: {error_rel:.6e}")

See the source code and inline documentation for more advanced usage.

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.

etops_nightly-25.12.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

etops_nightly-25.12.0-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl (1.2 MB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.27+ ARM64manylinux: glibc 2.28+ ARM64

etops_nightly-25.12.0-cp314-cp314t-macosx_14_0_arm64.whl (713.5 kB view details)

Uploaded CPython 3.14tmacOS 14.0+ ARM64

etops_nightly-25.12.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

etops_nightly-25.12.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl (1.2 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.27+ ARM64manylinux: glibc 2.28+ ARM64

etops_nightly-25.12.0-cp314-cp314-macosx_14_0_arm64.whl (704.1 kB view details)

Uploaded CPython 3.14macOS 14.0+ ARM64

etops_nightly-25.12.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

etops_nightly-25.12.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl (1.2 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.27+ ARM64manylinux: glibc 2.28+ ARM64

etops_nightly-25.12.0-cp313-cp313-macosx_14_0_arm64.whl (703.6 kB view details)

Uploaded CPython 3.13macOS 14.0+ ARM64

etops_nightly-25.12.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

etops_nightly-25.12.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl (1.2 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.27+ ARM64manylinux: glibc 2.28+ ARM64

etops_nightly-25.12.0-cp312-cp312-macosx_14_0_arm64.whl (703.6 kB view details)

Uploaded CPython 3.12macOS 14.0+ ARM64

etops_nightly-25.12.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

etops_nightly-25.12.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl (1.2 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.27+ ARM64manylinux: glibc 2.28+ ARM64

etops_nightly-25.12.0-cp311-cp311-macosx_14_0_arm64.whl (702.4 kB view details)

Uploaded CPython 3.11macOS 14.0+ ARM64

etops_nightly-25.12.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

etops_nightly-25.12.0-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl (1.2 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.27+ ARM64manylinux: glibc 2.28+ ARM64

etops_nightly-25.12.0-cp310-cp310-macosx_14_0_arm64.whl (700.8 kB view details)

Uploaded CPython 3.10macOS 14.0+ ARM64

etops_nightly-25.12.0-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

etops_nightly-25.12.0-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl (1.2 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.27+ ARM64manylinux: glibc 2.28+ ARM64

etops_nightly-25.12.0-cp39-cp39-macosx_14_0_arm64.whl (700.9 kB view details)

Uploaded CPython 3.9macOS 14.0+ ARM64

etops_nightly-25.12.0-cp38-cp38-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.8manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

etops_nightly-25.12.0-cp38-cp38-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl (1.2 MB view details)

Uploaded CPython 3.8manylinux: glibc 2.27+ ARM64manylinux: glibc 2.28+ ARM64

File details

Details for the file etops_nightly-25.12.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for etops_nightly-25.12.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 fc959e8af686f93fc38f9c9fb9bf3d184c6b3d80ec979a6dfe46ae7c00fd27aa
MD5 ce4698120387fb5defd8cf3c7d69c16a
BLAKE2b-256 594a66f6f1f2eb07308fa4a9ff34ed8a61f6b8413373cfc687e647b9f3ed19cc

See more details on using hashes here.

Provenance

The following attestation bundles were made for etops_nightly-25.12.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: pypi.yml on scalable-analyses/einsum_ir

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

File details

Details for the file etops_nightly-25.12.0-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for etops_nightly-25.12.0-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 2ec85dd9c44a16299409f4d14365987d8aa262561f4a25ce4c77673915c70b98
MD5 f16d6ed5b709e92ca69fe1189b2d3b66
BLAKE2b-256 212cf4dce705a3a4a2347b9881464626ee51f21703c59eae05eeb14a3c97fce8

See more details on using hashes here.

Provenance

The following attestation bundles were made for etops_nightly-25.12.0-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl:

Publisher: pypi.yml on scalable-analyses/einsum_ir

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

File details

Details for the file etops_nightly-25.12.0-cp314-cp314t-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for etops_nightly-25.12.0-cp314-cp314t-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 2704b10e369e0e9f5b6d915398ccd78630a89e300ff09d3d6c1dc8889c54c79b
MD5 bb7fac02469f0819308fef9eb75373a8
BLAKE2b-256 88d2803a12b4baa9ad6f33f402cdd0bddbd36267f85b83392263fd47cf9941ae

See more details on using hashes here.

Provenance

The following attestation bundles were made for etops_nightly-25.12.0-cp314-cp314t-macosx_14_0_arm64.whl:

Publisher: pypi.yml on scalable-analyses/einsum_ir

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

File details

Details for the file etops_nightly-25.12.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for etops_nightly-25.12.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 98aef93293febfdc8ed7a4de8d37e0bb6368efed48ecfba83fc9f1883c23364a
MD5 605eecb05d78b09cde5fc4f0141cd762
BLAKE2b-256 c70934f10adb8ddfaeff8635cd265169a734a287958f245211074cedcc7eef89

See more details on using hashes here.

Provenance

The following attestation bundles were made for etops_nightly-25.12.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: pypi.yml on scalable-analyses/einsum_ir

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

File details

Details for the file etops_nightly-25.12.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for etops_nightly-25.12.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 9bdfc3f777fee8a7aaa81c702588fb51bfeaebcd8ccdb660b821077cec55df4c
MD5 11cc93968cc968482d9358791a96bf02
BLAKE2b-256 53fcbf5b8da0abcca8aaacb8266bea56e897b511554fb91b09ef9b327008c431

See more details on using hashes here.

Provenance

The following attestation bundles were made for etops_nightly-25.12.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl:

Publisher: pypi.yml on scalable-analyses/einsum_ir

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

File details

Details for the file etops_nightly-25.12.0-cp314-cp314-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for etops_nightly-25.12.0-cp314-cp314-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 f2d28e8b478be6da0ca3e322d6cb4e62f8c3b3e19454e74d0130d14c73b59b76
MD5 3e982e24787c35009b52544d05716b4b
BLAKE2b-256 254dc63b80acffcf48de9eb18eab651a8029c313b541fca2be8cd49f82823cfb

See more details on using hashes here.

Provenance

The following attestation bundles were made for etops_nightly-25.12.0-cp314-cp314-macosx_14_0_arm64.whl:

Publisher: pypi.yml on scalable-analyses/einsum_ir

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

File details

Details for the file etops_nightly-25.12.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for etops_nightly-25.12.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 43d66dba1a2d52ab329b12c46c291aef268e39e8444f0c96db25a4a8a0c1d240
MD5 62bb77634ea64b0b55e8fbd3092a0880
BLAKE2b-256 cdcc4fc45b6580a8586a86c26c4bd505d54862a3e8d15353bac72148e54af65e

See more details on using hashes here.

Provenance

The following attestation bundles were made for etops_nightly-25.12.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: pypi.yml on scalable-analyses/einsum_ir

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

File details

Details for the file etops_nightly-25.12.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for etops_nightly-25.12.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 b9f1417f4929000acd116bbb25f42395c6159d4acbc6fe27079a6fbcdd081de3
MD5 1273b15a32cf3840ddb8a4d5d9b030ee
BLAKE2b-256 bd607d725fdc4886397e5d621664a85b350ff1637de397af58e09ed983ce372c

See more details on using hashes here.

Provenance

The following attestation bundles were made for etops_nightly-25.12.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl:

Publisher: pypi.yml on scalable-analyses/einsum_ir

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

File details

Details for the file etops_nightly-25.12.0-cp313-cp313-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for etops_nightly-25.12.0-cp313-cp313-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 ea37ca0d59465f247d96a9cbee8a0570504207988602a43f42a8363b6fc3a8a1
MD5 fad1f03c938461236c09c74226bf26fa
BLAKE2b-256 ea54343c76b3834c9bab2122018c5c8e8ed5c5c284c0b7cd01a98002c40aa393

See more details on using hashes here.

Provenance

The following attestation bundles were made for etops_nightly-25.12.0-cp313-cp313-macosx_14_0_arm64.whl:

Publisher: pypi.yml on scalable-analyses/einsum_ir

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

File details

Details for the file etops_nightly-25.12.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for etops_nightly-25.12.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 9d5f41ebc3592de81ecf2e69aa7a40d40d92e52e2627a971c6d03e47c3121169
MD5 b0d564ba4d9ca67a3347678c7e2e8906
BLAKE2b-256 d8c4d8468962d5944bc0654ef53e3981a88de1c99f8a8c05265f58c73b19ebaf

See more details on using hashes here.

Provenance

The following attestation bundles were made for etops_nightly-25.12.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: pypi.yml on scalable-analyses/einsum_ir

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

File details

Details for the file etops_nightly-25.12.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for etops_nightly-25.12.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 4e2e8dcdec22e16baa660bdadca46bcbe58202d381e7323cc6b834b940b751a3
MD5 1ad15fd031466e92ef6414df509504a9
BLAKE2b-256 4a164eb1818ff8e2df2c7e9720c14c059eabd5480623033e586cfdc7ba59741a

See more details on using hashes here.

Provenance

The following attestation bundles were made for etops_nightly-25.12.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl:

Publisher: pypi.yml on scalable-analyses/einsum_ir

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

File details

Details for the file etops_nightly-25.12.0-cp312-cp312-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for etops_nightly-25.12.0-cp312-cp312-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 2f4b51db18a494046dd1785382ae026693609a52adfca19af3dfb51399b73e82
MD5 6997c40471028aaa72bf30f2ae4b984a
BLAKE2b-256 f47564fb0271e70fb73e0dab00e9a872518576a18b61c2a2e8efae4607260377

See more details on using hashes here.

Provenance

The following attestation bundles were made for etops_nightly-25.12.0-cp312-cp312-macosx_14_0_arm64.whl:

Publisher: pypi.yml on scalable-analyses/einsum_ir

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

File details

Details for the file etops_nightly-25.12.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for etops_nightly-25.12.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 ab3fabfd382b91006b5af7407390c2499dea07ce0b5298adfd23d48ea0602bd5
MD5 c517772e4559e518c3fc1c9d3ad1be7f
BLAKE2b-256 035dcaf9fdfeeb780913bc60748da7dce2e9b9b24adaa9c7bd1c7347ab4af715

See more details on using hashes here.

Provenance

The following attestation bundles were made for etops_nightly-25.12.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: pypi.yml on scalable-analyses/einsum_ir

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

File details

Details for the file etops_nightly-25.12.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for etops_nightly-25.12.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 e5a163a4eb592beb61eecfbe8bf9b1a7164a2ffcd039db7574b6524e8b33da50
MD5 22831b5440dab0a6758ca0924acd8a96
BLAKE2b-256 e5f77a8f70949bbd63688e473d16cd18c34da6d3f9493090a1ed9e99af50f152

See more details on using hashes here.

Provenance

The following attestation bundles were made for etops_nightly-25.12.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl:

Publisher: pypi.yml on scalable-analyses/einsum_ir

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

File details

Details for the file etops_nightly-25.12.0-cp311-cp311-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for etops_nightly-25.12.0-cp311-cp311-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 20379492393fdac1ef09aefedff270bae861a796e5f7317c0f0182296bd8cdf0
MD5 ed6227bad672e4710e080be1e9af2dd5
BLAKE2b-256 e545f5745293bfb406e5a66da9bd2f231197c9c08e33f1fdc45edada9d35a9cb

See more details on using hashes here.

Provenance

The following attestation bundles were made for etops_nightly-25.12.0-cp311-cp311-macosx_14_0_arm64.whl:

Publisher: pypi.yml on scalable-analyses/einsum_ir

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

File details

Details for the file etops_nightly-25.12.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for etops_nightly-25.12.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 79c88f69958ec5da234fe6bf4958b8c5044a1153ad8a2b5f0ae17cc0b87a1c50
MD5 5d7750acf2f20b4731bcc623f26e4577
BLAKE2b-256 04166a779cd6d494706c5d47ba369afd7e108c27eda9b65eb6d492efdd9a804b

See more details on using hashes here.

Provenance

The following attestation bundles were made for etops_nightly-25.12.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: pypi.yml on scalable-analyses/einsum_ir

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

File details

Details for the file etops_nightly-25.12.0-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for etops_nightly-25.12.0-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 54347f3a42e38586a37015e6415be11de9d60305bd80e8256a6789802664a5e2
MD5 553258ea18709433cf7a3c130c2be4a5
BLAKE2b-256 9c9106c123f446286a4db748ca5a52ded5014333c4392ed7c52f0a9e8dfe675e

See more details on using hashes here.

Provenance

The following attestation bundles were made for etops_nightly-25.12.0-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl:

Publisher: pypi.yml on scalable-analyses/einsum_ir

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

File details

Details for the file etops_nightly-25.12.0-cp310-cp310-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for etops_nightly-25.12.0-cp310-cp310-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 54826353353c493813d9fb726198951ef628d423d7c9ff4afa6e83991fb07785
MD5 702b81f75a34c44a5fb08776cf9a8b04
BLAKE2b-256 53d87854607b7d63d693a42b8083a5e69e6c31cd9f024210b1545b4e05ad2775

See more details on using hashes here.

Provenance

The following attestation bundles were made for etops_nightly-25.12.0-cp310-cp310-macosx_14_0_arm64.whl:

Publisher: pypi.yml on scalable-analyses/einsum_ir

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

File details

Details for the file etops_nightly-25.12.0-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for etops_nightly-25.12.0-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 8f8ed144d993421b2725e0cec12df7f9dff4e2081a6984f2aa89f30969629f0a
MD5 7c6f359072649aef5d964c6f54cf58c7
BLAKE2b-256 18d531e62ebebda3809b2a284375be4c38581fa4c30d632df60c5aaf2ec4ff0b

See more details on using hashes here.

Provenance

The following attestation bundles were made for etops_nightly-25.12.0-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: pypi.yml on scalable-analyses/einsum_ir

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

File details

Details for the file etops_nightly-25.12.0-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for etops_nightly-25.12.0-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 79c80ab14a5a039cc959847d9299f78d5488923e34b9245e4dcc5954606f749c
MD5 f58eec1f1c46d6aca3f576e97592170e
BLAKE2b-256 15331d11c22a59adf3b6ccceb42eb2794999ceb88995685a3874b5c3d1a769fe

See more details on using hashes here.

Provenance

The following attestation bundles were made for etops_nightly-25.12.0-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl:

Publisher: pypi.yml on scalable-analyses/einsum_ir

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

File details

Details for the file etops_nightly-25.12.0-cp39-cp39-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for etops_nightly-25.12.0-cp39-cp39-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 227047f78cf0c68228277acef90b22106346728fb9e451e652365187c60913ed
MD5 950573e7cf801716b749286dd98013b6
BLAKE2b-256 b6d8d17dc54b8f2b1240658210b979ee32ef83be0505680c40d86aed9bfc22e2

See more details on using hashes here.

Provenance

The following attestation bundles were made for etops_nightly-25.12.0-cp39-cp39-macosx_14_0_arm64.whl:

Publisher: pypi.yml on scalable-analyses/einsum_ir

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

File details

Details for the file etops_nightly-25.12.0-cp38-cp38-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for etops_nightly-25.12.0-cp38-cp38-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 e3e18f969f8326fc111f3bc31d5a4b376dc5a0ff7c26a2dec837bcd11eeeed3d
MD5 4adda53e74b8524979753f287a8d3192
BLAKE2b-256 1d49c391c3ee29d332bf66bf141c35f839aeed241752aeca885aa98e2c85c055

See more details on using hashes here.

Provenance

The following attestation bundles were made for etops_nightly-25.12.0-cp38-cp38-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: pypi.yml on scalable-analyses/einsum_ir

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

File details

Details for the file etops_nightly-25.12.0-cp38-cp38-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for etops_nightly-25.12.0-cp38-cp38-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 70f240a452cfbf164816c3a6bb26d17ac2dc5e6cc3fbfc8bbeca493bb23e479a
MD5 b059c39e7cbd1f48f45724414e595471
BLAKE2b-256 786718f8e9353015c2fbc88cb73a42d479aa69398c784f76243d50cf2f0cd5fb

See more details on using hashes here.

Provenance

The following attestation bundles were made for etops_nightly-25.12.0-cp38-cp38-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl:

Publisher: pypi.yml on scalable-analyses/einsum_ir

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