Skip to main content

CPU-first C++ inference engine for ESM-2 protein language models

Project description

esm.cpp

A CPU-first C++ inference engine for ESM-2 protein language models, with Python bindings. Production throughput on commodity hardware, no GPU required.

Why

ESM-2 is the backbone of modern protein ML, but the reference stack is PyTorch + CUDA. That's the wrong shape for several real workloads:

  • Deep mutational scanning (10⁴–10⁷ variants per protein) — embarrassingly parallel scoring across millions of mutants. CPU throughput matters more than per-call latency.
  • Antibody developability screening (10⁵–10⁶ candidates) — rank by PLM likelihood for aggregation, solubility, immunogenicity prefiltering. Nightly batch jobs on lab CPUs.
  • Embedding extraction at corpus scale — per-residue or per-sequence vectors for downstream classifiers, alignment, or retrieval.
  • On-prem / regulated environments — clinical, compliance-restricted, or air-gapped pipelines that cannot reach a cloud GPU.

The defensible niche is the intersection no existing project occupies: production-grade CPU inference + ahead-of-time W8A8 quantization + variable-length packed-batch scheduling for encoder-only PLMs. esm.cpp targets it. v0.2 ships ESM-2 at 8M, 35M, 150M, 650M, and 3B, with W8A8 INT8 (SmoothQuant) for 150M and above and FP32 for the smaller two.

Performance

ESM-2-650M, esm.cpp vs HuggingFace eager FP32, p50 over 5 runs:

Host Varlen 256-seq (OAS) Uniform 8 × 256 Mechanism
Intel Xeon 8481C Sapphire Rapids (22 vCPU) 9.31× HF (12.4 s) 4.09× HF (0.92 s) AMX-INT8, default
Apple M3 Pro (after one fetch step) 3.97× HF (37.8 s) 10.05× HF (459 ms) Whole-graph CoreML → ANE + GPU
GCP C4A / Neoverse V2 (8 vCPU, Graviton-class) 5.04× HF (29.3 s) 2.30× HF (2.02 s) NEON SDOT, default
Apple M3 Pro (default, no fetch) 3.97× HF (37.8 s) 1.79× HF (2.17 s) NEON SDOT, default

Two structural wins drive these numbers.

Variable-length packed-batch scheduling (the x86 + Linux ARM headline). HuggingFace pads every sequence in a batch to max(len). esm.cpp packs sequences back-to-back along the token axis and isolates per-sequence attention via cu_seqlens. On antibody-shaped data (mean ~120 residues, max ~250) that saves roughly 3× of HF's attention compute and 2× of its FFN compute on top of the INT8 baseline.

Whole-graph CoreML compilation (the Apple uniform-shape headline). The entire ESM-2 forward — 33 encoder layers + LM head — is compiled into ONE .mlmodelc at convert time and dispatched through an Objective-C++ MLModel bridge. Keeps one op-fused fp16 graph hot on the Apple Neural Engine + GPU instead of the per-Linear pattern that thrashes the ANE compiled-state cache. Logit correlation vs HF FP32 is 0.999998 at 650M with strict pseudo-perplexity drift below 0.001 across the holdout subset.

How it works

  • Kernels. Hand-written, runtime-dispatched per ISA. x86: AVX-512 + VNNI + AMX-INT8. ARM: NEON FMLA + SDOT + opt-in SMMLA/i8mm. Every vectorized kernel has a scalar-reference twin behind #ifdef ESM_KERNEL_REFERENCE; the same tests cross-check both with strict tolerances (FP32 rtol/atol=1e-6, INT8 rtol=1e-3 atol=1).
  • Quantization. Ahead-of-time W8A8 INT8 with SmoothQuant, calibrated on UniRef50. Pseudo-perplexity drift < 0.1 and ProteinGym Spearman drift < 0.01 are non-negotiable gates.
  • Scheduler. Variable-length sequences pack back-to-back along the token axis; attention isolates per-sequence via cu_seqlens; FFNs see one fused [ΣL, d] matmul instead of B padded [L_max, d] ones.
  • Loaders. Both safetensors (HF native, zero-copy mmap) and GGUF (esm.cpp native, block-decoded INT8). Weight tensors are never copied into RAM at load.
  • Apple path. On Apple Silicon, if pre-built artifacts are on disk, Model.load_* auto-engages them: a whole-graph CoreML model for registered uniform shapes, and a per-Linear AMX-fp16 BNNSGraph stack for everything else. With no artifacts installed, the engine falls back to the same NEON SDOT kernels Linux ARM uses. No Apple framework appears in the canonical kernel stack itself.

