Releases: AxiomaticLabs/qupac
Releases · AxiomaticLabs/qupac
Release list
Release version 0.2.0
Qupac (Quantum Python Abstraction Compiler)
A lightweight language to design quantum circuits and transpile them to Python code using Qiskit 2.x. Write simple gate instructions; Qupac parses, transpiles, and can run the generated Python for simulation.
Highlights
- Minimal syntax for qubit/classical declarations, gate application, measurement, and simulate.
- CLI runs generated Python in the background by default on Windows.
- Optionally emit the generated Python without running it.
Project layout
qupac/grammar.lark— Lark grammar for the languagequpac/parser.py— Parser and transformer to an IRqupac/transpiler.py— IR -> Python (Qiskit 2.x) code generatorqupac/executor.py— Runs generated Python (bg/fg)qupac/cli.py— CLI entrypoint (background by default)
Language quick reference
- Use statement:
use qiskit - Qubits:
qubits: <int> - Classical bits (optional):
classical: <int> - Apply gate:
apply H to 0orapply CX from 0 to 1- Entangle two qubits:
entangle 0,1(shorthand forapply CX from 0 to 1) - Put a qubit in superposition:
superpose 0(shorthand forapply H to 0)
- Entangle two qubits:
- Measure all:
measure all - Measure one:
measure 0 -> 0 - Execute:
simulate- Shots (number of measurement samples):
shots: 1024(default 1024 if not provided) - Optimization level for transpile:
optimize: 0|1|2|3(maps to Qiskit's optimization_level) - Draw the generated circuit:
drawordraw mpl(text drawing is default;mplattempts a matplotlib rendering)
- Shots (number of measurement samples):
- Simulator backend method:
simulator: default|statevector|unitary - Simple noise model (depolarizing):
noise depol p=0.01(requires qiskit-aer noise modules) - Comments: lines starting with
#or//
Examples
Basic:
use qiskit
qubits: 2
entangle 0,1
measure all
simulate
Superpose:
use qiskit
qubits: 1
superpose 0
measure all
simulate
Draw and simulation options:
use qiskit
qubits: 2
entangle 0,1
draw
shots: 2048
optimize: 1
simulate
Parameterized gates and statevector:
use qiskit
qubits: 1
apply RY(1.5708) to 0
draw
simulator: statevector
shots: 1
simulate
Noise (depolarizing):
use qiskit
qubits: 2
entangle 0,1
noise depol p=0.02
shots: 2048
simulate
Setup
- Create and activate a Python 3.9+ environment.
- Install dependencies (Qiskit is large; installing only Lark lets you test parsing/transpiling):
- Minimal (parser/transpiler only):
pip install lark - Full (to actually run/simulate):
pip install -r requirements.txt
- Minimal (parser/transpiler only):
Developer setup (lint, type-check, tests)
-
Using pip extras:
pip install -e .[dev] -
Or individually:
pip install ruff mypy pytest -
Lint (Ruff):
ruff check . -
Type check (mypy):
mypy qupac -
Run tests (pytest):
pytest -q
How to run
- Emit generated Python (no Qiskit needed):
python -m qupac.cli --emit examples/main.qu - Run generated Python in the background (requires Qiskit installed):
python -m qupac.cli examples/main.qu - Run in foreground/blocking (requires Qiskit installed):
python -m qupac.cli --fg examples/main.qu
License
MIT