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

Uploaded CPython 3.14tmacOS 14.0+ ARM64

etops-26.2.1-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-26.2.1-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-26.2.1-cp314-cp314-macosx_14_0_arm64.whl (716.6 kB view details)

Uploaded CPython 3.14macOS 14.0+ ARM64

etops-26.2.1-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-26.2.1-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-26.2.1-cp313-cp313-macosx_14_0_arm64.whl (716.2 kB view details)

Uploaded CPython 3.13macOS 14.0+ ARM64

etops-26.2.1-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-26.2.1-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-26.2.1-cp312-cp312-macosx_14_0_arm64.whl (716.1 kB view details)

Uploaded CPython 3.12macOS 14.0+ ARM64

etops-26.2.1-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-26.2.1-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-26.2.1-cp311-cp311-macosx_14_0_arm64.whl (714.9 kB view details)

Uploaded CPython 3.11macOS 14.0+ ARM64

etops-26.2.1-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-26.2.1-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-26.2.1-cp310-cp310-macosx_14_0_arm64.whl (713.4 kB view details)

Uploaded CPython 3.10macOS 14.0+ ARM64

etops-26.2.1-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-26.2.1-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-26.2.1-cp39-cp39-macosx_14_0_arm64.whl (713.4 kB view details)

Uploaded CPython 3.9macOS 14.0+ ARM64

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

File metadata

File hashes

