The Quantum Exact Simulation Toolkit v4.1.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 211 of file matrices.cpp.

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

316 {
317
318 return validateAndCreateCustomFullStateDiagMatr(numQubits, useDistrib, useGpuAccel, useMultithread, __func__);
319}

Referenced by TEST_CASE().

◆ createDiagMatr()

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

Definition at line 246 of file matrices.cpp.

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

321 {
322
323 return validateAndCreateCustomFullStateDiagMatr(numQubits, modeflag::USE_AUTO, modeflag::USE_AUTO, modeflag::USE_AUTO, __func__);
324}

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 652 of file matrices.cpp.

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

◆ 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