#include "core/quantum_components.h" #include struct PsiVector psi_new_state_0(void) { return psi_column_vector(psi_new_complex(1.0, 0.0), psi_new_complex(0.0, 0.0)); } struct PsiVector psi_new_state_1(void) { return psi_column_vector(psi_new_complex(0.0, 0.0), psi_new_complex(1.0, 0.0)); } struct PsiQuantumGate psi_new_quantum_gate(const char *name, struct PsiMatrix matrix, size_t num_qubits) { size_t expected_dim = (size_t)1 << num_qubits; assert(matrix.rows == expected_dim); assert(matrix.cols == expected_dim); return (struct PsiQuantumGate) { name, matrix, num_qubits, }; } struct PsiQuantumGate psi_new_quantum_gate_from_matrix(const char *name, struct PsiMatrix matrix) { assert(matrix.rows == matrix.cols); size_t dim = matrix.rows; assert(dim > 0 && (dim & (dim - 1)) == 0); size_t num_qubits = 0; while (((size_t)1 << num_qubits) < dim) num_qubits++; return (struct PsiQuantumGate) { name, matrix, num_qubits, }; } void psi_free_quantum_gate(struct PsiQuantumGate *gate) { psi_free_matrix(&gate->matrix); }