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

Functions for pre- or post-multiplying general any-target diagonal matrices (as DiagMatr), or powers thereof, upon density matrices. More...

Functions

void leftapplyDiagMatr (Qureg qureg, int *targets, int numTargets, DiagMatr matrix)
 
void leftapplyDiagMatrPower (Qureg qureg, int *targets, int numTargets, DiagMatr matrix, qcomp exponent)
 
void rightapplyDiagMatr (Qureg qureg, int *targets, int numTargets, DiagMatr matrix)
 
void rightapplyDiagMatrPower (Qureg qureg, int *targets, int numTargets, DiagMatr matrix, qcomp exponent)
 

Detailed Description

Functions for pre- or post-multiplying general any-target diagonal matrices (as DiagMatr), or powers thereof, upon density matrices.

Function Documentation

◆ leftapplyDiagMatr()

void leftapplyDiagMatr ( Qureg qureg,
int * targets,
int numTargets,
DiagMatr matrix )
Note
Documentation for this function or struct is under construction!
See also
leftapplyCompMatr1()

Definition at line 206 of file multiplication.cpp.

206 {
207 validate_quregFields(qureg, __func__);
208 validate_targets(qureg, targets, numTargets, __func__);
209 validate_matrixDimMatchesTargets(matrix, numTargets, __func__); // also validates fields and is-sync
210
211 bool conj = false;
212 qcomp exponent = 1;
213 auto qubits = util_getVector(targets, numTargets);
214 localiser_statevec_anyCtrlAnyTargDiagMatr(qureg, {}, {}, qubits, matrix, exponent, conj);
215}

Referenced by leftapplyDiagMatr().

◆ leftapplyDiagMatrPower()

void leftapplyDiagMatrPower ( Qureg qureg,
int * targets,
int numTargets,
DiagMatr matrix,
qcomp exponent )
Note
Documentation for this function or struct is under construction!
See also

Definition at line 249 of file multiplication.cpp.

249 {
250 validate_quregFields(qureg, __func__);
251 validate_targets(qureg, targets, numTargets, __func__);
252 validate_matrixDimMatchesTargets(matrix, numTargets, __func__); // also validates fields and is-sync, but not unitarity
253 validate_matrixExpIsNonDiverging(matrix, exponent, __func__); // harmlessly re-validates fields and is-sync
254
255 bool conj = false;
256 auto qubits = util_getVector(targets, numTargets);
257 localiser_statevec_anyCtrlAnyTargDiagMatr(qureg, {}, {}, qubits, matrix, exponent, conj);
258}

Referenced by leftapplyDiagMatrPower().

◆ rightapplyDiagMatr()

void rightapplyDiagMatr ( Qureg qureg,
int * targets,
int numTargets,
DiagMatr matrix )
Note
Documentation for this function or struct is under construction!
See also
rightapplyCompMatr1()

Definition at line 217 of file multiplication.cpp.

217 {
218 validate_quregFields(qureg, __func__);
219 validate_quregIsDensityMatrix(qureg, __func__);
220 validate_targets(qureg, targets, numTargets, __func__);
221 validate_matrixDimMatchesTargets(matrix, numTargets, __func__); // also validates fields and is-sync
222
223 bool conj = false;
224 qcomp exponent = 1;
225 auto qubits = util_getBraQubits(util_getVector(targets, numTargets), qureg);
226 localiser_statevec_anyCtrlAnyTargDiagMatr(qureg, {}, {}, qubits, matrix, exponent, conj);
227}

Referenced by rightapplyDiagMatr().

◆ rightapplyDiagMatrPower()

void rightapplyDiagMatrPower ( Qureg qureg,
int * targets,
int numTargets,
DiagMatr matrix,
qcomp exponent )
Note
Documentation for this function or struct is under construction!
See also

Definition at line 260 of file multiplication.cpp.

260 {
261 validate_quregFields(qureg, __func__);
262 validate_quregIsDensityMatrix(qureg, __func__);
263 validate_targets(qureg, targets, numTargets, __func__);
264 validate_matrixDimMatchesTargets(matrix, numTargets, __func__); // also validates fields and is-sync, but not unitarity
265 validate_matrixExpIsNonDiverging(matrix, exponent, __func__); // harmlessly re-validates fields and is-sync
266
267 bool conj = false;
268 auto qubits = util_getBraQubits(util_getVector(targets, numTargets), qureg);
269 localiser_statevec_anyCtrlAnyTargDiagMatr(qureg, {}, {}, qubits, matrix, exponent, conj);
270}

Referenced by rightapplyDiagMatrPower().