EnsembleQL
EnsembleQL is an open-source, declarative temporal query engine for molecular-dynamics trajectories. It lets computational biologists and chemists ask when molecular behavior occurs and how events relate in time, instead of rebuilding each analysis as a bespoke array-processing script.
trajectory -> observables -> predicates -> events -> temporal relationships
The first milestone focuses on transient contacts in intrinsically disordered proteins (IDRs). Its execution engine is C++20; pybind11 exposes a compact Python and CLI interface.
Why events, not only averages?
Frame-wise contact probabilities can erase order. A conventional analysis might say:
R17-D42 = 32%
R17-E53 = 29%
Those values cannot distinguish independent contacts from a directed interaction switch. EnsembleQL can instead report:
R17-D42 -> R17-E53 switching events: 14
median transition gap: 0.8 ns
Events are maximal contiguous intervals over which a frame predicate is true. Temporal operators act on those intervals independently of the molecular observable that produced them.
Quick start
Install a released Linux or macOS wheel from PyPI:
python -m pip install ensembleql
Release wheels include the Chemfiles backend. The commands below build from a source checkout.
Build and test the dependency-free native core:
cmake -S . -B build -DENSEMBLEQL_BUILD_PYTHON=OFF
cmake --build build -j
ctest --test-dir build --output-on-failure
Enable additional trajectory formats—including XTC, TRR, DCD, Amber NetCDF, GRO, LAMMPS trajectories, and TNG—through an installed chemfiles library, or fetch the pinned stable release during configuration:
cmake -S . -B build -DENSEMBLEQL_FETCH_CHEMFILES=ON
cmake --build build -j
Use -DENSEMBLEQL_REQUIRE_CHEMFILES=ON when configuration should fail rather than produce a built-in-only build. Python exposes eql.chemfiles_backend_available() and eql.supported_trajectory_extensions() for capability checks.
To include the backend in an editable Python installation:
CMAKE_ARGS="-DENSEMBLEQL_FETCH_CHEMFILES=ON -DENSEMBLEQL_REQUIRE_CHEMFILES=ON" \
python -m pip install -e .
For the Python package (Python 3.11+), install into an isolated environment. The build installs its pybind11/scikit-build dependencies:
python -m venv .venv
source .venv/bin/activate
python -m pip install -e .
pytest
Run the included IDR contact-switching example:
from pathlib import Path
import ensembleql as eql
root = Path("examples/idr_contact_switching")
traj = eql.load(root / "switching.xyz", topology=root / "switching.pdb")
events = traj.query("""
FIND CONTACT(resid 17, resid 42)
FOLLOWED_BY CONTACT(resid 17, resid 53)
WITHIN 3ns;
""")
print(events)
Two end-to-end research fixtures are included: IDR contact switching and a peptide–surface adsorption mechanism. Both are intentionally small enough to audit frame by frame; they demonstrate query semantics rather than supply physical cutoff recommendations.
PDB files can be queried directly: a file without MODEL records is one frame, while each MODEL block in an ensemble is a frame. When a trajectory has no timestamps, provide an explicit fallback spacing. Embedded timestamps always take precedence:
traj = eql.load("trajectory.xyz", topology="structure.pdb", default_timestep="2fs")
The synthetic trajectory includes an R17-D42 contact, a one-frame boundary where both contacts exist, then an R17-E53 contact. EnsembleQL returns one directed switch from 0 to 4000 ps with a zero-ps transition gap. This preserves timing and direction that two contact probabilities do not.
DSL
Implemented queries include:
FIND CONTACT(resid 17, resid 42);
FIND CONTACT(resid 17, resid 42, cutoff=0.35nm);
FIND CONTACT(resid 17, resid 42) FOR >= 5ns;
FIND DISTANCE(resid 17, resid 42) < 0.8nm;
FIND RG(protein) < 2.0nm FOR >= 10ns;
FIND CONTACT_COUNT(resid 1:20, resid 40:60) >= 4;
FIND RG(protein, mass_weighted=true) < 2.0nm;
FIND CONTACT_COUNT(resid 1:20, resid 40:60, mode=residue) >= 4;
FIND CONTACT(resid 17, resid 42) OVERLAPS CONTACT(resid 17, resid 53);
FIND HBOND(name N, name O, distance=0.35nm, min_angle=150deg);
FIND DIHEDRAL(name C1, name N2, name CA2, name C2) < -30deg;
FIND HELIX(resid 20:32, minimum_fraction=0.7);
FIND SASA(protein, probe=0.14nm, points=192) < 40nm2;
FIND RMSD(protein) < 0.2nm;
FIND COORDINATION_NUMBER(resname ZN, name O, cutoff=0.3nm) >= 4;
FIND SALT_BRIDGE(resname ARG and name CZ, resname ASP and name CG);
FIND AROMATIC_STACKING(resid 10, resid 25);
FIND SURFACE_DISTANCE(protein, resname SUR) < 0.4nm;
FIND ORIENTATION(resid 1, resid 10, axis=z) < 30deg;
FIND CONTACT(resid 17, resid 42) REPEATS >= 3 WITHIN 20ns;
FOLLOWED_BY, WITHIN, IMMEDIATELY_FOLLOWED_BY, BEFORE, PRECEDES, AFTER, OVERLAPS, DURING, UNTIL, REPEATS, FOR, AND, and OR have AST nodes. Parentheses can group temporal expressions. The parser only creates an AST; the planner resolves selections and deduplicates required observables; the engine then evaluates every required predicate in a single streaming traversal and retains events rather than a full boolean time series.
Selections support resid 17, resid 17:25, name CA, resname ARG, chain A, protein, and hydrogen. They compose with case-insensitive and, or, not, and parentheses; and binds more tightly than or.
CONTACT and CONTACT_COUNT use a 0.45 nm default cutoff. Override it with a dimensionally checked option such as cutoff=4A or cutoff=0.35nm. CONTACT_COUNT accepts mode=atom (the default) or mode=residue; options can appear in either order.
CLI
ensembleql query \
--topology examples/idr_contact_switching/switching.pdb \
--trajectory examples/idr_contact_switching/switching.xyz \
--file examples/idr_contact_switching/query.eql
ensembleql query --topology structure.pdb --trajectory trajectory.xyz \
--default-timestep 2fs \
--query "FIND CONTACT(resid 17, resid 42) FOR >= 2ns;" --format json
Output formats are table, csv, and json. EventResults.to_dataframe() returns a pandas DataFrame when pandas is installed and otherwise returns a list of records. EventResults also provides recurrence statistics, explicitly normalized event frequencies, conditional probabilities, transition matrices, motif and recurring-subsequence counts, temporal clusters, event graphs, and aggregated state-transition networks.
Inspect a query before reading trajectory frames:
ensembleql explain \
--topology examples/idr_contact_switching/switching.pdb \
--file examples/idr_contact_switching/query.eql
The explanation reports resolved selection expressions, canonical deduplicated observables, frame predicates, temporal operations, and the execution-plan tree. Use --format json for machine-readable output. Python provides the same information through traj.explain(query) or eql.explain(query, topology="structure.pdb").
Each Python Trajectory retains parsed and topology-resolved plans by exact query text. Repeated query() and explain() calls reuse them. Inspect traj.cached_plan_count or call traj.clear_plan_cache() when managing a long-lived interactive session.
Scientific definitions and units
- Coordinates and distances are normalized to nm. XYZ coordinates are interpreted as angstroms; PDB is used for topology metadata only.
- Times are normalized to ps. Supported distance units are
nm,angstrom, andA; supported time units arefs,ps,ns, andus. Query thresholds and configurable fallback timesteps require explicit units except integer-like counts. DISTANCE(A,B)is the minimum distance between distinct atoms in A and B. It uses Euclidean distance without a cell and a nearest-image search for orthorhombic or triclinic periodic cells.CONTACT(A,B)is true when that minimum distance is less than or equal to 0.45 nm.CONTACT_COUNTcounts unique unordered atom pairs, or unique unordered(chain, resid)pairs withmode=residue, at or below the same inclusive cutoff. Both honor orthorhombic and triclinic periodic boundaries.RG(A)is the unweighted root-mean-square distance of selected atom coordinates from their geometric centroid.mass_weighted=trueuses standard atomic weights derived from PDB element symbols. On periodic frames, both variants reconstruct the selected atoms by traversing PDBCONECTbonds before calculating the centroid. See observable definitions.- Event endpoints are the timestamps of the first and last true sampled frames; duration is
end - start. Single-sample events therefore have zero observed duration. Irregular timestamps are supported, while duplicate or decreasing timestamps are rejected.FOR >=, contact cutoffs,WITHIN, and interval boundary comparisons are inclusive. See sampled-time event semantics. - Periodic cells use a nearest-image search over neighboring lattice translations. XYZ comments accept
box=20,20,20A; extended XYZ accepts a fullLattice="..."matrix in angstroms. PeriodicRGrequires the selected atoms to belong to one connected PDB bond component. See periodic-boundary conventions.
Architecture
Public headers separate trajectory/topology I/O, selections, geometry, observables, event extraction, interval algebra, AST parsing, planning, and execution. FrameReader is the backend-neutral streaming interface used by the built-in XYZ/PDB readers and the optional multi-format Chemfiles adapter. Observable classes are likewise independent of the parser.
Contact enumeration uses spatial hashing for sufficiently large non-periodic, orthorhombic, and triclinic selections, while small selections use the reference pairwise kernel. Stateful contact observables reuse Verlet-style candidate lists across frames and rebuild after a half-skin displacement or cell change. With OpenMP available, Cartesian candidate-distance filtering uses an explicit SIMD loop and SASA distributes selected atoms across threads; configure with -DENSEMBLEQL_ENABLE_OPENMP=OFF to force serial kernels. Boolean CONTACT evaluation retains scalar early exit. Other extension points include memory-mapped trajectory readers and additional observables. See the roadmap.
Current limitations
PDB supplies topology metadata, element-derived standard atomic weights, and explicit CONECT bonds. XYZ and single- or multi-model PDB trajectories are always supported; the optional chemfiles backend adds the formats documented in trajectory backends. PDB CRYST1 records preserve orthorhombic or triclinic cells. Chemfiles coordinates and cell vectors are converted from angstroms to nm; numeric time properties are interpreted as ps, while formats without one use the configured fallback. Periodic RG requires connected bond metadata, and EnsembleQL does not yet infer standard-residue bonds. Event intervals use sampled timestamps and therefore do not infer behavior between frames. AND/OR combine frame predicates; temporal relations operate on extracted intervals.
Development
The native target compiles with -Wall -Wextra -Wpedantic; CI additionally enables ENSEMBLEQL_WARNINGS_AS_ERRORS. Enable microbenchmarks with -DENSEMBLEQL_BUILD_BENCHMARKS=ON. The synthetic benchmarks compare optimized and pairwise contact detection at increasing atom counts, exercise neighbor-list reuse and triclinic hashing, report boolean-contact early-exit time, and cover streaming event extraction and temporal joins.
The scientific-validation suite compares every observable family with pinned MDAnalysis, MDTraj, or NumPy calculations on published AdK and membrane/peptide trajectories. Its machine-readable manifests record provenance, checksums, thresholds, tolerances, and expected event intervals; the large generated fixtures remain outside Git.
Maintainer release builds use tested Linux and macOS wheels, Trusted Publishing, and tag/version consistency checks. See the contribution guide, release procedure, and changelog. Research users can cite the software using CITATION.cff.
Contributions should preserve scientific definitions, add boundary-condition tests, and keep file-format backends independent from the engine.
Release files for ensembleql 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| ensembleql-0.1.0.tar.gz | 100.8 kB | Details |
Built distributions (wheels)
Total release size: 18.3 MB
Release files / ensembleql-0.1.0.tar.gz
| Download URL | ensembleql-0.1.0.tar.gz |
|---|---|
| Size | 100.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
35aec1a91e7e920564ae3441d7c388c1d5660a924f65084aff33baff74dbe2ae
|
|
BLAKE2b-256 checksum How to use checksums |
0b0cdc63ed26456f5fb3357ce3bbe02b8fbfd72a2a1e1af9900dd47405692755
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 8, 2026.
Transparency logRelease files / ensembleql-0.1.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
| Download URL | ensembleql-0.1.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 2.0 MB |
| Tags | CPython 3.14 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
84cebc882cfab158235a39e4874a9a1de27bed4bd2654d46b5103aa1db3ca75f
|
|
BLAKE2b-256 checksum How to use checksums |
96a63e3adf4a3dd4667ce45d5aa3db40425b8e3dda03d58213498bdf940efa9c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 8, 2026.
Transparency logRelease files / ensembleql-0.1.0-cp314-cp314-macosx_11_0_arm64.whl
| Download URL | ensembleql-0.1.0-cp314-cp314-macosx_11_0_arm64.whl |
|---|---|
| Size | 1.2 MB |
| Tags | CPython 3.14 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
1c374eb8baf687515211c025c48602f1f1ebe5cd7b03096fc8d7fed4cbd629e1
|
|
BLAKE2b-256 checksum How to use checksums |
7bfae5619de68f608e50fe2e818dcaa5f84bc0b32b671ba64b891bf00be91dff
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 8, 2026.
Transparency logRelease files / ensembleql-0.1.0-cp314-cp314-macosx_10_15_x86_64.whl
| Download URL | ensembleql-0.1.0-cp314-cp314-macosx_10_15_x86_64.whl |
|---|---|
| Size | 1.3 MB |
| Tags | CPython 3.14 macOS 10.15+ x86-64 |
|
SHA-256 checksum How to use checksums |
27baaa297ceeec10a8839c4cec7b29a8ceafd57b6fec33166abbdfbee5c5001e
|
|
BLAKE2b-256 checksum How to use checksums |
3cd7c05ac68cd79af071330b2f355ee1949b6153566b53450200a82c2ab7a5eb
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 8, 2026.
Transparency logRelease files / ensembleql-0.1.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
| Download URL | ensembleql-0.1.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 2.0 MB |
| Tags | CPython 3.13 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
5148b83d368808bf70cee59c08d406fed68910383b5f936f311ba219bb72e8d0
|
|
BLAKE2b-256 checksum How to use checksums |
1a367d914e138196bf39afec1ea49ea3e257d6cb91649f9897fe4253d4f0fb94
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 8, 2026.
Transparency logRelease files / ensembleql-0.1.0-cp313-cp313-macosx_11_0_arm64.whl
| Download URL | ensembleql-0.1.0-cp313-cp313-macosx_11_0_arm64.whl |
|---|---|
| Size | 1.2 MB |
| Tags | CPython 3.13 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
f24acd1c9de1dfc49d4a7f80f1aad652335a85a5d9722438ba7e0c19e605ae4f
|
|
BLAKE2b-256 checksum How to use checksums |
a75acfadb013f5704fea6d6160ed6331807f71b008609ea518ff75f5dbc91e1e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 8, 2026.
Transparency logRelease files / ensembleql-0.1.0-cp313-cp313-macosx_10_13_x86_64.whl
| Download URL | ensembleql-0.1.0-cp313-cp313-macosx_10_13_x86_64.whl |
|---|---|
| Size | 1.3 MB |
| Tags | CPython 3.13 macOS 10.13+ x86-64 |
|
SHA-256 checksum How to use checksums |
75019392c78658001d6c80266e19b3f805d8b990d2ec8e8a2d8bdefef4e8de24
|
|
BLAKE2b-256 checksum How to use checksums |
89f71ce7f268f1cde6d72b01886898392e06200508cd49c5cc7b7b85ba80cfb1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 8, 2026.
Transparency logRelease files / ensembleql-0.1.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
| Download URL | ensembleql-0.1.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 2.0 MB |
| Tags | CPython 3.12 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
97a2f6ea9aa9eb763892f538ccd46036f8a68a415ce6f18745e6241a9a83dace
|
|
BLAKE2b-256 checksum How to use checksums |
e3b112c556ff19528c53fc05b26d5faed73289c0dc5309d1c5bb55bb7026544f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 8, 2026.
Transparency logRelease files / ensembleql-0.1.0-cp312-cp312-macosx_11_0_arm64.whl
| Download URL | ensembleql-0.1.0-cp312-cp312-macosx_11_0_arm64.whl |
|---|---|
| Size | 1.2 MB |
| Tags | CPython 3.12 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
301ccda9700f07454da35a29f4e8f9ecc5eab1c6fb1db09ca2a84252571273aa
|
|
BLAKE2b-256 checksum How to use checksums |
280942568f8e9676ca6008b2f83335ecb61dcf0648cef09d9ff220c72e2593ba
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 8, 2026.
Transparency logRelease files / ensembleql-0.1.0-cp312-cp312-macosx_10_13_x86_64.whl
| Download URL | ensembleql-0.1.0-cp312-cp312-macosx_10_13_x86_64.whl |
|---|---|
| Size | 1.3 MB |
| Tags | CPython 3.12 macOS 10.13+ x86-64 |
|
SHA-256 checksum How to use checksums |
417d38f1f583f4b3c32e5c3d55190dd22a4df05933016e8c46d63cda19bea96c
|
|
BLAKE2b-256 checksum How to use checksums |
1bdaead3a5e9fe9fb89ef5f4265530fb069f8ff6da040453a1fc6bdccb1fd847
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 8, 2026.
Transparency logRelease files / ensembleql-0.1.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
| Download URL | ensembleql-0.1.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 2.0 MB |
| Tags | CPython 3.11 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
f5c428c59caaaaa876140e8af02e4c73d54e131e8cb51712ac6eee598f249dc8
|
|
BLAKE2b-256 checksum How to use checksums |
14fc4a47d594bf81045f82041b2b8c795741175249058fccc74af2d446ea6069
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 8, 2026.
Transparency logRelease files / ensembleql-0.1.0-cp311-cp311-macosx_11_0_arm64.whl
| Download URL | ensembleql-0.1.0-cp311-cp311-macosx_11_0_arm64.whl |
|---|---|
| Size | 1.2 MB |
| Tags | CPython 3.11 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
a25c8d10325e230cabd9b36476c4803b38c149ddf7a13b1e8857d58d45afdc87
|
|
BLAKE2b-256 checksum How to use checksums |
add7d3cba3c8dc038b7fd05d3607679e46456e71d852b713fc7c9ada08a7c514
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 8, 2026.
Transparency logRelease files / ensembleql-0.1.0-cp311-cp311-macosx_10_9_x86_64.whl
| Download URL | ensembleql-0.1.0-cp311-cp311-macosx_10_9_x86_64.whl |
|---|---|
| Size | 1.3 MB |
| Tags | CPython 3.11 macOS 10.9+ x86-64 |
|
SHA-256 checksum How to use checksums |
d8b61b93df388b1978c043ac6b989e8cd8c3682e73dc57080813468ee62b0af5
|
|
BLAKE2b-256 checksum How to use checksums |
649bfe093c43886c33cffc0ef43e6f51dc2b561f926b1521e8c187a484a94f9c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 8, 2026.
Transparency log