Qrack  9.0
General classical-emulating-quantum development framework
pinvoke_api.hpp
Go to the documentation of this file.
1 // Copyright (c) Microsoft Corporation. All rights reserved.
2 // Licensed under the MIT License.
3 //
4 // (Extensively modified and adapted by Daniel Strano in unitaryfund/qrack)
5 
6 #pragma once
7 
8 #include "config.h"
9 #include "stddef.h"
10 
11 #if defined(_WIN32) && !defined(__CYGWIN__)
12 #define MICROSOFT_QUANTUM_DECL __declspec(dllexport)
13 #define MICROSOFT_QUANTUM_DECL_IMPORT __declspec(dllimport)
14 #else
15 #define MICROSOFT_QUANTUM_DECL
16 #define MICROSOFT_QUANTUM_DECL_IMPORT
17 #endif
18 
19 // SAL only defined in windows.
20 #ifndef _In_
21 #define _In_
22 #define _In_reads_(n)
23 #endif
24 
25 typedef unsigned long long uintq;
26 typedef void (*IdCallback)(uintq);
27 typedef bool (*ProbAmpCallback)(size_t, double, double);
28 
29 #if !(FPPOW < 6 && !ENABLE_COMPLEX_X2)
31 #endif
32 
33 #if FPPOW > 6
34 #include <boost/multiprecision/float128.hpp>
35 #endif
36 
37 extern "C" {
38 // non-quantum
40 MICROSOFT_QUANTUM_DECL uintq init_count_type(_In_ uintq q, _In_ bool tn, _In_ bool md, _In_ bool sd, _In_ bool sh,
41  _In_ bool bdt, _In_ bool pg, _In_ bool zxf, _In_ bool hy, _In_ bool oc, _In_ bool dm);
51 
52 // pseudo-quantum
56  _In_ uintq sid, _In_ uintq n, _In_reads_(n) uintq* q, _In_reads_(n) bool* c);
58  _In_ uintq sid, _In_ uintq n, _In_reads_(n) uintq* q, _In_reads_(n) bool* c, _In_ bool r);
61  _In_ uintq sid, _In_ uintq n, _In_reads_(n) uintq* q, _In_ bool r);
63  _In_ uintq sid, _In_ uintq n, _In_reads_(n) uintq* q, _In_ uintq m, uintq* c);
65  _In_ uintq sid, _In_ uintq n, _In_reads_(n) uintq* q, _In_ uintq m, uintq* c, _In_ bool r);
66 #if FPPOW < 6
69  _In_ uintq sid, _In_ uintq n, _In_reads_(n) uintq* q, float* c, _In_ bool r);
70 #elif FPPOW < 7
73  _In_ uintq sid, _In_ uintq n, _In_reads_(n) uintq* q, double* c, _In_ bool r);
74 #else
76  _In_ uintq sid, _In_ uintq n, _In_reads_(n) uintq* q, boost::multiprecision::float128* c);
78  _In_ uintq sid, _In_ uintq n, _In_reads_(n) uintq* q, boost::multiprecision::float128* c, _In_ bool r);
79 #endif
80 
83 
84 #if FPPOW < 6
85 MICROSOFT_QUANTUM_DECL void InKet(_In_ uintq sid, _In_ float* ket);
86 MICROSOFT_QUANTUM_DECL void OutKet(_In_ uintq sid, _In_ float* ket);
87 #elif FPPOW < 7
88 MICROSOFT_QUANTUM_DECL void InKet(_In_ uintq sid, _In_ double* ket);
89 MICROSOFT_QUANTUM_DECL void OutKet(_In_ uintq sid, _In_ double* ket);
90 #else
91 MICROSOFT_QUANTUM_DECL void InKet(_In_ uintq sid, _In_ boost::multiprecision::float128* ket);
92 MICROSOFT_QUANTUM_DECL void OutKet(_In_ uintq sid, _In_ boost::multiprecision::float128* ket);
93 #endif
94 
95 MICROSOFT_QUANTUM_DECL size_t random_choice(_In_ uintq sid, _In_ size_t n, _In_reads_(n) double* p);
96 
97 MICROSOFT_QUANTUM_DECL void PhaseParity(_In_ uintq sid, _In_ double lambda, _In_ uintq n, _In_reads_(n) uintq* q);
99  _In_ uintq sid, _In_ uintq n, _In_reads_(n) int* b, _In_reads_(n) uintq* q);
100 
102 
103 // allocate and release
107 
108 // single-qubit gates
117 MICROSOFT_QUANTUM_DECL void U(_In_ uintq sid, _In_ uintq q, _In_ double theta, _In_ double phi, _In_ double lambda);
118 MICROSOFT_QUANTUM_DECL void Mtrx(_In_ uintq sid, _In_reads_(8) double* m, _In_ uintq q);
119 
120 // multi-controlled single-qubit gates
121 
130 MICROSOFT_QUANTUM_DECL void MCU(_In_ uintq sid, _In_ uintq n, _In_reads_(n) uintq* c, _In_ uintq q, _In_ double theta,
131  _In_ double phi, _In_ double lambda);
133  _In_ uintq sid, _In_ uintq n, _In_reads_(n) uintq* c, _In_reads_(8) double* m, _In_ uintq q);
134 
143 MICROSOFT_QUANTUM_DECL void MACU(_In_ uintq sid, _In_ uintq n, _In_reads_(n) uintq* c, _In_ uintq q, _In_ double theta,
144  _In_ double phi, _In_ double lambda);
146  _In_ uintq sid, _In_ uintq n, _In_reads_(n) uintq* c, _In_reads_(8) double* m, _In_ uintq q);
147 
149  _In_ uintq sid, _In_ uintq n, _In_reads_(n) uintq* c, _In_reads_(8) double* m, _In_ uintq q, _In_ uintq p);
150 
152  _In_ uintq sid, _In_ uintq n, _In_reads_(n) uintq* c, _In_ uintq q, double* m);
153 
154 // coalesced single qubit gates
155 
159 
160 // rotations
161 MICROSOFT_QUANTUM_DECL void R(_In_ uintq sid, _In_ uintq b, _In_ double phi, _In_ uintq q);
162 
163 // multi-controlled rotations
165  _In_ uintq sid, _In_ uintq b, _In_ double phi, _In_ uintq n, _In_reads_(n) uintq* c, _In_ uintq q);
166 
167 // Exponential of Pauli operators
169  _In_ uintq sid, _In_ uintq n, _In_reads_(n) int* b, _In_ double phi, _In_reads_(n) uintq* q);
170 MICROSOFT_QUANTUM_DECL void MCExp(_In_ uintq sid, _In_ uintq n, _In_reads_(n) int* b, _In_ double phi, _In_ uintq nc,
171  _In_reads_(nc) uintq* cs, _In_reads_(n) uintq* q);
172 
173 // measurements
179  _In_ uintq sid, _In_ uintq n, _In_reads_(n) uintq* q, _In_ uintq s, _In_reads_(s) uintq* m);
180 
184 MICROSOFT_QUANTUM_DECL void FSim(_In_ uintq sid, _In_ double theta, _In_ double phi, _In_ uintq qi1, _In_ uintq qi2);
187  _In_ uintq sid, _In_ uintq n, _In_reads_(n) uintq* c, _In_ uintq qi1, _In_ uintq qi2);
188 
189 // Schmidt decomposition
193 
195 MICROSOFT_QUANTUM_DECL void OR(_In_ uintq sid, _In_ uintq qi1, _In_ uintq qi2, _In_ uintq qo);
200 MICROSOFT_QUANTUM_DECL void CLAND(_In_ uintq sid, _In_ bool ci, _In_ uintq qi, _In_ uintq qo);
201 MICROSOFT_QUANTUM_DECL void CLOR(_In_ uintq sid, _In_ bool ci, _In_ uintq qi, _In_ uintq qo);
202 MICROSOFT_QUANTUM_DECL void CLXOR(_In_ uintq sid, _In_ bool ci, _In_ uintq qi, _In_ uintq qo);
203 MICROSOFT_QUANTUM_DECL void CLNAND(_In_ uintq sid, _In_ bool ci, _In_ uintq qi, _In_ uintq qo);
204 MICROSOFT_QUANTUM_DECL void CLNOR(_In_ uintq sid, _In_ bool ci, _In_ uintq qi, _In_ uintq qo);
205 MICROSOFT_QUANTUM_DECL void CLXNOR(_In_ uintq sid, _In_ bool ci, _In_ uintq qi, _In_ uintq qo);
206 
209 
210 #if ENABLE_ALU
212  _In_ uintq sid, _In_ uintq na, _In_reads_(na) uintq* a, _In_ uintq n, _In_reads_(n) uintq* q);
214  _In_ uintq sid, _In_ uintq na, _In_reads_(na) uintq* a, _In_ uintq n, _In_reads_(n) uintq* q);
216  _In_ uintq sid, _In_ uintq na, _In_reads_(na) uintq* a, uintq s, _In_ uintq n, _In_reads_(n) uintq* q);
218  _In_ uintq sid, _In_ uintq na, _In_reads_(na) uintq* a, uintq s, _In_ uintq n, _In_reads_(n) uintq* q);
219 
221  _In_reads_(nc) uintq* c, _In_ uintq nq, _In_reads_(nq) uintq* q);
223  _In_reads_(nc) uintq* c, _In_ uintq nq, _In_reads_(nq) uintq* q);
224 
226  _In_reads_(n) uintq* q, _In_reads_(n) uintq* o);
228  _In_reads_(n) uintq* q, _In_reads_(n) uintq* o);
230  _In_ uintq n, _In_reads_(n) uintq* q, _In_reads_(n) uintq* o);
232  _In_ uintq n, _In_reads_(n) uintq* q, _In_reads_(n) uintq* o);
234  _In_ uintq n, _In_reads_(n) uintq* q, _In_reads_(n) uintq* o);
235 
237  _In_reads_(nc) uintq* c, _In_ uintq n, _In_reads_(n) uintq* q, _In_reads_(n) uintq* o);
239  _In_reads_(nc) uintq* c, _In_ uintq n, _In_reads_(n) uintq* q, _In_reads_(n) uintq* o);
241  _In_reads_(nc) uintq* c, _In_reads_(na) uintq* m, _In_ uintq n, _In_reads_(n) uintq* q, _In_reads_(n) uintq* o);
243  _In_reads_(nc) uintq* c, _In_reads_(na) uintq* m, _In_ uintq n, _In_reads_(n) uintq* q, _In_reads_(n) uintq* o);
245  _In_reads_(nc) uintq* c, _In_reads_(na) uintq* m, _In_ uintq n, _In_reads_(n) uintq* q, _In_reads_(n) uintq* o);
246 
248  _In_ uintq sid, _In_ uintq ni, _In_reads_(ni) uintq* qi, _In_ uintq nv, _In_reads_(nv) uintq* qv, unsigned char* t);
250  _In_reads_(nv) uintq* qv, unsigned char* t);
252  _In_reads_(nv) uintq* qv, unsigned char* t);
253 MICROSOFT_QUANTUM_DECL void Hash(_In_ uintq sid, _In_ uintq n, _In_reads_(n) uintq* q, unsigned char* t);
254 #endif
255 
261 MICROSOFT_QUANTUM_DECL void SetSdrp(_In_ uintq sid, _In_ double sdrp);
264 
265 #if !(FPPOW < 6 && !ENABLE_COMPLEX_X2)
266 MICROSOFT_QUANTUM_DECL void TimeEvolve(_In_ uintq sid, _In_ double t, _In_ uintq n,
267  _In_reads_(n) _QrackTimeEvolveOpHeader* teos, uintq mn, _In_reads_(mn) double* mtrx);
268 #endif
269 
271  _In_ uintq sid, _In_ uintq n, _In_reads_(n) uintq* c, _In_ uintq q, _In_ uintq f, _In_ double a, _In_ double tol);
274 
275 #if FPPOW < 6
276 MICROSOFT_QUANTUM_DECL void set_qneuron_angles(_In_ uintq nid, _In_ float* angles);
277 MICROSOFT_QUANTUM_DECL void get_qneuron_angles(_In_ uintq nid, _In_ float* angles);
278 #else
279 MICROSOFT_QUANTUM_DECL void set_qneuron_angles(_In_ uintq nid, _In_ double* angles);
280 MICROSOFT_QUANTUM_DECL void get_qneuron_angles(_In_ uintq nid, _In_ double* angles);
281 #endif
282 
283 MICROSOFT_QUANTUM_DECL void set_qneuron_alpha(_In_ uintq nid, _In_ double alpha);
285 
288 
289 MICROSOFT_QUANTUM_DECL double qneuron_predict(_In_ uintq nid, _In_ bool e, _In_ bool r);
291 
293 
294 MICROSOFT_QUANTUM_DECL void qneuron_learn(_In_ uintq nid, _In_ double eta, _In_ bool e, _In_ bool r);
295 MICROSOFT_QUANTUM_DECL void qneuron_learn_permutation(_In_ uintq nid, _In_ double eta, _In_ bool e, _In_ bool r);
296 
297 MICROSOFT_QUANTUM_DECL uintq init_qcircuit(_In_ bool collapse, _In_ bool clifford);
306  _In_ uintq cid, _In_reads_(8) double* m, _In_ uintq n, _In_reads_(n) uintq* c, _In_ uintq q, _In_ uintq p);
310 }
MICROSOFT_QUANTUM_DECL void POWN(_In_ uintq sid, _In_ uintq na, _In_reads_(na) uintq *a, _In_reads_(na) uintq *m, _In_ uintq n, _In_reads_(n) uintq *q, _In_reads_(n) uintq *o)
Definition: pinvoke_api.cpp:2681
MICROSOFT_QUANTUM_DECL bool TrySeparate2Qb(_In_ uintq sid, _In_ uintq qi1, _In_ uintq qi2)
Definition: pinvoke_api.cpp:2857
MICROSOFT_QUANTUM_DECL void Exp(_In_ uintq sid, _In_ uintq n, _In_reads_(n) int *b, _In_ double phi, _In_reads_(n) uintq *q)
(External API) Exponentiation of Pauli operators
Definition: pinvoke_api.cpp:1812
#define _In_reads_(n)
Definition: pinvoke_api.hpp:22
MICROSOFT_QUANTUM_DECL void Dispose(_In_ uintq sid, _In_ uintq n, _In_reads_(n) uintq *q)
Definition: pinvoke_api.cpp:2123
MICROSOFT_QUANTUM_DECL double FactorizedExpectation(_In_ uintq sid, _In_ uintq n, _In_reads_(n) uintq *q, _In_ uintq m, uintq *c)
(External API) Get the permutation expectation value, based upon the order of input qubits.
Definition: pinvoke_api.cpp:2455
MICROSOFT_QUANTUM_DECL void set_qneuron_alpha(_In_ uintq nid, _In_ double alpha)
Definition: pinvoke_api.cpp:3114
MICROSOFT_QUANTUM_DECL void MCMUL(_In_ uintq sid, _In_ uintq na, _In_reads_(na) uintq *a, _In_ uintq nc, _In_reads_(nc) uintq *c, _In_ uintq n, _In_reads_(n) uintq *q, _In_reads_(n) uintq *o)
Definition: pinvoke_api.cpp:2697
MICROSOFT_QUANTUM_DECL void MZ(_In_ uintq sid, _In_ uintq n, _In_reads_(n) uintq *q)
(External API) Multiple "Z" Gate
Definition: pinvoke_api.cpp:1767
MICROSOFT_QUANTUM_DECL void Dump(_In_ uintq sid, _In_ ProbAmpCallback callback)
(External API) "Dump" state vector from the selected simulator ID into the callback
Definition: pinvoke_api.cpp:1017
MICROSOFT_QUANTUM_DECL void SBC(_In_ uintq sid, uintq s, _In_ uintq ni, _In_reads_(ni) uintq *qi, _In_ uintq nv, _In_reads_(nv) uintq *qv, unsigned char *t)
Definition: pinvoke_api.cpp:2817
MICROSOFT_QUANTUM_DECL void qcircuit_swap(_In_ uintq cid, _In_ uintq q1, _In_ uintq q2)
Definition: pinvoke_api.cpp:3285
#define MICROSOFT_QUANTUM_DECL
Definition: pinvoke_api.hpp:15
MICROSOFT_QUANTUM_DECL void XNOR(_In_ uintq sid, _In_ uintq qi1, _In_ uintq qi2, _In_ uintq qo)
Definition: pinvoke_api.cpp:2214
MICROSOFT_QUANTUM_DECL void MCDIV(_In_ uintq sid, _In_ uintq na, _In_reads_(na) uintq *a, _In_ uintq nc, _In_reads_(nc) uintq *c, _In_ uintq n, _In_reads_(n) uintq *q, _In_reads_(n) uintq *o)
Definition: pinvoke_api.cpp:2715
MICROSOFT_QUANTUM_DECL void set_concurrency(_In_ uintq sid, _In_ uintq p)
(External API) Set concurrency level per QEngine shard
Definition: pinvoke_api.cpp:937
MICROSOFT_QUANTUM_DECL void CLAND(_In_ uintq sid, _In_ bool ci, _In_ uintq qi, _In_ uintq qo)
Definition: pinvoke_api.cpp:2226
MICROSOFT_QUANTUM_DECL void ResetUnitaryFidelity(_In_ uintq sid)
Definition: pinvoke_api.cpp:2901
MICROSOFT_QUANTUM_DECL void set_qneuron_angles(_In_ uintq nid, _In_ float *angles)
Definition: pinvoke_api.cpp:3073
MICROSOFT_QUANTUM_DECL uintq init_count_pager(_In_ uintq q, _In_ bool dm)
(External API) Initialize a simulator ID with "q" qubits and implicit default layer options.
Definition: pinvoke_api.cpp:776
MICROSOFT_QUANTUM_DECL void Hash(_In_ uintq sid, _In_ uintq n, _In_reads_(n) uintq *q, unsigned char *t)
Definition: pinvoke_api.cpp:2830
MICROSOFT_QUANTUM_DECL bool TrySeparate1Qb(_In_ uintq sid, _In_ uintq qi1)
Definition: pinvoke_api.cpp:2844
MICROSOFT_QUANTUM_DECL void MCS(_In_ uintq sid, _In_ uintq n, _In_reads_(n) uintq *c, _In_ uintq q)
(External API) Controlled "S" Gate
Definition: pinvoke_api.cpp:1461
MICROSOFT_QUANTUM_DECL void MX(_In_ uintq sid, _In_ uintq n, _In_reads_(n) uintq *q)
(External API) Multiple "X" Gate
Definition: pinvoke_api.cpp:1739
MICROSOFT_QUANTUM_DECL void MCDIVN(_In_ uintq sid, _In_ uintq na, _In_reads_(na) uintq *a, _In_ uintq nc, _In_reads_(nc) uintq *c, _In_reads_(na) uintq *m, _In_ uintq n, _In_reads_(n) uintq *q, _In_reads_(n) uintq *o)
Definition: pinvoke_api.cpp:2752
MICROSOFT_QUANTUM_DECL uintq init_count(_In_ uintq q, _In_ bool dm)
(External API) Initialize a simulator ID with "q" qubits and implicit default layer options.
Definition: pinvoke_api.cpp:720
MICROSOFT_QUANTUM_DECL void DIVN(_In_ uintq sid, _In_ uintq na, _In_reads_(na) uintq *a, _In_reads_(na) uintq *m, _In_ uintq n, _In_reads_(n) uintq *q, _In_reads_(n) uintq *o)
Definition: pinvoke_api.cpp:2666
MICROSOFT_QUANTUM_DECL void T(_In_ uintq sid, _In_ uintq q)
(External API) "T" Gate
Definition: pinvoke_api.cpp:1317
MICROSOFT_QUANTUM_DECL void ACSWAP(_In_ uintq sid, _In_ uintq n, _In_reads_(n) uintq *c, _In_ uintq qi1, _In_ uintq qi2)
Definition: pinvoke_api.cpp:2036
MICROSOFT_QUANTUM_DECL void MULN(_In_ uintq sid, _In_ uintq na, _In_reads_(na) uintq *a, _In_reads_(na) uintq *m, _In_ uintq n, _In_reads_(n) uintq *q, _In_reads_(n) uintq *o)
Definition: pinvoke_api.cpp:2651
MICROSOFT_QUANTUM_DECL void qcircuit_append_mc(_In_ uintq cid, _In_reads_(8) double *m, _In_ uintq n, _In_reads_(n) uintq *c, _In_ uintq q, _In_ uintq p)
Definition: pinvoke_api.cpp:3298
MICROSOFT_QUANTUM_DECL void MCAdjS(_In_ uintq sid, _In_ uintq n, _In_reads_(n) uintq *c, _In_ uintq q)
(External API) Controlled Inverse "S" Gate
Definition: pinvoke_api.cpp:1489
MICROSOFT_QUANTUM_DECL uintq get_qcircuit_qubit_count(_In_ uintq cid)
Definition: pinvoke_api.cpp:3280
MICROSOFT_QUANTUM_DECL void MUL(_In_ uintq sid, _In_ uintq na, _In_reads_(na) uintq *a, _In_ uintq n, _In_reads_(n) uintq *q, _In_reads_(n) uintq *o)
Definition: pinvoke_api.cpp:2623
MICROSOFT_QUANTUM_DECL uintq Decompose(_In_ uintq sid, _In_ uintq n, _In_reads_(n) uintq *q)
Definition: pinvoke_api.cpp:2084
MICROSOFT_QUANTUM_DECL void MeasureShots(_In_ uintq sid, _In_ uintq n, _In_reads_(n) uintq *q, _In_ uintq s, _In_reads_(s) uintq *m)
Definition: pinvoke_api.cpp:1959
MICROSOFT_QUANTUM_DECL void QFT(_In_ uintq sid, _In_ uintq n, _In_reads_(n) uintq *c)
Definition: pinvoke_api.cpp:2489
MICROSOFT_QUANTUM_DECL double qneuron_learn_cycle(_In_ uintq nid, _In_ bool e)
Definition: pinvoke_api.cpp:3162
MICROSOFT_QUANTUM_DECL bool TrySeparateTol(_In_ uintq sid, _In_ uintq n, _In_reads_(n) uintq *q, _In_ double tol)
Definition: pinvoke_api.cpp:2870
MICROSOFT_QUANTUM_DECL void R(_In_ uintq sid, _In_ uintq b, _In_ double phi, _In_ uintq q)
(External API) Rotation around Pauli axes
Definition: pinvoke_api.cpp:1781
MICROSOFT_QUANTUM_DECL double qneuron_unpredict(_In_ uintq nid, _In_ bool e)
Definition: pinvoke_api.cpp:3150
MICROSOFT_QUANTUM_DECL uintq get_qneuron_activation_fn(_In_ uintq nid)
Definition: pinvoke_api.cpp:3132
MICROSOFT_QUANTUM_DECL void qneuron_learn(_In_ uintq nid, _In_ double eta, _In_ bool e, _In_ bool r)
Definition: pinvoke_api.cpp:3174
MICROSOFT_QUANTUM_DECL void destroy_qneuron(_In_ uintq nid)
Definition: pinvoke_api.cpp:3062
MICROSOFT_QUANTUM_DECL double PermutationExpectationRdm(_In_ uintq sid, _In_ uintq n, _In_reads_(n) uintq *q, _In_ bool r)
MICROSOFT_QUANTUM_DECL void NOR(_In_ uintq sid, _In_ uintq qi1, _In_ uintq qi2, _In_ uintq qo)
Definition: pinvoke_api.cpp:2202
MICROSOFT_QUANTUM_DECL void SetTInjection(_In_ uintq sid, _In_ bool iti)
Definition: pinvoke_api.cpp:2936
MICROSOFT_QUANTUM_DECL void DumpIds(_In_ uintq sid, _In_ IdCallback callback)
(External API) "Dump" all IDs from the selected simulator ID into the callback
Definition: pinvoke_api.cpp:1004
MICROSOFT_QUANTUM_DECL void OR(_In_ uintq sid, _In_ uintq qi1, _In_ uintq qi2, _In_ uintq qo)
Definition: pinvoke_api.cpp:2166
MICROSOFT_QUANTUM_DECL void MACZ(_In_ uintq sid, _In_ uintq n, _In_reads_(n) uintq *c, _In_ uintq q)
(External API) "Anti-"Controlled "Z" Gate
Definition: pinvoke_api.cpp:1578
MICROSOFT_QUANTUM_DECL void Y(_In_ uintq sid, _In_ uintq q)
(External API) "Y" Gate
Definition: pinvoke_api.cpp:1258
MICROSOFT_QUANTUM_DECL void set_qneuron_activation_fn(_In_ uintq nid, _In_ uintq f)
Definition: pinvoke_api.cpp:3126
MICROSOFT_QUANTUM_DECL double PermutationProbRdm(_In_ uintq sid, _In_ uintq n, _In_reads_(n) uintq *q, _In_reads_(n) bool *c, _In_ bool r)
(External API) Get the permutation expectation value, based upon the order of input qubits,...
Definition: pinvoke_api.cpp:2359
MICROSOFT_QUANTUM_DECL void Compose(_In_ uintq sid1, _In_ uintq sid2, uintq *q)
Definition: pinvoke_api.cpp:2047
MICROSOFT_QUANTUM_DECL void MCX(_In_ uintq sid, _In_ uintq n, _In_reads_(n) uintq *c, _In_ uintq q)
(External API) Controlled "X" Gate
Definition: pinvoke_api.cpp:1402
MICROSOFT_QUANTUM_DECL double Prob(_In_ uintq sid, _In_ uintq q)
(External API) Get the probability that a qubit is in the |1> state.
Definition: pinvoke_api.cpp:2315
MICROSOFT_QUANTUM_DECL uintq qcircuit_past_light_cone(_In_ uintq cid, _In_ uintq n, _In_reads_(n) uintq *q)
Definition: pinvoke_api.cpp:3262
MICROSOFT_QUANTUM_DECL uintq Measure(_In_ uintq sid, _In_ uintq n, _In_reads_(n) int *b, _In_reads_(n) uintq *q)
(External API) Measure bits in specified Pauli bases
Definition: pinvoke_api.cpp:1938
MICROSOFT_QUANTUM_DECL void MACH(_In_ uintq sid, _In_ uintq n, _In_reads_(n) uintq *c, _In_ uintq q)
(External API) "Anti-"Controlled "H" Gate
Definition: pinvoke_api.cpp:1592
MICROSOFT_QUANTUM_DECL uintq init_clone(_In_ uintq sid)
(External API) Initialize a simulator ID that clones simulator ID "sid"
Definition: pinvoke_api.cpp:850
MICROSOFT_QUANTUM_DECL bool release(_In_ uintq sid, _In_ uintq q)
(External API) Release 1 qubit with the given qubit ID, under the simulator ID
Definition: pinvoke_api.cpp:1194
MICROSOFT_QUANTUM_DECL void qstabilizer_in_from_file(_In_ uintq sid, _In_ char *f)
Definition: pinvoke_api.cpp:972
MICROSOFT_QUANTUM_DECL uintq M(_In_ uintq sid, _In_ uintq q)
(External API) Measure bit in |0>/|1> basis
Definition: pinvoke_api.cpp:1890
MICROSOFT_QUANTUM_DECL void MCH(_In_ uintq sid, _In_ uintq n, _In_reads_(n) uintq *c, _In_ uintq q)
(External API) Controlled "H" Gate
Definition: pinvoke_api.cpp:1444
MICROSOFT_QUANTUM_DECL double qneuron_predict(_In_ uintq nid, _In_ bool e, _In_ bool r)
Definition: pinvoke_api.cpp:3138
MICROSOFT_QUANTUM_DECL void IQFT(_In_ uintq sid, _In_ uintq n, _In_reads_(n) uintq *c)
Definition: pinvoke_api.cpp:2508
MICROSOFT_QUANTUM_DECL void MCMULN(_In_ uintq sid, _In_ uintq na, _In_reads_(na) uintq *a, _In_ uintq nc, _In_reads_(nc) uintq *c, _In_reads_(na) uintq *m, _In_ uintq n, _In_reads_(n) uintq *q, _In_reads_(n) uintq *o)
Definition: pinvoke_api.cpp:2733
MICROSOFT_QUANTUM_DECL void S(_In_ uintq sid, _In_ uintq q)
(External API) "S" Gate
Definition: pinvoke_api.cpp:1302
MICROSOFT_QUANTUM_DECL uintq clone_qneuron(_In_ uintq nid)
Definition: pinvoke_api.cpp:3023
MICROSOFT_QUANTUM_DECL void qneuron_learn_permutation(_In_ uintq nid, _In_ double eta, _In_ bool e, _In_ bool r)
Definition: pinvoke_api.cpp:3185
MICROSOFT_QUANTUM_DECL void MACY(_In_ uintq sid, _In_ uintq n, _In_reads_(n) uintq *c, _In_ uintq q)
(External API) "Anti-"Controlled "Y" Gate
Definition: pinvoke_api.cpp:1564
MICROSOFT_QUANTUM_DECL void Mtrx(_In_ uintq sid, _In_reads_(8) double *m, _In_ uintq q)
(External API) 2x2 complex matrix unitary gate
Definition: pinvoke_api.cpp:1377
MICROSOFT_QUANTUM_DECL void SetSdrp(_In_ uintq sid, _In_ double sdrp)
Definition: pinvoke_api.cpp:2913
MICROSOFT_QUANTUM_DECL uintq init_qcircuit_clone(_In_ uintq cid)
Definition: pinvoke_api.cpp:3258
MICROSOFT_QUANTUM_DECL void MACAdjS(_In_ uintq sid, _In_ uintq n, _In_reads_(n) uintq *c, _In_ uintq q)
(External API) "Anti-"Controlled Inverse "S" Gate
Definition: pinvoke_api.cpp:1637
MICROSOFT_QUANTUM_DECL void Multiplex1Mtrx(_In_ uintq sid, _In_ uintq n, _In_reads_(n) uintq *c, _In_ uintq q, double *m)
Definition: pinvoke_api.cpp:1713
MICROSOFT_QUANTUM_DECL void ADC(_In_ uintq sid, uintq s, _In_ uintq ni, _In_reads_(ni) uintq *qi, _In_ uintq nv, _In_reads_(nv) uintq *qv, unsigned char *t)
Definition: pinvoke_api.cpp:2804
MICROSOFT_QUANTUM_DECL void ADDS(_In_ uintq sid, _In_ uintq na, _In_reads_(na) uintq *a, uintq s, _In_ uintq n, _In_reads_(n) uintq *q)
Definition: pinvoke_api.cpp:2557
MICROSOFT_QUANTUM_DECL void NAND(_In_ uintq sid, _In_ uintq qi1, _In_ uintq qi2, _In_ uintq qo)
Definition: pinvoke_api.cpp:2190
MICROSOFT_QUANTUM_DECL size_t random_choice(_In_ uintq sid, _In_ size_t n, _In_reads_(n) double *p)
MICROSOFT_QUANTUM_DECL void qcircuit_in_from_file(_In_ uintq cid, _In_ char *f)
Definition: pinvoke_api.cpp:3334
MICROSOFT_QUANTUM_DECL void MACX(_In_ uintq sid, _In_ uintq n, _In_reads_(n) uintq *c, _In_ uintq q)
(External API) "Anti-"Controlled "X" Gate
Definition: pinvoke_api.cpp:1550
MICROSOFT_QUANTUM_DECL void U(_In_ uintq sid, _In_ uintq q, _In_ double theta, _In_ double phi, _In_ double lambda)
(External API) 3-parameter unitary gate
Definition: pinvoke_api.cpp:1362
MICROSOFT_QUANTUM_DECL void MCU(_In_ uintq sid, _In_ uintq n, _In_reads_(n) uintq *c, _In_ uintq q, _In_ double theta, _In_ double phi, _In_ double lambda)
(External API) Controlled 3-parameter unitary gate
Definition: pinvoke_api.cpp:1517
MICROSOFT_QUANTUM_DECL void ISWAP(_In_ uintq sid, _In_ uintq qi1, _In_ uintq qi2)
Definition: pinvoke_api.cpp:1989
MICROSOFT_QUANTUM_DECL uintq MAll(_In_ uintq sid)
(External API) Measure all bits separately in |0>/|1> basis, and return the result in low-to-high ord...
Definition: pinvoke_api.cpp:1923
MICROSOFT_QUANTUM_DECL uintq init()
Definition: pinvoke_api.hpp:44
MICROSOFT_QUANTUM_DECL void MCADD(_In_ uintq sid, _In_ uintq na, _In_reads_(na) uintq *a, _In_ uintq nc, _In_reads_(nc) uintq *c, _In_ uintq nq, _In_reads_(nq) uintq *q)
Definition: pinvoke_api.cpp:2586
MICROSOFT_QUANTUM_DECL void CLNAND(_In_ uintq sid, _In_ bool ci, _In_ uintq qi, _In_ uintq qo)
Definition: pinvoke_api.cpp:2262
MICROSOFT_QUANTUM_DECL uintq num_qubits(_In_ uintq sid)
Definition: pinvoke_api.cpp:1227
MICROSOFT_QUANTUM_DECL void MACS(_In_ uintq sid, _In_ uintq n, _In_reads_(n) uintq *c, _In_ uintq q)
(External API) "Anti-"Controlled "S" Gate
Definition: pinvoke_api.cpp:1609
MICROSOFT_QUANTUM_DECL void MACAdjT(_In_ uintq sid, _In_ uintq n, _In_reads_(n) uintq *c, _In_ uintq q)
(External API) "Anti-"Controlled Inverse "T" Gate
Definition: pinvoke_api.cpp:1651
MICROSOFT_QUANTUM_DECL void MACT(_In_ uintq sid, _In_ uintq n, _In_reads_(n) uintq *c, _In_ uintq q)
(External API) "Anti-"Controlled "T" Gate
Definition: pinvoke_api.cpp:1623
MICROSOFT_QUANTUM_DECL uintq init_count_type(_In_ uintq q, _In_ bool tn, _In_ bool md, _In_ bool sd, _In_ bool sh, _In_ bool bdt, _In_ bool pg, _In_ bool zxf, _In_ bool hy, _In_ bool oc, _In_ bool dm)
(External API) Initialize a simulator ID with "q" qubits and explicit layer options on/off
Definition: pinvoke_api.cpp:599
MICROSOFT_QUANTUM_DECL void MCMtrx(_In_ uintq sid, _In_ uintq n, _In_reads_(n) uintq *c, _In_reads_(8) double *m, _In_ uintq q)
(External API) Controlled 2x2 complex matrix unitary gate
Definition: pinvoke_api.cpp:1532
MICROSOFT_QUANTUM_DECL void MACU(_In_ uintq sid, _In_ uintq n, _In_reads_(n) uintq *c, _In_ uintq q, _In_ double theta, _In_ double phi, _In_ double lambda)
(External API) Controlled 3-parameter unitary gate
Definition: pinvoke_api.cpp:1665
MICROSOFT_QUANTUM_DECL void MCZ(_In_ uintq sid, _In_ uintq n, _In_reads_(n) uintq *c, _In_ uintq q)
(External API) Controlled "Z" Gate
Definition: pinvoke_api.cpp:1430
bool(* ProbAmpCallback)(size_t, double, double)
Definition: pinvoke_api.hpp:27
MICROSOFT_QUANTUM_DECL void ResetAll(_In_ uintq sid)
(External API) Set the simulator to a computational basis permutation.
Definition: pinvoke_api.cpp:1139
MICROSOFT_QUANTUM_DECL void LDA(_In_ uintq sid, _In_ uintq ni, _In_reads_(ni) uintq *qi, _In_ uintq nv, _In_reads_(nv) uintq *qv, unsigned char *t)
Definition: pinvoke_api.cpp:2791
MICROSOFT_QUANTUM_DECL void ADD(_In_ uintq sid, _In_ uintq na, _In_reads_(na) uintq *a, _In_ uintq n, _In_reads_(n) uintq *q)
Definition: pinvoke_api.cpp:2529
MICROSOFT_QUANTUM_DECL void InKet(_In_ uintq sid, _In_ float *ket)
(External API) Set state vector for the selected simulator ID.
Definition: pinvoke_api.cpp:1042
#define _In_
Definition: pinvoke_api.hpp:21
MICROSOFT_QUANTUM_DECL void SetReactiveSeparate(_In_ uintq sid, _In_ bool irs)
Definition: pinvoke_api.cpp:2925
void(* IdCallback)(uintq)
Definition: pinvoke_api.hpp:26
MICROSOFT_QUANTUM_DECL void OutKet(_In_ uintq sid, _In_ float *ket)
(External API) Set state vector for the selected simulator ID.
Definition: pinvoke_api.cpp:1052
MICROSOFT_QUANTUM_DECL void get_qneuron_angles(_In_ uintq nid, _In_ float *angles)
Definition: pinvoke_api.cpp:3094
MICROSOFT_QUANTUM_DECL void seed(_In_ uintq sid, _In_ uintq s)
(External API) Set RNG seed for simulator ID
Definition: pinvoke_api.cpp:922
MICROSOFT_QUANTUM_DECL void MCT(_In_ uintq sid, _In_ uintq n, _In_reads_(n) uintq *c, _In_ uintq q)
(External API) Controlled "T" Gate
Definition: pinvoke_api.cpp:1475
MICROSOFT_QUANTUM_DECL double get_qneuron_alpha(_In_ uintq nid)
Definition: pinvoke_api.cpp:3120
MICROSOFT_QUANTUM_DECL void UCMtrx(_In_ uintq sid, _In_ uintq n, _In_reads_(n) uintq *c, _In_reads_(8) double *m, _In_ uintq q, _In_ uintq p)
(External API) Controlled 2x2 complex matrix unitary gate with arbitrary control permutation
Definition: pinvoke_api.cpp:1698
MICROSOFT_QUANTUM_DECL void SUBS(_In_ uintq sid, _In_ uintq na, _In_reads_(na) uintq *a, uintq s, _In_ uintq n, _In_reads_(n) uintq *q)
Definition: pinvoke_api.cpp:2571
MICROSOFT_QUANTUM_DECL void AND(_In_ uintq sid, _In_ uintq qi1, _In_ uintq qi2, _In_ uintq qo)
Definition: pinvoke_api.cpp:2154
MICROSOFT_QUANTUM_DECL double GetUnitaryFidelity(_In_ uintq sid)
Definition: pinvoke_api.cpp:2888
MICROSOFT_QUANTUM_DECL void MCSUB(_In_ uintq sid, _In_ uintq na, _In_reads_(na) uintq *a, _In_ uintq nc, _In_reads_(nc) uintq *c, _In_ uintq nq, _In_reads_(nq) uintq *q)
Definition: pinvoke_api.cpp:2604
MICROSOFT_QUANTUM_DECL double FactorizedExpectationRdm(_In_ uintq sid, _In_ uintq n, _In_reads_(n) uintq *q, _In_ uintq m, uintq *c, _In_ bool r)
(External API) Get the permutation expectation value, based upon the order of input qubits,...
Definition: pinvoke_api.cpp:2465
MICROSOFT_QUANTUM_DECL void AdjISWAP(_In_ uintq sid, _In_ uintq qi1, _In_ uintq qi2)
Definition: pinvoke_api.cpp:2001
MICROSOFT_QUANTUM_DECL void qcircuit_out_to_file(_In_ uintq cid, _In_ char *f)
Definition: pinvoke_api.cpp:3325
MICROSOFT_QUANTUM_DECL double PermutationProb(_In_ uintq sid, _In_ uintq n, _In_reads_(n) uintq *q, _In_reads_(n) bool *c)
(External API) Get the permutation expectation value, based upon the order of input qubits.
Definition: pinvoke_api.cpp:2349
MICROSOFT_QUANTUM_DECL void qcircuit_run(_In_ uintq cid, _In_ uintq sid)
Definition: pinvoke_api.cpp:3319
MICROSOFT_QUANTUM_DECL int get_error(_In_ uintq sid)
(External API) Poll after each operation to check whether error occurred.
Definition: pinvoke_api.cpp:587
MICROSOFT_QUANTUM_DECL uintq init_qneuron(_In_ uintq sid, _In_ uintq n, _In_reads_(n) uintq *c, _In_ uintq q, _In_ uintq f, _In_ double a, _In_ double tol)
Definition: pinvoke_api.cpp:2972
MICROSOFT_QUANTUM_DECL void SUB(_In_ uintq sid, _In_ uintq na, _In_reads_(na) uintq *a, _In_ uintq n, _In_reads_(n) uintq *q)
Definition: pinvoke_api.cpp:2543
MICROSOFT_QUANTUM_DECL void CSWAP(_In_ uintq sid, _In_ uintq n, _In_reads_(n) uintq *c, _In_ uintq qi1, _In_ uintq qi2)
Definition: pinvoke_api.cpp:2025
MICROSOFT_QUANTUM_DECL void AdjS(_In_ uintq sid, _In_ uintq q)
(External API) Inverse "S" Gate
Definition: pinvoke_api.cpp:1332
MICROSOFT_QUANTUM_DECL void XOR(_In_ uintq sid, _In_ uintq qi1, _In_ uintq qi2, _In_ uintq qo)
Definition: pinvoke_api.cpp:2178
MICROSOFT_QUANTUM_DECL void qcircuit_append_1qb(_In_ uintq cid, _In_reads_(8) double *m, _In_ uintq q)
Definition: pinvoke_api.cpp:3290
unsigned long long uintq
Definition: pinvoke_api.hpp:25
MICROSOFT_QUANTUM_DECL void DIV(_In_ uintq sid, _In_ uintq na, _In_reads_(na) uintq *a, _In_ uintq n, _In_reads_(n) uintq *q, _In_reads_(n) uintq *o)
Definition: pinvoke_api.cpp:2637
MICROSOFT_QUANTUM_DECL double FactorizedExpectationFpRdm(_In_ uintq sid, _In_ uintq n, _In_reads_(n) uintq *q, float *c, _In_ bool r)
(External API) Get the permutation expectation value, based upon the order of input qubits,...
Definition: pinvoke_api.cpp:2483
MICROSOFT_QUANTUM_DECL void X(_In_ uintq sid, _In_ uintq q)
(External API) "X" Gate
Definition: pinvoke_api.cpp:1243
MICROSOFT_QUANTUM_DECL void MACMtrx(_In_ uintq sid, _In_ uintq n, _In_reads_(n) uintq *c, _In_reads_(8) double *m, _In_ uintq q)
(External API) Controlled 2x2 complex matrix unitary gate
Definition: pinvoke_api.cpp:1680
MICROSOFT_QUANTUM_DECL double JointEnsembleProbability(_In_ uintq sid, _In_ uintq n, _In_reads_(n) int *b, _In_reads_(n) uintq *q)
(External API) Find the joint probability for all specified qubits under the respective Pauli basis t...
Definition: pinvoke_api.cpp:1115
MICROSOFT_QUANTUM_DECL void CLOR(_In_ uintq sid, _In_ bool ci, _In_ uintq qi, _In_ uintq qo)
Definition: pinvoke_api.cpp:2238
MICROSOFT_QUANTUM_DECL void AdjT(_In_ uintq sid, _In_ uintq q)
(External API) Inverse "T" Gate
Definition: pinvoke_api.cpp:1347
MICROSOFT_QUANTUM_DECL void SWAP(_In_ uintq sid, _In_ uintq qi1, _In_ uintq qi2)
Definition: pinvoke_api.cpp:1977
MICROSOFT_QUANTUM_DECL void PhaseParity(_In_ uintq sid, _In_ double lambda, _In_ uintq n, _In_reads_(n) uintq *q)
Definition: pinvoke_api.cpp:1068
MICROSOFT_QUANTUM_DECL void MCY(_In_ uintq sid, _In_ uintq n, _In_reads_(n) uintq *c, _In_ uintq q)
(External API) Controlled "Y" Gate
Definition: pinvoke_api.cpp:1416
MICROSOFT_QUANTUM_DECL void destroy(_In_ uintq sid)
(External API) Destroy a simulator (ID will not be reused)
Definition: pinvoke_api.cpp:908
MICROSOFT_QUANTUM_DECL void MCPOWN(_In_ uintq sid, _In_ uintq na, _In_reads_(na) uintq *a, _In_ uintq nc, _In_reads_(nc) uintq *c, _In_reads_(na) uintq *m, _In_ uintq n, _In_reads_(n) uintq *q, _In_reads_(n) uintq *o)
Definition: pinvoke_api.cpp:2771
MICROSOFT_QUANTUM_DECL void MCR(_In_ uintq sid, _In_ uintq b, _In_ double phi, _In_ uintq n, _In_reads_(n) uintq *c, _In_ uintq q)
(External API) Controlled rotation around Pauli axes
Definition: pinvoke_api.cpp:1796
MICROSOFT_QUANTUM_DECL void MCAdjT(_In_ uintq sid, _In_ uintq n, _In_reads_(n) uintq *c, _In_ uintq q)
(External API) Controlled Inverse "T" Gate
Definition: pinvoke_api.cpp:1503
MICROSOFT_QUANTUM_DECL double PermutationExpectation(_In_ uintq sid, _In_ uintq n, _In_reads_(n) uintq *q)
(External API) Get the permutation expectation value, based upon the order of input qubits.
Definition: pinvoke_api.cpp:2387
MICROSOFT_QUANTUM_DECL void CLNOR(_In_ uintq sid, _In_ bool ci, _In_ uintq qi, _In_ uintq qo)
Definition: pinvoke_api.cpp:2274
MICROSOFT_QUANTUM_DECL void CLXNOR(_In_ uintq sid, _In_ bool ci, _In_ uintq qi, _In_ uintq qo)
Definition: pinvoke_api.cpp:2286
MICROSOFT_QUANTUM_DECL void H(_In_ uintq sid, _In_ uintq q)
(External API) Walsh-Hadamard transform applied for simulator ID and qubit ID
Definition: pinvoke_api.cpp:1287
MICROSOFT_QUANTUM_DECL void allocateQubit(_In_ uintq sid, _In_ uintq qid)
(External API) Allocate 1 new qubit with the given qubit ID, under the simulator ID
Definition: pinvoke_api.cpp:1154
MICROSOFT_QUANTUM_DECL uintq qcircuit_inverse(_In_ uintq cid)
Definition: pinvoke_api.cpp:3260
MICROSOFT_QUANTUM_DECL uintq init_qcircuit(_In_ bool collapse, _In_ bool clifford)
Definition: pinvoke_api.cpp:3196
MICROSOFT_QUANTUM_DECL void FSim(_In_ uintq sid, _In_ double theta, _In_ double phi, _In_ uintq qi1, _In_ uintq qi2)
Definition: pinvoke_api.cpp:2013
MICROSOFT_QUANTUM_DECL void qstabilizer_out_to_file(_In_ uintq sid, _In_ char *f)
Definition: pinvoke_api.cpp:949
MICROSOFT_QUANTUM_DECL void MCExp(_In_ uintq sid, _In_ uintq n, _In_reads_(n) int *b, _In_ double phi, _In_ uintq nc, _In_reads_(nc) uintq *cs, _In_reads_(n) uintq *q)
(External API) Controlled exponentiation of Pauli operators
Definition: pinvoke_api.cpp:1850
MICROSOFT_QUANTUM_DECL void destroy_qcircuit(_In_ uintq cid)
Definition: pinvoke_api.cpp:3271
MICROSOFT_QUANTUM_DECL uintq ForceM(_In_ uintq sid, _In_ uintq q, _In_ bool r)
(External API) PSEUDO-QUANTUM: Post-select bit in |0>/|1> basis
Definition: pinvoke_api.cpp:1906
MICROSOFT_QUANTUM_DECL double ProbRdm(_In_ uintq sid, _In_ uintq q)
(External API) Get the probability that a qubit is in the |1> state, treating all ancillary qubits as...
Definition: pinvoke_api.cpp:2321
MICROSOFT_QUANTUM_DECL void Z(_In_ uintq sid, _In_ uintq q)
(External API) "Z" Gate
Definition: pinvoke_api.cpp:1272
MICROSOFT_QUANTUM_DECL void MY(_In_ uintq sid, _In_ uintq n, _In_reads_(n) uintq *q)
(External API) Multiple "Y" Gate
Definition: pinvoke_api.cpp:1753
MICROSOFT_QUANTUM_DECL double FactorizedExpectationFp(_In_ uintq sid, _In_ uintq n, _In_reads_(n) uintq *q, float *c)
(External API) Get the permutation expectation value, based upon the order of input qubits.
Definition: pinvoke_api.cpp:2474
MICROSOFT_QUANTUM_DECL void CLXOR(_In_ uintq sid, _In_ bool ci, _In_ uintq qi, _In_ uintq qo)
Definition: pinvoke_api.cpp:2250
Definition: hamiltonian.hpp:16