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

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

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

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

etops-25.12.0-cp314-cp314t-macosx_14_0_arm64.whl (713.4 kB view details)

Uploaded CPython 3.14tmacOS 14.0+ ARM64

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

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

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

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

etops-25.12.0-cp314-cp314-macosx_14_0_arm64.whl (704.0 kB view details)

Uploaded CPython 3.14macOS 14.0+ ARM64

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

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

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

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

etops-25.12.0-cp313-cp313-macosx_14_0_arm64.whl (703.5 kB view details)

Uploaded CPython 3.13macOS 14.0+ ARM64

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

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

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

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

etops-25.12.0-cp312-cp312-macosx_14_0_arm64.whl (703.5 kB view details)

Uploaded CPython 3.12macOS 14.0+ ARM64

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

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

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

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

etops-25.12.0-cp311-cp311-macosx_14_0_arm64.whl (702.3 kB view details)

Uploaded CPython 3.11macOS 14.0+ ARM64

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

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

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

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

etops-25.12.0-cp310-cp310-macosx_14_0_arm64.whl (700.7 kB view details)

Uploaded CPython 3.10macOS 14.0+ ARM64

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

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

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

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

etops-25.12.0-cp39-cp39-macosx_14_0_arm64.whl (700.8 kB view details)

Uploaded CPython 3.9macOS 14.0+ ARM64

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

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

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

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

File details

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

File metadata

File hashes

Hashes for etops-25.12.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 9bfbd755c83ed8affbfdc9239f0c49fd7017eb8031a645a1ba81dd63333c7732
MD5 742da50a7aa828a1c20b33c66419584a
BLAKE2b-256 4e0b7602e36149bd90a8cf41e5415e0d2913e5741eb532765b9ad8d4dc398b58

See more details on using hashes here.

Provenance

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

Publisher: pypi.yml on scalable-analyses/einsum_ir

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

File details

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

File metadata

File hashes

Hashes for etops-25.12.0-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 3fa2da69c8b405dee78249f27fa8a04c80af9e1c5d51b1b372bb02f5316507fc
MD5 ebcfcc0981d846ba6baac2546b7ae525
BLAKE2b-256 d82e903d31331c54c498a0ee7b653361239c7329f09a940ea92af0b005802d01

See more details on using hashes here.

Provenance

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

Publisher: pypi.yml on scalable-analyses/einsum_ir

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

File details

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

File metadata

File hashes

Hashes for etops-25.12.0-cp314-cp314t-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 a62cc76f7989e9d582a4cff61b596c410babf73b25fa7694929412c1d2220869
MD5 f3718146a5fc1dde6d3d4abc411f70cd
BLAKE2b-256 1c090d62b415a7dcf28eed46cdebd16c53053feb23309c016edc665db5a43c5d

See more details on using hashes here.

Provenance

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

Publisher: pypi.yml on scalable-analyses/einsum_ir

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

File details

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

File metadata

File hashes

Hashes for etops-25.12.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 bbc373454a38b01b0c1cebe41c3fa276bcf7b6fe1f63d4bf444b9f626400e4c6
MD5 67c53ad6ca7e46a8b7b04225aca5e11c
BLAKE2b-256 40f89957fdbfb6c571d28de6f6c86e7ca50280f1585d91aa9dcc9722218fa5c1

See more details on using hashes here.

Provenance

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

Publisher: pypi.yml on scalable-analyses/einsum_ir

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

File details

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

File metadata

File hashes

Hashes for etops-25.12.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 1affa9d4ef965f6a462b298f0d7975f530f50e39cbb2e4bc5e5c8740ffddf895
MD5 5ed8a18895b4ff894d2450fcda29e75e
BLAKE2b-256 ab875537b3c420d2fb26761f8e264a5c92bdd2c744e2019415e5853224b092b6

See more details on using hashes here.

Provenance

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

Publisher: pypi.yml on scalable-analyses/einsum_ir

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

File details

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

File metadata

File hashes

Hashes for etops-25.12.0-cp314-cp314-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 12aaeab62cb9637616afc65cfada16e0f3907703e812af1a49049dd2bb82150f
MD5 2731606841f3feacf9d935a771410829
BLAKE2b-256 2004cf7544d3e53b82f361cb970416a3fd4be58585490eb4b5fd825258d5148d

See more details on using hashes here.

Provenance

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

