The Quantum Exact Simulation Toolkit v4.2.0
Loading...
Searching...
No Matches
Multiplication
 TEST_CASE ("leftapplySwap", TEST_CATEGORY_MULT)
 
 TEST_CASE ("leftapplyPauliX", TEST_CATEGORY_MULT)
 
 TEST_CASE ("leftapplyPauliY", TEST_CATEGORY_MULT)
 
 TEST_CASE ("leftapplyPauliZ", TEST_CATEGORY_MULT)
 
 TEST_CASE ("leftapplyPauliStr", TEST_CATEGORY_MULT)
 
 TEST_CASE ("leftapplyPauliGadget", TEST_CATEGORY_MULT)
 
 TEST_CASE ("leftapplyCompMatr1", TEST_CATEGORY_MULT)
 
 TEST_CASE ("leftapplyCompMatr2", TEST_CATEGORY_MULT)
 
 TEST_CASE ("leftapplyDiagMatr1", TEST_CATEGORY_MULT)
 
 TEST_CASE ("leftapplyDiagMatr2", TEST_CATEGORY_MULT)
 
 TEST_CASE ("rightapplySwap", TEST_CATEGORY_MULT)
 
 TEST_CASE ("rightapplyPauliX", TEST_CATEGORY_MULT)
 
 TEST_CASE ("rightapplyPauliY", TEST_CATEGORY_MULT)
 
 TEST_CASE ("rightapplyPauliZ", TEST_CATEGORY_MULT)
 
 TEST_CASE ("rightapplyPauliStr", TEST_CATEGORY_MULT)
 
 TEST_CASE ("rightapplyPauliGadget", TEST_CATEGORY_MULT)
 
 TEST_CASE ("rightapplyCompMatr1", TEST_CATEGORY_MULT)
 
 TEST_CASE ("rightapplyCompMatr2", TEST_CATEGORY_MULT)
 
 TEST_CASE ("rightapplyDiagMatr1", TEST_CATEGORY_MULT)
 
 TEST_CASE ("rightapplyDiagMatr2", TEST_CATEGORY_MULT)
 
 TEST_CASE ("leftapplyCompMatr", TEST_CATEGORY_MULT)
 
 TEST_CASE ("leftapplyDiagMatr", TEST_CATEGORY_MULT)
 
 TEST_CASE ("leftapplyDiagMatrPower", TEST_CATEGORY_MULT)
 
 TEST_CASE ("leftapplyMultiQubitNot", TEST_CATEGORY_MULT)
 
 TEST_CASE ("leftapplyPhaseGadget", TEST_CATEGORY_MULT)
 
 TEST_CASE ("rightapplyCompMatr", TEST_CATEGORY_MULT)
 
 TEST_CASE ("rightapplyDiagMatr", TEST_CATEGORY_MULT)
 
 TEST_CASE ("rightapplyDiagMatrPower", TEST_CATEGORY_MULT)
 
 TEST_CASE ("rightapplyMultiQubitNot", TEST_CATEGORY_MULT)
 
 TEST_CASE ("rightapplyPhaseGadget", TEST_CATEGORY_MULT)
 
 TEST_CASE ("leftapplyFullStateDiagMatr", TEST_CATEGORY_MULT LABEL_MIXED_DEPLOY_TAG)
 
 TEST_CASE ("rightapplyFullStateDiagMatr", TEST_CATEGORY_MULT LABEL_MIXED_DEPLOY_TAG)
 
 TEST_CASE ("leftapplyFullStateDiagMatrPower", TEST_CATEGORY_MULT LABEL_MIXED_DEPLOY_TAG)
 
 TEST_CASE ("rightapplyFullStateDiagMatrPower", TEST_CATEGORY_MULT LABEL_MIXED_DEPLOY_TAG)
 
 TEST_CASE ("leftapplyQubitProjector", TEST_CATEGORY_OPS)
 
 TEST_CASE ("rightapplyQubitProjector", TEST_CATEGORY_OPS)
 
 TEST_CASE ("leftapplyMultiQubitProjector", TEST_CATEGORY_OPS)
 
 TEST_CASE ("rightapplyMultiQubitProjector", TEST_CATEGORY_OPS)
 
 TEST_CASE ("leftapplyPauliStrSum", TEST_CATEGORY_MULT LABEL_MIXED_DEPLOY_TAG)
 
 TEST_CASE ("rightapplyPauliStrSum", TEST_CATEGORY_MULT LABEL_MIXED_DEPLOY_TAG)
 