Install

pip install esm-cpp

That's the whole install on Linux x86, Linux ARM, and as a working baseline on Apple Silicon. On Apple Silicon, one extra step pulls the pre-built whole-graph + AMX artifacts that unlock the 10× headline:

esm-cpp-fetch-artifacts --model esm2_t33_650M

The artifacts land in ~/.cache/esm_cpp/<model>/ (~5 GB for 650M) and Model.load_* auto-discovers them on every load. The fetch CLI is pure stdlib — no coremltools, torch, or transformers needed at user time.

OS / arch What pip install esm-cpp gets you Extra step for headline
Linux x86_64 (Sapphire Rapids+) AMX-INT8 → 9.31× HF varlen, 4.09× HF uniform none
Linux x86_64 (Cascade Lake / Ice Lake) AVX-512 + VNNI INT8 baseline none
Linux ARM64 (Graviton 3/4, Axion, Ampere) NEON SDOT → 5.04× HF varlen, 2.30× HF uniform none
Apple Silicon (M1 / M2 / M3) NEON SDOT → 3.97× HF varlen, 1.79× HF uniform esm-cpp-fetch-artifacts10.05× HF uniform

Quick start

import esm_cpp

# Load FP32 weights from a HF safetensors file. On Apple Silicon, if you
# ran esm-cpp-fetch-artifacts, this auto-engages the whole-graph CoreML
# path — no env vars, no register calls.
model = esm_cpp.Model.load_from_safetensors(
    "/path/to/esm2_t33_650M_UR50D/model.safetensors")
tokenizer = esm_cpp.Tokenizer()

# Single sequence.
ids = tokenizer.encode("MKTGVAQRLELDSPMVLQKRSGE")
logits = model.forward(ids)  # [seq_len, vocab_size=33]

# Packed batch — variable-length sequences in one forward.
seqs = ["MKTGVA", "MAGAASPCANGCGPSAPS", "MSEEKRGGQATKLP"]
batch_ids = [tokenizer.encode(s) for s in seqs]
batch_logits = model.forward_scheduled(batch_ids)
# returns list of [L_i, vocab_size] arrays in input order

The same Model.load_from_safetensors (or Model.load_from_gguf for the quantized artifact) is the entry point on every supported OS; the correct kernel path is selected at load time from cpu_features plus whatever Apple artifacts are present.

Convert + quantize

# 1. HF safetensors -> esm-cpp GGUF (FP32).
esm-cpp-convert --hf facebook/esm2_t30_150M_UR50D --out weights/esm2_150m.gguf

# 2. Calibrate on UniRef50.
esm-cpp-quantize --calibrate \
    --model esm2_t30_150M \
    --calib data/uniref50_calib_v1.fasta \
    --out weights/esm2_150m_calib.json

# 3. Apply SmoothQuant + quantize to INT8.
esm-cpp-quantize --apply-smoothquant \
    --model esm2_t30_150M \
    --stats weights/esm2_150m_calib.json \
    --alpha 0.5 \
    --output weights/esm2_150m_q8.gguf

Then load the quantized artifact directly:

m = esm_cpp.Model.load_from_gguf("weights/esm2_150m_q8.gguf")
assert m.config.weights_quantized

Benchmark vs HuggingFace

