QuSpect
A quantum computing SDK for research and education.
🇨🇳 中文用户请参阅 README_CN.md
QuSpect provides an intuitive, fluent Python API for constructing quantum circuits, visualizing them as ASCII diagrams or scalable SVG, and simulating state-vector evolution with shot-based sampling. Simulation and exact adjoint gradients are backed by the C++ high-performance engine.
Table of Contents
- Features
- Installation
- Quick Start
- Core Modules
- Visualization
- Simulation
- Cloud QPU
- C++ Native Backend
- Documentation
- Development
Features
- Fluent circuit API — build circuits with method chaining; no pre-declared qubit counts
- 24 built-in gate templates — standard gates (H, X, CX, CCX, SWAP…) and parameterized rotations (RX, RY, RZ, U3…), plus measurements and barriers
- Symbolic parameters — define variational circuits with named
Parameterplaceholders and bind to values later - DAG compiler — compile circuits into a DAG IR with topological ordering, layer partitioning, and critical path analysis
- Optimization passes —
GateCancellation,CommutationAnalysis,RotationMerging,SingleQubitGateFusion,EliminateDiagonalBeforeMeasurement - Operator algebra —
QubitOperator(Pauli strings) andFermionOperator(ladder operators) with Jordan-Wigner transforms - State-vector simulation — native C++ evolution, projective measurement, and shot-based sampling
- Variational objectives — exact C++ adjoint gradients and shot-based parameter-shift gradients through one structured API
- Recoverable batch execution — labelled circuit batches, flattened parameter sweeps, and credential-free job references
- Visualization — terminal circuit diagrams, SVG circuit rendering (3 themes), sampling result charts (hbar, vbar, dot, SVG)
- IR export — OpenQASM 2.0 and QSAL (native JSON) export
- Cloud QPU — unified
Backendinterface for local simulators and real quantum hardware - iSing optimization — QUBO/Ising model conversion, recoverable cloud submission,
and objective decoding with
quspect[isingq]; see iSing cloud optimization. - Transpiler — native-gate decomposition, topology-safe DAG optimization, constrained physical-qubit mapping, and SABRE SWAP routing
- C++ backend — high-performance simulation and gradient execution with AVX2 SIMD acceleration and a pybind11 bridge
Installation
python -m pip install quspect
Pre-built binary wheels include the C++ simulation engine (with OpenMP), so
Simulator, NativeExecutor, and exact adjoint gradients work right after
pip install — no compiler needed.
| Platform | Architecture | Python | Wheel |
|---|---|---|---|
| Linux (glibc ≥ 2.28, e.g. Ubuntu 20.04+, RHEL/Rocky 8+, Debian 10+) | x86_64 | 3.10–3.15 | manylinux_2_28_x86_64 |
| Windows 10/11 | x86_64 (64-bit Python) | 3.10–3.15 | win_amd64 |
| macOS 14 (Sonoma) or newer | Apple Silicon (arm64) | 3.10–3.15 | macosx_14_0_arm64 |
- Windows: 64-bit CPython 3.10–3.15 needs nothing extra — the MSVC C++ and OpenMP runtimes are bundled in the wheel.
- Other platforms (Linux aarch64, musl/Alpine, 32-bit Windows, Intel Macs,
macOS < 14, PyPy, …) install from the source distribution, which compiles the
C++ extension. This needs CMake ≥ 3.22 and a C++17 compiler — Visual Studio
Build Tools on Windows, Xcode Command Line Tools (+
brew install libompfor OpenMP) on macOS, GCC or Clang on Linux — and network access to fetch nlohmann/json.
Runtime knobs:
- On x86_64 the AVX2 + FMA kernels are selected automatically when the CPU
supports them; set
QUSPECT_DISABLE_AVX2=1to force the portable scalar kernels (read once, at the first native call). - Parallel kernels use OpenMP; set
OMP_NUM_THREADSto limit the number of threads.
python -c "from quspect.native import capabilities; print(capabilities())"
For development (includes linters, type checker, test runner, and docs tools):
git clone https://github.com/QuSpect/quspect.git
cd quspect
python -m pip install -e ".[dev]"
python -m pip install pybind11
The editable install is pure Python and does not compile the C++ extension; build it as described below.
C++ Native Backend
In a source checkout, build the extension before using Simulator,
DensityMatrixSimulator, MonteCarloSimulator, NativeExecutor, or
AdjointEngine:
cmake -S cpp -B cpp/build -G Ninja \
-DPython_EXECUTABLE="$(python -c 'import sys; print(sys.executable)')"
cmake --build cpp/build
ctest --test-dir cpp/build --output-on-failure
python -c "from quspect.native import capabilities; print(capabilities())"
Requirements: C++17 compiler, CMake ≥ 3.22, Ninja, pybind11, and optionally an
AVX2-capable CPU. The build writes the extension into the local quspect/
package, so the editable install above can import it directly. The first
configure requires network access to fetch nlohmann/json and, when tests are
enabled, GoogleTest. Pass -DQSPECT_BUILD_AVX2=OFF for a scalar-only build.
Maintainers: see docs/source/releasing.rst for how wheels are built and published to PyPI.
Quick Start
Build a Circuit
from quspect import QuantumCircuit
# Create a Bell state (entanglement)
circ = QuantumCircuit(name="bell")
circ.h(0) # Hadamard on qubit 0
circ.cx(0, 1) # CNOT with control=0, target=1
circ.measure_all() # measure all qubits
print(circ.num_qubits) # 2 — dynamically inferred
print(circ.num_clbits) # 2
print(len(circ)) # 3 instructions
Visualize
# Terminal ASCII diagram
print(circ.draw())
# SVG rendering (inline in Jupyter or save to file)
svg = circ.svg(style="dark")
svg.to_file("bell_circuit.svg")
The Bell circuit rendered by circ.svg() ("light" / "dark" themes, following your GitHub color scheme):
Simulate
from quspect.simulation import Simulator
sim = Simulator(seed=42)
result = sim.run(circ, shots=1024)
print(result.counts) # approximately {'00': 512, '11': 512}
print(result.most_frequent()) # one of the two Bell-state outcomes
# Statistical summary and bar chart
result.display(style="hbar")
Parameterized Circuits
from quspect import QuantumCircuit, Parameter
theta, phi = Parameter("θ"), Parameter("φ")
circ = QuantumCircuit(name="variational")
circ.rx(theta, 0)
circ.ry(phi, 1)
circ.cx(0, 1)
# Bind to concrete values before simulation
bound = circ.bind_parameters({theta: 0.5, phi: 1.2})
Variational Objectives and Gradients
Define a measurement-free ansatz and named observables once, then compile the same objective for exact adjoint differentiation or hardware-shaped sampling:
from quspect import (
AdjointEngine,
ObservableObjective,
Parameter,
QuantumCircuit,
QubitOperator,
SamplingEngine,
Simulator,
)
theta = Parameter("theta")
ansatz = QuantumCircuit(name="one_qubit_vqe").ry(theta, 0)
hamiltonian = QubitOperator({((0, "Z"),): 1.0})
objective = ObservableObjective(ansatz, {"energy": hamiltonian})
# Exact noiseless value and gradient from the native adjoint engine.
exact_plan = AdjointEngine(dtype="float64").compile(objective)
exact = exact_plan.evaluate({theta: 0.5})
print(exact.value("energy"), exact.derivative("energy"))
print(exact_plan.parameter_order) # authoritative optimizer-vector order
# The same objective through grouped measurements and parameter shifts.
sampled_plan = SamplingEngine(
Simulator(seed=7),
shots=4096,
grouping="qwc",
).compile(objective)
sampled = sampled_plan.evaluate({theta: 0.5})
print(sampled.value("energy"), sampled.derivative("energy"))
print(sampled_plan.num_measurement_groups)
print(sampled_plan.num_experiments_per_point)
# Batch optimizer points without recompiling; result axes stay explicit.
sweep = exact_plan.evaluate_many(
[{theta: -0.2}, {theta: 0.0}, {theta: 0.2}]
)
print(sweep.values.shape) # (3, 1)
print(sweep.jacobian.shape) # (3, 1, 1)
Finite-shot values and gradients fluctuate statistically; compare them against the adjoint result rather than expecting exact equality. See Variational Objectives for parameter sweeps, optimizer integration, asynchronous submission, and job recovery.
Circuit Composition
# Reusable sub-circuit
bell_pair = QuantumCircuit(name="bell")
bell_pair.h(0).cx(0, 1)
# Compose into a larger circuit
main = QuantumCircuit(name="composed")
main = main.compose(bell_pair, qubits=[0, 2]) # map sub's 0,1 → main's 0,2
main = main.compose(bell_pair, qubits=[1, 3]) # map sub's 0,1 → main's 1,3
Algorithm Examples
The repository includes complete, classically checkable examples:
examples/qaoa_max_cut.py— optimize a four-node Max-Cut QAOA ansatz with exact adjoint gradients and SciPy BFGS.examples/grover_long.py— construct and simulate Grover–Long exact search, including matched phases and clean work qubits.examples/portfolio_selection.py— select a fixed-size mean-variance portfolio through the full quadratic-to-Ising pipeline.examples/wireless_channel_assignment.py— assign wireless channels with one-hot and pairwise interference constraints.
Core Modules
QuantumCircuit
The central class for building quantum programs. Qubit and classical bit counts are dynamically inferred from the indices you use — no need to pre-declare circuit size.
| Method | Description |
|---|---|
.h(q) .x(q) .y(q) .z(q) |
Single-qubit gates |
.s(q) .sdg(q) .t(q) .tdg(q) |
Phase / rotation gates |
.rx(θ,q) .ry(θ,q) .rz(θ,q) .p(θ,q) |
Parameterized rotations |
.cx(c,t) .cz(c,t) .swap(a,b) |
Two-qubit gates |
.ccx(c1,c2,t) |
Toffoli (controlled-controlled-X) |
.measure(qubits, clbits) |
Projective measurement |
.measure_all() |
Measure all qubits |
.barrier(*qubits) |
Insert a barrier |
.compose(other, qubits, clbits, inplace=False) |
Compose another circuit, returning a copy by default |
.bind_parameters({p: v}) |
Bind symbolic parameters |
.to_dag() |
Compile to DAG IR |
.draw() |
ASCII circuit diagram |
.svg(style, width, scale) |
SVG circuit diagram |
Gates
Gates are lightweight metadata objects — they store name, qubit count, and parameter info but not unitary matrices. Import the public helper with from quspect.gates import gate_matrix when a matrix is needed.
from quspect.gates.standard import H, CX, CCX, SWAP
from quspect.gates.parameterized import RX, RY, RZ, U3
# Standard gates are module-level singletons
circ = QuantumCircuit()
circ.append(H, [0])
circ.append(CX, [0, 1])
circ.append(CCX, [0, 1, 2])
# Parameterized gates — create with values
gate_ry = RY.with_params(0.5)
circ.append(gate_ry, [1])
DAG IR & Optimization
Circuits compile to a Directed Acyclic Graph representation that makes qubit/clbit dependencies explicit:
dag = circ.to_dag()
print(dag.num_nodes(), dag.num_edges())
print(dag.topological_order())
print(dag.layers()) # partition into parallel layers
print(dag.critical_path_length()) # number of operations on the longest path
The PassManager runs optimization passes on the DAG:
from quspect import PassManager, GateCancellation, RotationMerging
pm = PassManager([
GateCancellation(),
RotationMerging(),
])
optimized = pm.run(dag)
Operators
Support for second-quantized operator algebra:
from quspect import FermionOperator, QubitOperator
from quspect.operators.transforms import jordan_wigner
# Pauli string operators
H = QubitOperator({
((0, "X"), (1, "X")): 1.0,
((0, "Z"),): -0.5,
})
# Fermionic operators
f = FermionOperator({((2, 1), (1, 1), (0, 0), (3, 0)): 2.0})
# Jordan-Wigner transformation: fermions → qubits
qubit_op = jordan_wigner(f)
IR Export
from quspect.ir import QASM2ExportConfig, QASM2Exporter, QASM2ExportMode
from quspect.ir.qsal import dumps as qsal_dumps
# OpenQASM 2.0
print(QASM2Exporter().export(circ)) # strict mode
config = QASM2ExportConfig(mode=QASM2ExportMode.DECOMPOSE)
print(QASM2Exporter(config).export(circ))
config = QASM2ExportConfig(mode=QASM2ExportMode.EXTENDED)
print(QASM2Exporter(config).export(circ))
# QSAL (native JSON IR)
print(qsal_dumps(circ))
Visualization
Terminal Diagrams
Zero-dependency terminal circuit diagrams via circuit.draw():
- Quantum wires as
-, classical wires as= - Gate labels in
[brackets], controls aso, targets labelled - SWAP gates as
xmarks connected vertically - Barriers as
|
SVG Rendering
Scalable vector graphics via circuit.svg(), with Jupyter notebook inline support:
svg = circ.svg(style="dark", width=600, scale=1.2)
print(svg) # SVG string
svg.to_file("out.svg") # save to file
Three built-in themes:
| Theme | Background | Best for |
|---|---|---|
"official" |
White, slate text | Publications, papers |
"light" |
Cool gray | Light-mode IDEs, docs |
"dark" |
Dark navy | Dark-mode notebooks, slides |
Custom themes:
from quspect.visualization import SvgStyle, draw_svg_circuit
custom = SvgStyle(
background="#1a1a2e",
wire="#e94560",
classical_wire="#b8adc8",
gate_fill="#0f3460",
gate_stroke="#16213e",
text="#ffffff",
control="#e94560",
barrier="#8a744d",
measure_fill="#211040",
channel_fill="#2a153c",
channel_stroke="#c77532",
)
svg = draw_svg_circuit(circ, style=custom)
Sampling Charts
Result visualization with statistical annotations:
result.display(style="hbar", sort_mode="count_desc")
Four chart styles: hbar, vbar, dot, svg.
Side-by-side comparison:
from quspect.visualization import compare_results
compare_results(
result1,
result2,
label_a="Ideal",
label_b="Noisy",
)
Simulation
The simulator implements the Backend ABC, sharing the same .run() interface as cloud QPUs. It delegates to the C++ native engine for state-vector evolution:
from quspect import QuantumCircuit
from quspect.simulation import Simulator
from quspect.backends import Backend
sim = Simulator(seed=42)
assert isinstance(sim, Backend) # same interface as cloud backends
# State-vector evolution uses a measurement-free circuit and opts in to storage.
unitary = QuantumCircuit().h(0).cx(0, 1)
state_result = sim.run(unitary, save_statevector=True)
print(state_result.statevector)
# Shot-based sampling with projective measurement
sampled_circuit = unitary.copy().measure_all()
result = sim.run(sampled_circuit, shots=4096)
# Access results
print(result.counts) # approximately {'00': 2048, '11': 2048}
print(result.probabilities) # approximately {'00': 0.5, '11': 0.5}
print(result.most_frequent()) # one of the Bell-state outcomes
print(result.top_outcomes(3)) # top-3 outcomes
Measurement modes:
- Terminal measurements — all
measureops at circuit end: evolve once, then sample - Mid-circuit measurements — measurements interleaved with gates: full re-execution per shot with state collapse
Backend-neutral Parameter Sweeps
ExecutionRequest.sweep() snapshots one parameterized template and binds every
point in order. The same labelled request works with a local simulator or a
batch-capable cloud backend:
import math
from quspect import ExecutionRequest, Parameter, QuantumCircuit, Simulator
theta = Parameter("theta")
template = QuantumCircuit().ry(theta, 0).measure_all()
request = ExecutionRequest.sweep(
template,
[{theta: 0.0}, {theta: math.pi}],
labels=["zero", "one"],
shots=128,
)
batch = Simulator(seed=7).execute(request)
print(batch.by_label("zero").counts) # {'0': 128}
print(batch.by_label("one").counts) # {'1': 128}
Cloud QPU
QuSpect provides a unified Backend interface — the same backend.run(circuit, shots=N) API works for both local simulators and remote quantum hardware. Currently LogicalQubit (逻辑比特) is supported; additional platforms can be added by implementing CloudBackend.
Cloud Setup
# Set your API key (get one from https://cloud.logicalqubit.com)
export LQCLOUD_API_KEY=qk_your_api_key_here
# Install QuSpect's provider extra
pip install "quspect[logicalqubit]"
Run on Real Hardware
The calls below create real provider jobs and may consume quota or incur cost.
Check provider.list_backends() and the selected backend's current metadata
before choosing its name or physical layout.
from quspect import QuantumCircuit
from quspect.backends.logicalqubit import LogicalQubitProvider
# 1. Connect to the cloud platform
provider = LogicalQubitProvider()
backend = provider.get_backend("QZ02") # select a QPU visible to your account
print(backend.name)
print(backend.num_qubits)
print(backend.native_gate_set)
print(backend.platform_name)
# 2. Build any circuit
qc = QuantumCircuit(name="bell")
qc.h(0)
qc.cx(0, 1)
qc.measure_all()
# 3. Run — same API as the local Simulator
result = backend.run(qc, shots=2000)
print(result.most_frequent())
print(result.counts)
Compilation and Physical Layout
By default backend.run() attempts to compile a bound circuit for the target:
- Decompose — non-native gates are recursively decomposed to the chip's native gate set (e.g.
CX → H + CZ + H,RX → H + RZ + H) - Optimize — topology-independent cancellation, commutation, rotation merging, and single-qubit fusion run before physical routing
- Layout + Route — SABRE finds an initial logical→physical mapping and inserts SWAP gates so every two-qubit gate respects the coupling topology
# A nontrivial logical circuit that may require routing.
qc = QuantumCircuit(name="calibrated_subset")
qc.h(0)
qc.cx(0, 1).cx(0, 2).cx(0, 3)
qc.measure_all()
# Restrict layout and every inserted SWAP to a calibrated physical-qubit
# pool. SABRE chooses the starting layout inside the induced subgraph.
job = backend.submit(
qc,
shots=1000,
transpile=True,
physical_qubits=[7, 8, 9, 10, 11],
)
# Optionally fix the starting logical→physical assignment as well:
# logical q0→physical 7, q1→8, q2→9, q3→10.
job = backend.submit(
qc,
shots=1000,
transpile=True,
physical_qubits=[7, 8, 9, 10, 11],
initial_layout=[7, 8, 9, 10],
)
physical_qubits must be unique, in range, large enough for the circuit, and
must induce a connected coupling subgraph. When both options are present,
every initial_layout entry must belong to physical_qubits. Routing may use
additional workspace wires, but only from that pool; QuSpect forwards the
expanded logical→physical layout required by the routed circuit.
To submit an already compiled/topology-valid circuit without QuSpect routing,
disable transpilation. In this mode initial_layout is passed directly to
the provider and physical_qubits is not accepted:
result = backend.run(
qc,
shots=1000,
transpile=False,
initial_layout=[7, 8, 9, 10],
)
The routed circuit preserves original classical measurement targets and uses a
static provider layout even when SABRE inserts workspace SWAPs. DAG
optimization checks adjacency on every operand wire, so structures such as the
QAOA CX–RZ(target)–CX implementation of a ZZ phase are not incorrectly
cancelled.
Async Submission
For long-running jobs, submit asynchronously and poll for results:
# Submit without blocking
job = backend.submit(qc, shots=2000)
print(f"Job ID: {job.job_id}")
print(f"Status: {job.status().value}") # queued / running / completed
# Block until complete (with optional timeout)
result = job.result(timeout=600)
# Cancel if needed
job.cancel()
Batch Sampling and VQE
ExecutionRequest is the common envelope for simulators and cloud devices.
Each experiment has a stable label, and batches larger than the provider's
64-circuit limit are exposed as one recoverable composite job:
from quspect import ExecutionRequest
request = ExecutionRequest.batch(
[circuit_a, circuit_b],
labels=["theta-plus", "theta-minus"],
shots=2000,
result_format="auto",
)
job = backend.submit_request(request)
batch = job.result(timeout=600)
print(batch.by_label("theta-plus").counts)
# Safe to persist: contains IDs and shapes, never credentials.
saved_reference = job.reference.to_dict()
If a later provider chunk fails after earlier chunks were accepted,
PartialSubmissionError exposes submitted_job_ids, serializable
submitted_references, and any cancellation_failures instead of losing the
already-created task handles.
On an older LogicalQubit server, lqcloud 0.4.1 may internally fall back from
native batch to individual submissions without exposing partial child IDs if
that fallback itself fails. For experiments requiring complete rollback
visibility, set options={"provider_batching": "individual"} (or pass the same
option through SamplingEngine(execution_options=...)). QuSpect then owns each
submission and can report/cancel every task it has created; the trade-off is
one provider task per circuit.
With result_format="auto", lqcloud selects counts for narrow readout and
memory when the measured width requires per-shot output. QuSpect always
provides aggregated result.counts; when memory is returned, the original
shot sequence is also available as result.memory.
Shot-based observable objectives use the same job layer:
from quspect import ObservableObjective, SamplingEngine
objective = ObservableObjective(ansatz, {"energy": hamiltonian})
plan = SamplingEngine(
backend,
shots=4096,
execution_options={"transpile": False, "initial_layout": [0, 1]},
).compile(objective)
objective_job = plan.submit({theta: 0.2})
evaluation = objective_job.result(timeout=600)
print(evaluation.value("energy"), evaluation.derivative("energy"))
# Several optimizer points are flattened into one asynchronous provider task.
sweep_job = plan.submit_many([{theta: 0.1}, {theta: 0.2}, {theta: 0.3}])
sweep = sweep_job.result(timeout=600)
Every sampled plan carries a stable workload fingerprint in its
JobReference. On recovery, plan.attach(job) validates that fingerprint,
the backend, labels, circuit shapes, shot count, and result format before any
measurement data is decoded. Recovered multi-point jobs use
plan.attach_many(execution_job) in the same way.
The reference is a credential-free recovery manifest, not a signed receipt: keep its JSON in trusted storage. Its fingerprint prevents accidental task mix-ups but cannot authenticate a manifest deliberately rewritten by an untrusted party.
Simulator vs QPU
The unified Backend interface lets you switch between local simulation and real hardware by changing one line:
from quspect import QuantumCircuit
from quspect.simulation import Simulator
from quspect.backends.logicalqubit import LogicalQubitProvider
qc = QuantumCircuit(name="compare")
qc.h(0).cx(0, 1).measure_all()
# Local simulation
sim = Simulator(seed=42)
sim_result = sim.run(qc, shots=2000)
# Real QPU (latency depends on the provider queue)
provider = LogicalQubitProvider()
backend = provider.get_backend("QZ02")
qpu_result = backend.run(qc, shots=2000)
# Compare
for bs in sorted(sim_result.counts):
s = sim_result.get_count(bs)
q = qpu_result.get_count(bs)
print(f" |{bs}⟩: sim={s:4d} qpu={q:4d} Δ={s-q:+4d}")
C++ Native Backend
The C++ backend (cpp/) is the execution engine for local simulators and exact
adjoint gradients:
cpp/
├── include/quspect_native/ # Public headers
├── src/
│ ├── kernels/scalar/ # Portable scalar kernels
│ ├── kernels/avx2/ # SIMD-accelerated kernels (AVX2)
│ ├── kernels/dispatch/ # Runtime CPU feature dispatch
│ ├── runtime/ # StateVector, ClassicalRegister, RuntimeEngine
│ ├── ir/ # QSAL JSON decoder & program builder
│ ├── executor/ # SimulationExecutor, GradientExecutor
│ └── pybind/ # Python → C++ bridge (pybind11)
└── tests/ # GoogleTest suite (14 test files)
Python bridge:
from quspect import QuantumCircuit
from quspect.ir.qsal import dumps as qsal_dumps
from quspect.native import NativeExecutor
qc = QuantumCircuit().h(0).measure_all()
executor = NativeExecutor()
result = executor.run(qsal_dumps(qc), shots=1024)
print(result.counts)
If the extension is missing, circuit construction and other Python tooling
remain usable, but native-dependent entry points raise NativeImportError.
Documentation
Full documentation is hosted on Read the Docs at quspect.readthedocs.io (Chinese: quspect.readthedocs.io/zh-cn/latest/):
- Quickstart — installation, circuit building, simulation
- API Reference — generated documentation for the currently listed public modules
- Architecture — layered design, core concepts, architecture decisions
Build locally (the docs import the source tree directly, so the C++ extension is not needed):
python -m pip install -r docs/requirements.txt
cd docs
sphinx-build -b html source/ build/html/
sphinx-build -b html -D language=zh_CN source/ build/html/zh_CN/
Development
# Lint & format
ruff check quspect/ tests/ && ruff format quspect/ tests/
# Type check
mypy quspect/
# Run tests
pytest
# Build C++ backend & run gtest (from the repository root)
cmake -S cpp -B cpp/build -G Ninja && cmake --build cpp/build
ctest --test-dir cpp/build --output-on-failure
Tooling
| Tool | Purpose |
|---|---|
ruff |
Lint + Format |
mypy |
Static type checking (strict mode) |
pytest + pytest-cov |
Testing + coverage |
sphinx |
Documentation generation |
cmake + ninja |
C++ build system |
gtest |
C++ unit testing |
Metadata
Release files for quspect 0.2.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 | Provenance | Actions |
|---|---|---|---|---|
| quspect-0.2.0.tar.gz | 569.7 kB | With provenance | Details for quspect-0.2.0.tar.gz |
Built distributions (wheels)
Total release size: 20.7 MB
Release files / quspect-0.2.0.tar.gz
| Download URL | quspect-0.2.0.tar.gz |
|---|---|
| Size | 569.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
32f82a07c694fda60701358548622bd9c069ac3930e60934ee62fbdba22769f5
|
|
BLAKE2b-256 checksum How to use checksums |
2d09887166ee26df5b953b015d51d8a19948e14a3c9137698a05d60de26124de
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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 Oct 28, 2026.
Transparency logRelease files / quspect-0.2.0-cp315-cp315-win_amd64.whl
| Download URL | quspect-0.2.0-cp315-cp315-win_amd64.whl |
|---|---|
| Size | 1.3 MB |
| Tags | CPython 3.15 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
f5f165e575622cab1d4626920908ebaf264e40f27f477f42ba08b48bd8b4f5d9
|
|
BLAKE2b-256 checksum How to use checksums |
eada501679f3f7dfb2e84e7715baf526fc3dfcaadea79b6f94538db2b3ba8a7e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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 Oct 28, 2026.
Transparency logRelease files / quspect-0.2.0-cp315-cp315-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
| Download URL | quspect-0.2.0-cp315-cp315-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 1.2 MB |
| Tags | CPython 3.15 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
f30d88b85e2c6032f8100ec21775c243c7136476346f723255ff8071333036b6
|
|
BLAKE2b-256 checksum How to use checksums |
b144ca0631e1a134fa10ace7272b59638ca256ba94feacd1a9deb8d25d2b83ab
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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 Oct 28, 2026.
Transparency logRelease files / quspect-0.2.0-cp315-cp315-macosx_14_0_arm64.whl
| Download URL | quspect-0.2.0-cp315-cp315-macosx_14_0_arm64.whl |
|---|---|
| Size | 857.5 kB |
| Tags | CPython 3.15 macOS 14.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
095b0a8b0578fb19b535f448b5054cf9aef695038cafa846b50f64e0106c73ae
|
|
BLAKE2b-256 checksum How to use checksums |
6257cf5b1071b4df4c207294707b144238d9bad711d0314f8b4ccdc84f011755
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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 Oct 28, 2026.
Transparency logRelease files / quspect-0.2.0-cp314-cp314-win_amd64.whl
| Download URL | quspect-0.2.0-cp314-cp314-win_amd64.whl |
|---|---|
| Size | 1.3 MB |
| Tags | CPython 3.14 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
8bd8de06c12be56999ba85657d5af4110e54ebff1524535fcb1111e3757fd511
|
|
BLAKE2b-256 checksum How to use checksums |
24b0b0c62842caee4012a6486c4b658812eb1a5c3f368689f6a17338d18cd1d5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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 Oct 28, 2026.
Transparency logRelease files / quspect-0.2.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
| Download URL | quspect-0.2.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 1.2 MB |
| Tags | CPython 3.14 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
03dc4bf7c9b172448a7df79266144ebadb74ec6665ddedee63281b44d606e01a
|
|
BLAKE2b-256 checksum How to use checksums |
77d763919d2a9fe8c616bd564aa299327d7274df26e692b6f67a4bc442165f53
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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 Oct 28, 2026.
Transparency logRelease files / quspect-0.2.0-cp314-cp314-macosx_14_0_arm64.whl
| Download URL | quspect-0.2.0-cp314-cp314-macosx_14_0_arm64.whl |
|---|---|
| Size | 857.5 kB |
| Tags | CPython 3.14 macOS 14.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
f87ef47085dee79c686b75793bdb07120fa5722ad2454ef20666a548dabe22ee
|
|
BLAKE2b-256 checksum How to use checksums |
80439e3029d2fbbb39e7090b2307058e7d9410309f5fdf8163e09e394ff3f9b8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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 Oct 28, 2026.
Transparency logRelease files / quspect-0.2.0-cp313-cp313-win_amd64.whl
| Download URL | quspect-0.2.0-cp313-cp313-win_amd64.whl |
|---|---|
| Size | 1.3 MB |
| Tags | CPython 3.13 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
9d350f2cb438674eb17db017fd817f7cf67d4911fca8f5dcf0c9f20963165f16
|
|
BLAKE2b-256 checksum How to use checksums |
b8d914b6d396446eaabe675fa59c5cb0f8b99bb2962f3c1d3e79cd3af24f86e7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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 Oct 28, 2026.
Transparency logRelease files / quspect-0.2.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
| Download URL | quspect-0.2.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 1.2 MB |
| Tags | CPython 3.13 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
4859b374a0218f27c5697926b0ead7966776c4ae2399fd022eb2efe4e4ae8c82
|
|
BLAKE2b-256 checksum How to use checksums |
9cdd140b6feeecdf9d94d157edd9e5c459403345cd8c8bc0e624dbb760f791bb
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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 Oct 28, 2026.
Transparency logRelease files / quspect-0.2.0-cp313-cp313-macosx_14_0_arm64.whl
| Download URL | quspect-0.2.0-cp313-cp313-macosx_14_0_arm64.whl |
|---|---|
| Size | 857.0 kB |
| Tags | CPython 3.13 macOS 14.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
a939da45c28d1835dda3f7a368299f3e78e4c215e08b369b71a61174ece5f6be
|
|
BLAKE2b-256 checksum How to use checksums |
2d2568368daffdd482071f6a3599f0da49d2c2c2245a45ff2381b43314140c82
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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 Oct 28, 2026.
Transparency logRelease files / quspect-0.2.0-cp312-cp312-win_amd64.whl
| Download URL | quspect-0.2.0-cp312-cp312-win_amd64.whl |
|---|---|
| Size | 1.3 MB |
| Tags | CPython 3.12 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
046f800ae40585b51867d257030120b03d2e2e71ff0de7431cb9f103cd9c2ad5
|
|
BLAKE2b-256 checksum How to use checksums |
be40b4f3c2bc4a1a25c2052cd84c8bbafb067ddf537054c88c8ab013ed640c6e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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 Oct 28, 2026.
Transparency logRelease files / quspect-0.2.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
| Download URL | quspect-0.2.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 1.2 MB |
| Tags | CPython 3.12 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
04dc26c8c717b16cb2fc41577f8849bebefb79873034580a2337e909d8c265f2
|
|
BLAKE2b-256 checksum How to use checksums |
6d39ab2e997dc9ac1300bba6147676e8da2b58a0893df20b5458823311ceba15
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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 Oct 28, 2026.
Transparency logRelease files / quspect-0.2.0-cp312-cp312-macosx_14_0_arm64.whl
| Download URL | quspect-0.2.0-cp312-cp312-macosx_14_0_arm64.whl |
|---|---|
| Size | 856.9 kB |
| Tags | CPython 3.12 macOS 14.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
89fd7b78353e3afb70a58ff58776d86c5a00ca0f4fd697d0f81e04a0292434df
|
|
BLAKE2b-256 checksum How to use checksums |
77decab69c4e5e41aa7270b0a9d597743a46885c6d7bfa556a9a533b4be346c8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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 Oct 28, 2026.
Transparency logRelease files / quspect-0.2.0-cp311-cp311-win_amd64.whl
| Download URL | quspect-0.2.0-cp311-cp311-win_amd64.whl |
|---|---|
| Size | 1.3 MB |
| Tags | CPython 3.11 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
b6685486f2a531de6211bcc80e6ef867948ac51ce9294a166e4c420ba4208d68
|
|
BLAKE2b-256 checksum How to use checksums |
f88e34dda78d6fd5815b7ee8fa310fe4d0a3626ee71e0a005516293d0d53a290
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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 Oct 28, 2026.
Transparency logRelease files / quspect-0.2.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
| Download URL | quspect-0.2.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 1.2 MB |
| Tags | CPython 3.11 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
b05a3e19d5f79ec26a51eba49c35b9de573b4cada21559656e978fb2ee48c79c
|
|
BLAKE2b-256 checksum How to use checksums |
0c916d7347909068e2db3885d275419b3061133daa94d9f09e4c6ab88ce099b1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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 Oct 28, 2026.
Transparency logRelease files / quspect-0.2.0-cp311-cp311-macosx_14_0_arm64.whl
| Download URL | quspect-0.2.0-cp311-cp311-macosx_14_0_arm64.whl |
|---|---|
| Size | 856.3 kB |
| Tags | CPython 3.11 macOS 14.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
3b156f58193fde3709b7903bd54df4c43a30417659a8bc2a7de07cf11199804d
|
|
BLAKE2b-256 checksum How to use checksums |
514f46dd8c6797a26451f278db06425f2c6db8dee08cbfa2d1c44def54e29bc5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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 Oct 28, 2026.
Transparency logRelease files / quspect-0.2.0-cp310-cp310-win_amd64.whl
| Download URL | quspect-0.2.0-cp310-cp310-win_amd64.whl |
|---|---|
| Size | 1.2 MB |
| Tags | CPython 3.10 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
af39def7704970fde71ce0457da22236173d517edf99045f18dfb887237e8c87
|
|
BLAKE2b-256 checksum How to use checksums |
fca8294602693e50f1ca56edbe7e46516dc12a1988dcc20ea980cabd3557ca56
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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 Oct 28, 2026.
Transparency logRelease files / quspect-0.2.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
| Download URL | quspect-0.2.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 1.2 MB |
| Tags | CPython 3.10 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
551868859085a999ca62041e9a4c8b3481b1c1437d2cafb5398a7700bb5f9f51
|
|
BLAKE2b-256 checksum How to use checksums |
e7f55e05ca4917d6af2422ed846df7a4a549f818c3b36aaf06946d44568431c9
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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 Oct 28, 2026.
Transparency logRelease files / quspect-0.2.0-cp310-cp310-macosx_14_0_arm64.whl
| Download URL | quspect-0.2.0-cp310-cp310-macosx_14_0_arm64.whl |
|---|---|
| Size | 855.3 kB |
| Tags | CPython 3.10 macOS 14.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
dcc94bea1a60328bfbb3276ab3126cea7e669496fe50553ffd76d11c9b8e5d17
|
|
BLAKE2b-256 checksum How to use checksums |
27c5e443b3dc77a240c602db1e0b0d016edbcda1c86d811b3653585a620810d9
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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 Oct 28, 2026.
Transparency logSecurity for quspect 0.2.0
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.
Full provenance
All 19 files in this release have been uploaded with provenance metadata.
Attestation for quspect-0.2.0.tar.gz
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 Oct 28, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.