Detailed Description

Function Documentation

◆ TEST_CASE() [1/40]

TEST_CASE ( "leftapplyCompMatr" ,
TEST_CATEGORY_MULT  )

Definition at line 1903 of file operations.cpp.

1903 {
1904 auto func = static_cast<void(*)(Qureg, int*, int, CompMatr)>(leftapplyCompMatr);
1905 testOperation<zero,any,compmatr,leftapply>(func, nullptr);
1906}
void leftapplyCompMatr(Qureg qureg, int *targets, int numTargets, CompMatr matrix)
Definition qureg.h:49

◆ TEST_CASE() [2/40]

TEST_CASE ( "leftapplyCompMatr1" ,
TEST_CATEGORY_MULT  )

Definition at line 1879 of file operations.cpp.

1879{ testOperation<zero,one,compmatr,leftapply>(leftapplyCompMatr1, nullptr); }
void leftapplyCompMatr1(Qureg qureg, int target, CompMatr1 matrix)

◆ TEST_CASE() [3/40]

TEST_CASE ( "leftapplyCompMatr2" ,
TEST_CATEGORY_MULT  )

Definition at line 1880 of file operations.cpp.

1880{ testOperation<zero,two,compmatr,leftapply>(leftapplyCompMatr2, nullptr); }
void leftapplyCompMatr2(Qureg qureg, int target1, int target2, CompMatr2 matr)

◆ TEST_CASE() [4/40]

TEST_CASE ( "leftapplyDiagMatr" ,
TEST_CATEGORY_MULT  )

Definition at line 1908 of file operations.cpp.

1908 {
1909 auto func = static_cast<void(*)(Qureg, int*, int, DiagMatr)>(leftapplyDiagMatr);
1910 testOperation<zero,any,diagmatr,leftapply>(func, nullptr);
1911}
void leftapplyDiagMatr(Qureg qureg, int *targets, int numTargets, DiagMatr matrix)

◆ TEST_CASE() [5/40]

TEST_CASE ( "leftapplyDiagMatr1" ,
TEST_CATEGORY_MULT  )

Definition at line 1881 of file operations.cpp.

1881{ testOperation<zero,one,diagmatr,leftapply>(leftapplyDiagMatr1, nullptr); }
void leftapplyDiagMatr1(Qureg qureg, int target, DiagMatr1 matr)

◆ TEST_CASE() [6/40]

TEST_CASE ( "leftapplyDiagMatr2" ,
TEST_CATEGORY_MULT  )

Definition at line 1882 of file operations.cpp.

1882{ testOperation<zero,two,diagmatr,leftapply>(leftapplyDiagMatr2, nullptr); }
void leftapplyDiagMatr2(Qureg qureg, int target1, int target2, DiagMatr2 matr)

◆ TEST_CASE() [7/40]

TEST_CASE ( "leftapplyDiagMatrPower" ,
TEST_CATEGORY_MULT  )

Definition at line 1913 of file operations.cpp.

1913 {
1914 auto func = static_cast<void(*)(Qureg, int*, int, DiagMatr, qcomp)>(leftapplyDiagMatrPower);
1915 testOperation<zero,any,diagpower,leftapply>(func, nullptr);
1916}
void leftapplyDiagMatrPower(Qureg qureg, int *targets, int numTargets, DiagMatr matrix, qcomp exponent)

◆ TEST_CASE() [8/40]

TEST_CASE ( "leftapplyFullStateDiagMatr" ,
TEST_CATEGORY_MULT LABEL_MIXED_DEPLOY_TAG )

Definition at line 1960 of file operations.cpp.

