#pragma once #include #include "maths/matrix.h" #include "maths/vector.h" struct PsiVector psi_new_state_0(void); struct PsiVector psi_new_state_1(void); struct PsiQuantumGate { const char* name; struct PsiMatrix matrix; size_t num_qubits; }; struct PsiQuantumGate psi_new_quantum_gate(const char* name, struct PsiMatrix matrix, size_t num_qubits); struct PsiQuantumGate psi_new_quantum_gate_from_matrix(const char* name, struct PsiMatrix matrix); void psi_free_quantum_gate(struct PsiQuantumGate* gate); struct PsiQuantumBit { const char* name; struct PsiVector state; }; struct PsiQuantumBit psi_new_quantum_bit(const char* name, struct PsiVector state); void psi_free_quantum_bit(struct PsiQuantumBit* bit); struct PsiQuantumRegister { const char* name; struct PsiVector state_vector; struct PsiQuantumBit* qubits; size_t num_qubits; }; struct PsiQuantumRegister psi_new_quantum_register(const char* name, const char** names, size_t count); struct PsiQuantumRegister psi_new_quantum_register_from(const char* name, const struct PsiQuantumBit* bits, size_t count); void psi_free_quantum_register(struct PsiQuantumRegister* reg); void psi_apply_gate(struct PsiQuantumRegister* reg, struct PsiQuantumGate gate, const size_t* targets, size_t target_count);