Publisher: pypi.yml on scalable-analyses/einsum_ir

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

File details

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

File metadata

File hashes

Hashes for etops-25.12.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 f66da799e048af2a12f8d0233a94ee65a957dc9ac9bb6142e1ed38182243c9db
MD5 26c4c7a9a69a6deceff3e64382f92aa5
BLAKE2b-256 c09b0d3ef100de18437957b56ae949e375cfe833ef79d3daca20875ca2a65d5a

See more details on using hashes here.

Provenance

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

Publisher: pypi.yml on scalable-analyses/einsum_ir

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

File details

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

File metadata

File hashes

Hashes for etops-25.12.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 5cf48c1d2699fd4b2d8aec4ba904c2c30ea782b3fb5d8a8fe2812650e2bd6af6
MD5 254933dfae0e55dcb39cf70fb93683a8
BLAKE2b-256 4d3c76e8e85a7a7be77e7c125b9733430dca22f9ca8e232f861fa2adfa1e6b8b

See more details on using hashes here.

Provenance

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

Publisher: pypi.yml on scalable-analyses/einsum_ir

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

File details

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

File metadata

File hashes

Hashes for etops-25.12.0-cp313-cp313-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 81c481a068abebc265f0c29562b2c0a8652e3c33440e002a63d77113f312ad49
MD5 0ef9acb5e92dc3f25f884e76d0e651df
BLAKE2b-256 57331ecbfda5558217ebf228925cae3232e485b78d2ad77991adbe17613149a3

See more details on using hashes here.

Provenance

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

Publisher: pypi.yml on scalable-analyses/einsum_ir

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

File details

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

File metadata

File hashes

Hashes for etops-25.12.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 4fbb1995e5c4f6f8b82bfbe67ca02b6b0560ea1157f6d35b30590984d98b7042
MD5 32277ba586f3b50e926cba527fa75447
BLAKE2b-256 d5544213576539be30fc83c6c1f2d6a0f76c199b00c4fcacb77ef0c35e6586fb

See more details on using hashes here.

Provenance

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

Publisher: pypi.yml on scalable-analyses/einsum_ir

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

File details

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

File metadata

File hashes

Hashes for etops-25.12.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 fc0869350e9d98d9cd8c7fcec3722d8d12bbfbf69b7ae4dcd2069131d2fb40e1
MD5 78328525bf7e7e33184b87033f3a3757
BLAKE2b-256 54b3b4eaa9b0839bdff1d49c09f2825eab0249861f96b7b1562290329709f02a

See more details on using hashes here.

Provenance

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

Publisher: pypi.yml on scalable-analyses/einsum_ir

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

File details

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

File metadata

File hashes

Hashes for etops-25.12.0-cp312-cp312-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 95dda554a3d6d83106131b9d28d6da3353d550d3c771eb3af921ed2e58d98fad
MD5 e9f4378161f29a3df1369b259c85004d
BLAKE2b-256 2b045f55e8c693045fddf0730cf9c4377b078839147729d3432c2d9c1736176d

See more details on using hashes here.

Provenance

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

Publisher: pypi.yml on scalable-analyses/einsum_ir

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

File details

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

File metadata

File hashes

Hashes for etops-25.12.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 be6b8583760e57fbb238e7d30bb4d61f5471b2c12986832fe2338cd1feaaa437
MD5 e3d502d6ead9b84fece39dc0313b45a6
BLAKE2b-256 cc078b0dc490fa02099239c9dc8d442a802cbd7ce63ab4852499ec4030a87fa2

See more details on using hashes here.

Provenance

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

Publisher: pypi.yml on scalable-analyses/einsum_ir

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

File details

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

File metadata

File hashes

Hashes for etops-25.12.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 553dc31c2361b87fd56d649eb5650d6ba1763740425759c354d79685b3ff5ae5
MD5 063c10397561b31da5447237622f24dd
BLAKE2b-256 f62bd1f996d05ec40cd2313067a57e00a1b90df2825138afed6f0d157cb8187e

See more details on using hashes here.

Provenance

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

Publisher: pypi.yml on scalable-analyses/einsum_ir

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

File details

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

File metadata

File hashes

Hashes for etops-25.12.0-cp311-cp311-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 324cd3f51e6fc96edcb5a0941f22d41623c741755a394f4574075a783e008fd3
MD5 719e940de3a600ebc15cced205d81df5
BLAKE2b-256 dbf3f53d29bf033be09a2a09b5029e39ff416d59d30b6c5d2a87da04cd57f69c