1960 {
1961
1962 PREPARE_TEST( numQubits, cachedSV, cachedDM, refSV, refDM );
1963
1964 auto cachedMatrs = getCachedFullStateDiagMatrs();
1965
1966 SECTION( LABEL_CORRECTNESS ) {
1967
1968 qmatrix refMatr = getRandomDiagonalMatrix(getPow2(numQubits));
1969 auto apiFunc = leftapplyFullStateDiagMatr;
1970
1971 GENERATE( range(0, getNumTestedMixedDeploymentRepetitions()) );
1972
1973 SECTION( LABEL_STATEVEC ) {
1974
1975 auto refFunc = [&] (qvector& state, qmatrix matr) { leftapplyReferenceOperator(state, matr); };
1976
1977 TEST_ON_CACHED_QUREG_AND_MATRIX( cachedSV, cachedMatrs, apiFunc, refSV, refMatr, refFunc);
1978 }
1979
1980 SECTION( LABEL_DENSMATR ) {
1981
1982 auto refFunc = [&] (qmatrix& state, qmatrix matr) { leftapplyReferenceOperator(state, matr); };
1983
1984 TEST_ON_CACHED_QUREG_AND_MATRIX( cachedDM, cachedMatrs, apiFunc, refDM, refMatr, refFunc);
1985 }
1986 }
1987
1988 /// @todo input validation
1989}
void leftapplyFullStateDiagMatr(Qureg qureg, FullStateDiagMatr matrix)

◆ TEST_CASE() [9/40]

TEST_CASE ( "leftapplyFullStateDiagMatrPower" ,
TEST_CATEGORY_MULT LABEL_MIXED_DEPLOY_TAG )

Definition at line 2017 of file operations.cpp.

2017 {
2018
2019 PREPARE_TEST( numQubits, cachedSV, cachedDM, refSV, refDM );
2020
2021 auto cachedMatrs = getCachedFullStateDiagMatrs();
2022
2023 SECTION( LABEL_CORRECTNESS ) {
2024
2025 qmatrix refMatr = getRandomDiagonalMatrix(getPow2(numQubits));
2026 qcomp exponent = getRandomComplex();
2027
2028 auto apiFunc = [&](Qureg qureg, FullStateDiagMatr matr) {
2029 return leftapplyFullStateDiagMatrPower(qureg, matr, exponent);
2030 };
2031
2032 CAPTURE( exponent );
2033
2034 GENERATE( range(0, getNumTestedMixedDeploymentRepetitions()) );
2035
2036 SECTION( LABEL_STATEVEC ) {
2037
2038 auto refFunc = [&] (qvector& state, qmatrix matr) {
2039 matr = getPowerOfDiagonalMatrix(matr, exponent);
2040 leftapplyReferenceOperator(state, matr);
2041 };
2042
2043 TEST_ON_CACHED_QUREG_AND_MATRIX( cachedSV, cachedMatrs, apiFunc, refSV, refMatr, refFunc);
2044 }
2045
2046 SECTION( LABEL_DENSMATR ) {
2047
2048 auto refFunc = [&] (qmatrix& state, qmatrix matr) {
2049 matr = getPowerOfDiagonalMatrix(matr, exponent);
2050 leftapplyReferenceOperator(state, matr);
2051 };
2052
2053 TEST_ON_CACHED_QUREG_AND_MATRIX( cachedDM, cachedMatrs, apiFunc, refDM, refMatr, refFunc);
2054 }
2055 }
2056
2057 /// @todo input validation
2058}
void leftapplyFullStateDiagMatrPower(Qureg qureg, FullStateDiagMatr matrix, qcomp exponent)
qcomp getRandomComplex()
Definition random.cpp:107

◆ TEST_CASE() [10/40]

TEST_CASE ( "leftapplyMultiQubitNot" ,
TEST_CATEGORY_MULT  )

Definition at line 1918 of file operations.cpp.

1918 {
1919 auto func = static_cast<void(*)(Qureg, int*, int)>(leftapplyMultiQubitNot);
1920 testOperation<zero,any,none,leftapply>(func, VariableSizeMatrices::X);
1921}
void leftapplyMultiQubitNot(Qureg qureg, int *targets, int numTargets)

◆ TEST_CASE() [11/40]

TEST_CASE ( "leftapplyMultiQubitProjector" ,
TEST_CATEGORY_OPS  )

Definition at line 2146 of file operations.cpp.

