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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

◆ 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