Skip to main content

Einsum tree operations.

Project description

The etops package provides a Python interface for the Tiled Execution IR (TEIR). It enables users to define, configure, optimize, and execute complex tensor contractions and elementwise operations. The package is built on top of the einsum_ir C++ backend and exposes advanced features such as dimension fusion, dimension splitting, and backend-specific optimizations.

Main Features

  • Abstractions for tensor operations and configuration

  • Support for multiple data types (float32, float64)

  • Primitive operations: zero, copy, relu, gemm, brgemm, etc.

  • Dimension execution strategies: primitive, sequential, shared, space-filling curve (SFC)

  • Dimension and stride configuration for advanced memory layouts

  • Interface for built-in contraction optimizer

  • Pythonic API with dataclass-based configuration

Installation

Install the package using pip:

pip install etops

Unary Examples

Below are some examples showing how to configure and execute unary tensor operations:

import etops

# ---------------------------------------
# First example:
#   Matrix transpose using copy primitive
#   Compares the result with NumPy
# ---------------------------------------
# Define a transpose configuration
top_config = etops.TensorOperationConfig(
    backend    =   "tpp",
    data_type  =   etops.float32,
    prim_first =   etops.prim.none,
    prim_main  =   etops.prim.copy,
    prim_last  =   etops.prim.none,
    dim_types  =   (etops.dim.c,     etops.dim.c    ),
    exec_types =   (etops.exec.prim, etops.exec.prim),
    dim_sizes  =   (3,               4              ),
    strides    = (((4,               1               ),   # in
                   (1,               3               )),) # out
)

# Create the TensorOperation instance
top = etops.TensorOperation(top_config)

# Create input and output arrays
import numpy as np
A = np.random.randn(3,4).astype(np.float32)
B = np.random.randn(4,3).astype(np.float32)

top.execute(A, None, B)

B_np = np.einsum("ij->ji", A)

# Check correctness
error_abs = np.max( np.abs(B - B_np) )
print("Matrix Transpose using copy primitive:")
print(f"  Max absolute error: {error_abs:.6e}")

# -------------------------------------------------
# Second example:
#   Permutation of a 4D tensor using copy primitive
#   Compares the result with NumPy
# -------------------------------------------------
# Define a permutation configuration
perm_config = etops.TensorOperationConfig(
    backend     =   "tpp",
    data_type   =   etops.float32,
    prim_first  =   etops.prim.none,
    prim_main   =   etops.prim.copy,
    prim_last   =   etops.prim.none,
    dim_types   =   (etops.dim.c,    etops.dim.c,     etops.dim.c,     etops.dim.c    ),
    exec_types  =   (etops.exec.seq, etops.exec.seq,  etops.exec.prim, etops.exec.prim),
    dim_sizes   =   (2,              4,               3,               5              ),
    strides     = (((3*4*5,          5,               4*5,             1              ),   # in
                    (3,              2*3,             1,               4*2*3          )),) # out
)

# Create the TensorOperation instance
perm_op = etops.TensorOperation(perm_config)

# Create input and output arrays
A = np.random.randn(2,3,4,5).astype(np.float32)
B = np.random.randn(5,4,2,3).astype(np.float32)

perm_op.execute(A, None, B)

B_np = np.einsum("abcd->dcab", A)

# Check correctness
error_abs = np.max( np.abs(B - B_np) )
print("4D Tensor Permutation using copy primitive:")
print(f"  Max absolute error: {error_abs:.6e}")

# -------------------------------------------------
# Third example:
#   Permutation of a 4D tensor using copy primitive
#   Uses the built-in optimization routine
#   Compares the result with NumPy
# -------------------------------------------------
perm_config = etops.TensorOperationConfig(
    data_type   =   etops.float32,
    prim_first  =   etops.prim.none,
    prim_main   =   etops.prim.copy,
    prim_last   =   etops.prim.none,
    dim_types   =   (etops.dim.c,    etops.dim.c,     etops.dim.c,    etops.dim.c   ),
    exec_types  =   (etops.exec.seq, etops.exec.seq,  etops.exec.seq, etops.exec.seq),
    dim_sizes   =   (2,              4,               3,              5             ),
    strides     = (((3*4*5,          5,               4*5,            1             ),   # in
                    (3,              2*3,             1,              4*2*3         )),) # out
)