2146 {
2147
2148 PREPARE_TEST( numQubits, statevecQuregs, densmatrQuregs, statevecRef, densmatrRef );
2149
2150 SECTION( LABEL_CORRECTNESS ) {
2151
2152 int numTargs = GENERATE_COPY( range(1,numQubits+1) );
2153 auto targets = GENERATE_TARGS( numQubits, numTargs );
2154 auto outcomes = getRandomOutcomes(numTargs);
2155
2156 qmatrix projector = getProjector(targets, outcomes, numQubits);
2157
2158 auto testFunc = [&](Qureg qureg, auto& ref) {
2159 leftapplyMultiQubitProjector(qureg, targets.data(), outcomes.data(), numTargs);
2160 leftapplyReferenceOperator(ref, projector);
2161 };
2162
2163 CAPTURE( targets, outcomes );
2164 SECTION( LABEL_STATEVEC ) { TEST_ON_CACHED_QUREGS(statevecQuregs, statevecRef, testFunc); }
2165 SECTION( LABEL_DENSMATR ) { TEST_ON_CACHED_QUREGS(densmatrQuregs, densmatrRef, testFunc); }
2166 }
2167
2168 /// @todo input validation
2169}
void leftapplyMultiQubitProjector(Qureg qureg, int *qubits, int *outcomes, int numQubits)

◆ TEST_CASE() [12/40]

TEST_CASE ( "leftapplyPauliGadget" ,
TEST_CATEGORY_MULT  )

Definition at line 1878 of file operations.cpp.

1878{ testOperation<zero,any,pauligad,leftapply>(leftapplyPauliGadget, nullptr); }
void leftapplyPauliGadget(Qureg qureg, PauliStr str, qreal angle)

◆ TEST_CASE() [13/40]

TEST_CASE ( "leftapplyPauliStr" ,
TEST_CATEGORY_MULT  )

Definition at line 1877 of file operations.cpp.

1877{ testOperation<zero,any,paulistr,leftapply>(leftapplyPauliStr, nullptr); }
void leftapplyPauliStr(Qureg qureg, PauliStr str)

◆ TEST_CASE() [14/40]

TEST_CASE ( "leftapplyPauliStrSum" ,
TEST_CATEGORY_MULT LABEL_MIXED_DEPLOY_TAG )

Definition at line 2197 of file operations.cpp.

2197 {
2198
2199 PREPARE_TEST( numQubits, statevecQuregs, densmatrQuregs, statevecRef, densmatrRef );
2200
2201 SECTION( LABEL_CORRECTNESS ) {
2202
2203 int numQubits = getNumCachedQubits();
2204 int numTerms = GENERATE_COPY( 1, 2, 10 );
2205
2206 PauliStrSum sum = createRandomPauliStrSum(numQubits, numTerms);
2207
2208 auto testFunc = [&](Qureg qureg, auto& ref) {
2209
2210 // must use (and ergo make) an identically-deployed workspace
2211 Qureg workspace = createCloneQureg(qureg);
2212 leftapplyPauliStrSum(qureg, sum, workspace);
2213 destroyQureg(workspace);
2214
2215 ref = getMatrix(sum, numQubits) * ref;
2216 };
2217
2218 CAPTURE( numTerms );
2219 SECTION( LABEL_STATEVEC ) { TEST_ON_CACHED_QUREGS(statevecQuregs, statevecRef, testFunc); }
2220 SECTION( LABEL_DENSMATR ) { TEST_ON_CACHED_QUREGS(densmatrQuregs, densmatrRef, testFunc); }
2221 }
2222
2223 /// @todo input validation
2224}
void leftapplyPauliStrSum(Qureg qureg, PauliStrSum sum, Qureg workspace)
Qureg createCloneQureg(Qureg qureg)
Definition qureg.cpp:319
void destroyQureg(Qureg qureg)
Definition qureg.cpp:334

◆ TEST_CASE() [15/40]

TEST_CASE ( "leftapplyPauliX" ,
TEST_CATEGORY_MULT  )

Definition at line 1874 of file operations.cpp.

1874{ testOperation<zero,one,none,leftapply>(leftapplyPauliX, FixedMatrices::X); }
void leftapplyPauliX(Qureg qureg, int target)

