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.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (1.2 MB view details)

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

etops-26.2.0-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl (1.2 MB view details)

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

etops-26.2.0-cp314-cp314t-macosx_14_0_arm64.whl (725.1 kB view details)

Uploaded CPython 3.14tmacOS 14.0+ ARM64

etops-26.2.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (1.2 MB view details)

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

etops-26.2.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl (1.2 MB view details)

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

etops-26.2.0-cp314-cp314-macosx_14_0_arm64.whl (715.7 kB view details)

Uploaded CPython 3.14macOS 14.0+ ARM64

etops-26.2.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (1.2 MB view details)

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

etops-26.2.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl (1.2 MB view details)

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

etops-26.2.0-cp313-cp313-macosx_14_0_arm64.whl (715.2 kB view details)

Uploaded CPython 3.13macOS 14.0+ ARM64

etops-26.2.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (1.2 MB view details)

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

etops-26.2.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl (1.2 MB view details)

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

etops-26.2.0-cp312-cp312-macosx_14_0_arm64.whl (715.2 kB view details)

Uploaded CPython 3.12macOS 14.0+ ARM64

etops-26.2.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (1.2 MB view details)

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

etops-26.2.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl (1.2 MB view details)

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

etops-26.2.0-cp311-cp311-macosx_14_0_arm64.whl (714.0 kB view details)

Uploaded CPython 3.11macOS 14.0+ ARM64

etops-26.2.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (1.2 MB view details)

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

etops-26.2.0-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl (1.2 MB view details)

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

etops-26.2.0-cp310-cp310-macosx_14_0_arm64.whl (712.4 kB view details)

Uploaded CPython 3.10macOS 14.0+ ARM64

etops-26.2.0-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (1.2 MB view details)

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

etops-26.2.0-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl (1.2 MB view details)

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

etops-26.2.0-cp39-cp39-macosx_14_0_arm64.whl (712.5 kB view details)

Uploaded CPython 3.9macOS 14.0+ ARM64

etops-26.2.0-cp38-cp38-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (1.2 MB view details)

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

etops-26.2.0-cp38-cp38-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl (1.2 MB view details)

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

File details

Details for the file etops-26.2.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for etops-26.2.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 760d7576c5ea20ddc2eb90a7d0c10932b2d9124c3e5baa7331807773418eaa76
MD5 f4e9c5d8def1ba6606cc06714934ecdf
BLAKE2b-256 fc2d2c2895a9b32eff880525bc88547ec432f8c42b3593f728cf8251edf3c70a

See more details on using hashes here.

Provenance

The following attestation bundles were made for etops-26.2.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: pypi.yml on scalable-analyses/einsum_ir

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

File details

Details for the file etops-26.2.0-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for etops-26.2.0-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 7a66e1800a48f4377f173c238c652f73d8b65fc0ec1bef1c1f86d9e493bbe095
MD5 e60bdd46070143b631dac8087ad5e8b5
BLAKE2b-256 76455bb8fb008fc55d95b7aa383ebf5ad0f4b44397da66348d9c630866c02f2e

See more details on using hashes here.

Provenance

The following attestation bundles were made for etops-26.2.0-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl:

Publisher: pypi.yml on scalable-analyses/einsum_ir

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

File details

Details for the file etops-26.2.0-cp314-cp314t-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for etops-26.2.0-cp314-cp314t-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 bc1c7a7a2f649ab153e565d5a0062cb0296f16d80afebd812be6847c5eb115f6
MD5 bc1575aea7c91a3251ded1738d7b37f9
BLAKE2b-256 a76a8d2584f48f59b172302d103d5693f0079fb62c492e76b2a4ce3fb9c52f54

See more details on using hashes here.

Provenance

The following attestation bundles were made for etops-26.2.0-cp314-cp314t-macosx_14_0_arm64.whl:

Publisher: pypi.yml on scalable-analyses/einsum_ir

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

File details

Details for the file etops-26.2.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for etops-26.2.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 ebb18e9d1a612dab8ae1c931d084e1f212c38d04f8518795ed742e2db05ee845
MD5 633b91bdf446415c1a9b8f41e62cb86b
BLAKE2b-256 4f58c45f294a16a7b94d64a89bc190f9bd2a817dc2c77962f9f89ebef1186f63

See more details on using hashes here.

Provenance

The following attestation bundles were made for etops-26.2.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: pypi.yml on scalable-analyses/einsum_ir

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

File details

Details for the file etops-26.2.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for etops-26.2.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 6e096e1b35330eba359c5d5832c196a1c282a1ceb3d6337d74f82901566af3aa
MD5 64e1e2dad5cd918af45bd8c4dde7cb26
BLAKE2b-256 c92138ac8f0603bb8420e88fb86bd0d223c876e2fd479bda6b1d1eedc1753ddc

See more details on using hashes here.

Provenance

The following attestation bundles were made for etops-26.2.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl:

Publisher: pypi.yml on scalable-analyses/einsum_ir

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

File details

