diff options
Diffstat (limited to 'include/core')
| -rw-r--r-- | include/core/circuit.h | 91 | ||||
| -rw-r--r-- | include/core/classical_components.h | 10 | ||||
| -rw-r--r-- | include/core/custom_gate.h | 56 | ||||
| -rw-r--r-- | include/core/kernel.h | 58 | ||||
| -rw-r--r-- | include/core/noise.h | 18 | ||||
| -rw-r--r-- | include/core/quantum_components.h | 18 | ||||
| -rw-r--r-- | include/core/runtime.h | 26 |
7 files changed, 140 insertions, 137 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); diff --git a/include/core/classical_components.h b/include/core/classical_components.h index 53c00ef..7c58ae3 100644 --- a/include/core/classical_components.h +++ b/include/core/classical_components.h @@ -5,15 +5,15 @@ struct PsiClassicalBit { - const char* name; - bool state; + const char* name; + bool state; }; struct PsiClassicalRegister { - const char* name; - struct PsiClassicalBit* bits; - size_t num_bits; + const char* name; + struct PsiClassicalBit* bits; + size_t num_bits; }; struct PsiClassicalBit psi_new_classical_bit(const char* name, bool state); diff --git a/include/core/custom_gate.h b/include/core/custom_gate.h index efda36f..7003699 100644 --- a/include/core/custom_gate.h +++ b/include/core/custom_gate.h @@ -7,46 +7,46 @@ enum PsiCompositeOp { - PSI_OP_H, - PSI_OP_X, - PSI_OP_Y, - PSI_OP_Z, - PSI_OP_S, - PSI_OP_T, - PSI_OP_CNOT, - PSI_OP_CZ, - PSI_OP_SWAP, - PSI_OP_CCNOT, - PSI_OP_CSWAP, + PSI_OP_H, + PSI_OP_X, + PSI_OP_Y, + PSI_OP_Z, + PSI_OP_S, + PSI_OP_T, + PSI_OP_CNOT, + PSI_OP_CZ, + PSI_OP_SWAP, + PSI_OP_CCNOT, + PSI_OP_CSWAP, }; struct PsiCompositeGateOp { - enum PsiCompositeOp op; - size_t targets[3]; - size_t target_count; + enum PsiCompositeOp op; + size_t targets[3]; + size_t target_count; }; enum PsiCustomGateKind { - PSI_CUSTOM_GATE_MATRIX, - PSI_CUSTOM_GATE_COMPOSITE, + PSI_CUSTOM_GATE_MATRIX, + PSI_CUSTOM_GATE_COMPOSITE, }; struct PsiCustomGate { - const char* name; - size_t num_qubits; - enum PsiCustomGateKind kind; - union - { - struct PsiMatrix matrix; - struct - { - struct PsiCompositeGateOp* ops; - size_t count; - } composite; - } definition; + const char* name; + size_t num_qubits; + enum PsiCustomGateKind kind; + union + { + struct PsiMatrix matrix; + struct + { + struct PsiCompositeGateOp* ops; + size_t count; + } composite; + } definition; }; struct PsiCustomGate psi_new_custom_gate_from_matrix(const char* name, struct PsiMatrix matrix); diff --git a/include/core/kernel.h b/include/core/kernel.h index b8b19ea..f3a2b77 100644 --- a/include/core/kernel.h +++ b/include/core/kernel.h @@ -8,18 +8,18 @@ enum PsiGateType { - PSI_GATE_TYPE_DIAGONAL, - PSI_GATE_TYPE_NON_DIAGONAL, - PSI_GATE_TYPE_CONTROLLED, + PSI_GATE_TYPE_DIAGONAL, + PSI_GATE_TYPE_NON_DIAGONAL, + PSI_GATE_TYPE_CONTROLLED, }; struct PsiKernel { - struct PsiMatrix matrix; - size_t* targets; - size_t target_count; - char* name; - enum PsiGateType gate_type; + struct PsiMatrix matrix; + size_t* targets; + size_t target_count; + char* name; + enum PsiGateType gate_type; }; struct PsiKernel psi_new_kernel(const char* name, struct PsiMatrix matrix, const size_t* targets, @@ -34,10 +34,10 @@ bool psi_fuse_kernels(struct PsiKernel a, struct PsiKernel b, struct PsiKernel* struct PsiKernelBatch { - struct PsiKernel* kernels; - size_t count; - size_t capacity; - size_t num_qubits; + struct PsiKernel* kernels; + size_t count; + size_t capacity; + size_t num_qubits; }; struct PsiKernelBatch psi_new_kernel_batch(size_t num_qubits); @@ -49,31 +49,31 @@ void psi_apply_kernel(struct PsiVector* state, struct PsiKernel kernel, size_t n struct PsiExecutionLayer { - struct PsiKernel* kernels; - size_t count; - size_t capacity; + struct PsiKernel* kernels; + size_t count; + size_t capacity; }; struct PsiKernelStats { - size_t total_kernels; - size_t single_qubit; - size_t two_qubit; - size_t multi_qubit; - size_t diagonal; - size_t execution_layers; + size_t total_kernels; + size_t single_qubit; + size_t two_qubit; + size_t multi_qubit; + size_t diagonal; + size_t execution_layers; }; struct PsiStructureAwareBatch { - struct PsiKernel* kernels; - size_t count; - size_t capacity; - struct PsiExecutionLayer* layers; - size_t layer_count; - size_t layer_capacity; - size_t num_qubits; - bool optimised; + struct PsiKernel* kernels; + size_t count; + size_t capacity; + struct PsiExecutionLayer* layers; + size_t layer_count; + size_t layer_capacity; + size_t num_qubits; + bool optimised; }; struct PsiStructureAwareBatch psi_new_structure_aware_batch(size_t num_qubits); diff --git a/include/core/noise.h b/include/core/noise.h index 320a4ab..2bd65e1 100644 --- a/include/core/noise.h +++ b/include/core/noise.h @@ -8,8 +8,8 @@ struct PsiKrausOperator { - struct PsiMatrix matrix; - const char* name; + struct PsiMatrix matrix; + const char* name; }; struct PsiKrausOperator psi_new_kraus_operator(const char* name, struct PsiMatrix matrix); @@ -17,10 +17,10 @@ void psi_free_kraus_operator(struct PsiKrausOperator* op); struct PsiNoiseChannel { - const char* name; - struct PsiKrausOperator* operators; - size_t operator_count; - size_t num_qubits; + const char* name; + struct PsiKrausOperator* operators; + size_t operator_count; + size_t num_qubits; }; struct PsiNoiseChannel psi_new_noise_channel(const char* name, @@ -38,9 +38,9 @@ struct PsiNoiseChannel psi_generalised_amplitude_damping_channel(double p, doubl struct PsiDensityMatrix { - struct PsiComplex* data; - size_t dim; - size_t num_qubits; + struct PsiComplex* data; + size_t dim; + size_t num_qubits; }; struct PsiDensityMatrix psi_new_density_matrix(size_t num_qubits); diff --git a/include/core/quantum_components.h b/include/core/quantum_components.h index 63797cf..815e2d9 100644 --- a/include/core/quantum_components.h +++ b/include/core/quantum_components.h @@ -10,9 +10,9 @@ struct PsiVector psi_new_state_1(void); struct PsiQuantumGate { - const char* name; - struct PsiMatrix matrix; - size_t num_qubits; + const char* name; + struct PsiMatrix matrix; + size_t num_qubits; }; struct PsiQuantumGate psi_new_quantum_gate(const char* name, struct PsiMatrix matrix, @@ -22,8 +22,8 @@ void psi_free_quantum_gate(struct PsiQuantumGate* gate); struct PsiQuantumBit { - const char* name; - struct PsiVector state; + const char* name; + struct PsiVector state; }; struct PsiQuantumBit psi_new_quantum_bit(const char* name, struct PsiVector state); @@ -31,10 +31,10 @@ void psi_free_quantum_bit(struct PsiQuantumBit* bit); struct PsiQuantumRegister { - const char* name; - struct PsiVector state_vector; - struct PsiQuantumBit* qubits; - size_t num_qubits; + 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, diff --git a/include/core/runtime.h b/include/core/runtime.h index 2a6f739..cf03371 100644 --- a/include/core/runtime.h +++ b/include/core/runtime.h @@ -10,23 +10,23 @@ struct PsiRuntimeConfig { - bool parallel; - bool simd; - bool batched; - bool structure_aware; - size_t parallel_threshold; + bool parallel; + bool simd; + bool batched; + bool structure_aware; + size_t parallel_threshold; }; enum PsiRuntime { - PSI_RUNTIME_BASIC, - PSI_RUNTIME_BASIC_MT, - PSI_RUNTIME_BATCHED, - PSI_RUNTIME_BATCHED_MT, - PSI_RUNTIME_SIMD, - PSI_RUNTIME_SIMD_MT, - PSI_RUNTIME_STRUCTURE_AWARE, - PSI_RUNTIME_STRUCTURE_AWARE_MT, + PSI_RUNTIME_BASIC, + PSI_RUNTIME_BASIC_MT, + PSI_RUNTIME_BATCHED, + PSI_RUNTIME_BATCHED_MT, + PSI_RUNTIME_SIMD, + PSI_RUNTIME_SIMD_MT, + PSI_RUNTIME_STRUCTURE_AWARE, + PSI_RUNTIME_STRUCTURE_AWARE_MT, }; struct PsiRuntimeConfig psi_new_runtime_config(void); |
