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-26.2.1.post3-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-26.2.1.post3-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-26.2.1.post3-cp314-cp314t-macosx_14_0_arm64.whl (733.2 kB view details)

Uploaded CPython 3.14tmacOS 14.0+ ARM64

etops_nightly-26.2.1.post3-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-26.2.1.post3-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-26.2.1.post3-cp314-cp314-macosx_14_0_arm64.whl (723.4 kB view details)

Uploaded CPython 3.14macOS 14.0+ ARM64

etops_nightly-26.2.1.post3-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-26.2.1.post3-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-26.2.1.post3-cp313-cp313-macosx_14_0_arm64.whl (723.0 kB view details)

Uploaded CPython 3.13macOS 14.0+ ARM64

etops_nightly-26.2.1.post3-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-26.2.1.post3-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-26.2.1.post3-cp312-cp312-macosx_14_0_arm64.whl (723.0 kB view details)

Uploaded CPython 3.12macOS 14.0+ ARM64

etops_nightly-26.2.1.post3-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-26.2.1.post3-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-26.2.1.post3-cp311-cp311-macosx_14_0_arm64.whl (721.5 kB view details)

Uploaded CPython 3.11macOS 14.0+ ARM64

etops_nightly-26.2.1.post3-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-26.2.1.post3-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-26.2.1.post3-cp310-cp310-macosx_14_0_arm64.whl (720.1 kB view details)

Uploaded CPython 3.10macOS 14.0+ ARM64

etops_nightly-26.2.1.post3-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-26.2.1.post3-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-26.2.1.post3-cp39-cp39-macosx_14_0_arm64.whl (720.2 kB view details)

Uploaded CPython 3.9macOS 14.0+ ARM64

etops_nightly-26.2.1.post3-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-26.2.1.post3-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-26.2.1.post3-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for etops_nightly-26.2.1.post3-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 1271172aaee5f6c5f32e32dcd6665502b891acb2a65051b9e56cde4d423b7ecc
MD5 6fe47ec307e9847df58237c188c8c1a3
BLAKE2b-256 f0f28d0eee24738d9dcab6d7a6aa67cf06ef5132c1f43b28c7fccd64dbc82f05

See more details on using hashes here.

Provenance

The following attestation bundles were made for etops_nightly-26.2.1.post3-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-26.2.1.post3-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for etops_nightly-26.2.1.post3-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 58befcd5705dfa3182835f17c5aa4fff9a817d6bfceff108663df077e18199ea
MD5 47ce13c10e8cc508637dfe9072af84c4
BLAKE2b-256 3ef30be6b9304b754eab15010b09c37622f9916c5100f879b10ec5e4befa5658

See more details on using hashes here.

Provenance

The following attestation bundles were made for etops_nightly-26.2.1.post3-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-26.2.1.post3-cp314-cp314t-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for etops_nightly-26.2.1.post3-cp314-cp314t-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 c7e04fc727935261b18ba81dbe9340fd10ea696e6c14e7fd5675b266ba62e86e
MD5 3d2c5fb21bd31f770846a414863628a9
BLAKE2b-256 e8a3ad1dfb2284e96fd01a1af3feb4cf5ec34f1187315071a2931d517606c5be

See more details on using hashes here.

Provenance

The following attestation bundles were made for etops_nightly-26.2.1.post3-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-26.2.1.post3-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for etops_nightly-26.2.1.post3-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 9770af438e4f83c02c8c49459b6537dd152a9e80e602d45d2e6ff2285e43680c
MD5 86aaf1134fe1c1152a7d28ff733410c9
BLAKE2b-256 58cd81c0cab969ddbe50bca04fc34f0bab709675384cc325e25ca6aba56993a2

See more details on using hashes here.

Provenance

The following attestation bundles were made for etops_nightly-26.2.1.post3-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-26.2.1.post3-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for etops_nightly-26.2.1.post3-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 065069ded7404fc06e88749c474631d89ee55aa2d4f2a4811da10b363c640ca0
MD5 ef086c8b5ab9927338cd3f7669ac6994
BLAKE2b-256 5fd10ae3fa72665a2134767911fa635e8157fc5c174196f0983dfe1d07c6a7d2

See more details on using hashes here.

Provenance

The following attestation bundles were made for etops_nightly-26.2.1.post3-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-26.2.1.post3-cp314-cp314-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for etops_nightly-26.2.1.post3-cp314-cp314-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 7c90d4c69546c2ebd3b81b6f5278e3b6b53f4ebe714662bc81b9361b98f0b08f
MD5 56003983874cd448d42325b60a6ab428
BLAKE2b-256 0cb014b4ce3f6854b3b86f8670c37644a32a1ae8b4fd2ca39427428e14784d7c