Hashes for etops-26.2.1-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 f53504c7b830821081fe16f582658b450f86fe36c137d49e9fa95d16718dad3d
MD5 71fe0cb70bf445433ace45fc8b869e9a
BLAKE2b-256 99104e532c03dacbc286e155883be3cfad73e81119b919cc7b1d337fa00899a4

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for etops-26.2.1-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 4eda5a26dc74030ebb14ebfee2ddc527d4856741c145e5c2cb1a39329fbd908f
MD5 5d0244099e74c531eec090a3bbc5072c
BLAKE2b-256 64152e720b03d77f9765d513e2136794d24ad680c7d1d8f064dfa8b68c1de261

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for etops-26.2.1-cp314-cp314t-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 8b0b60ae4cbbbcb226f7434e45d77939bbd38b6e583f2353dae7cfe500cfe4b5
MD5 77bd21dca6c8741a721d478f9d496cbf
BLAKE2b-256 1538c1136666ab5ae58d8f9417d1546ae0416acfd20d76fa238dc687bd82748b

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for etops-26.2.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 4e477b3c5ed33b8780e7ca856a9e63e4ac9a7a068711310c3affc17a66a84cf1
MD5 907f50d10efe16776d70594b7c9496c5
BLAKE2b-256 cca415bbdb3bf3de4cac6ff2ace46fe9b157ee66f3754ea160cf4e06df26a30f

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for etops-26.2.1-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 da44889ad22e91ff01d8d06c72db11d6bb01fa875df3522f281836c149e2cad7
MD5 fb24f41cbcd091fe0b3e77b14c8a7a70
BLAKE2b-256 7b4eea98a3eda6665e0aa6569e0b7e5fc44c41fc5e1c7b7dbd59e668787405c5

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for etops-26.2.1-cp314-cp314-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 eb1fbaed830036616784666bc70e8b34f9ed21dbaaa275c2ed736781daf9bc6a
MD5 7d3b81e936b4980a5b91f7821def9f6e
BLAKE2b-256 796965af1aca1ea311f38e790700cb315826888f091a8d38284b073e0afdcf59

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for etops-26.2.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 07e228058cb338d02781b3c6b8c464a6894468d84def3783ae41b0e2cf00a1ed
MD5 5c3428d1c474d48810cab125060a92f5
BLAKE2b-256 156cc6d9f5c4d5c22a1b2773043d336df9e676d1f91e031bb448428e74edb725

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for etops-26.2.1-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 3ae05d6efaa583f55fd3dd840aefe8b3740cb05f218f37970f7254800bfae0fd
MD5 96c4049917acde3edcc080b7c578dd03
BLAKE2b-256 cdc1b812c1e7660524f4fc3f87e21b69f6f0f0fefccc7845e8b457c25f01e902

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for etops-26.2.1-cp313-cp313-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 beda3bcfccbf8bac00b24c4091fb253f487597e18729073458ae673f7230dad3
MD5 d095fb5f406d9af3b7e18c12e99e8fc3
BLAKE2b-256 eb4370f15995fd9ebd5e50032943b7702edc35a083c32fa281e579b6761c7ce0

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for etops-26.2.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 51dd98bfa26f04eb0ff131d0d5cfb61b76d95ac985471a7087a224e4e380100b
MD5 22939499e822063e8d232c01bfc9b2e3
BLAKE2b-256 f36a24bf5e31fd05dad1692d6f8ee251e7a2d54a31fb66ba1c93aef0f2dd969e

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for etops-26.2.1-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 e3028d4c9b0ab52a1bd901acdcdc01134c9f4b4de857381fb91807a814d5c2b4
MD5 ca3156e3e1f8d42e39343e55405fc356
BLAKE2b-256 003bc6ce2316cdd12f0d04cebb9f83cd5f78d77858a421e19102749a04743c24

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for etops-26.2.1-cp312-cp312-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 5ad6c1d96c1ebebffca7087f7cc98eda125812773f59717a093739fdd30a9e18
MD5 329d5bb525fe21a99200a05e9c64738f
BLAKE2b-256 5923d4184185ffb32475f21ff841c5b792b2bb605a6577f33ef2ad8fded0a9e3

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for etops-26.2.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 6ac0302e648f123e932ce43c9060a4bf11aa907116b116638ded714239a7cd4d
MD5 f57cb8cce6c1b7ece350561abe4aa5da
BLAKE2b-256 c36c7543122363cc9d5426b8c746aeb86a22c85095d7cb6eb6a47b78d5c6c807

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for etops-26.2.1-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 94bdef897c3910edc268382e87a29ac0b043e7f00943a637f16fcf181613299e
MD5 eaefae093c95fa6f3f71e2590dc32ddf
BLAKE2b-256 9dc3ba71e0e6411e9426e8a21050753f271ab55ac79e0d957721e342568a3d43

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for etops-26.2.1-cp311-cp311-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 d27040d5760f73dff37212071c0359083b669cae9a1cb20d9f0cc65567a639f5
MD5 bfb5a3d26f7ce652b13619549b480a21
BLAKE2b-256 e8fe59ba5ef54901ccd5e3a1562e5b94e1583c69c2bfc9594eb181fa289ac5d2

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for etops-26.2.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 ea30c700476f762e283b23483be815b333e43170cf8480399eaf167ff8204e67
MD5 ab2dcb2aabb94f388c2a90371a8d8b4b
BLAKE2b-256 34740cd528e49b2e7084c6047f17583e121cc91ad4f4ac894dbd35939aacdcc0

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for etops-26.2.1-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 b6cf45bad50dc554979c720941aa0201498b264ba599a17aad3fa59f7970a45b
MD5 477b849469eaeac7dbe9773376aad7d8
BLAKE2b-256 9976923f9cf8bf1c869d4d899504ecf96a34a9c25c1208cfa61bdd95a6de7c6b

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for etops-26.2.1-cp310-cp310-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 d682314c4f0da860a28f33353d247118b34470bf2bac6f4409cf29dd8876e868
MD5 f22413dacbaa959ac019807c36cf8699
BLAKE2b-256 a60fab5fe927bd56567e4357ab7b9267d66ac46d8285f2aa05a6cdaf33708222

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for etops-26.2.1-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 e6e2c51e2089e83bc5dec4faa3d3d24cb198a0a0208a57de0683c953fc67c233
MD5 3601a477eb59f01dc8a21357150fadc4
BLAKE2b-256 17cf38a497aa254660250be4b870f09a9a7e90f99749e7e45fc7b7d4045cb447

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for etops-26.2.1-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 a09f648f6d963e121f8946dcaf2ffc8d97b443e8b6bf77edc252376b98c489d8
MD5 bf6bdb07fc1ded0a46fe861b74e1c4e6
BLAKE2b-256 1c55330a1d3b6aa060e9532f17ea5a9b523c743409e4e644486c79d4699dd163

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for etops-26.2.1-cp39-cp39-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 142fa58adddf1fc62673ea2f1879ceb8d4f55253d037fbbf704b14610d43f1fc
MD5 9246c896e8bc771afcb41d17397cdb36
BLAKE2b-256 b9e9bf29d40cbdcde80a4ab1415ce97b11c8057844e8f4bc5f997ef3204a70ac

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for etops-26.2.1-cp38-cp38-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 6de0b2d4fc570f5655d0ba0dc21ab18c672f859155216da93dcfb38a1ed96c41
MD5 85f1e330d4c7589af718cfdedbbf6644
BLAKE2b-256 2bd3f906bd8fbb0a90fb52c130572c23512723f1cf782eccf9739dcc8242b3f4

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for etops-26.2.1-cp38-cp38-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 36dacf6e08252fd3e523839e40d99bf00a8beb781ccd1ccfa58d958e85bd1b3b
MD5 37a91287d4b01a0a02db5e208a58f90d
BLAKE2b-256 4316e17aef8255a691aa64158f7dd50b819c2544b33413b94ea932ba63b8f786

See more details on using hashes here.

Provenance

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