State-vector quantum circuit simulator with a C core plus server/client scaffolding.
- For the C core: a C compiler (
gcc/clang) andmake(or Nix) - For server/client: Node.js + npm (or Nix)
make./c/build/bin/qsimExample format (subset of YAML):
qubits: 2
vectors:
- id: v0
operations:
- gate: H
targets: [q0]
- id: v1
operations:
- gate: X
controls: [q0]
targets: [q1]Supported gates:
- 1-qubit:
H,X,Y,Z,S,T SWAP(2 targets)OTHER(custom 2×2 matrix)UForacle:y_bit: qN, optionalx_bits: [...],function: parity|const0|const1MEASURE(collapses the state and prints a readout line)FX(classical f(x) transform):function: parity|const0|const1, optionalx_bits: [...](must be measured before use). Prints anfx = 0|1line. No quantum ops are allowed afterFX.
Example UF + MEASURE:
qubits: 2
vectors:
- id: v0
operations:
- gate: H
targets: [q0]
- gate: UF
function: parity
x_bits: [q0]
y_bit: q1
- gate: MEASURE
targets: [q1]Run:
./c/build/bin/qsim path/to/circuit.yamlPrint every intermediate state:
./c/build/bin/qsim path/to/circuit.yaml --stepsMeasurement randomness is controlled by QSIM_SEED:
- unset: seed from OS entropy (random each run)
- set to an integer: deterministic/reproducible runs
Deutsch–Jozsa (10 total qubits: inputs q0..q8, ancilla q9):
./c/build/bin/qsim c/examples/deutsch_jozsa_10q_const0.yaml
./c/build/bin/qsim c/examples/deutsch_jozsa_10q_parity.yamlDeutsch (2 qubits: input q0, ancilla q1):
./c/build/bin/qsim c/examples/deutsch_2q_const0.yaml
./c/build/bin/qsim c/examples/deutsch_2q_const1.yaml
./c/build/bin/qsim c/examples/deutsch_2q_balanced_x.yaml
./c/build/bin/qsim c/examples/deutsch_2q_balanced_notx.yamlSee DESIGN.md.
make testnpm install
npm run serverRun the simulator once (prints amplitudes to stdout):
./server/scripts/run.shnpm install
npm run clientnpm install
npm run devnix-shell