◆ TEST_CASE() [16/40]

TEST_CASE ( "leftapplyPauliY" ,
TEST_CATEGORY_MULT  )

Definition at line 1875 of file operations.cpp.

1875{ testOperation<zero,one,none,leftapply>(leftapplyPauliY, FixedMatrices::Y); }
void leftapplyPauliY(Qureg qureg, int target)

◆ TEST_CASE() [17/40]

TEST_CASE ( "leftapplyPauliZ" ,
TEST_CATEGORY_MULT  )

Definition at line 1876 of file operations.cpp.

1876{ testOperation<zero,one,none,leftapply>(leftapplyPauliZ, FixedMatrices::Z); }
void leftapplyPauliZ(Qureg qureg, int target)

◆ TEST_CASE() [18/40]

TEST_CASE ( "leftapplyPhaseGadget" ,
TEST_CATEGORY_MULT  )

Definition at line 1923 of file operations.cpp.

1923 {
1924 auto func = static_cast<void(*)(Qureg, int*, int, qreal)>(leftapplyPhaseGadget);
1925 testOperation<zero,any,scalar,leftapply>(func, VariableSizeParameterisedMatrices::Z);
1926}
void leftapplyPhaseGadget(Qureg qureg, int *targets, int numTargets, qreal angle)

◆ TEST_CASE() [19/40]

TEST_CASE ( "leftapplyQubitProjector" ,
TEST_CATEGORY_OPS  )

Definition at line 2095 of file operations.cpp.

2095 {
2096
2097 PREPARE_TEST( numQubits, statevecQuregs, densmatrQuregs, statevecRef, densmatrRef );
2098
2099 SECTION( LABEL_CORRECTNESS ) {
2100
2101 GENERATE( range(0,10) );
2102 int target = GENERATE_COPY( range(0,numQubits) );
2103 int outcome = GENERATE( 0, 1 );
2104
2105 qmatrix projector = getProjector(outcome);
2106
2107 auto testFunc = [&](Qureg qureg, auto& ref) {
2108 leftapplyQubitProjector(qureg, target, outcome);
2109 leftapplyReferenceOperator(ref, {target}, projector);
2110 };
2111
2112 CAPTURE( target, outcome );
2113 SECTION( LABEL_STATEVEC ) { TEST_ON_CACHED_QUREGS(statevecQuregs, statevecRef, testFunc); }
2114 SECTION( LABEL_DENSMATR ) { TEST_ON_CACHED_QUREGS(densmatrQuregs, densmatrRef, testFunc); }
2115 }
2116
2117 /// @todo input validation
2118}
void leftapplyQubitProjector(Qureg qureg, int qubit, int outcome)

◆ TEST_CASE() [20/40]

TEST_CASE ( "leftapplySwap" ,
TEST_CATEGORY_MULT  )

OPERATOR TESTS

Definition at line 1873 of file operations.cpp.

1873{ testOperation<zero,two,none,leftapply>(leftapplySwap, FixedMatrices::SWAP); }
void leftapplySwap(Qureg qureg, int qubit1, int qubit2)

◆ TEST_CASE() [21/40]

TEST_CASE ( "rightapplyCompMatr" ,
TEST_CATEGORY_MULT  )

Definition at line 1929 of file operations.cpp.

1929 {
1930 auto func = static_cast<void(*)(Qureg, int*, int, CompMatr)>(rightapplyCompMatr);
1931 testOperation<zero,any,compmatr,rightapply>(func, nullptr);
1932}
void rightapplyCompMatr(Qureg qureg, int *targets, int numTargets, CompMatr matrix)

◆ TEST_CASE() [22/40]

TEST_CASE ( "rightapplyCompMatr1" ,
TEST_CATEGORY_MULT  )

Definition at line 1890 of file operations.cpp.

1890{ testOperation<zero,one,compmatr,rightapply>(rightapplyCompMatr1, nullptr); }
void rightapplyCompMatr1(Qureg qureg, int target, CompMatr1 matrix)

◆ TEST_CASE() [23/40]

TEST_CASE ( "rightapplyCompMatr2" ,
TEST_CATEGORY_MULT  )

Definition at line 1891 of file operations.cpp.

