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

Uploaded CPython 3.14tmacOS 14.0+ ARM64

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

Uploaded CPython 3.14macOS 14.0+ ARM64

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

Uploaded CPython 3.13macOS 14.0+ ARM64

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

Uploaded CPython 3.12macOS 14.0+ ARM64

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

Uploaded CPython 3.11macOS 14.0+ ARM64

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

Uploaded CPython 3.10macOS 14.0+ ARM64

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

Uploaded CPython 3.9macOS 14.0+ ARM64

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

File metadata

File hashes

Hashes for etops_nightly-26.2.1.post2-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 298d16e5eef7863ba4f38a3f83981c201649ff6342346e790a39d8b813007e0a
MD5 ef682bed5d735819c8b6f7e8b32e9d78
BLAKE2b-256 fa32e8b0af1c83ab31067191d7558c448e311468ba37c2be17d30ccfa1bcad61

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for etops_nightly-26.2.1.post2-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 995294d3c1ec561ed9b66c5109fa22aa0daf9d263729455958ccfbd446b55675
MD5 515161d75a724afa4e2ca7b411878b7c
BLAKE2b-256 9975258f1f654749cf7f0058ceff5509c082644c61719020cf8208f855d40e7b

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for etops_nightly-26.2.1.post2-cp314-cp314t-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 27e6428c1142ed8f0aadb52cb8e4758c2a22dfbf9abfeb9c006d112de4e4653e
MD5 78988829c76de07c4d5a1d2cd00ddaf0
BLAKE2b-256 67c3eaeaee8d5b349ddce348d9300685b8a4e75fc0a2369dc84ca2470b0ee1fa

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for etops_nightly-26.2.1.post2-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 7aaca8a46f8c2d83cb5f3b2b122b33a0520890e64b22e6fb6f155e403d93b1d2
MD5 7aa889f6c76a007ced0b645808286ef6
BLAKE2b-256 e69447d2a45c7de58722ab16d54da33fcd1dfbfe123959d39425178e0c98e080

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for etops_nightly-26.2.1.post2-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 9f6b789459ed41aff91a2c51fb60ef7f3ad97412b8ac709ba7b2e1e5f228d7ad
MD5 781ccb85d1f23ad1c24956b11787fc60
BLAKE2b-256 69d58d5097ab4a1cc9b612c12c1620c302ab2590d2b2a1d6ad6ccef67f2d78ed

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for etops_nightly-26.2.1.post2-cp314-cp314-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 4e429f73ec398b8d5f47a3ff34be8d593ee0f67a915f83fbcb7333d8e08f486f
MD5 12f58fab6c4ef2dd931a1ab6f3ba596b
BLAKE2b-256 e59d8101534d01f07ee415c942c2c8f90c1d43e33b4c56c3b15ce830602a8d77

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for etops_nightly-26.2.1.post2-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 aa82ed870bf6b5bc3f48027c4582e8cd34b5643598a1a8662a2a9ce379268d03
MD5 de0e680d92139a0bfd3c084fb84b9471
BLAKE2b-256 4c02f567c8864d14c54908e98b311fd60dea364bd04db810afb680480e010e21

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for etops_nightly-26.2.1.post2-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 fc75ec0bf9c817913178bd040d06071e02f9123c72fcaa8726786685a082fd36
MD5 995471fd8c7547593b86fd62c26ce35b
BLAKE2b-256 4e0e2271e7af187deedebc7c37362e5de2654ba2aec390f571178a9f99bf2c68

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for etops_nightly-26.2.1.post2-cp313-cp313-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 2279409d898fd190c6605fa4e434aceae3523cbc38b6ebce19d7c36428853069
MD5 92aee74f34bf9b5c73348769dc724c19
BLAKE2b-256 d8836b68f30243cc7028937526477dea112b93f4108c8fb2256340eb4174735b

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for etops_nightly-26.2.1.post2-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 2ad1fde65940cc818b9293f5b9bb76aa3e6e4c77c4b01860a24d73273ecc8aef
MD5 9c82052d356645e4afb0324b248f37ea
BLAKE2b-256 63e9c1eb369e7f1d71bc48e10cdc87ec8267921e7afa79b4d8969c099886f37f

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for etops_nightly-26.2.1.post2-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 933f3beb91317bfeb605e0eff36f4998d7688b68e101791f77c7c158182f1629
MD5 49354bcb6d0e337545029f0dbdc15e15
BLAKE2b-256 8f3bacaa5819fff0d76cc8045121e95e4edfc7f792b4b6ab724685f1bd4e4a78

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for etops_nightly-26.2.1.post2-cp312-cp312-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 5ae731aa0df8396967073022fbae5e293ae617e7a2b98694e941d5c905e939f7
MD5 198b8d5de285c291576e3a6c3a1c3f97
BLAKE2b-256 1e984d761de0fc0bd47b690153551830738d7e59fc45ac58d082a02302124259

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for etops_nightly-26.2.1.post2-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 e45ee95522c7e40ef9f179554692e51659cea1f093b6329d09754529057c7545
MD5 f59baf2789457e6583aee685e1a3cec8
BLAKE2b-256 aa465d3aaed117e1309c70fafbfa9dbc3a94477ba263328dd86297dfd378e1e0

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for etops_nightly-26.2.1.post2-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 042d89c2890d76a342605641de57e8b2dd46eec4a073b846bbe9d964b52830a1
MD5 7df09ec5973bacc8a333bb6ef1fc3ff2
BLAKE2b-256 a57a54c543e6c0bbbaf2b9d34879254abe257f17b9328ec23a24f7d272c36c4c

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for etops_nightly-26.2.1.post2-cp311-cp311-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 62f015c87b943c039b6a95cfadddc19393d2f075e15babe55ae7dfdcebd3b758
MD5 aa355a0abf85375a52a89a857fa9b2bb
BLAKE2b-256 f4157e6b0a1870adc4d5169448aa8fa5792a339da5f98e62d6bf6b12bdc3f969

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for etops_nightly-26.2.1.post2-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 38671656ff517c9563dc75543ab942f64f2d6dda75133ee66e9cd3b5149ea934
MD5 be74b59e4af6026de7561358ed550f64
BLAKE2b-256 402067d8611409710239bc20985884a0c69aaaba56e8c919447edf4a43a6462f

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for etops_nightly-26.2.1.post2-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 66577a182979bec44eb93cbd2849c48275a48286712e6a81779d64872bdc8c6e
MD5 12112e793b08a2f2dad110b82d5f40f6
BLAKE2b-256 61c9405ee923591f621ad5b8f45a1933566940567a1e16174668e49e58e87a39

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for etops_nightly-26.2.1.post2-cp310-cp310-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 c93da34bcf85781a0a9bd32462af255312ad93265cc7a3631985b643a05f5731
MD5 b7295d6da93891f59236f8d403adeebb
BLAKE2b-256 69ad7e1fbde0393e9878cbc40c8a760376bc9feb0c1f8178342127f19c294584

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for etops_nightly-26.2.1.post2-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 482277bf50b00e32d5b0f45620960277b234b5b94c8c3ad25714d2347ed286ce
MD5 f38d5fcc6301e25c8435e3b36ff3ee94
BLAKE2b-256 b5c29dcf7eb16320f3d0d2ee708be2e46ee2f221c5cec34b9c987a787d08be9a

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for etops_nightly-26.2.1.post2-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 b2504edc80942e3535a4627712d3ebc0e12feef7b7500a660f112c31c3c58a68
MD5 a5522d6d371b6fd03e6a345f25356633
BLAKE2b-256 aea2bdd07c523f4b4d450e00f35eb7bd7249c6995bf6d5daa0e8302dd47842f2

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for etops_nightly-26.2.1.post2-cp39-cp39-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 d5f2df057e5d161b4990911ad9878708e72f29fce9cf3f82e02d4e1d206ce237
MD5 6f500be0a865cfe3965be140a7a7460b
BLAKE2b-256 f6751d90217942080f33b92e072ae18e570013bda95ca3a9172bd69378575170

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for etops_nightly-26.2.1.post2-cp38-cp38-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 f72488937bce1ca1d874266fd372d411d360e2f2f7ee40a67f079d39d5223d2d
MD5 148ad868d1fd9e84b88f75d4b5aa4a42
BLAKE2b-256 b60669a5a53ed7e664d7dd7115313c51d9ae0c40d06fcadceb119d00c8adb755

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for etops_nightly-26.2.1.post2-cp38-cp38-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 2426616580513b98d9049181cc28ccd41cdf73350e363f4b21e1f6336bb13205
MD5 cc0413277eefbfbf55d76f18c3c66612
BLAKE2b-256 c9fe1f9178e19a80960d6fcd75834324c6dec90cbcd7394a52e292b99648301c

See more details on using hashes here.

Provenance

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