# Use default optimization config
optimized_config = etops.optimize(perm_config)

# Create the TensorOperation instance
perm_op = etops.TensorOperation(optimized_config)

# Create input and output arrays
A = np.random.randn(2,3,4,5).astype(np.float32)
B = np.random.randn(5,4,2,3).astype(np.float32)

# Execute the operation
perm_op.execute(A, None, B)

B_np = np.einsum("abcd->dcab", A)

# Check correctness
error_abs = np.max( np.abs(B - B_np) )
print("4D Tensor Permutation using optimized copy primitive:")
print(f"  Max absolute error: {error_abs:.6e}")

Binary Examples

Below are some examples showing how to configure and execute binary tensor operations:

import etops

# -----------------------------------------
# First example:
#   Column-major GEMM operation
#   Compares the result with NumPy's einsum
# -----------------------------------------
# Define a column-major GEMM configuration
top_config = etops.TensorOperationConfig(
    backend    =   "tpp",
    data_type  =   etops.float32,
    prim_first =   etops.prim.zero,
    prim_main  =   etops.prim.gemm,
    prim_last  =   etops.prim.none,
    dim_types  =   (etops.dim.m,     etops.dim.n,     etops.dim.k    ),
    exec_types =   (etops.exec.prim, etops.exec.prim, etops.exec.prim),
    dim_sizes  =   (64,              32,              128            ),
    strides    = (((1,               0,               64             ),   # in0
                   (0,               128,             1              ),   # in1
                   (1,               64,              0              )),) # out
)

# Create the TensorOperation instance
top = etops.TensorOperation(top_config)

# Create input and output arrays
import numpy as np
A = np.random.randn(128,64).astype(np.float32)
B = np.random.randn(32,128).astype(np.float32)
C = np.random.randn(32, 64).astype(np.float32)

# Execute the operation
top.execute(A, B, C)

C_np = np.einsum("km,nk->nm", A, B)

# Compute absolute and relative errors
error_abs = np.max( np.abs(C - C_np) )
error_rel = np.max( np.abs(C - C_np) / (np.abs(C_np) + 1e-8) )
print("Column-major GEMM operation:")
print(f"  Max absolute error: {error_abs:.6e}")
print(f"  Max relative error: {error_rel:.6e}")

# -----------------------------------------
# Second example:
#   Batched GEMM operation
#   Compares the result with torch's einsum
# -----------------------------------------
# Define a batched GEMM configuration
batched_config =    etops.TensorOperationConfig(
    backend    =    "tpp",
    data_type  =    etops.float32,
    prim_first =    etops.prim.zero,
    prim_main  =    etops.prim.gemm,
    prim_last  =    etops.prim.none,
    dim_types  =   (etops.dim.c,       etops.dim.m,     etops.dim.n,     etops.dim.k    ),
    exec_types =   (etops.exec.shared, etops.exec.prim, etops.exec.prim, etops.exec.prim),
    dim_sizes  =   (48,                64,              32,              128            ),
    strides    = (((128*64,            1,               0,               64             ),   # in0
                   (32*128,            0,               128,             1              ),   # in1
                   (32*64,             1,               64,              0              )),) # out
)
# Create the batched TensorOperation instance
top = etops.TensorOperation(batched_config)

import torch
# Create input and output arrays
A = torch.randn(48, 128, 64, dtype=torch.float32)
B = torch.randn(48, 32, 128, dtype=torch.float32)
C = torch.randn(48, 32, 64,  dtype=torch.float32)

# Execute the operation
top.execute(A, B, C)

C_torch = torch.einsum("bkm,bnk->bnm", A, B)

# Compute absolute and relative errors
error_abs = torch.max(torch.abs(C - C_torch))
error_rel = torch.max(torch.abs(C - C_torch) / (torch.abs(C_torch) + 1e-8))

print("Batched GEMM operation:")
print(f"  Max absolute error: {error_abs:.6e}")
print(f"  Max relative error: {error_rel:.6e}")

#--------------------------------------------
# Third example:
#   GEMM operation with row-major first input
#   packed to column-major
#   Compares the result with NumPy's einsum
# -------------------------------------------

