aboutsummaryrefslogtreecommitdiff
path: root/tester/main.c
diff options
context:
space:
mode:
authorhachem <im@hachem.wtf>2026-09-06 22:24:37 +0200
committerhachem <im@hachem.wtf>2026-09-06 22:24:37 +0200
commit5cfc8515fdbe22214dc9840568ad41a73c105200 (patch)
tree4e2b0156f944033ca54760ce4cccff5258581c1c /tester/main.c
parentbaecb524fb2b8162409d86d84cdddbd20b930c50 (diff)
add: quantum circuit builder
Diffstat (limited to 'tester/main.c')
-rw-r--r--tester/main.c35
1 files changed, 27 insertions, 8 deletions
diff --git a/tester/main.c b/tester/main.c
index 13c9257..194fc77 100644
--- a/tester/main.c
+++ b/tester/main.c
@@ -1,12 +1,5 @@
#include <stdio.h>
-#include "core/classical_components.h"
-#include "core/custom_gate.h"
-#include "core/gates.h"
-#include "core/quantum_components.h"
-#include "maths/complex.h"
-#include "maths/matrix.h"
-#include "maths/vector.h"
#include "psi.h"
int main(void)
@@ -128,5 +121,31 @@ int main(void)
psi_free_classical_register(&creg);
- return 0;
+ struct PsiQuantumCircuit circuit = psi_new_quantum_circuit(3);
+ psi_apply_h(&circuit, 0);
+ psi_apply_cnot(&circuit, 0, 1);
+ psi_apply_rx(&circuit, 2, 1.5707963267948966);
+ psi_apply_ccnot(&circuit, 0, 1, 2);
+
+ struct PsiCompositeGateOp cops[] = { { PSI_OP_X, { 0 }, 1 } };
+ struct PsiCustomGate xg = psi_new_custom_gate_from_composite("MYX", 1, cops, 1);
+ size_t ct[] = { 2 };
+ psi_apply_custom(&circuit, xg, ct, 1);
+
+ psi_measure_all(&circuit);
+
+ printf("circuit = %zu qubits, %zu classical, %zu ops\n",
+ circuit.num_qubits, circuit.num_classical, circuit.operation_count);
+ for (size_t i = 0; i < circuit.operation_count; i++)
+ {
+ size_t tc;
+ const size_t *targets = psi_gate_op_quantum_targets(&circuit.operations[i], &tc);
+ printf(" %zu: %s on", i, psi_gate_op_name(circuit.operations[i]));
+ for (size_t j = 0; j < tc; j++)
+ printf(" q%zu", targets[j]);
+ printf("\n");
+ }
+
+ psi_free_quantum_circuit(&circuit);
}
+