Details for the file etops-26.2.0-cp314-cp314-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for etops-26.2.0-cp314-cp314-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 e58217c7eded635572a2f023131fa0dccc0694acb9be0a1d3669a8797748621e
MD5 ee2b9c3c66c373f30b0dbc9c30edba05
BLAKE2b-256 df7e5df44630029ed8e893da9b27f9e780a8e56b4b7371bb60b3bb1cc6c28fb1

See more details on using hashes here.

Provenance

The following attestation bundles were made for etops-26.2.0-cp314-cp314-macosx_14_0_arm64.whl:

Publisher: pypi.yml on scalable-analyses/einsum_ir

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

File details

Details for the file etops-26.2.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for etops-26.2.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 b3ddba79d0b3a8234361d2b63f182804c334888a9f8a5ac984da70d099835ed6
MD5 52d9597d28d8daea427dcb091f75037e
BLAKE2b-256 07e534e4f472d31c07dd9251263a77659374ba65e909ef04379dea052c8a1125

See more details on using hashes here.

Provenance

The following attestation bundles were made for etops-26.2.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: pypi.yml on scalable-analyses/einsum_ir

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

File details

Details for the file etops-26.2.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for etops-26.2.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 550362cdb7ab8cc18d91a819fdea1f8ea4e519911aca4566cb86c92067703db7
MD5 0c643a0a94ea8897007094e6a035a010
BLAKE2b-256 d07878b5162bda25339ea45d6c713a29a8f15afd06ccbf719a655d33fc9e7d78

See more details on using hashes here.

Provenance

The following attestation bundles were made for etops-26.2.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl:

Publisher: pypi.yml on scalable-analyses/einsum_ir

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

File details

Details for the file etops-26.2.0-cp313-cp313-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for etops-26.2.0-cp313-cp313-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 f177ace3f60d18ee4ce2dfa8ddb5df3fa75baf94b5a733d3928227f83e17accc
MD5 bf752b3521e1558de123bbb8b3567eb5
BLAKE2b-256 47d2599b6d7a66a61b973c1d05bbde35012c7c79a8ad7cbca7381f4663867e1b

See more details on using hashes here.

Provenance

The following attestation bundles were made for etops-26.2.0-cp313-cp313-macosx_14_0_arm64.whl:

Publisher: pypi.yml on scalable-analyses/einsum_ir

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

File details

Details for the file etops-26.2.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for etops-26.2.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 8033f0fb9c1052b6ea9ca188f3b15ef02c18c8c036258987f093a54f0260f9ab
MD5 59095c9c148f941a462bb00cc3b221ee
BLAKE2b-256 8327b8a6f6bb3644ff1e69127c3b047c6ff049d888c454aace97e889029c6de8

See more details on using hashes here.

Provenance

The following attestation bundles were made for etops-26.2.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: pypi.yml on scalable-analyses/einsum_ir

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

File details

Details for the file etops-26.2.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for etops-26.2.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 30233724de6bf02a76e3e472cdc975421dd6c324bc148b74254436414e2b74a8
MD5 f79a3fd280c0c3c09c561f6a01e1c689
BLAKE2b-256 9097675c81e87c8864b649e696c5ee099a95e34a827fc1b39e39ccb5b88c9dbf

See more details on using hashes here.

Provenance

The following attestation bundles were made for etops-26.2.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl:

Publisher: pypi.yml on scalable-analyses/einsum_ir

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

File details

Details for the file etops-26.2.0-cp312-cp312-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for etops-26.2.0-cp312-cp312-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 73a59b5a1198cc57a8d85686ae0724ecdd25e6acbb7a44e378b30a89115a6445
MD5 8bf598273fcb5a662f15796a0eccb463
BLAKE2b-256 f9c16698facb25588e340dd727f79a77435d853d430a5d878d4acc93df4cef15

See more details on using hashes here.

Provenance

The following attestation bundles were made for etops-26.2.0-cp312-cp312-macosx_14_0_arm64.whl:

Publisher: pypi.yml on scalable-analyses/einsum_ir

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

File details

Details for the file etops-26.2.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for etops-26.2.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 67b5205aeb5a1246b002018cf1aba96dc8e85022feed1517fb9f55f84a26446f
MD5 4a895ae5a36e994830df7c5bb307b77d
BLAKE2b-256 045cf9337da9512588785db32f66bc51a34127c0f091016115aaeec5b776497c

See more details on using hashes here.

Provenance

The following attestation bundles were made for etops-26.2.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: pypi.yml on scalable-analyses/einsum_ir

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

File details

Details for the file etops-26.2.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for etops-26.2.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 196a5e3caba7297c591a46658d8953a8efe35159f1e92041f9b2df4873debcd4
MD5 2244483436843f37bb7b2ffa24131511
BLAKE2b-256 8160787ed8221f0c4846580ec71d256c08b8485375adb64c0cab2db84ecb616f

See more details on using hashes here.

Provenance

The following attestation bundles were made for etops-26.2.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl:

Publisher: pypi.yml on scalable-analyses/einsum_ir

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

File details

Details for the file etops-26.2.0-cp311-cp311-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for etops-26.2.0-cp311-cp311-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 040eb01e5e5baaf7d435c7a35c967f123f1a5e92c2227914ef1804b144d761f5
MD5 d4d18089aa2c9b7b1358d6faf31e337a
BLAKE2b-256 83d7e45758b09a984ff6336ed91f0d2472ece041f16ea0baf43fe9db00a6ac7a

