The Quantum Exact Simulation Toolkit v4.2.0
Loading...
Searching...
No Matches
Constructors

Functions for creating variable-size matrices. More...

Functions

CompMatr createCompMatr (int numQubits)
 
FullStateDiagMatr createCustomFullStateDiagMatr (int numQubits, int useDistrib, int useGpuAccel, int useMultithread)
 
DiagMatr createDiagMatr (int numQubits)
 
FullStateDiagMatr createFullStateDiagMatr (int numQubits)
 
FullStateDiagMatr createFullStateDiagMatrFromPauliStrSum (PauliStrSum in)
 
CompMatr createInlineCompMatr (int numQb, std::vector< std::vector< qcomp > > elems)
 
CompMatr createInlineCompMatr (int numQb, {{ matrix }})
 
DiagMatr createInlineDiagMatr (int numQb, std::vector< qcomp > elems)
 
DiagMatr createInlineDiagMatr (int numQb, { list })
 

Detailed Description

Functions for creating variable-size matrices.

Function Documentation

◆ createCompMatr()

CompMatr createCompMatr ( int numQubits)
Note
Documentation for this function or struct is under construction!
See also

Definition at line 213 of file matrices.cpp.

213 {
214 validate_envIsInit(__func__);
215 validate_newCompMatrParams(numQubits, __func__);
216
217 // validation ensures these never overflow
218 qindex numRows = powerOf2(numQubits);
219 qindex numElems = numRows * numRows;
220
221 // attempt to allocate 1D memory
222 qcomp* cpuMem = cpu_allocArray(numElems); // nullptr if failed
223 qcomp* gpuMem = nullptr;
224 if (getQuESTEnv().isGpuAccelerated)
225 gpuMem = gpu_allocArray(numElems); // nullptr if failed
226
227 // prepare output CompMatr (avoiding C++20 designated initialiser)
228 CompMatr out;
229 out.numQubits = numQubits;
230 out.numRows = numRows;
231
232 // attemptedly allocate (un-initialised) flags in the heap so that struct copies are mutable
233 out.isApproxUnitary = util_allocEpsilonSensitiveHeapFlag(); // nullptr if failed
234 out.isApproxHermitian = util_allocEpsilonSensitiveHeapFlag();
235 out.wasGpuSynced = cpu_allocHeapFlag(); // nullptr if failed
236
237 // attemptedly allocate 2D alias for 1D CPU memory
238 out.cpuElems = cpu_allocAndInitMatrixWrapper(cpuMem, numRows); // nullptr if failed
239 out.cpuElemsFlat = cpuMem;
240 out.gpuElemsFlat = gpuMem;
241
242 validateMatrixAllocs(out, __func__);
243 setInitialHeapFlags(out);
244 return out;
245}
QuESTEnv getQuESTEnv()
int * wasGpuSynced
Definition matrices.h:112

Referenced by TEST_CASE(), TEST_CASE(), TEST_CASE(), and TEST_CASE().

◆ createCustomFullStateDiagMatr()

FullStateDiagMatr createCustomFullStateDiagMatr ( int numQubits,
int useDistrib,
int useGpuAccel,
int useMultithread )
Note
Documentation for this function or struct is under construction!
See also

Definition at line 318 of file matrices.cpp.

318 {
319
320 return validateAndCreateCustomFullStateDiagMatr(numQubits, useDistrib, useGpuAccel, useMultithread, __func__);
321}

Referenced by TEST_CASE().

◆ createDiagMatr()

DiagMatr createDiagMatr ( int numQubits)
Note
Documentation for this function or struct is under construction!
See also

Definition at line 248 of file matrices.cpp.

