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

Functions for overwriting the elements of matrices. More...

Functions

void setCompMatr (CompMatr matr, qcomp **vals)
 
void setCompMatr (CompMatr matr, qcomp arr[matr.numRows][matr.numRows])
 
void setCompMatr (CompMatr out, std::vector< std::vector< qcomp > > in)
 
void setDiagMatr (DiagMatr out, qcomp *in)
 
void setDiagMatr (DiagMatr out, std::vector< qcomp > in)
 
void setDiagMatrFromMultiDimLists (DiagMatr out, void *lists, int *numQubitsPerDim, int numDims)
 
void setDiagMatrFromMultiVarFunc (DiagMatr out, qcomp(*func)(qindex *), int *numQubitsPerVar, int numVars, int areSigned)
 
void setFullStateDiagMatr (FullStateDiagMatr out, qindex startInd, qcomp *in, qindex numElems)
 
void setFullStateDiagMatr (FullStateDiagMatr out, qindex startInd, std::vector< qcomp > in)
 
void setFullStateDiagMatrFromMultiDimLists (FullStateDiagMatr out, void *lists, int *numQubitsPerDim, int numDims)
 
void setFullStateDiagMatrFromMultiVarFunc (FullStateDiagMatr out, qcomp(*func)(qindex *), int *numQubitsPerVar, int numVars, int areSigned)
 
void setFullStateDiagMatrFromPauliStrSum (FullStateDiagMatr out, PauliStrSum in)
 
void setInlineCompMatr (CompMatr matr, int numQb, std::vector< std::vector< qcomp > > in)
 
void setInlineCompMatr (CompMatr matr, int numQb, {{ matrix }})
 
void setInlineDiagMatr (DiagMatr matr, int numQb, std::vector< qcomp > in)
 
void setInlineDiagMatr (DiagMatr matr, int numQb, { list })
 
void setInlineFullStateDiagMatr (FullStateDiagMatr matr, qindex startInd, qindex numElems, std::vector< qcomp > in)
 
void setInlineFullStateDiagMatr (FullStateDiagMatr matr, qindex startInd, qindex numElems, { list })
 

Detailed Description

Functions for overwriting the elements of matrices.

Function Documentation

◆ setCompMatr() [1/3]

void setCompMatr ( CompMatr matr,
qcomp ** vals )
Note
Documentation for this function or struct is under construction!
See also

Definition at line 423 of file matrices.cpp.

423 {
424 validate_matrixFields(out, __func__);
425 validate_matrixNewElemsPtrNotNull(in, out.numRows, __func__);
426
427 setAndSyncDenseMatrElems(out, in);
428}

Referenced by TEST_CASE(), and TEST_CASE().

◆ setCompMatr() [2/3]

void setCompMatr ( CompMatr matr,
qcomp arr[matr.numRows][matr.numRows] )
Note
Documentation for this function or struct is under construction!
This entity is actually a macro.
Remarks
This function is only available in C.
See also

◆ setCompMatr() [3/3]

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

◆ setDiagMatr() [1/2]

void setDiagMatr ( DiagMatr out,
qcomp * in )
Note
Documentation for this function or struct is under construction!
See also

Definition at line 431 of file matrices.cpp.

431 {
432 validate_matrixFields(out, __func__);
433 validate_matrixNewElemsPtrNotNull(in, __func__);
434
435 // overwrite CPU memory
436 cpu_copyArray(out.cpuElems, in, out.numElems);
437
438 // overwrite GPU elements; validation gauranteed to pass
439 syncDiagMatr(out);
440}
void syncDiagMatr(DiagMatr matr)
Definition matrices.cpp:374

◆ setDiagMatr() [2/2]

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

◆ setDiagMatrFromMultiDimLists()

void setDiagMatrFromMultiDimLists ( DiagMatr out,
void * lists,
int * numQubitsPerDim,
int numDims )
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 701 of file matrices.cpp.

701 {
702 validate_matrixFields(out, __func__);
703 validate_multiVarFuncQubits(out.numQubits, numQubitsPerDim, numDims, __func__);
704
705 vector<qindex> listInds(numDims);
706
707 // set each element of the diagonal in-turn, which is embarrassingly parallel,
708 // although we do not parallelise - the DiagMatr is intendedly small
709 for (qindex elemInd=0; elemInd<out.numElems; elemInd++) {
710
711 // nested list indices = unsigned integer values of variables
712 fast_getSubQuregValues(elemInd, numQubitsPerDim, numDims, false, listInds.data());
713
714 // update only the CPU elems
715 out.cpuElems[elemInd] = util_getElemFromNestedPtrs(lists, listInds.data(), numDims);
716 }
717
718 // overwrite all GPU elems
719 syncDiagMatr(out);
720}

◆ setDiagMatrFromMultiVarFunc()

void setDiagMatrFromMultiVarFunc ( DiagMatr out,
qcomp(* func )(qindex *),
int * numQubitsPerVar,
int numVars,
int areSigned )
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 667 of file matrices.cpp.

