The Quantum Exact Simulation Toolkit v4.2.0
Loading...
Searching...
No Matches
initialisations.h
1/** @file
2 * API signatures for initialising Quregs into
3 * particular states. Note when a Qureg is GPU-
4 * accelerated, these functions only update the
5 * state in GPU memory; the CPU amps are unchanged.
6 *
7 * @author Tyson Jones
8 *
9 * @defgroup initialisations Initialisations
10 * @ingroup api
11 * @brief Functions for preparing Quregs in particular states.
12 * @{
13 */
14
15#ifndef INITIALISATIONS_H
16#define INITIALISATIONS_H
17
18#include "quest/include/types.h"
19#include "quest/include/qureg.h"
20#include "quest/include/paulis.h"
21
22
23
24/*
25 * C AND C++ AGNOSTIC FUNCTIONS
26 */
27
28// enable invocation by both C and C++ binaries
29#ifdef __cplusplus
30extern "C" {
31#endif
32
33
34
35/**
36 * @defgroup init_states States
37 * @brief Functions for initialising Qureg into physical states.
38 * @{
39 */
40
41
42/// @notyetdoced
43/// @notyetvalidated
44void initBlankState(Qureg qureg);
45
46
47/// @notyetdoced
48/// @notyetvalidated
49void initZeroState(Qureg qureg);
50
51
52/// @notyetdoced
53/// @notyetvalidated
54void initPlusState(Qureg qureg);
55
56
57/// @notyetdoced
58/// @notyetvalidated
59/// @notyettested
60void initPureState(Qureg qureg, Qureg pure);
61
62
63/// @notyetdoced
64/// @notyetvalidated
65void initClassicalState(Qureg qureg, qindex stateInd);
66
67
68/// @notyetdoced
69/// @notyetvalidated
70void initDebugState(Qureg qureg);
71
72
73/// @notyetdoced
74/// @notyetvalidated
75void initArbitraryPureState(Qureg qureg, qcomp* amps);
76
77
78/// @notyetdoced
79/// @notyetvalidated
80void initRandomPureState(Qureg qureg);
81
82
83/// @notyetdoced
84/// @notyetvalidated
85void initRandomMixedState(Qureg qureg, qindex numPureStates);
86
87
88/** @} */
89
90
91
92/**
93 * @defgroup init_amps Amplitudes
94 * @brief Functions for overwriting Qureg amplitudes.
95 * @{
96 */
97
98
99/// @notyetdoced
100/// @notyetvalidated
101void setQuregAmps(Qureg qureg, qindex startInd, qcomp* amps, qindex numAmps);
102
103
104/// @notyetdoced
105/// @notyetvalidated
106void setDensityQuregAmps(Qureg qureg, qindex startRow, qindex startCol, qcomp** amps, qindex numRows, qindex numCols);
107
108
109/// @notyetdoced
110/// @notyetvalidated
111void setDensityQuregFlatAmps(Qureg qureg, qindex startInd, qcomp* amps, qindex numAmps);
112
113
114/// @notyetdoced
115/// @notyettested
116void setQuregToClone(Qureg outQureg, Qureg inQureg);
117
118
119/// @notyetdoced
120/// @notyettested
121void setQuregToWeightedSum(Qureg out, qcomp* coeffs, Qureg* in, int numIn);
122
123
124/// @notyetdoced
125/// @notyettested
126void setQuregToMixture(Qureg out, qreal* probs, Qureg* in, int numIn);
127
128
129/// @notyetdoced
130/// @notyetvalidated
131qreal setQuregToRenormalized(Qureg qureg);
132
133
134/// @notyetdoced
135/// @notyetvalidated
137
138
139/// @notyetdoced
140/// @notyettested
141void setQuregToPartialTrace(Qureg out, Qureg in, int* traceOutQubits, int numTraceQubits);
142
143
144/// @notyetdoced
145/// @notyettested
146void setQuregToReducedDensityMatrix(Qureg out, Qureg in, int* retainQubits, int numRetainQubits);
147
148
149/** @} */
150
151
152
153// end de-mangler
154#ifdef __cplusplus
155}
156#endif
157
158
159
160/*
161 * C++ OVERLOADS
162 *
163 * which are only accessible to C++ binaries, and accept
164 * arguments more natural to C++ (e.g. std::vector). We
165 * manually add these to their respective Doxygen doc groups.
166 */
167
168#ifdef __cplusplus
169
170#include <vector>
171
172
173/// @ingroup init_amps
174/// @notyettested
175/// @notyetdoced
176/// @notyetvalidated
177/// @cpponly
178/// @see setQuregAmps()
179void setQuregAmps(Qureg qureg, qindex startInd, std::vector<qcomp> amps);
180
181
182/// @ingroup init_amps
183/// @notyettested
184/// @notyetdoced
185/// @notyetvalidated
186/// @cpponly
187/// @see setDensityQuregAmps()
188void setDensityQuregAmps(Qureg qureg, qindex startRow, qindex startCol, std::vector<std::vector<qcomp>> amps);
189
190
191/// @ingroup init_amps
192/// @notyettested
193/// @notyetdoced
194/// @notyetvalidated
195/// @cpponly
196/// @see setDensityQuregFlatAmps()
197void setDensityQuregFlatAmps(Qureg qureg, qindex startInd, std::vector<qcomp> amps);
198
199
200/// @ingroup init_amps
201/// @notyettested
202/// @notyetdoced
203/// @notyetvalidated
204/// @cpponly
205/// @see setQuregToPartialTrace()
206void setQuregToPartialTrace(Qureg out, Qureg in, std::vector<int> traceOutQubits);
207
208
209/// @ingroup init_amps
210/// @notyettested
211/// @notyetdoced
212/// @notyetvalidated
213/// @cpponly
214/// @see setQuregToReducedDensityMatrix()
215void setQuregToReducedDensityMatrix(Qureg out, Qureg in, std::vector<int> retainQubits);
216
217
218/// @ingroup init_amps
219/// @notyetdoced
220/// @cpponly
221/// @see setQuregToWeightedSum()
222void setQuregToWeightedSum(Qureg out, std::vector<qcomp> coeffs, std::vector<Qureg> in);
223
224
225/// @ingroup init_amps
226/// @notyetdoced
227/// @cpponly
228/// @see setQuregToMixture()
229void setQuregToMixture(Qureg out, std::vector<qreal> probs, std::vector<Qureg> in);
230
231
232#endif // __cplusplus
233
234
235
236#endif // INITIALISATIONS_H
237
238/** @} */ // (end file-wide doxygen defgroup)
void setDensityQuregFlatAmps(Qureg qureg, qindex startInd, qcomp *amps, qindex numAmps)
void setQuregToReducedDensityMatrix(Qureg out, Qureg in, int *retainQubits, int numRetainQubits)
void setQuregToWeightedSum(Qureg out, qcomp *coeffs, Qureg *in, int numIn)
void setQuregToPauliStrSum(Qureg qureg, PauliStrSum sum)
void setQuregToClone(Qureg outQureg, Qureg inQureg)
void setQuregToMixture(Qureg out, qreal *probs, Qureg *in, int numIn)
void setQuregAmps(Qureg qureg, qindex startInd, qcomp *amps, qindex numAmps)
void setQuregToPartialTrace(Qureg out, Qureg in, int *traceOutQubits, int numTraceQubits)
qreal setQuregToRenormalized(Qureg qureg)
void setDensityQuregAmps(Qureg qureg, qindex startRow, qindex startCol, qcomp **amps, qindex numRows, qindex numCols)
void initArbitraryPureState(Qureg qureg, qcomp *amps)
void initRandomPureState(Qureg qureg)
void initPlusState(Qureg qureg)
void initZeroState(Qureg qureg)
void initPureState(Qureg qureg, Qureg pure)
void initDebugState(Qureg qureg)
void initRandomMixedState(Qureg qureg, qindex numPureStates)
void initClassicalState(Qureg qureg, qindex stateInd)
void initBlankState(Qureg qureg)
Definition qureg.h:49