See more details on using hashes here.

Provenance

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

Publisher: pypi.yml on scalable-analyses/einsum_ir

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

File details

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

File metadata

File hashes

Hashes for etops-25.12.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 0a2f2c63e06bd9f7489541881e5e26abdd8822f7a44cc356ed39b91e078deab3
MD5 a7ce570c1b5cf452751c979145bd87af
BLAKE2b-256 ab6c6d77f0a031c3eb61b62c588ddaf97af06173b125d78954564a0057daf89b

See more details on using hashes here.

Provenance

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

Publisher: pypi.yml on scalable-analyses/einsum_ir

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

File details

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

File metadata

File hashes

Hashes for etops-25.12.0-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 3bbf8cef6c493c094cff71aac979da3e2a152a9f83c9d0952a11184ffe33743b
MD5 b5c392040267a501d3a878396eeac4af
BLAKE2b-256 7826da600c9f745d2082d0b15c3f6018eceb9b97d0392cadd5835051917ba449

See more details on using hashes here.

Provenance

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

Publisher: pypi.yml on scalable-analyses/einsum_ir

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

File details

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

File metadata

File hashes

Hashes for etops-25.12.0-cp310-cp310-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 d68ecb26872851ff8b03a8a34bc6ea4116b8a7bbab422874594c3d15635f3e19
MD5 02e61339322e1411411d4cab3816cb74
BLAKE2b-256 7ba4aae34daf557d62131d4d55e22deb6e06681f2e5bccb9be919759ec0c8fde

See more details on using hashes here.

Provenance

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

Publisher: pypi.yml on scalable-analyses/einsum_ir

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

File details

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

File metadata

File hashes

Hashes for etops-25.12.0-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 fa6e46109026316ad28f824fa46cd91e4d7559a7e16d6dabdf3a5c6d7d5c7241
MD5 70d1e3ce01031a7d0a15ed249fd2d559
BLAKE2b-256 31170e5e38bf2e9dae18b82b3c4c83fb49251afd03402909acddc5cad65c93ea

See more details on using hashes here.

Provenance

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

Publisher: pypi.yml on scalable-analyses/einsum_ir

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

File details

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

File metadata

File hashes

Hashes for etops-25.12.0-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 b4d691bbfc10ba23e4a3759c02fc65044b1f005de5b8d2bc4d892a49b7fc44c1
MD5 497be73198618ba4d9c56519ede68f6c
BLAKE2b-256 46634a34955dd99ab1c3cb2e9b42a1eb9c42c6c08f8f1c4ab1461d74557217dc

See more details on using hashes here.

Provenance

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

Publisher: pypi.yml on scalable-analyses/einsum_ir

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

File details

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

File metadata

File hashes

Hashes for etops-25.12.0-cp39-cp39-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 7d7fb2f7273dda15e3d6d1cc325adb16551fdaa2abc13e52d3ce1ddc27a537f8
MD5 b60c31e7f945a5a9d8818e470a747878
BLAKE2b-256 c67887497b52deb8ad3e2c4a8c2735a9c35789abe02c898b4861fe4fbe0e4631

See more details on using hashes here.

Provenance

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

Publisher: pypi.yml on scalable-analyses/einsum_ir

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

File details

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

File metadata

File hashes

Hashes for etops-25.12.0-cp38-cp38-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 eab6b5092ac380ac424307628b37ca3ee3b49316b99451f6fcecba99d0246f0c
MD5 1fab57e2fc9af1454ef1f1dd8434251a
BLAKE2b-256 46c64f90449bcb979944ab3eb1cc3d3e1bb15362885331f16117cc0490c36cad

See more details on using hashes here.

Provenance

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

Publisher: pypi.yml on scalable-analyses/einsum_ir

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

File details

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

File metadata

File hashes

Hashes for etops-25.12.0-cp38-cp38-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 571ad6bd29558d09c881ce8fcb08b9b0b7376b867aa2b59eb50e261fccd4d197
MD5 e050671a77cadcde461a59233fd05c80
BLAKE2b-256 99d77cde7e86c675e7b24e190cfcfff37b8221b783c99de3f88cee95aa4ea42c

See more details on using hashes here.

Provenance

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

Publisher: pypi.yml on scalable-analyses/einsum_ir

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

Supported by

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