667 {
668 validate_matrixFields(out, __func__);
669 validate_multiVarFuncQubits(out.numQubits, numQubitsPerVar, numVars, __func__);
670 validate_funcVarSignedFlag(areSigned, __func__);
671
672 vector<qindex> varValues(numVars);
673
674 // set each element of the diagonal in-turn; user's callback might not be thread-safe
675 for (qindex elemInd=0; elemInd<out.numElems; elemInd++) {
676 fast_getSubQuregValues(elemInd, numQubitsPerVar, numVars, areSigned, varValues.data());
677
678 // call user function, and update only the CPU elems
679 out.cpuElems[elemInd] = callbackFunc(varValues.data());
680 }
681
682 // overwrite all GPU elems
683 syncDiagMatr(out);
684}

◆ setFullStateDiagMatr() [1/2]

void setFullStateDiagMatr ( FullStateDiagMatr out,
qindex startInd,
qcomp * in,
qindex numElems )
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!
See also

Definition at line 443 of file matrices.cpp.

443 {
444 validate_matrixFields(out, __func__);
445 validate_fullStateDiagMatrNewElems(out, startInd, numElems, __func__);
446 validate_matrixNewElemsPtrNotNull(in, __func__);
447
448 // overwrites both the CPU and GPU memory (if it exists), maintaining consistency.
449 // note that cpu_copyArray() isn't called directly here like setDiagMatr() above
450 // because we must handle when 'out' is and isn't distributed
451 localiser_fullstatediagmatr_setElems(out, startInd, in, numElems);
452
453 // even though we have not necessarily overwritten every element, we must mark
454 // the matrix as synced so that it can be subsequently used without error
455 markMatrixAsSynced(out);
456}

◆ setFullStateDiagMatr() [2/2]

void setFullStateDiagMatr ( FullStateDiagMatr out,
qindex startInd,
std::vector< qcomp > 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!
Remarks
This function is only available in C++.
See also

◆ setFullStateDiagMatrFromMultiDimLists()

void setFullStateDiagMatrFromMultiDimLists ( FullStateDiagMatr out,
void * lists,
int * numQubitsPerDim,
int numDims )
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 723 of file matrices.cpp.

723 {
724 validate_matrixFields(out, __func__);
725 validate_multiVarFuncQubits(out.numQubits, numQubitsPerDim, numDims, __func__);
726
727 // possibly use multithreading, but never GPU acceleration, due to the
728 // arbitrarily nested nature of the input lists
729 cpu_fullstatediagmatr_setElemsFromMultiDimLists(out, lists, numQubitsPerDim, numDims);
730
731 // overwrite all GPU elems
733}
void syncFullStateDiagMatr(FullStateDiagMatr matr)
Definition matrices.cpp:375

◆ setFullStateDiagMatrFromMultiVarFunc()

void setFullStateDiagMatrFromMultiVarFunc ( FullStateDiagMatr out,
qcomp(* func )(qindex *),
int * numQubitsPerVar,
int numVars,
int areSigned )
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 687 of file matrices.cpp.

687 {
688 validate_matrixFields(out, __func__);
689 validate_multiVarFuncQubits(out.numQubits, numQubitsPerVar, numVars, __func__);
690 validate_funcVarSignedFlag(areSigned, __func__);
691
692 // we assume callbackFunc is thread-safe (!!!!) and possibly use multithreading, but never
693 // GPU acceleration, since we cannot invoke user callback functions from GPU kernels
694 cpu_fullstatediagmatr_setElemsFromMultiVarFunc(out, callbackFunc, numQubitsPerVar, numVars, areSigned);
695
696 // overwrite all GPU elems
698}

◆ setFullStateDiagMatrFromPauliStrSum()

void setFullStateDiagMatrFromPauliStrSum ( FullStateDiagMatr out,
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 634 of file matrices.cpp.

634 {
635 validate_matrixFields(out, __func__);
636 validate_pauliStrSumFields(in, __func__);
637 validate_pauliStrSumCanInitMatrix(out, in, __func__);
638
639 // permit 'in' to be non-Hermitian since it does not determine 'out' unitarity
640
641 // unlike other FullStateDiagMatr initialisers, we employ an accelerated
642 // backend since the input data 'in' is expectedly significantly smaller
643 // than the created data in 'out', making parallelisation worthwhile as
644 // the memory-movement costs of copying 'in' to a GPU are small
645 localiser_fullstatediagmatr_setElemsToPauliStrSum(out, in);
646
647 markMatrixAsSynced(out);
648}

◆ setInlineCompMatr() [1/2]

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

Referenced by TEST_CASE().

◆ setInlineCompMatr() [2/2]

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

◆ setInlineDiagMatr() [1/2]

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

Referenced by TEST_CASE().

◆ setInlineDiagMatr() [2/2]

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

◆ setInlineFullStateDiagMatr() [1/2]

void setInlineFullStateDiagMatr ( FullStateDiagMatr matr,
qindex startInd,
qindex numElems,
std::vector< qcomp > 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!
Remarks
This function is only available in C++.
See also

◆ setInlineFullStateDiagMatr() [2/2]

void setInlineFullStateDiagMatr ( FullStateDiagMatr matr,
qindex startInd,
qindex numElems,
{ list }  )
Warning
This function has not yet been unit tested and may contain bugs. Please use with caution!
Note
Documentation for this function or struct is under construction!
This entity is actually a macro.
See also