# Define a row-major GEMM configuration with packing
top_config = etops.TensorOperationConfig(
    backend    =   "tpp",
    data_type  =   etops.float32,
    prim_first =   etops.prim.zero,
    prim_main  =   etops.prim.gemm,
    prim_last  =   etops.prim.none,
    dim_types  =   (etops.dim.m,     etops.dim.n,     etops.dim.k    ),
    exec_types =   (etops.exec.prim, etops.exec.prim, etops.exec.prim),
    dim_sizes  =   (64,              32,              128            ),
    strides    = (((1,               0,               64             ),   # in 0
                   (0,               128,             1              ),   # in 1
                   (1,               64,              0              )),  # out
                  ((128,             0,               1              ),   # packing in 0
                   (0,               0,               0              ),   # packing in 1
                   (0,               0,               0              )),) # packing out
)

# Create the TensorOperation instance
top = etops.TensorOperation(top_config)

# Create input and output arrays
import numpy as np
A = np.random.randn(64,128).astype(np.float32)
B = np.random.randn(32,128).astype(np.float32)
C = np.random.randn(32, 64).astype(np.float32)

# Execute the operation
top.execute(A, B, C)

A_T = np.transpose(A)
C_np = np.einsum("km,nk->nm", A_T, B)

# Compute absolute and relative errors
error_abs = np.max( np.abs(C - C_np) )
error_rel = np.max( np.abs(C - C_np) / (np.abs(C_np) + 1e-8) )
print("GEMM operation with packing:")
print(f"  Max absolute error: {error_abs:.6e}")
print(f"  Max relative error: {error_rel:.6e}")

# -----------------------------------------------
# Fourth example:
#   Batch-reduce GEMM operation with optimization
#   Compares the result with torch's einsum
# -----------------------------------------------
# Define a batch-reduce GEMM configuration
batched_config =   etops.TensorOperationConfig(
    data_type  =   etops.float32,
    prim_first =   etops.prim.zero,
    prim_main  =   etops.prim.gemm,
    prim_last  =   etops.prim.none,
    dim_types  =   (etops.dim.k,    etops.dim.m,    etops.dim.n,    etops.dim.k   ),
    exec_types =   (etops.exec.seq, etops.exec.seq, etops.exec.seq, etops.exec.seq),
    dim_sizes  =   (48,             64,             32,             128           ),
    strides    = (((128*64,         1,              0,              64            ),   # in0
                   (32*128,         0,              128,            1             ),   # in1
                   (0,              1,              64,             0             )),) # out
)

# Optimize the configuration
optimized_config = etops.optimize(
    batched_config,
    {
        "target_m":            16,
        "target_n":            12,
        "target_k":            64,
        "num_threads":         4,
        "br_gemm_support":     True,
        "packed_gemm_support": True
    }
)

# Create the optimized TensorOperation instance
top = etops.TensorOperation(optimized_config)

import torch
# Create input and output arrays
A = torch.randn(48, 128, 64, dtype=torch.float32)
B = torch.randn(48, 32, 128, dtype=torch.float32)
C = torch.randn(    32, 64,  dtype=torch.float32)

# Execute the operation
top.execute(A, B, C)

C_torch = torch.einsum("bkm,bnk->nm", A, B)

# Compute absolute and relative errors
error_abs = torch.max(torch.abs(C - C_torch))
error_rel = torch.max(torch.abs(C - C_torch) / (torch.abs(C_torch) + 1e-8))
print("Batch-reduce GEMM operation:")
print(f"  Max absolute error: {error_abs:.6e}")
print(f"  Max relative error: {error_rel:.6e}")

See the source code and inline documentation for more advanced usage.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

etops_nightly-26.2.1-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (1.2 MB view details)

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

etops_nightly-26.2.1-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl (1.2 MB view details)

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

etops_nightly-26.2.1-cp314-cp314t-macosx_14_0_arm64.whl (726.1 kB view details)

Uploaded CPython 3.14tmacOS 14.0+ ARM64

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

Uploaded CPython 3.14macOS 14.0+ ARM64

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

Uploaded CPython 3.13macOS 14.0+ ARM64

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

Uploaded CPython 3.12macOS 14.0+ ARM64

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

Uploaded CPython 3.11macOS 14.0+ ARM64

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