esm-cpp-bench \
    --model facebook/esm2_t6_8M_UR50D \
    --dataset data/oas_sample_v1.fasta \
    --modes esm-cpp-fp32,hf-eager-fp32 \
    --output benchmarks/results/my_run.json

--modes accepts any subset of esm-cpp-fp32, esm-cpp-int8, hf-eager-fp32, hf-sdpa-fp32. The harness reports p50 / p90 / throughput on uniform and varlen workloads and writes a JSON record per run for tracking.

Scope

Inference only. No training, no LoRA, no backward pass — those belong upstream. Hardware targets are x86_64 (AVX-512 / VNNI / AMX) and AArch64 (NEON / SDOT / SMMLA, plus opt-in Apple ANE/AMX via CoreML artifacts on Apple Silicon). GPU, ARM SVE2, and RISC-V are out of scope for v0.x. ESM-2-15B is bandwidth-bound on CPU at FP32/INT8 and needs W4 quant before it makes sense; that's v2 work.

Project details


Download files

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

Source Distribution

esm_cpp-0.2.1.tar.gz (292.1 kB view details)

Uploaded Source

Built Distributions

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

esm_cpp-0.2.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (463.1 kB view details)

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

esm_cpp-0.2.1-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl (412.6 kB view details)

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

esm_cpp-0.2.1-cp313-cp313-macosx_11_0_arm64.whl (323.8 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

esm_cpp-0.2.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (463.1 kB view details)

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

esm_cpp-0.2.1-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl (412.6 kB view details)

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

esm_cpp-0.2.1-cp312-cp312-macosx_11_0_arm64.whl (323.7 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

esm_cpp-0.2.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (461.7 kB view details)

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

esm_cpp-0.2.1-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl (411.2 kB view details)

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

esm_cpp-0.2.1-cp311-cp311-macosx_11_0_arm64.whl (321.8 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

esm_cpp-0.2.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (459.9 kB view details)

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

esm_cpp-0.2.1-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl (410.6 kB view details)

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

esm_cpp-0.2.1-cp310-cp310-macosx_11_0_arm64.whl (320.5 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

esm_cpp-0.2.1-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (460.4 kB view details)

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

esm_cpp-0.2.1-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl (410.9 kB view details)

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

esm_cpp-0.2.1-cp39-cp39-macosx_11_0_arm64.whl (320.7 kB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

File details

Details for the file esm_cpp-0.2.1.tar.gz.

File metadata

  • Download URL: esm_cpp-0.2.1.tar.gz
  • Upload date:
  • Size: 292.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for esm_cpp-0.2.1.tar.gz
Algorithm Hash digest
SHA256 ed3f18e0399af8406a1f85714af76665c1563ae26a569241f7cf8c57d75e8be1
MD5 e6a39ef4986d4b97b053a2316c29b7b5
BLAKE2b-256 108f8a767359c7bf9eb18f6410dd2b5ab4cd27e3b118bb0c83b1ab74da6749da

See more details on using hashes here.

Provenance

The following attestation bundles were made for esm_cpp-0.2.1.tar.gz:

Publisher: wheels.yml on ayan-goel/esm-cpp

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

File details

Details for the file esm_cpp-0.2.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for esm_cpp-0.2.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 4bfbcaddec2c14cf809cf384e6f81e5df30e6fb311aaedfe7d2104258552d9af
MD5 f940eb9b92c4f499f73dddf7587a303e
BLAKE2b-256 b2e00cdfb1240f2b3ae9669f47e603a17c021dbbf4d824d1f6ae223ad6c350c8

See more details on using hashes here.

Provenance

The following attestation bundles were made for esm_cpp-0.2.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: wheels.yml on ayan-goel/esm-cpp

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

File details

Details for the file esm_cpp-0.2.1-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for esm_cpp-0.2.1-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 73fe615add857b1ac3d599a7778fb40bf75d0017fe1dd215a8a61709fe79234f
MD5 1d51108ee67f99ca186ef769f2dddd5f
BLAKE2b-256 9b06c192efa8fbc74fd078657b001dcb1cce6d2024345344a129ccf897654737

See more details on using hashes here.

Provenance

The following attestation bundles were made for esm_cpp-0.2.1-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl:

Publisher: wheels.yml on ayan-goel/esm-cpp

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

File details

Details for the file esm_cpp-0.2.1-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for esm_cpp-0.2.1-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 c19ecd534a5e92ab2f05561284bfbfee809c9fa8b6ffc9f659e07e404962a6d0
MD5 c40a6d557caffa7cee5f6bc051c0085d
BLAKE2b-256 7191dac1c5fdc232bb8f5deb1f4204a537a99ffa46f088812fa9990386cffdf0

See more details on using hashes here.

Provenance

The following attestation bundles were made for esm_cpp-0.2.1-cp313-cp313-macosx_11_0_arm64.whl:

Publisher: wheels.yml on ayan-goel/esm-cpp

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

File details

Details for the file esm_cpp-0.2.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for esm_cpp-0.2.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 65cc60f0460904e157188e172acd13398c496d29949272a467d5ec9789e817e6
MD5 1ca32972e19c99a6ef32754ddcc8bd2a
BLAKE2b-256 affea77235a82fc9666f5bab374edd76e6e03324ec4367e8739e820f8a59a1ea

See more details on using hashes here.

Provenance

The following attestation bundles were made for esm_cpp-0.2.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: wheels.yml on ayan-goel/esm-cpp

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

File details

Details for the file esm_cpp-0.2.1-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for esm_cpp-0.2.1-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 71e35611a0a14a703d099892dbc1542c1e92be6781ff8b457dc20cb10f236550
MD5 5fe5461ac7343497358b6f9c3f217dd1
BLAKE2b-256 d6697b12d7893ea9a0ea3b2a0c3139832da02a9cf2cad3149ac977c9fbf8eea8

See more details on using hashes here.

Provenance

The following attestation bundles were made for esm_cpp-0.2.1-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl:

Publisher: wheels.yml on ayan-goel/esm-cpp

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

File details

Details for the file esm_cpp-0.2.1-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for esm_cpp-0.2.1-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8b8f14a7598cb8ebf69b5dc7b73af3bfb9e25bb80c21d760db5efd39baa3ddc4
MD5 8fa970e7665751af1f7c46d5f7de4f52
BLAKE2b-256 b8a75701e0cf80dd68e95a3d431e44e1c1e05b696d504c67b0a5c5bdcfc15097

See more details on using hashes here.

Provenance

The following attestation bundles were made for esm_cpp-0.2.1-cp312-cp312-macosx_11_0_arm64.whl:

Publisher: wheels.yml on ayan-goel/esm-cpp

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

File details

Details for the file esm_cpp-0.2.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for esm_cpp-0.2.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 81cd3e428148d8052981f1172eec6852a1bb38d92d4e6a26839169d42ebdab5e
MD5 803dd6033f0d7580816225509c1a8daa
BLAKE2b-256 a65ea44c903d876514a756987a7b14ae3db9721b7a975625937df88ea9b29a28

See more details on using hashes here.

Provenance

The following attestation bundles were made for esm_cpp-0.2.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: wheels.yml on ayan-goel/esm-cpp

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

File details

Details for the file esm_cpp-0.2.1-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for esm_cpp-0.2.1-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 ba2d846f8fed3c8a5563a86347ec8cab268325c9d7c2701b5e183da54b9798ec
MD5 ef9f9b5361b46e37fc723b33f3a6c323
BLAKE2b-256 77f3e1dc49cbc343d5e2740c9764660332d8b38901bb71952d1fce9a623c057a

See more details on using hashes here.

Provenance

The following attestation bundles were made for esm_cpp-0.2.1-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl:

Publisher: wheels.yml on ayan-goel/esm-cpp

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

File details

Details for the file esm_cpp-0.2.1-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for esm_cpp-0.2.1-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 72f73bb44f1d70aa142a7769c53486b01b5f9cf6d5f022277267b06b9e2cf936
MD5 23e69042e83c0b5d27091850b74c2749
BLAKE2b-256 f1d0e49280645453509a95bb208df9231e2dadea031e509e837d56755286efed

See more details on using hashes here.

Provenance

The following attestation bundles were made for esm_cpp-0.2.1-cp311-cp311-macosx_11_0_arm64.whl:

Publisher: wheels.yml on ayan-goel/esm-cpp

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

File details

Details for the file esm_cpp-0.2.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for esm_cpp-0.2.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 8ee000409715e20c1f0c1b377ce08c0fa7e390a2cf2395436763aba5cd6cc24f
MD5 224202d5acdacce2fe07898ab16b6bd8
BLAKE2b-256 4f0da511d4bcb884fbd132a4247aa774184046b99a10c80d9017bf70571ffc00

See more details on using hashes here.

Provenance

The following attestation bundles were made for esm_cpp-0.2.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: wheels.yml on ayan-goel/esm-cpp

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

File details

Details for the file esm_cpp-0.2.1-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for esm_cpp-0.2.1-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 70467bddcc0d92d4b9de6d9d58241b61207f204dc8b99bed0ecda13f9ff183d5
MD5 f2dfc1d5d49372fc0b9955be1963fb48
BLAKE2b-256 51a6dab7bc479009d956109306dfe9908eebe293f91d209cfa8fdbdae0ff193a

See more details on using hashes here.

Provenance

The following attestation bundles were made for esm_cpp-0.2.1-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl:

Publisher: wheels.yml on ayan-goel/esm-cpp

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

File details

Details for the file esm_cpp-0.2.1-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for esm_cpp-0.2.1-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 5a8da8d94f7584cd9e7f13037ff563c2d6afcbb2f62788cbddb01e7e9a329681
MD5 789c8fb8b96455f66ff48460c7febaee
BLAKE2b-256 36a1fbd32f389d40cf6a4ab777f4e14a30196210f01fbf757e3de1fd03826266

See more details on using hashes here.

Provenance

The following attestation bundles were made for esm_cpp-0.2.1-cp310-cp310-macosx_11_0_arm64.whl:

Publisher: wheels.yml on ayan-goel/esm-cpp

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

File details

Details for the file esm_cpp-0.2.1-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for esm_cpp-0.2.1-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 74463df0c57d56c7b9525f95f83917cf7b8efc1b435cdea113ff11e8d76db40a
MD5 4c10bb7eac31b7b384114120ecec58e6
BLAKE2b-256 1ef52c173ed2b8efe298cbd0f7209171677bc22deea899e29743102af9dd5f15

See more details on using hashes here.

Provenance

The following attestation bundles were made for esm_cpp-0.2.1-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: wheels.yml on ayan-goel/esm-cpp

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

File details

Details for the file esm_cpp-0.2.1-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for esm_cpp-0.2.1-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 f6343583efee674d2b1b527da96b286b7d35fc6298b69f556aee75c898ed1811
MD5 90810b15993b9e4fa93c785cad53975a
BLAKE2b-256 ffbd98e541f101c8eebf591f683bc25a71c5c5e57b8c942a0b351e3160a17fec

See more details on using hashes here.

Provenance

The following attestation bundles were made for esm_cpp-0.2.1-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl:

Publisher: wheels.yml on ayan-goel/esm-cpp

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

File details

Details for the file esm_cpp-0.2.1-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for esm_cpp-0.2.1-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 540ae3875444e8cdbebd3892e79c09a4a766eb4f6ce467747a7269c651b619cb
MD5 69e92560173ef6f1f4da6e3534309d3d
BLAKE2b-256 3492a489a9dd111b1940c030524004d7e8e9a80e1832e2994e2aa8c8a1a3940d

See more details on using hashes here.

Provenance

The following attestation bundles were made for esm_cpp-0.2.1-cp39-cp39-macosx_11_0_arm64.whl:

Publisher: wheels.yml on ayan-goel/esm-cpp

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