See more details on using hashes here.

Provenance

The following attestation bundles were made for etops-26.2.0-cp311-cp311-macosx_14_0_arm64.whl:

Publisher: pypi.yml on scalable-analyses/einsum_ir

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

File details

Details for the file etops-26.2.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for etops-26.2.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 a610d0b5ec2d070a5e57d7818bbd38a991188642dcf60bd46935c0407e34672e
MD5 b4ffba1bc5636e0f8b92d387beabff7e
BLAKE2b-256 1d993ada70585b3b97a0717767182577825b11a16daaa210832465bd406d5f78

See more details on using hashes here.

Provenance

The following attestation bundles were made for etops-26.2.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: pypi.yml on scalable-analyses/einsum_ir

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

File details

Details for the file etops-26.2.0-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for etops-26.2.0-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 b384bb5259bd44a9976d4dfd08e232af6a34fba9f2ffbf56cb3408f8d4baad3a
MD5 b92a2a8260d7d1431fb1a47c7ad4e82b
BLAKE2b-256 14f71e7460b6f4a09eaeb77afc3178d71d603ec387ef8a757f320d5bff9b4ae1

See more details on using hashes here.

Provenance

The following attestation bundles were made for etops-26.2.0-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl:

Publisher: pypi.yml on scalable-analyses/einsum_ir

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

File details

Details for the file etops-26.2.0-cp310-cp310-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for etops-26.2.0-cp310-cp310-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 71a463dddc55c327329a6f74f8fedcdb6fb33c5daaa2e7b41fdf30935ecb40a9
MD5 c81233e597a2f8b67df9737e604009d6
BLAKE2b-256 6df18f86cac7cbcf297f16b3360c7b69cb202df4009fa3ab9a162742166d0d62

See more details on using hashes here.

Provenance

The following attestation bundles were made for etops-26.2.0-cp310-cp310-macosx_14_0_arm64.whl:

Publisher: pypi.yml on scalable-analyses/einsum_ir

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

File details

Details for the file etops-26.2.0-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for etops-26.2.0-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 0cd0a81e0423fedd266927ab19c6d2027e03a7ea2b2e990057545fb1bbfd99fd
MD5 8faf534d169066a31343b79947f82f05
BLAKE2b-256 7316f060837cf7b56b0359d6d8e5dd746316993b20bd02bf376356455a541811

See more details on using hashes here.

Provenance

The following attestation bundles were made for etops-26.2.0-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: pypi.yml on scalable-analyses/einsum_ir

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

File details

Details for the file etops-26.2.0-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for etops-26.2.0-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 074ab6d95844bce65a2b320ada8d161cbb295323be4aed1c0b8746c7484a7dd6
MD5 3a3ed63a910bca907fa9d311dfd12778
BLAKE2b-256 741f3bd69c5e6bb693d1a871c09331ab2c05d5384c2a9b33f5cf95fbf59ed281

See more details on using hashes here.

Provenance

The following attestation bundles were made for etops-26.2.0-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl:

Publisher: pypi.yml on scalable-analyses/einsum_ir

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

File details

Details for the file etops-26.2.0-cp39-cp39-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for etops-26.2.0-cp39-cp39-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 36b2df1eb5d70496a9d48759e6b3520e7d6c4410d7077c77d1fe9525cd359434
MD5 2831fc5f217e2a614b31dbd46e212077
BLAKE2b-256 0319f19f9585f22030782bc6038ef00fa189903466fb65078d6505962c5b6e07

See more details on using hashes here.

Provenance

The following attestation bundles were made for etops-26.2.0-cp39-cp39-macosx_14_0_arm64.whl:

Publisher: pypi.yml on scalable-analyses/einsum_ir

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

File details

Details for the file etops-26.2.0-cp38-cp38-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for etops-26.2.0-cp38-cp38-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 48e6318b9de6d7a58e6237c458b0bcd9f8061a469ac3940ef3b9a8a3716103a9
MD5 cd61d825737bfccaa210d097926d059c
BLAKE2b-256 12228aa4a73b9df2db031acd57d42f8a6c2a882868e9c6f03f9f78b16bcc31be

See more details on using hashes here.

Provenance

The following attestation bundles were made for etops-26.2.0-cp38-cp38-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: pypi.yml on scalable-analyses/einsum_ir

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

File details

Details for the file etops-26.2.0-cp38-cp38-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for etops-26.2.0-cp38-cp38-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 c40c6a5222fedbe6d8f437b35ef797c7676ff748f77a73ebe2eba34ba480e111
MD5 7c478b70d0bdeaaa501b4084d13f14db
BLAKE2b-256 519feec0d6fb86e2f15a4759930c16f855dff871df0ca4a28043267c7b4e32fd

See more details on using hashes here.

Provenance

The following attestation bundles were made for etops-26.2.0-cp38-cp38-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl:

Publisher: pypi.yml on scalable-analyses/einsum_ir

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

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page