QuEST_qasm.h
Go to the documentation of this file.
1 // Distributed under MIT licence. See https://github.com/QuEST-Kit/QuEST/blob/master/LICENCE.txt for details
2 
9 # ifndef QUEST_QASM_H
10 # define QUEST_QASM_H
11 
12 # include "QuEST.h"
13 # include "QuEST_precision.h"
14 
15 # ifdef __cplusplus
16 extern "C" {
17 # endif
18 
20 typedef enum {
35 } TargetGate;
36 
37 void qasm_setup(Qureg* qureg);
38 
39 void qasm_startRecording(Qureg qureg);
40 
41 void qasm_stopRecording(Qureg qureg);
42 
43 void qasm_recordGate(Qureg qureg, TargetGate gate, int targetQubit);
44 
45 void qasm_recordParamGate(Qureg qureg, TargetGate gate, int targetQubit, qreal param);
46 
47 void qasm_recordCompactUnitary(Qureg qureg, Complex alpha, Complex beta, int targetQubit);
48 
49 void qasm_recordUnitary(Qureg qureg, ComplexMatrix2 u, int targetQubit);
50 
51 void qasm_recordAxisRotation(Qureg qureg, qreal angle, Vector axis, int targetQubit);
52 
53 void qasm_recordControlledGate(Qureg qureg, TargetGate gate, int controlQubit, int targetQubit);
54 
55 void qasm_recordControlledParamGate(Qureg qureg, TargetGate gate, int controlQubit, int targetQubit, qreal param);
56 
57 void qasm_recordControlledCompactUnitary(Qureg qureg, Complex alpha, Complex beta, int controlQubit, int targetQubit);
58 
59 void qasm_recordControlledUnitary(Qureg qureg, ComplexMatrix2 u, int controlQubit, int targetQubit);
60 
61 void qasm_recordControlledAxisRotation(Qureg qureg, qreal angle, Vector axis, int controlQubit, int targetQubit);
62 
64 TargetGate gate, int* controlQubits, int numControlQubits, int targetQubit);
65 
66 void qasm_recordMultiControlledParamGate(Qureg qureg, TargetGate gate, int* controlQubits, int numControlQubits, int targetQubit, qreal param);
67 
68 void qasm_recordMultiControlledUnitary(Qureg qureg, ComplexMatrix2 u, int* controlQubits, int numControlQubits, int targetQubit);
69 
70 void qasm_recordMultiStateControlledUnitary(Qureg qureg, ComplexMatrix2 u, int* controlQubits, int* controlState, int numControlQubits, int targetQubit);
71 
72 /* not actually used. D'oh!
73 void qasm_recordMultiControlledAxisRotation(Qureg qureg, qreal angle, Vector axis, int* controlQubits, int numControlQubits, int targetQubit);\
74 */
75 
76 void qasm_recordMeasurement(Qureg qureg, int measureQubit);
77 
78 void qasm_recordInitZero(Qureg qureg);
79 
80 void qasm_recordInitPlus(Qureg qureg);
81 
82 void qasm_recordInitClassical(Qureg qureg, long long int stateInd);
83 
84 void qasm_recordComment(Qureg qureg, char* comment, ...);
85 
86 void qasm_clearRecorded(Qureg qureg);
87 
88 void qasm_printRecorded(Qureg qureg);
89 
90 int qasm_writeRecordedToFile(Qureg qureg, char* filename);
91 
92 void qasm_free(Qureg qureg);
93 
94 # ifdef __cplusplus
95 }
96 # endif
97 
98 # endif // QUEST_QASM_H
Represents a 3-vector of real numbers.
Definition: QuEST.h:148
void qasm_startRecording(Qureg qureg)
Definition: QuEST_qasm.c:84
void qasm_recordInitClassical(Qureg qureg, long long int stateInd)
Definition: QuEST_qasm.c:458
void qasm_setup(Qureg *qureg)
Definition: QuEST_qasm.c:60
@ GATE_T
Definition: QuEST_qasm.h:24
@ GATE_PHASE_SHIFT
Definition: QuEST_qasm.h:32
@ GATE_ROTATE_X
Definition: QuEST_qasm.h:27
@ GATE_ROTATE_Z
Definition: QuEST_qasm.h:29
void qasm_printRecorded(Qureg qureg)
Definition: QuEST_qasm.c:484
@ GATE_SIGMA_Z
Definition: QuEST_qasm.h:23
void qasm_stopRecording(Qureg qureg)
Definition: QuEST_qasm.c:88
@ GATE_HADAMARD
Definition: QuEST_qasm.h:26
void qasm_recordControlledParamGate(Qureg qureg, TargetGate gate, int controlQubit, int targetQubit, qreal param)
Definition: QuEST_qasm.c:247
#define qreal
void qasm_recordInitPlus(Qureg qureg)
Definition: QuEST_qasm.c:430
void qasm_recordMultiControlledParamGate(Qureg qureg, TargetGate gate, int *controlQubits, int numControlQubits, int targetQubit, qreal param)
Definition: QuEST_qasm.c:324
@ GATE_SQRT_SWAP
Definition: QuEST_qasm.h:34
void qasm_recordControlledUnitary(Qureg qureg, ComplexMatrix2 u, int controlQubit, int targetQubit)
additionally performs Rz on target to restore the global phase lost from u in QASM U(a,...
Definition: QuEST_qasm.c:278
@ GATE_SIGMA_X
Definition: QuEST_qasm.h:21
void qasm_recordParamGate(Qureg qureg, TargetGate gate, int targetQubit, qreal param)
Definition: QuEST_qasm.c:186
void qasm_recordMultiControlledGate(Qureg qureg, TargetGate gate, int *controlQubits, int numControlQubits, int targetQubit)
Definition: QuEST_qasm.c:316
@ GATE_UNITARY
Definition: QuEST_qasm.h:31
void qasm_recordCompactUnitary(Qureg qureg, Complex alpha, Complex beta, int targetQubit)
Definition: QuEST_qasm.c:195
Represents a system of qubits.
Definition: QuEST.h:203
void qasm_recordAxisRotation(Qureg qureg, qreal angle, Vector axis, int targetQubit)
Definition: QuEST_qasm.c:223
void qasm_recordGate(Qureg qureg, TargetGate gate, int targetQubit)
Definition: QuEST_qasm.c:178
void qasm_recordMeasurement(Qureg qureg, int measureQubit)
Definition: QuEST_qasm.c:398
void qasm_recordInitZero(Qureg qureg)
Definition: QuEST_qasm.c:415
int qasm_writeRecordedToFile(Qureg qureg, char *filename)
returns success of file write
Definition: QuEST_qasm.c:489
void qasm_recordMultiStateControlledUnitary(Qureg qureg, ComplexMatrix2 u, int *controlQubits, int *controlState, int numControlQubits, int targetQubit)
Definition: QuEST_qasm.c:362
void qasm_clearRecorded(Qureg qureg)
Definition: QuEST_qasm.c:477
@ GATE_S
Definition: QuEST_qasm.h:25
@ GATE_SWAP
Definition: QuEST_qasm.h:33
TargetGate
! Identifiers of single-target gates
Definition: QuEST_qasm.h:20
@ GATE_ROTATE_AROUND_AXIS
Definition: QuEST_qasm.h:30
@ GATE_SIGMA_Y
Definition: QuEST_qasm.h:22
void qasm_recordControlledGate(Qureg qureg, TargetGate gate, int controlQubit, int targetQubit)
Definition: QuEST_qasm.c:238
Represents one complex number.
Definition: QuEST.h:103
void qasm_recordMultiControlledUnitary(Qureg qureg, ComplexMatrix2 u, int *controlQubits, int numControlQubits, int targetQubit)
additionally performs Rz on target to restore the global phase lost from u in QASM U(a,...
Definition: QuEST_qasm.c:341
void qasm_free(Qureg qureg)
Definition: QuEST_qasm.c:500
void qasm_recordUnitary(Qureg qureg, ComplexMatrix2 u, int targetQubit)
Definition: QuEST_qasm.c:207
@ GATE_ROTATE_Y
Definition: QuEST_qasm.h:28
void qasm_recordControlledAxisRotation(Qureg qureg, qreal angle, Vector axis, int controlQubit, int targetQubit)
Definition: QuEST_qasm.c:300
void qasm_recordControlledCompactUnitary(Qureg qureg, Complex alpha, Complex beta, int controlQubit, int targetQubit)
Definition: QuEST_qasm.c:264
Represents a 2x2 matrix of complex numbers.
Definition: QuEST.h:114
void qasm_recordComment(Qureg qureg, char *comment,...)
Definition: QuEST_qasm.c:120