Uploaded CPython 3.10macOS 14.0+ ARM64

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

Uploaded CPython 3.9macOS 14.0+ ARM64

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

File metadata

File hashes

Hashes for etops_nightly-26.2.1-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 15fe3dd36923eb6db36316c8cf5d8887bbec52fd29b5dfdf48fea78870427701
MD5 630fc2859856b3c8837f7a7f30e1b078
BLAKE2b-256 6b2f9d5c8e8b3194aeaeb8a58a04b38f65dd37a36f0d03c51687605ef45a6970

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for etops_nightly-26.2.1-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 4ab93935d98aca2257defd17da5b6041f785fb5a014ee7761881a1446b9a1c65
MD5 da0ba6a36d8bbd8d35d617f31518d8d9
BLAKE2b-256 23d6887c6a990d9245c957c837d5d8463a9526a1cfc7fbfc4a65a4cd86376875

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for etops_nightly-26.2.1-cp314-cp314t-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 7db3ac65517af106fdc15f0c11836a3b0fe07449cb0c02c394d2700c25035f59
MD5 7a6522c0ea4b47cbd0afc1af2ad15c57
BLAKE2b-256 b64ee03e8a936b720b8166c7b5817f0dc03861b067100efa823363fc7027a1ab

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for etops_nightly-26.2.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 56fcb4a1388a53669b86fd5ffe6634d457fd530e641639dfff52c31d4c774176
MD5 09e6c0310e24b13a9249bbe6cd356f91
BLAKE2b-256 4be3b26e0a90b7d7e8c308cfd320adaf858b5b7cbd7a3dfe3c1a7f220cfa7217

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for etops_nightly-26.2.1-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 6394635ee6d70f4419cf1c042e0889ec2de526b04f75d45b146796f48a22c71d
MD5 3f0f7b8231c4fdcd1238448c45e76cfe
BLAKE2b-256 2cee686579815bf86bf6272dd25681291722753e30f451de6f35d6accd5082d0

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for etops_nightly-26.2.1-cp314-cp314-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 4c132690a342be0df0659e232b2112cec217e4b7069bc011ee07449f9b2b881c
MD5 e48cd5764e322bf5b51b219bafc820a7
BLAKE2b-256 c21159e3e50f9413d1d35f6664d750f3ec29ec4755ed518d9d4fd80c1cb5824f

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for etops_nightly-26.2.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 6a00b1d6b2d8d01f354c13b6e82ef54fd035e688ba1bb833d448bc67ecf3a64c
MD5 48c275f87623a4c66edf90e360133383
BLAKE2b-256 805925cd36abdde65931481bdca1b445640c92aa2ffde206d2db3cdb0d5c516b

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for etops_nightly-26.2.1-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 d09bdfedd8f39bd096d261c64fc53f65d152d23a0da78d069d1d18cfe4ba4838
MD5 b239e67c8f2626868b53634dc595723f
BLAKE2b-256 e871fabcd322265cfbd02dc728c590df95f4e302ca4545d1f760463a83669712

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for etops_nightly-26.2.1-cp313-cp313-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 325599f0e0d2fe08e002a8dbb07e0effc174c13ccd1734996c738cb8ea300174
MD5 bc94566be6774d2fc1847e99e7d32ef8
BLAKE2b-256 e9dcde49556fc4a97cd1655dd46d404cd3029d44bc31eb7f857d96c93abdf7a5

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for etops_nightly-26.2.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 b488d4aa922ff668b81b205d7f66c08b486f584f0ab297b88f89a6ae2f4c0795
MD5 6558ea59530d7a11348140a412870f1d
BLAKE2b-256 a21cfaf640c3b8587d21e791e60bcf4a9753b04e0241bdb12b598e3d309b0a65

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for etops_nightly-26.2.1-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 af7aaf9c8142442fb001364562cd203ae126e902af3dffb31d6d956a310de530
MD5 24aa6e87462e083fdbbae9399b542ce8
BLAKE2b-256 0ec80fc8bc2a943e1a541683a1fc046917732e4d1e3cdff1d940a22c509adb5e

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for etops_nightly-26.2.1-cp312-cp312-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 c6c29324bcc5c03ff0ce925232122b6b307e29294a8da8671ca80dde866d60b4
MD5 2f6c8a12a9e8e7367b009ebbb38347e2
BLAKE2b-256 66b66c3814648f8652c4f0cf3cf7cdbba9be2f10413ea01ba3471f12c5047e3c

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for etops_nightly-26.2.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 bfc0cc568bf757f871efb73d894f2c246c09659e9ac43a2bddca55f2b28c2882
MD5 e921bf5a76195ec753b1fe35a8298ece
BLAKE2b-256 2ae0b8aedbf48751c66d944ce6401e771cfe2b0cd31458b394cfebfb8205305d

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for etops_nightly-26.2.1-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 47b912dda365bbf5f7d3c5b8f29128d13ad519462be8bec3765dc95112507617
MD5 59519e0d3573b9ff76d008ca3a4b3d8a
BLAKE2b-256 6124db0513c2e2bea23b8b2cf45ee02fa08fd6fd791aa4c986c9a7e3f697c0ea

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for etops_nightly-26.2.1-cp311-cp311-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 f8137c7c61d80b78686df96bf522440a2956047efb615166a953985c3b861dfe
MD5 4d1ad09dc174ef68f33e321a1b70dd00
BLAKE2b-256 389097e5bb55a03f411e707849ee4bd13c81bda0f273076a3e97eb481c7bab11

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for etops_nightly-26.2.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 fdaecab4ec6a21e0d33d7cc64284ff6f56a467d3a59633ff67c359f7d1d12935
MD5 5e4dc622852c66e4afd4501433567aba
BLAKE2b-256 4f9f39d00b18839cfe9f022b97c2d177cc63fecb3f682fbf1fb1ac76ff961266

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for etops_nightly-26.2.1-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 36872bd5c325de2f28eaca11bb9b1260cd9a17b5d844ddf9db05003a806e68f4
MD5 96c180ed3cc4e75ff55f50be8b40dc79
BLAKE2b-256 715f60b9f7b6100437bc1c6f395731e11a55ba5431964c3612c3b46187992dfd

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for etops_nightly-26.2.1-cp310-cp310-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 9954ec89d67272dbcb4745e9e580592840413038809184bccc9d2bb9ae5beb36
MD5 7de4ea788770877315c271ed6456b171
BLAKE2b-256 271a7980c73760d98e388f79059365a89f2909641d515a406312312d63e29c7b

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for etops_nightly-26.2.1-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 caea0d7573388b605fd572c725d282f66ecd7a8f89e67bd20625977291b14df0
MD5 2f60c989a07f942e501f5a3bfd1569ae
BLAKE2b-256 370dd2062e4eb47db6126a44ae64bf36b51bbe86b8ca9f4a96e0e88b67eb6728

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for etops_nightly-26.2.1-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 bfff000eaf18ed341a1602b833fb2ff8fca9d285a09f82aaceee9c5739ca4c9d
MD5 8ccda1c9b894fc704db61a158d24f68d
BLAKE2b-256 525089e1d94aee486ff0df3a6ce2b234dbcad10b6c544a745f7af69082c902f9

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for etops_nightly-26.2.1-cp39-cp39-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 6cf526e17d0f81db90cb64d0f846d065cd6633b58eeca23e279ebf082411a7b6
MD5 7c9b7dbef8e9de36f66dc7c7d69f5785
BLAKE2b-256 da9eeea1d5cdd319e6e045e76c6816a69963fc64b7031bf5edf2729e401b15e6

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for etops_nightly-26.2.1-cp38-cp38-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 af5b9fbdea3be3948d98dff56f570d39804f377b2c051f28af494319d5a500a7
MD5 844ecf6179f05d1523a9f334093d7ee5
BLAKE2b-256 ece87d8da8a69354dba6b265b9ad07b798f17380da223206d33b917904fef62f

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for etops_nightly-26.2.1-cp38-cp38-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 062904a3d4b6d1efc8b5b27c34239c8f4831f4a823db49e10341bc71c450b5b9
MD5 75ab2d6e9249bfe26387f44a0f531cba
BLAKE2b-256 3730c94dc66f4467daa845ba69f65d62e42f23ead2e8d9f1c6ef0efe911691cc

See more details on using hashes here.

Provenance

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