1891{ testOperation<zero,two,compmatr,rightapply>(rightapplyCompMatr2, nullptr); }
void rightapplyCompMatr2(Qureg qureg, int target1, int target2, CompMatr2 matrix)

◆ TEST_CASE() [24/40]

TEST_CASE ( "rightapplyDiagMatr" ,
TEST_CATEGORY_MULT  )

Definition at line 1934 of file operations.cpp.

1934 {
1935 auto func = static_cast<void(*)(Qureg, int*, int, DiagMatr)>(rightapplyDiagMatr);
1936 testOperation<zero,any,diagmatr,rightapply>(func, nullptr);
1937}
void rightapplyDiagMatr(Qureg qureg, int *targets, int numTargets, DiagMatr matrix)

◆ TEST_CASE() [25/40]

TEST_CASE ( "rightapplyDiagMatr1" ,
TEST_CATEGORY_MULT  )

Definition at line 1892 of file operations.cpp.

1892{ testOperation<zero,one,diagmatr,rightapply>(rightapplyDiagMatr1, nullptr); }
void rightapplyDiagMatr1(Qureg qureg, int target, DiagMatr1 matrix)

◆ TEST_CASE() [26/40]

TEST_CASE ( "rightapplyDiagMatr2" ,
TEST_CATEGORY_MULT  )

Definition at line 1893 of file operations.cpp.

1893{ testOperation<zero,two,diagmatr,rightapply>(rightapplyDiagMatr2, nullptr); }
void rightapplyDiagMatr2(Qureg qureg, int target1, int target2, DiagMatr2 matrix)

◆ TEST_CASE() [27/40]

TEST_CASE ( "rightapplyDiagMatrPower" ,
TEST_CATEGORY_MULT  )

Definition at line 1939 of file operations.cpp.

1939 {
1940 auto func = static_cast<void(*)(Qureg, int*, int, DiagMatr, qcomp)>(rightapplyDiagMatrPower);
1941 testOperation<zero,any,diagpower,rightapply>(func, nullptr);
1942}
void rightapplyDiagMatrPower(Qureg qureg, int *targets, int numTargets, DiagMatr matrix, qcomp exponent)

◆ TEST_CASE() [28/40]

TEST_CASE ( "rightapplyFullStateDiagMatr" ,
TEST_CATEGORY_MULT LABEL_MIXED_DEPLOY_TAG )

Definition at line 1992 of file operations.cpp.

1992 {
1993
1994 PREPARE_TEST( numQubits, cachedSV, cachedDM, refSV, refDM );
1995
1996 auto cachedMatrs = getCachedFullStateDiagMatrs();
1997
1998 SECTION( LABEL_CORRECTNESS ) {
1999
2000 qmatrix refMatr = getRandomDiagonalMatrix(getPow2(numQubits));
2001 auto apiFunc = rightapplyFullStateDiagMatr;
2002
2003 GENERATE( range(0, getNumTestedMixedDeploymentRepetitions()) );
2004
2005 SECTION( LABEL_DENSMATR ) {
2006
2007 auto refFunc = [&] (qmatrix& state, qmatrix matr) { rightapplyReferenceOperator(state, matr); };
2008
2009 TEST_ON_CACHED_QUREG_AND_MATRIX( cachedDM, cachedMatrs, apiFunc, refDM, refMatr, refFunc);
2010 }
2011 }
2012
2013 /// @todo input validation
2014}
void rightapplyFullStateDiagMatr(Qureg qureg, FullStateDiagMatr matrix)

◆ TEST_CASE() [29/40]

TEST_CASE ( "rightapplyFullStateDiagMatrPower" ,
TEST_CATEGORY_MULT LABEL_MIXED_DEPLOY_TAG )

Definition at line 2061 of file operations.cpp.