248 {
249 validate_envIsInit(__func__);
250 validate_newDiagMatrParams(numQubits, __func__);
251
252 // validation ensures this never overflows
253 qindex numElems = powerOf2(numQubits);
254
255 // prepare output DiagMatr (avoiding C++20 designated initialiser)
256 DiagMatr out;
257 out.numQubits = numQubits,
258 out.numElems = numElems,
259
260 // attempt to allocate (uninitialised) flags in the heap so that struct copies are mutable
261 out.isApproxUnitary = util_allocEpsilonSensitiveHeapFlag(); // nullptr if failed
262 out.isApproxHermitian = util_allocEpsilonSensitiveHeapFlag();
263 out.isApproxNonZero = util_allocEpsilonSensitiveHeapFlag();
264 out.isStrictlyNonNegative = cpu_allocHeapFlag(); // nullptr if failed
265 out.wasGpuSynced = cpu_allocHeapFlag();
266
267 // attempt to allocate 1D memory (nullptr if failed or not allocated)
268 out.cpuElems = cpu_allocArray(numElems);
269 out.gpuElems = (getQuESTEnv().isGpuAccelerated)? gpu_allocArray(numElems) : nullptr;
270
271 validateMatrixAllocs(out, __func__);
272 setInitialHeapFlags(out);
273 return out;
274}
int * isApproxNonZero
Definition matrices.h:170
int * isStrictlyNonNegative
Definition matrices.h:171
int * wasGpuSynced
Definition matrices.h:178

Referenced by TEST_CASE(), and TEST_CASE().

◆ createFullStateDiagMatr()

FullStateDiagMatr createFullStateDiagMatr ( int numQubits)
Note
Documentation for this function or struct is under construction!
See also

Definition at line 323 of file matrices.cpp.

323 {
324
325 return validateAndCreateCustomFullStateDiagMatr(numQubits, modeflag::USE_AUTO, modeflag::USE_AUTO, modeflag::USE_AUTO, __func__);
326}

Referenced by createFullStateDiagMatrFromPauliStrSum(), and TEST_CASE().

◆ createFullStateDiagMatrFromPauliStrSum()

FullStateDiagMatr createFullStateDiagMatrFromPauliStrSum ( PauliStrSum in)
Note
Documentation for this function or struct is under construction!
Warning
This function has not yet been unit tested and may contain bugs. Please use with caution!

Definition at line 651 of file matrices.cpp.

651 {
652 validate_pauliStrSumFields(in, __func__);
653
654 // ensure createFullStateDiagMatr() below succeeds (so if not, that thrower name is correct)
655 int numQubits = 1 + paulis_getIndOfLefmostNonIdentityPauli(in);
656 validate_newFullStateDiagMatrParams(numQubits, modeflag::USE_AUTO, modeflag::USE_AUTO, modeflag::USE_AUTO, __func__);
657
658 // permit 'in' to be non-Hermitian since it does not determine 'out' unitarity
659
661 localiser_fullstatediagmatr_setElemsToPauliStrSum(out, in);
662 markMatrixAsSynced(out);
663 return out;
664}
FullStateDiagMatr createFullStateDiagMatr(int numQubits)
Definition matrices.cpp:323

◆ createInlineCompMatr() [1/2]

CompMatr createInlineCompMatr ( int numQb,
std::vector< std::vector< qcomp > > elems )
Note
Documentation for this function or struct is under construction!
Remarks
This function is only available in C++.
See also

◆ createInlineCompMatr() [2/2]

CompMatr createInlineCompMatr ( int numQb,
{{ matrix }}  )
Note
Documentation for this function or struct is under construction!
This entity is actually a macro.
See also

◆ createInlineDiagMatr() [1/2]

DiagMatr createInlineDiagMatr ( int numQb,
std::vector< qcomp > elems )
Note
Documentation for this function or struct is under construction!
Remarks
This function is only available in C++.
See also

◆ createInlineDiagMatr() [2/2]

DiagMatr createInlineDiagMatr ( int numQb,
{ list }  )
Note
Documentation for this function or struct is under construction!
This entity is actually a macro.
See also