The Quantum Exact Simulation Toolkit v4.0.0
Loading...
Searching...
No Matches
linalg.hpp
1/** @file
2 * @author Tyson Jones
3 *
4 * @defgroup testutilslinalg Linalg
5 * @ingroup testutils
6 * @brief
7 * Testing utilities which perform linear algebra
8 * routines upon reference qvector and qmatrix.
9 * These are slow, serial, un-optimised, defensively-
10 * designed routines.
11 * @{
12 */
13
14#ifndef LINALG_HPP
15#define LINALG_HPP
16
17#include "qvector.hpp"
18#include "qmatrix.hpp"
19
20#include <vector>
21using std::vector;
22
23int getNumPermutations(int n, int k);
24int getLog2(qindex);
25int getBitAt(qindex num, int ind);
26vector<int> getBits(qindex num, int numBits);
27qindex getBitsAt(qindex num, vector<int> inds);
28qindex setBitAt(qindex num, int ind, int bit);
29qindex setBitsAt(qindex num, vector<int> inds, qindex bits);
30qindex getPow2(int);
31
32qreal getSum(vector<qreal> vec);
33qcomp getSum(qvector);
34qvector getNormalised(qvector);
35qvector getDisceteFourierTransform(qvector);
36qvector getDisceteFourierTransform(qvector in, vector<int> targs);
37
38qcomp getInnerProduct(qvector bra, qvector ket);
39qmatrix getOuterProduct(qvector ket, qvector bra);
40
41qvector operator * (const qmatrix&, const qvector&);
42
43bool isDiagonal(qmatrix);
44bool isApproxUnitary(qmatrix);
45
46qcomp getTrace(qmatrix);
47qmatrix getTranspose(qmatrix);
48qmatrix getConjugate(qmatrix);
49qmatrix getConjugateTranspose(qmatrix);
50qmatrix getPowerOfDiagonalMatrix(qmatrix diag, qcomp power);
51qmatrix getExponentialOfDiagonalMatrix(qmatrix);
52qmatrix getExponentialOfPauliMatrix(qreal arg, qmatrix pauli);
53qmatrix getExponentialOfNormalisedPauliVector(qreal arg, qreal x, qreal y, qreal z);
54qmatrix getOrthonormalisedRows(qmatrix);
55qmatrix getOrthonormalisedRows(qmatrix);
56qmatrix getKroneckerProduct(qmatrix, qmatrix);
57qmatrix getKroneckerProduct(qmatrix, int count);
58qmatrix getKroneckerProduct(vector<qmatrix>);
59qmatrix getProjector(int outcome);
60qmatrix getProjector(vector<int> targets, vector<int> outcomes, int numQubits);
61qmatrix getPartialTrace(qmatrix matrix, vector<int> targets);
62qmatrix getControlledMatrix(qmatrix matrix, int numCtrls);
63qmatrix getMixture(vector<qvector> statevecs, vector<qreal> probs);
64qmatrix getMixture(vector<qmatrix> densmatrs, vector<qreal> probs);
65qmatrix getSuperOperator(vector<qmatrix>);
66
67bool isApproxCPTP(vector<qmatrix>);
68
69
70#endif // LINALG_HPP
71
72/** @} (end defgroup) */
qmatrix getKroneckerProduct(qmatrix a, qmatrix b)
Definition linalg.cpp:523
qmatrix getConjugateTranspose(qmatrix m)
Definition linalg.cpp:291
qmatrix getExponentialOfDiagonalMatrix(qmatrix m)
Definition linalg.cpp:336
qmatrix getExponentialOfPauliMatrix(qreal arg, qmatrix m)
Definition linalg.cpp:348