2061 {
2062
2063 PREPARE_TEST( numQubits, cachedSV, cachedDM, refSV, refDM );
2064
2065 auto cachedMatrs = getCachedFullStateDiagMatrs();
2066
2067 SECTION( LABEL_CORRECTNESS ) {
2068
2069 qmatrix refMatr = getRandomDiagonalMatrix(getPow2(numQubits));
2070 qcomp exponent = getRandomComplex();
2071
2072 auto apiFunc = [&](Qureg qureg, FullStateDiagMatr matr) {
2073 return rightapplyFullStateDiagMatrPower(qureg, matr, exponent);
2074 };
2075
2076 CAPTURE( exponent );
2077
2078 GENERATE( range(0, getNumTestedMixedDeploymentRepetitions()) );
2079
2080 SECTION( LABEL_DENSMATR ) {
2081
2082 auto refFunc = [&] (qmatrix& state, qmatrix matr) {
2083 matr = getPowerOfDiagonalMatrix(matr, exponent);
2084 rightapplyReferenceOperator(state, matr);
2085 };
2086
2087 TEST_ON_CACHED_QUREG_AND_MATRIX( cachedDM, cachedMatrs, apiFunc, refDM, refMatr, refFunc);
2088 }
2089 }
2090
2091 /// @todo input validation
2092}
void rightapplyFullStateDiagMatrPower(Qureg qureg, FullStateDiagMatr matrix, qcomp exponent)

◆ TEST_CASE() [30/40]

TEST_CASE ( "rightapplyMultiQubitNot" ,
TEST_CATEGORY_MULT  )

Definition at line 1944 of file operations.cpp.

1944 {
1945 auto func = static_cast<void(*)(Qureg, int*, int)>(rightapplyMultiQubitNot);
1946 testOperation<zero,any,none,rightapply>(func, VariableSizeMatrices::X);
1947}
void rightapplyMultiQubitNot(Qureg qureg, int *targets, int numTargets)

◆ TEST_CASE() [31/40]

TEST_CASE ( "rightapplyMultiQubitProjector" ,
TEST_CATEGORY_OPS  )

Definition at line 2172 of file operations.cpp.

2172 {
2173
2174 PREPARE_TEST( numQubits, statevecQuregs, densmatrQuregs, statevecRef, densmatrRef );
2175
2176 SECTION( LABEL_CORRECTNESS ) {
2177
2178 int numTargs = GENERATE_COPY( range(1,numQubits+1) );
2179 auto targets = GENERATE_TARGS( numQubits, numTargs );
2180 auto outcomes = getRandomOutcomes(numTargs);
2181
2182 qmatrix projector = getProjector(targets, outcomes, numQubits);
2183
2184 auto testFunc = [&](Qureg qureg, auto& ref) {
2185 rightapplyMultiQubitProjector(qureg, targets.data(), outcomes.data(), numTargs);
2186 rightapplyReferenceOperator(ref, projector);
2187 };
2188
2189 CAPTURE( targets, outcomes );
2190 SECTION( LABEL_DENSMATR ) { TEST_ON_CACHED_QUREGS(densmatrQuregs, densmatrRef, testFunc); }
2191 }
2192
2193 /// @todo input validation
2194}
void rightapplyMultiQubitProjector(Qureg qureg, int *qubits, int *outcomes, int numQubits)

◆ TEST_CASE() [32/40]

TEST_CASE ( "rightapplyPauliGadget" ,
TEST_CATEGORY_MULT  )

Definition at line 1889 of file operations.cpp.

1889{ testOperation<zero,any,pauligad,rightapply>(rightapplyPauliGadget, nullptr); }
void rightapplyPauliGadget(Qureg qureg, PauliStr str, qreal angle)

◆ TEST_CASE() [33/40]

TEST_CASE ( "rightapplyPauliStr" ,
TEST_CATEGORY_MULT  )

Definition at line 1888 of file operations.cpp.

1888{ testOperation<zero,any,paulistr,rightapply>(rightapplyPauliStr, nullptr); }
void rightapplyPauliStr(Qureg qureg, PauliStr str)

◆ TEST_CASE() [34/40]

TEST_CASE ( "rightapplyPauliStrSum" ,
TEST_CATEGORY_MULT LABEL_MIXED_DEPLOY_TAG )

Definition at line 2227 of file operations.cpp.

