aboutsummaryrefslogtreecommitdiff
path: root/include/core/circuit.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/core/circuit.h')
-rw-r--r--include/core/circuit.h91
1 files changed, 47 insertions, 44 deletions
diff --git a/include/core/circuit.h b/include/core/circuit.h
index 7c0d371..ce36b1c 100644
--- a/include/core/circuit.h
+++ b/include/core/circuit.h
@@ -2,53 +2,54 @@
#include <stdbool.h>
#include <stddef.h>
+#include <stdio.h>
#include "core/custom_gate.h"
#include "maths/vector.h"
enum PsiGateKind
{
- PSI_GATE_H,
- PSI_GATE_X,
- PSI_GATE_Y,
- PSI_GATE_Z,
- PSI_GATE_S,
- PSI_GATE_T,
- PSI_GATE_SDG,
- PSI_GATE_TDG,
- PSI_GATE_SX,
- PSI_GATE_SXDG,
- PSI_GATE_RX,
- PSI_GATE_RY,
- PSI_GATE_RZ,
- PSI_GATE_P,
- PSI_GATE_U1,
- PSI_GATE_U2,
- PSI_GATE_U3,
- PSI_GATE_CNOT,
- PSI_GATE_CZ,
- PSI_GATE_SWAP,
- PSI_GATE_CRX,
- PSI_GATE_CRY,
- PSI_GATE_CRZ,
- PSI_GATE_CP,
- PSI_GATE_CCNOT,
- PSI_GATE_CSWAP,
- PSI_GATE_MEASURE,
- PSI_GATE_CUSTOM,
+ PSI_GATE_H,
+ PSI_GATE_X,
+ PSI_GATE_Y,
+ PSI_GATE_Z,
+ PSI_GATE_S,
+ PSI_GATE_T,
+ PSI_GATE_SDG,
+ PSI_GATE_TDG,
+ PSI_GATE_SX,
+ PSI_GATE_SXDG,
+ PSI_GATE_RX,
+ PSI_GATE_RY,
+ PSI_GATE_RZ,
+ PSI_GATE_P,
+ PSI_GATE_U1,
+ PSI_GATE_U2,
+ PSI_GATE_U3,
+ PSI_GATE_CNOT,
+ PSI_GATE_CZ,
+ PSI_GATE_SWAP,
+ PSI_GATE_CRX,
+ PSI_GATE_CRY,
+ PSI_GATE_CRZ,
+ PSI_GATE_CP,
+ PSI_GATE_CCNOT,
+ PSI_GATE_CSWAP,
+ PSI_GATE_MEASURE,
+ PSI_GATE_CUSTOM,
};
struct PsiGateOp
{
- enum PsiGateKind kind;
- size_t qubits[3];
- size_t qubit_count;
- double params[3];
- size_t param_count;
- size_t classical;
- struct PsiCustomGate* custom;
- size_t* custom_targets;
- size_t custom_target_count;
+ enum PsiGateKind kind;
+ size_t qubits[3];
+ size_t qubit_count;
+ double params[3];
+ size_t param_count;
+ size_t classical;
+ struct PsiCustomGate* custom;
+ size_t* custom_targets;
+ size_t custom_target_count;
};
const char* psi_gate_op_name(struct PsiGateOp op);
@@ -60,13 +61,13 @@ bool psi_gate_op_is_non_clifford(struct PsiGateOp op);
struct PsiQuantumCircuit
{
- size_t num_qubits;
- size_t num_classical;
- struct PsiGateOp* operations;
- size_t operation_count;
- size_t operation_capacity;
- struct PsiVector computed_state;
- bool is_computed;
+ size_t num_qubits;
+ size_t num_classical;
+ struct PsiGateOp* operations;
+ size_t operation_count;
+ size_t operation_capacity;
+ struct PsiVector computed_state;
+ bool is_computed;
};
struct PsiQuantumCircuit psi_new_quantum_circuit(size_t num_qubits);
@@ -111,3 +112,5 @@ void psi_measure_all(struct PsiQuantumCircuit* c);
void psi_apply_custom(struct PsiQuantumCircuit* c, struct PsiCustomGate gate, const size_t* targets,
size_t count);
+
+void psi_print_circuit(const struct PsiQuantumCircuit* circuit, FILE* out);