· MIT Licensed ·
· Author: Maria Gragera Garces
Work in Progress - Preparing for 1.0
HDH (Hybrid Dependency Hypergraph) is an intermediate representation designed to describe quantum computations in a model-agnostic way. It provides a unified structure that makes it easier to:
- Translate quantum programs (e.g., from Qiskit or QASM) into a common hypergraph format
- Analyze and visualize the logical and temporal dependencies within a computation
- Partition workloads across devices using tools like METIS or KaHyPar, taking into account hardware and network constraints
- Qiskit circuit translation
- OpenQASM 2.0 file parsing
- Graph-based printing and canonical formatting
- Partitioning with METIS using custom HDH-to-graph translation
- Model-specific abstractions for:
- Quantum Circuits
- Measurement-Based Quantum Computing (MBQC)
- Quantum Walks
- Quantum Cellular Automata (QCA)
Includes test examples for:
- Circuit translation (
test_convert_from_qiskit.py
) - QASM import (
test_convert_from_qasm.py
) - MBQC (
mbqc_test.py
) - Quantum Walks (
qw_test.py
) - Quantum Cellular Automata (
qca_test.py
) - Protocol demos (
teleportation_protocol_logo.py
)
pip install hdh
from qiskit import QuantumCircuit
from hdh.converters.convert_from_qiskit import from_qiskit
from hdh.visualize import plot_hdh
qc = QuantumCircuit(2)
qc.h(0)
qc.cx(0, 1)
hdh = from_qiskit(qc)
plot_hdh(hdh)
from hdh.converters.convert_from_qasm import from_qasm
from hdh.visualize import plot_hdh
qasm_path = os.path.join(os.path.dirname(__file__), 'test_qasm_file.qasm')
hdh = from_qasm('file', qasm_path)
plot_hdh(hdh)
- Visualize quantum protocols (e.g., teleportation)
- Analyze dependencies in quantum walk evolutions
- Explore entanglement flow in MBQC patterns
-
Compatibility with Cirq, Braket, and Pennylane
-
Full graphical UI for HDH visualization
-
Native noise-aware binning strategies
-
Analysis tools for:
- Cut cost estimation across partitions
- Partition size reporting
- Parallelism tracking by time step
from hdh.passes.cut import compute_cut, cost, partition_sizes, compute_parallelism_by_time num_parts = 3 partitions = compute_cut(hdh, num_parts) print(f"\nMETIS partition into {num_parts} parts:") for i, part in enumerate(partitions): print(f"Partition {i}: {sorted(part)}") # plot_hdh(hdh) cut_cost = cost(hdh, partitions) sizes = partition_sizes(partitions) global_parallelism = compute_parallelism_by_time(hdh, partitions, mode="global") parallelism_at_t3 = compute_parallelism_by_time(hdh, partitions, mode="local", time_step=3) print("\n--- QW Metrics ---") print(f"\nCut cost: {cut_cost}") print(f"Partition sizes: {sizes}") print(f"Parallelism over time: {global_parallelism}") print(f"Parallelism at time t=3: {parallelism_at_t3}")
All tests are under tests/
and can be run with:
pytest
If you're interested in the HDH of a specific model, see in manual_tests:
mbqc_test.py
for MBQC circuitsqca_test.py
for Cellular Automataqw_test.py
for Quantum Walksteleportation_protocol_logo.py
for a protocol-specific demo
Pull requests welcome. Please open an issue or get in touch if you're interested in:
- SDK compatibility
- Optimization strategies
- Frontend tools (visualization, benchmarking)
More formal citation and paper preprint coming soon. Stay tuned for updates.