2227 {
2228
2229 PREPARE_TEST( numQubits, statevecQuregs, densmatrQuregs, statevecRef, densmatrRef );
2230
2231 SECTION( LABEL_CORRECTNESS ) {
2232
2233 int numQubits = getNumCachedQubits();
2234 int numTerms = GENERATE_COPY( 1, 2, 10 );
2235
2236 PauliStrSum sum = createRandomPauliStrSum(numQubits, numTerms);
2237
2238 auto testFunc = [&](Qureg qureg, auto& ref) {
2239
2240 // must use (and ergo make) an identically-deployed workspace
2241 Qureg workspace = createCloneQureg(qureg);
2242 rightapplyPauliStrSum(qureg, sum, workspace);
2243 destroyQureg(workspace);
2244
2245 ref = ref * getMatrix(sum, numQubits);
2246 };
2247
2248 CAPTURE( numTerms );
2249 SECTION( LABEL_DENSMATR ) { TEST_ON_CACHED_QUREGS(densmatrQuregs, densmatrRef, testFunc); }
2250 }
2251
2252 /// @todo input validation
2253}
void rightapplyPauliStrSum(Qureg qureg, PauliStrSum sum, Qureg workspace)

◆ TEST_CASE() [35/40]

TEST_CASE ( "rightapplyPauliX" ,
TEST_CATEGORY_MULT  )

Definition at line 1885 of file operations.cpp.

1885{ testOperation<zero,one,none,rightapply>(rightapplyPauliX, FixedMatrices::X); }
void rightapplyPauliX(Qureg qureg, int target)

◆ TEST_CASE() [36/40]

TEST_CASE ( "rightapplyPauliY" ,
TEST_CATEGORY_MULT  )

Definition at line 1886 of file operations.cpp.

1886{ testOperation<zero,one,none,rightapply>(rightapplyPauliY, FixedMatrices::Y); }
void rightapplyPauliY(Qureg qureg, int target)

◆ TEST_CASE() [37/40]

TEST_CASE ( "rightapplyPauliZ" ,
TEST_CATEGORY_MULT  )

Definition at line 1887 of file operations.cpp.

1887{ testOperation<zero,one,none,rightapply>(rightapplyPauliZ, FixedMatrices::Z); }
void rightapplyPauliZ(Qureg qureg, int target)

◆ TEST_CASE() [38/40]

TEST_CASE ( "rightapplyPhaseGadget" ,
TEST_CATEGORY_MULT  )

Definition at line 1949 of file operations.cpp.

1949 {
1950 auto func = static_cast<void(*)(Qureg, int*, int, qreal)>(rightapplyPhaseGadget);
1951 testOperation<zero,any,scalar,rightapply>(func, VariableSizeParameterisedMatrices::Z);
1952}
void rightapplyPhaseGadget(Qureg qureg, int *targets, int numTargets, qreal angle)

◆ TEST_CASE() [39/40]

TEST_CASE ( "rightapplyQubitProjector" ,
TEST_CATEGORY_OPS  )

Definition at line 2121 of file operations.cpp.

2121 {
2122
2123 PREPARE_TEST( numQubits, statevecQuregs, densmatrQuregs, statevecRef, densmatrRef );
2124
2125 SECTION( LABEL_CORRECTNESS ) {
2126
2127 GENERATE( range(0,10) );
2128 int target = GENERATE_COPY( range(0,numQubits) );
2129 int outcome = GENERATE( 0, 1 );
2130
2131 qmatrix projector = getProjector(outcome);
2132
2133 auto testFunc = [&](Qureg qureg, auto& ref) {
2134 rightapplyQubitProjector(qureg, target, outcome);
2135 rightapplyReferenceOperator(ref, {target}, projector);
2136 };
2137
2138 CAPTURE( target, outcome );
2139 SECTION( LABEL_DENSMATR ) { TEST_ON_CACHED_QUREGS(densmatrQuregs, densmatrRef, testFunc); }
2140 }
2141
2142 /// @todo input validation
2143}
void rightapplyQubitProjector(Qureg qureg, int qubit, int outcome)

◆ TEST_CASE() [40/40]

TEST_CASE ( "rightapplySwap" ,
TEST_CATEGORY_MULT  )

Definition at line 1884 of file operations.cpp.

1884{ testOperation<zero,two,none,rightapply>(rightapplySwap, FixedMatrices::SWAP); }
void rightapplySwap(Qureg qureg, int qubit1, int qubit2)