See more details on using hashes here.

Provenance

The following attestation bundles were made for etops_nightly-26.2.1.post3-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-26.2.1.post3-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for etops_nightly-26.2.1.post3-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 f9281e9a42e98d431cf6e31edf2a47d9f4bf7d36ea4abaa2440d0e06b42ee622
MD5 934682ace15b50f5281c66252012daf2
BLAKE2b-256 98991d3b2803a70e1f5f88f7a01716087e7ba8c8540e73ba4f24caf981b684a5

See more details on using hashes here.

Provenance

The following attestation bundles were made for etops_nightly-26.2.1.post3-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-26.2.1.post3-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for etops_nightly-26.2.1.post3-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 10b4af26808dd328d52ead4b4f10f9614541b34aa492ab83ed7b0ca4ed097afc
MD5 8c6a1a7152fefb3aa609a3d9de5d59bb
BLAKE2b-256 6ecb7865a6b44133793037a609b310ff3320be0ba3ad6101fdacb309c54dd93d

See more details on using hashes here.

Provenance

The following attestation bundles were made for etops_nightly-26.2.1.post3-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-26.2.1.post3-cp313-cp313-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for etops_nightly-26.2.1.post3-cp313-cp313-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 9515e59e6a3f31ee5ef81f926270b264134fd1d7d15a7646add24f5c3a5c218e
MD5 bc279b7c1e05f01f97693dc1fef697cd
BLAKE2b-256 3538d7b29dda7d8600e3fc2560e152c2a5a88f444137b020e39163f9236295c0

See more details on using hashes here.

Provenance

The following attestation bundles were made for etops_nightly-26.2.1.post3-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-26.2.1.post3-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for etops_nightly-26.2.1.post3-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 334262601f80a4d968d6028a77ce66c5f29396146b521e363925de9538f8198c
MD5 10b1c95ef287abf5aaf1921c94f824a8
BLAKE2b-256 ee376983692581dd43d8d7baa4fd26a91f98ea84a957d00b5ac77a74f6d81d81

See more details on using hashes here.

Provenance

The following attestation bundles were made for etops_nightly-26.2.1.post3-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-26.2.1.post3-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for etops_nightly-26.2.1.post3-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 921048452d0ae17887198fc99e659628900bcb3db4a394c66c963a3d728394d6
MD5 7fd568543efe4eececed4e44774055b0
BLAKE2b-256 7349975ee177d96b038093e8d66027fcba3099124a9fd7d63bb1d406cac1efb8

See more details on using hashes here.

Provenance

The following attestation bundles were made for etops_nightly-26.2.1.post3-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-26.2.1.post3-cp312-cp312-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for etops_nightly-26.2.1.post3-cp312-cp312-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 ab11c86389d65b54817d55ebbebb0c100bd656738111deed0a0522a3e20b15e9
MD5 3d50d751f8c672458034c2dc6e086665
BLAKE2b-256 a1004a53bae401c14eefc86378adc96a44417bf685f073a81c4d63d70f11d9ef

See more details on using hashes here.

Provenance

The following attestation bundles were made for etops_nightly-26.2.1.post3-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-26.2.1.post3-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for etops_nightly-26.2.1.post3-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 3e79b602f8c96d236fb1fdf0acf91e1f55e712aa0fa1ab6e39bc27b0fa240270
MD5 541673b47abade6246f66b4cf633828b
BLAKE2b-256 05b76ef985bece03ddfb61a035e11dff745ef763210f8091efd0f6e86d4e19ed

See more details on using hashes here.

Provenance

The following attestation bundles were made for etops_nightly-26.2.1.post3-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-26.2.1.post3-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for etops_nightly-26.2.1.post3-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 bc1ae9973f9b419c586697b3bad152c44c34c1ba55d060555c22cd0160345287
MD5 582fb924b22a3e593b22d1dd0ec640c3
BLAKE2b-256 955b33e7cd66a5e219a290c16353d35b498c0364b49a893404c4a90f9aba978c

See more details on using hashes here.

Provenance

The following attestation bundles were made for etops_nightly-26.2.1.post3-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-26.2.1.post3-cp311-cp311-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for etops_nightly-26.2.1.post3-cp311-cp311-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 c204e9542426e5de9a2b49de5c8f772a5ccbd13d99b427e81f4d480c0ce888a1
MD5 8838b093fafe698c743c9f1bd5d96fc8
BLAKE2b-256 79e0b3b8c96d39bf5eb93cb547fdd0c377f32f664a810e967efb29694ab18d72

See more details on using hashes here.

Provenance

The following attestation bundles were made for etops_nightly-26.2.1.post3-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-26.2.1.post3-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for etops_nightly-26.2.1.post3-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 a43ae2a0a31c31a31b24002789bc545fe1638c006b1548a6f94e0d9421cf027e
MD5 2cb8f2338ac60ef7cd80db95e8e2feea
BLAKE2b-256 13f470e8e425222cf5e55ea4919371c62599ebccd5151d18572c5c8b4c0a0e98

See more details on using hashes here.

Provenance

The following attestation bundles were made for etops_nightly-26.2.1.post3-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-26.2.1.post3-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for etops_nightly-26.2.1.post3-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 7a57934df21524d5dfa30fe92f3af8c3116d2c958d31aa621d70e09b50d8fa95
MD5 113df14da507ced4b042b1bc8a6bf8ee
BLAKE2b-256 46c64e3bfaf248b704fe92366293cd2d7b500460c533fd506fbb3e8497a5a403

See more details on using hashes here.

Provenance

The following attestation bundles were made for etops_nightly-26.2.1.post3-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-26.2.1.post3-cp310-cp310-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for etops_nightly-26.2.1.post3-cp310-cp310-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 7a7e14839fa7e128943bfacaad65ce66865c2ed38eb49fdf73188d9547f20fac
MD5 902361ae854aa6cd70d60f8cfe301086
BLAKE2b-256 310d4dcd334b9d9ef62e7ed44124d5510e358c5bc1f80a448b808eca909838c9

See more details on using hashes here.

Provenance

The following attestation bundles were made for etops_nightly-26.2.1.post3-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-26.2.1.post3-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for etops_nightly-26.2.1.post3-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 75cd40e315bfb3bc98505904891edba6b047c5aa99f69281fadad46bb73a847c
MD5 e9224ba6d63ce6534f538ec04ca591ac
BLAKE2b-256 6c8cbda84c7bdbf50be01709b5b91e319e84decaa444c1e90b6e44f720464c9d

See more details on using hashes here.

Provenance

The following attestation bundles were made for etops_nightly-26.2.1.post3-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-26.2.1.post3-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for etops_nightly-26.2.1.post3-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 90c3724b493c153a6a15a7aa871b1c7b0e1d5f01c83c7c724d1da13b3c47bef7
MD5 2bf12ba2e51464ab9e09a5f27236e203
BLAKE2b-256 f5472e503e111f3473a6569f598a7ba2e481e6f1df1ecc92fbf57ed3303ebf53

See more details on using hashes here.

Provenance

The following attestation bundles were made for etops_nightly-26.2.1.post3-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-26.2.1.post3-cp39-cp39-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for etops_nightly-26.2.1.post3-cp39-cp39-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 fd9437685bf378a6267c32154666b235fc270c09f658af1a5038b31e789df90b
MD5 89d9d71883b3abf3809ca00cfa5f4bca
BLAKE2b-256 1cd8ded0478a350d8558d2388c05bb43dbb8dbd1200013e05fe38d15fab184a4

See more details on using hashes here.

Provenance

The following attestation bundles were made for etops_nightly-26.2.1.post3-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-26.2.1.post3-cp38-cp38-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for etops_nightly-26.2.1.post3-cp38-cp38-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 6fcdab89550fa796986ed2206bba99db641f254585eee2bc5bf5c034c8f34e71
MD5 0d48e2657936cb8ac629d2f4eed4987a
BLAKE2b-256 e157fe678648bd5c0b306a2d58b33022f649a212d885a44932628a846c554efe

See more details on using hashes here.

Provenance

The following attestation bundles were made for etops_nightly-26.2.1.post3-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-26.2.1.post3-cp38-cp38-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for etops_nightly-26.2.1.post3-cp38-cp38-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 82f1a7b3e79af04dbf66e4282e13ebf09c3ef49a3382dbadf155872209673921
MD5 f0641b75f3e677edecd0383524ced1cb
BLAKE2b-256 0de1e1aefcae1ba3f419041d9a0c6eb5cea3c66428fb56928218db0649deb028

See more details on using hashes here.

Provenance

The following attestation bundles were made for etops_nightly-26.2.1.post3-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