114 #if ENABLE_OPENCL || ENABLE_CUDA
179 template <
typename Fn>
void MACWrapper(
const std::vector<bitLenInt>& controls, Fn fn)
182 for (
const bitLenInt& control : controls) {
195 const bitCapInt rawSample = clone->MAll();
197 for (
size_t i = 0
U; i < qPowers.size(); ++i) {
207 const std::vector<std::shared_ptr<complex>>& basisOps, std::vector<real1_f> eigenVals = {});
209 const std::vector<real1_f>& basisOps, std::vector<real1_f> eigenVals = {});
212 std::vector<bitCapInt> perms;
213 perms.reserve(bits.size() << 1U);
214 for (
size_t i = 0
U; i < bits.size(); ++i) {
216 perms.push_back(
pow2(i));
391 virtual std::map<QInterfacePtr, bitLenInt>
Compose(std::vector<QInterfacePtr> toCopy);
516 MACPhase(controls, mtrx[0
U], mtrx[3U], target);
518 MACInvert(controls, mtrx[1U], mtrx[2U], target);
520 MACWrapper(controls, [
this, mtrx, target](
const std::vector<bitLenInt>& lc) {
MCMtrx(lc, mtrx, target); });
564 MCMtrx(controls, mtrx, target);
575 MCMtrx(controls, mtrx, target);
588 MACWrapper(controls, [
this, topLeft, bottomRight, target](
const std::vector<bitLenInt>& lc) {
589 MCPhase(lc, topLeft, bottomRight, target);
600 MACWrapper(controls, [
this, topRight, bottomLeft, target](
const std::vector<bitLenInt>& lc) {
601 MCInvert(lc, topRight, bottomLeft, target);
617 UCMtrx(controls, mtrx, target, perm);
628 UCMtrx(controls, mtrx, target, perm);
646 const std::vector<bitLenInt>& controls,
bitLenInt qubit,
const complex* mtrxs)
651 const complex* mtrxs,
const std::vector<bitCapInt>& mtrxSkipPowers,
const bitCapInt& mtrxSkipValueMask);
707 const std::vector<bitLenInt> controls{ control1, control2 };
718 const std::vector<bitLenInt> controls{ control1, control2 };
729 const std::vector<bitLenInt> controls{ control };
740 const std::vector<bitLenInt> controls{ control };
752 const std::vector<bitLenInt> controls{ control };
763 const std::vector<bitLenInt> controls{ control };
775 const std::vector<bitLenInt> controls{ control1, control2 };
786 const std::vector<bitLenInt> controls{ control1, control2 };
798 const std::vector<bitLenInt> controls{ control };
809 const std::vector<bitLenInt> controls{ control };
821 const std::vector<bitLenInt> controls{ control1, control2 };
832 const std::vector<bitLenInt> controls{ control1, control2 };
1038 virtual bool ForceM(
bitLenInt qubit,
bool result,
bool doForce =
true,
bool doApply =
true) = 0;
1169 QRACK_CONST complex mtrx[4]{ ONE_PLUS_I_DIV_2, ONE_MINUS_I_DIV_2, ONE_MINUS_I_DIV_2, ONE_PLUS_I_DIV_2 };
1183 QRACK_CONST complex mtrx[4]{ ONE_MINUS_I_DIV_2, ONE_PLUS_I_DIV_2, ONE_PLUS_I_DIV_2, ONE_MINUS_I_DIV_2 };
1198 QRACK_CONST complex mtrx[4]{ ONE_PLUS_I_DIV_2, ONE_PLUS_I_DIV_2_NEG, ONE_PLUS_I_DIV_2, ONE_PLUS_I_DIV_2 };
1213 QRACK_CONST complex mtrx[4]{ ONE_MINUS_I_DIV_2, ONE_MINUS_I_DIV_2, ONE_MINUS_I_DIV_2_NEG, ONE_MINUS_I_DIV_2 };
1253 const std::vector<bitLenInt> controls{ control };
1257 MCMtrx(controls, mtrx, target);
1268 const std::vector<bitLenInt> controls{ control };
1272 MACMtrx(controls, mtrx, target);
1283 const std::vector<bitLenInt> controls{ control };
1295 const std::vector<bitLenInt> controls{ control };
1307 const std::vector<bitLenInt> controls{ control };
1319 const std::vector<bitLenInt> controls{ control };
1331 const std::vector<bitLenInt> controls{ control };
1343 const std::vector<bitLenInt> controls{ control };
1359 const std::vector<bitLenInt> controls{ control };
1375 const std::vector<bitLenInt> controls{ control };
1391 const std::vector<bitLenInt> controls{ control };
1407 const std::vector<bitLenInt> controls{ control };
1608 const std::vector<bitLenInt>& controls,
bitLenInt qubit,
const complex mtrx[4U],
bool antiCtrled =
false);
1742 #if ENABLE_REG_GATES
2169 INC(invToSub, start, length);
2178 const bool hasCarry =
M(carryIndex);
2181 INCDECC(toAdd + 1U, start, length, carryIndex);
2183 INCDECC(toAdd, start, length, carryIndex);
2190 const bool hasCarry =
M(carryIndex);
2198 INCDECC(invToSub, start, length, carryIndex);
2210 CINC(invToSub, inOutStart, length, controls);
2217 INC(signMask, start, length);
2218 INCDECC(toAdd & ~signMask, start, length, overflowIndex);
2220 DEC(signMask, start, length);
2228 INCS(invToSub, start, length, overflowIndex);
2241 bitLenInt length,
const std::vector<bitLenInt>& controls);
2245 bitLenInt length,
const std::vector<bitLenInt>& controls);
2257 CCNOT(inputBit1, inputBit2, carryOut);
2258 CNOT(inputBit1, inputBit2);
2259 CCNOT(inputBit2, carryInSumOut, carryOut);
2260 CNOT(inputBit2, carryInSumOut);
2261 CNOT(inputBit1, inputBit2);
2276 CNOT(inputBit1, inputBit2);
2277 CNOT(inputBit2, carryInSumOut);
2278 CCNOT(inputBit2, carryInSumOut, carryOut);
2279 CNOT(inputBit1, inputBit2);
2280 CCNOT(inputBit1, inputBit2, carryOut);
2351 virtual void QFTR(
const std::vector<bitLenInt>& qubits,
bool trySeparate =
false);
2367 virtual void IQFTR(
const std::vector<bitLenInt>& qubits,
bool trySeparate =
false);
2393 virtual bitCapInt M(
const std::vector<bitLenInt>& bits) {
return ForceM(bits, std::vector<bool>()); }
2396 virtual bitCapInt ForceM(
const std::vector<bitLenInt>& bits,
const std::vector<bool>& values,
bool doApply =
true);
2416 const std::vector<bitLenInt> controls{ qubit1 };
2429 return ISwap(qubit1, qubit2);
2434 return IISwap(qubit1, qubit2);
2442 CNOT(qubit1, qubit2);
2443 RZ(2 * theta, qubit2);
2444 CNOT(qubit1, qubit2);
2453 CNOT(qubit1, qubit2);
2454 RZ(2 * theta, qubit2);
2455 CNOT(qubit1, qubit2);
2465 while ((last > 0
U) && (first < (last - 1U))) {
2500 CNOT(control, target);
2502 CNOT(control, target);
2517 if (prob > highestProb) {
2522 if (highestProb > (
ONE_R1_F - totProb)) {
2571 virtual void ProbBitsAll(
const std::vector<bitLenInt>& bits,
real1* probsArray);
2591 bool roundRz,
const std::vector<bitLenInt>& bits,
const bitCapInt& offset =
ZERO_BCI)
2611 const std::vector<bitLenInt>& bits,
const std::vector<real1_f>& basisOps, std::vector<real1_f> eigenVals = {})
2623 const std::vector<std::shared_ptr<complex>>& basisOps, std::vector<real1_f> eigenVals = {})
2644 bool roundRz,
const std::vector<bitLenInt>& bits,
const std::vector<real1_f>& weights)
2656 const std::vector<bitLenInt>& bits,
const std::vector<bitCapInt>& perms,
const bitCapInt& offset =
ZERO_BCI);
2697 const std::vector<std::shared_ptr<complex>>& basisOps, std::vector<real1_f> eigenVals = {})
2709 const std::vector<bitLenInt>& bits,
const std::vector<real1_f>& basisOps, std::vector<real1_f> eigenVals = {})
2721 const std::vector<bitLenInt>& bits,
const std::vector<bitCapInt>& perms,
const bitCapInt& offset =
ZERO_BCI);
2743 const std::vector<bitLenInt>& bits,
const std::vector<real1_f>& weights);
2753 bool roundRz,
const std::vector<bitLenInt>& bits,
const std::vector<real1_f>& weights)
2776 return ProbMask(mask, permutation);
2785 bool roundRz,
const std::vector<bitLenInt>& bits,
const bitCapInt& offset =
ZERO_BCI)
2802 virtual std::map<bitCapInt, int>
MultiShotMeasureMask(
const std::vector<bitCapInt>& qPowers,
unsigned shots);
2810 const std::vector<bitCapInt>& qPowers,
unsigned shots,
unsigned long long* shotsArray);
2823 if (value !=
M(qubit)) {
2937 virtual bool AreFactorized(std::vector<bitLenInt> a, std::vector<bitLenInt> b,
bool flushCache =
false)
3096 return (
real1_f)std::arg(amp);
void bi_or_ip(BigInteger *left, const BigInteger &right)
Definition: big_integer.hpp:445
void bi_increment(BigInteger *pBigInt, const BIG_INTEGER_WORD &value)
Definition: big_integer.hpp:221
int bi_compare_0(const BigInteger &left)
Definition: big_integer.hpp:141
Definition: parallel_for.hpp:27
void SetConcurrencyLevel(unsigned num)
Definition: parallel_for.hpp:36
A "Qrack::QInterface" is an abstract interface exposing qubit permutation state vector with methods t...
Definition: qinterface.hpp:141
virtual void GetQuantumState(complex *outputState)=0
Get the pure quantum state representation.
bitCapInt maxQPower
Definition: qinterface.hpp:149
void SetRandomSeed(uint32_t seed)
Definition: qinterface.hpp:261
virtual void SetConcurrency(uint32_t threadsPerEngine)
Set the number of threads in parallel for loops, per component QEngine.
Definition: qinterface.hpp:275
virtual bitCapInt GetAmplitudeCount()
Count of amplitudes, which might be less than state vector if sparse or compressed.
Definition: qinterface.hpp:284
real1 amplitudeFloor
Definition: qinterface.hpp:148
void MACWrapper(const std::vector< bitLenInt > &controls, Fn fn)
Definition: qinterface.hpp:179
bool useRDRAND
Definition: qinterface.hpp:145
virtual bitLenInt Allocate(bitLenInt length)
Allocate new "length" count of |0> state qubits at end of qubit index position.
Definition: qinterface.hpp:488
virtual bitCapInt GetMaxQPower()
Get the maximum number of basis states, namely for qubits.
Definition: qinterface.hpp:281
virtual void Copy(QInterfacePtr orig)
Definition: qinterface.hpp:222
virtual void Dispose(bitLenInt start, bitLenInt length, const bitCapInt &disposedPerm)=0
Dispose a a contiguous set of qubits that are already in a permutation eigenstate.
std::shared_ptr< RdRandom > hardware_rand_generator
Definition: qinterface.hpp:152
virtual bitLenInt Compose(QInterfacePtr toCopy)
Combine another QInterface with this one, after the last bit index of this one.
Definition: qinterface.hpp:382
virtual void GetReducedDensityMatrix(const std::vector< bitLenInt > &qubits, complex *outputState)
Get a reduced density matrix on the list of qubits.
Definition: qinterface.cpp:886
virtual QInterfacePtr Decompose(bitLenInt start, bitLenInt length)=0
Schmidt decompose a length of qubits.
qrack_rand_gen_ptr rand_generator
Definition: qinterface.hpp:150
virtual void LossySaveStateVector(std::string f, int p=6, int b=4)
Write the quantum state to disk with lossy compression.
Definition: qinterface.cpp:855
virtual bitLenInt ComposeNoClone(QInterfacePtr toCopy)
This is a variant of Compose() for a toCopy argument that will definitely not be reused once "Compose...
Definition: qinterface.hpp:387
bool randGlobalPhase
Definition: qinterface.hpp:144
virtual void SetPermutation(const bitCapInt &perm, const complex &phaseFac=CMPLX_DEFAULT_ARG)
Set to a specific permutation of all qubits.
Definition: qinterface.cpp:103
virtual void Decompose(bitLenInt start, QInterfacePtr dest)=0
Minimally decompose a set of contiguous bits from the separably composed unit, into "destination".
QInterface()
Default constructor, primarily for protected internal use.
Definition: qinterface.hpp:242
virtual void SetQubitCount(bitLenInt qb)
Definition: qinterface.hpp:268
std::uniform_real_distribution< real1_s > rand_distribution
Definition: qinterface.hpp:151
virtual void SetAmplitude(const bitCapInt &perm, const complex &)=0
Sets the representational amplitude of a full permutation.
virtual bitLenInt Allocate(bitLenInt start, bitLenInt length)=0
Allocate new "length" count of |0> state qubits at specified qubit index start position.
virtual void SetQuantumState(const complex *inputState)=0
Set an arbitrary pure quantum state representation.
virtual bitCapInt SampleClone(const std::vector< bitCapInt > &qPowers)
Definition: qinterface.hpp:191
static real1_f normHelper(const complex &c)
Definition: qinterface.hpp:156
static real1_f clampProb(real1_f toClamp)
Definition: qinterface.hpp:158
virtual real1_f ExpVarUnitaryAll(bool isExp, const std::vector< bitLenInt > &bits, const std::vector< std::shared_ptr< complex >> &basisOps, std::vector< real1_f > eigenVals={})
Definition: qinterface.cpp:478
bitLenInt qubitCount
Definition: qinterface.hpp:146
virtual bitLenInt GetQubitCount()
Get the count of bits in this register.
Definition: qinterface.hpp:278
uint32_t randomSeed
Definition: qinterface.hpp:147
real1_f Rand()
Generate a random real number between 0 and 1.
Definition: qinterface.hpp:289
virtual real1_f ExpVarBitsAll(bool isExp, const std::vector< bitLenInt > &bits, const bitCapInt &offset=ZERO_BCI)
Definition: qinterface.hpp:210
virtual void Dispose(bitLenInt start, bitLenInt length)=0
Minimally decompose a set of contiguous bits from the separably composed unit, and discard the separa...
virtual bool GetIsArbitraryGlobalPhase()
Definition: qinterface.hpp:286
bool doNormalize
Definition: qinterface.hpp:143
complex GetNonunitaryPhase()
Definition: qinterface.hpp:169
virtual void LossyLoadStateVector(std::string f)
Read the quantum state from disk with lossy compression.
Definition: qinterface.cpp:866
virtual ~QInterface()
Definition: qinterface.hpp:256
virtual void GetProbs(real1 *outputProbs)=0
Get the pure quantum state representation.
virtual complex GetAmplitude(const bitCapInt &perm)=0
Get the representational amplitude of a full permutation.
Half-precision floating-point type.
Definition: half.hpp:2206
virtual void MULModNOut(const bitCapInt &toMul, const bitCapInt &modN, bitLenInt inStart, bitLenInt outStart, bitLenInt length)
Multiplication modulo N by integer, (out of place)
Definition: arithmetic.cpp:127
virtual void DECS(const bitCapInt &toSub, bitLenInt start, bitLenInt length, bitLenInt overflowIndex)
Subtract a classical integer from the register, with sign and without carry.
Definition: qinterface.hpp:2225
virtual void ASL(bitLenInt shift, bitLenInt start, bitLenInt length)
Arithmetic shift left, with last 2 bits as sign and carry.
Definition: qinterface.cpp:335
virtual void IFullAdd(bitLenInt inputBit1, bitLenInt inputBit2, bitLenInt carryInSumOut, bitLenInt carryOut)
Inverse of FullAdd.
Definition: qinterface.hpp:2269
virtual void INCDECC(const bitCapInt &toAdd, bitLenInt start, bitLenInt length, bitLenInt carryIndex)
Common driver method behind INCC and DECC.
Definition: arithmetic.cpp:53
virtual void CADC(const std::vector< bitLenInt > &controls, bitLenInt input1, bitLenInt input2, bitLenInt output, bitLenInt length, bitLenInt carry)
Add a quantum integer to a quantum integer, with carry and with controls.
Definition: arithmetic.cpp:371
virtual void CINC(const bitCapInt &toAdd, bitLenInt inOutStart, bitLenInt length, const std::vector< bitLenInt > &controls)
Add integer (without sign, with controls)
Definition: arithmetic.cpp:79
virtual void INCS(const bitCapInt &toAdd, bitLenInt start, bitLenInt length, bitLenInt overflowIndex)
Add a classical integer to the register, with sign and without carry.
Definition: qinterface.hpp:2214
virtual void DECC(const bitCapInt &toSub, bitLenInt start, bitLenInt length, bitLenInt carryIndex)
Subtract classical integer (without sign, with carry)
Definition: qinterface.hpp:2188
virtual void ADC(bitLenInt input1, bitLenInt input2, bitLenInt output, bitLenInt length, bitLenInt carry)
Add a quantum integer to a quantum integer, with carry.
Definition: arithmetic.cpp:330
virtual void DEC(const bitCapInt &toSub, bitLenInt start, bitLenInt length)
Subtract classical integer (without sign)
Definition: qinterface.hpp:2166
virtual void CFullAdd(const std::vector< bitLenInt > &controls, bitLenInt inputBit1, bitLenInt inputBit2, bitLenInt carryInSumOut, bitLenInt carryOut)
Controlled quantum analog of classical "Full Adder" gate.
Definition: arithmetic.cpp:276
virtual void INC(const bitCapInt &toAdd, bitLenInt start, bitLenInt length)
Add integer (without sign)
Definition: arithmetic.cpp:20
virtual void LSR(bitLenInt shift, bitLenInt start, bitLenInt length)
Logical shift right, filling the extra bits with |0>
Definition: qinterface.cpp:386
virtual void FullAdd(bitLenInt inputBit1, bitLenInt inputBit2, bitLenInt carryInSumOut, bitLenInt carryOut)
Quantum analog of classical "Full Adder" gate.
Definition: qinterface.hpp:2252
virtual void IMULModNOut(const bitCapInt &toMul, const bitCapInt &modN, bitLenInt inStart, bitLenInt outStart, bitLenInt length)
Inverse of multiplication modulo N by integer, (out of place)
Definition: arithmetic.cpp:165
virtual void CIFullAdd(const std::vector< bitLenInt > &controls, bitLenInt inputBit1, bitLenInt inputBit2, bitLenInt carryInSumOut, bitLenInt carryOut)
Inverse of CFullAdd.
Definition: arithmetic.cpp:302
virtual void CIADC(const std::vector< bitLenInt > &controls, bitLenInt input1, bitLenInt input2, bitLenInt output, bitLenInt length, bitLenInt carry)
Inverse of CADC.
Definition: arithmetic.cpp:392
virtual void ROL(bitLenInt shift, bitLenInt start, bitLenInt length)
Circular shift left - shift bits left, and carry last bits.
Definition: qinterface.cpp:297
virtual void CDEC(const bitCapInt &toSub, bitLenInt inOutStart, bitLenInt length, const std::vector< bitLenInt > &controls)
Subtract classical integer (without sign, with controls)
Definition: qinterface.hpp:2206
virtual void INCC(const bitCapInt &toAdd, bitLenInt start, bitLenInt length, bitLenInt carryIndex)
Add integer (without sign, with carry)
Definition: qinterface.hpp:2176
virtual void IADC(bitLenInt input1, bitLenInt input2, bitLenInt output, bitLenInt length, bitLenInt carry)
Inverse of ADC.
Definition: arithmetic.cpp:350
virtual void CMULModNOut(const bitCapInt &toMul, const bitCapInt &modN, bitLenInt inStart, bitLenInt outStart, bitLenInt length, const std::vector< bitLenInt > &controls)
Controlled multiplication modulo N by integer, (out of place)
Definition: arithmetic.cpp:201
virtual void CIMULModNOut(const bitCapInt &toMul, const bitCapInt &modN, bitLenInt inStart, bitLenInt outStart, bitLenInt length, const std::vector< bitLenInt > &controls)
Inverse of controlled multiplication modulo N by integer, (out of place)
Definition: arithmetic.cpp:240
virtual void ROR(bitLenInt shift, bitLenInt start, bitLenInt length)
Circular shift right - shift bits right, and carry first bits.
Definition: qinterface.cpp:316
virtual void LSL(bitLenInt shift, bitLenInt start, bitLenInt length)
Logical shift left, filling the extra bits with |0>
Definition: qinterface.cpp:371
virtual void ASR(bitLenInt shift, bitLenInt start, bitLenInt length)
Arithmetic shift right, with last 2 bits as sign and carry.
Definition: qinterface.cpp:353
virtual void ZMask(const bitCapInt &mask)
Masked Z gate.
Definition: gates.cpp:144
virtual void CPhaseRootN(bitLenInt n, bitLenInt control, bitLenInt target)
Controlled "PhaseRootN" gate.
Definition: qinterface.hpp:1353
virtual void CIPhaseRootN(bitLenInt n, bitLenInt control, bitLenInt target)
Controlled inverse "PhaseRootN" gate.
Definition: qinterface.hpp:1385
virtual void AntiCIAI(bitLenInt control, bitLenInt target, real1_f azimuth, real1_f inclination)
(Anti-)Controlled inverse "Azimuth, Inclination" (RY-RZ)
Definition: rotational.cpp:117
virtual void ISqrtX(bitLenInt qubit)
Inverse square root of X gate.
Definition: qinterface.hpp:1179
virtual void ISqrtY(bitLenInt qubit)
Inverse square root of Y gate.
Definition: qinterface.hpp:1209
virtual void CZ(bitLenInt control, bitLenInt target)
Controlled Z gate.
Definition: qinterface.hpp:796
virtual void SH(bitLenInt qubit)
Y-basis transformation gate.
Definition: qinterface.hpp:961
virtual void AntiCS(bitLenInt control, bitLenInt target)
(Anti-)controlled S gate
Definition: qinterface.hpp:1293
virtual void CCZ(bitLenInt control1, bitLenInt control2, bitLenInt target)
Doubly-Controlled Z gate.
Definition: qinterface.hpp:819
virtual void UCPhase(const std::vector< bitLenInt > &controls, const complex &topLeft, const complex &bottomRight, bitLenInt target, const bitCapInt &perm)
Apply a single bit transformation that only effects phase, with arbitrary control bits,...
Definition: qinterface.hpp:609
virtual void CS(bitLenInt control, bitLenInt target)
Controlled S gate.
Definition: qinterface.hpp:1281
virtual void CIS(bitLenInt control, bitLenInt target)
Controlled inverse S gate.
Definition: qinterface.hpp:1305
virtual void SqrtY(bitLenInt qubit)
Square root of Y gate.
Definition: qinterface.hpp:1194
virtual void CNOT(bitLenInt control, bitLenInt target)
Controlled NOT gate.
Definition: qinterface.hpp:727
virtual void TimeEvolve(Hamiltonian h, real1_f timeDiff)
To define a Hamiltonian, give a vector of controlled single bit gates ("HamiltonianOp" instances) tha...
Definition: gates.cpp:426
virtual void SqrtW(bitLenInt qubit)
Square root of W gate.
Definition: qinterface.hpp:1222
virtual void IS(bitLenInt qubit)
Inverse S gate.
Definition: qinterface.hpp:1052
virtual void S(bitLenInt qubit)
S gate.
Definition: qinterface.hpp:1045
virtual void CT(bitLenInt control, bitLenInt target)
Controlled T gate.
Definition: qinterface.hpp:1329
virtual void UniformlyControlledSingleBit(const std::vector< bitLenInt > &controls, bitLenInt qubit, const complex *mtrxs)
Apply a "uniformly controlled" arbitrary single bit unitary transformation.
Definition: qinterface.hpp:645
virtual void Y(bitLenInt qubit)
Y gate.
Definition: qinterface.hpp:1133
virtual bool ForceM(bitLenInt qubit, bool result, bool doForce=true, bool doApply=true)=0
Act as if is a measurement was applied, except force the (usually random) result.
virtual void CY(bitLenInt control, bitLenInt target)
Controlled Y gate.
Definition: qinterface.hpp:750
virtual void AntiCIPhaseRootN(bitLenInt n, bitLenInt control, bitLenInt target)
(Anti-)controlled inverse "PhaseRootN" gate
Definition: qinterface.hpp:1401
virtual void CH(bitLenInt control, bitLenInt target)
Controlled H gate.
Definition: qinterface.hpp:1251
virtual void AntiCU(const std::vector< bitLenInt > &controls, bitLenInt target, real1_f theta, real1_f phi, real1_f lambda, real1_f gamma=ZERO_R1_F)
(Anti-)Controlled general unitary gate
Definition: rotational.cpp:42
virtual void AntiCAI(bitLenInt control, bitLenInt target, real1_f azimuth, real1_f inclination)
(Anti-)Controlled "Azimuth, Inclination" (RY-RZ)
Definition: rotational.cpp:105
virtual void H(bitLenInt qubit)
Hadamard gate.
Definition: qinterface.hpp:931
virtual void CIAI(bitLenInt control, bitLenInt target, real1_f azimuth, real1_f inclination)
Controlled inverse "Azimuth, Inclination" (RY-RZ)
Definition: rotational.cpp:91
virtual void CSqrtSwap(const std::vector< bitLenInt > &controls, bitLenInt qubit1, bitLenInt qubit2)
Apply a square root of swap with arbitrary control bits.
Definition: gates.cpp:282
virtual void AntiCSwap(const std::vector< bitLenInt > &controls, bitLenInt qubit1, bitLenInt qubit2)
Apply a swap with arbitrary (anti) control bits.
Definition: gates.cpp:270
virtual void CU(const std::vector< bitLenInt > &controls, bitLenInt target, real1_f theta, real1_f phi, real1_f lambda, real1_f gamma=ZERO_R1_F)
Controlled general unitary gate.
Definition: rotational.cpp:29
virtual void AI(bitLenInt target, real1_f azimuth, real1_f inclination)
"Azimuth, Inclination" (RY-RZ)
Definition: rotational.cpp:55
virtual void AntiCPhaseRootN(bitLenInt n, bitLenInt control, bitLenInt target)
(Anti-)controlled "PhaseRootN" gate
Definition: qinterface.hpp:1369
virtual void YMask(const bitCapInt &mask)
Masked Y gate.
Definition: gates.cpp:112
virtual void MACInvert(const std::vector< bitLenInt > &controls, const complex &topRight, const complex &bottomLeft, bitLenInt target)
Apply a single bit transformation that reverses bit probability and might effect phase,...
Definition: qinterface.hpp:597
virtual void UCMtrx(const std::vector< bitLenInt > &controls, const complex *mtrx, bitLenInt target, const bitCapInt &controlPerm)
Apply an arbitrary single bit unitary transformation, with arbitrary control bits,...
Definition: gates.cpp:23
virtual void HIS(bitLenInt qubit)
Y-basis (inverse) transformation gate.
Definition: qinterface.hpp:975
virtual void Phase(const complex &topLeft, const complex &bottomRight, bitLenInt qubit)
Apply a single bit transformation that only effects phase.
Definition: qinterface.hpp:534
virtual void Invert(const complex &topRight, const complex &bottomLeft, bitLenInt qubit)
Apply a single bit transformation that reverses bit probability and might effect phase.
Definition: qinterface.hpp:547
virtual void CAI(bitLenInt control, bitLenInt target, real1_f azimuth, real1_f inclination)
Controlled "Azimuth, Inclination" (RY-RZ)
Definition: rotational.cpp:79
virtual void CCY(bitLenInt control1, bitLenInt control2, bitLenInt target)
Doubly-Controlled Y gate.
Definition: qinterface.hpp:773
virtual void AntiCZ(bitLenInt control, bitLenInt target)
Anti controlled Z gate.
Definition: qinterface.hpp:807
virtual void CISqrtSwap(const std::vector< bitLenInt > &controls, bitLenInt qubit1, bitLenInt qubit2)
Apply an inverse square root of swap with arbitrary control bits.
Definition: gates.cpp:331
virtual void X(bitLenInt qubit)
X gate.
Definition: qinterface.hpp:1116
virtual void MACPhase(const std::vector< bitLenInt > &controls, const complex &topLeft, const complex &bottomRight, bitLenInt target)
Apply a single bit transformation that only effects phase, with arbitrary (anti-)control bits.
Definition: qinterface.hpp:581
virtual void U2(bitLenInt target, real1_f phi, real1_f lambda)
2-parameter unitary gate
Definition: qinterface.hpp:849
virtual void Z(bitLenInt qubit)
Z gate.
Definition: qinterface.hpp:1149
virtual void AntiCNOT(bitLenInt control, bitLenInt target)
Anti controlled NOT gate.
Definition: qinterface.hpp:738
virtual void AntiCY(bitLenInt control, bitLenInt target)
Anti controlled Y gate.
Definition: qinterface.hpp:761
virtual void ISqrtW(bitLenInt qubit)
Inverse square root of W gate.
Definition: qinterface.hpp:1236
virtual void PhaseParity(real1_f radians, const bitCapInt &mask)
Parity phase gate.
Definition: gates.cpp:399
virtual void MACMtrx(const std::vector< bitLenInt > &controls, const complex mtrx[4U], bitLenInt target)
Apply an arbitrary single bit unitary transformation, with arbitrary (anti-)control bits.
Definition: qinterface.hpp:513
virtual void IPhaseRootN(bitLenInt n, bitLenInt qubit)
Inverse "PhaseRootN" gate.
Definition: qinterface.hpp:1087
virtual void IAI(bitLenInt target, real1_f azimuth, real1_f inclination)
Invert "Azimuth, Inclination" (RY-RZ)
Definition: rotational.cpp:66
virtual void AntiCISqrtSwap(const std::vector< bitLenInt > &controls, bitLenInt qubit1, bitLenInt qubit2)
Apply an inverse square root of swap with arbitrary (anti) control bits.
Definition: gates.cpp:387
virtual void PhaseRootN(bitLenInt n, bitLenInt qubit)
"PhaseRootN" gate
Definition: qinterface.hpp:1073
virtual void U(bitLenInt target, real1_f theta, real1_f phi, real1_f lambda)
General unitary gate.
Definition: rotational.cpp:18
virtual void AntiCIS(bitLenInt control, bitLenInt target)
(Anti-)controlled inverse S gate
Definition: qinterface.hpp:1317
virtual void SqrtX(bitLenInt qubit)
Square root of X gate.
Definition: qinterface.hpp:1165
virtual void IU2(bitLenInt target, real1_f phi, real1_f lambda)
Inverse 2-parameter unitary gate.
Definition: qinterface.hpp:856
virtual void AntiCCNOT(bitLenInt control1, bitLenInt control2, bitLenInt target)
Anti doubly-controlled NOT gate.
Definition: qinterface.hpp:716
virtual void PhaseRootNMask(bitLenInt n, const bitCapInt &mask)
Masked PhaseRootN gate.
Definition: gates.cpp:155
virtual void SqrtH(bitLenInt qubit)
Square root of Hadamard gate.
Definition: qinterface.hpp:944
virtual void MCPhase(const std::vector< bitLenInt > &controls, const complex &topLeft, const complex &bottomRight, bitLenInt target)
Apply a single bit transformation that only effects phase, with arbitrary control bits.
Definition: qinterface.hpp:556
virtual void AntiCCY(bitLenInt control1, bitLenInt control2, bitLenInt target)
Anti doubly-controlled Y gate.
Definition: qinterface.hpp:784
virtual bool M(bitLenInt qubit)
Measurement gate.
Definition: qinterface.hpp:1031
virtual void Mtrx(const complex mtrx[4U], bitLenInt qubit)=0
Apply an arbitrary single bit unitary transformation.
virtual void MCInvert(const std::vector< bitLenInt > &controls, const complex &topRight, const complex &bottomLeft, bitLenInt target)
Apply a single bit transformation that reverses bit probability and might effect phase,...
Definition: qinterface.hpp:571
virtual void AntiCSqrtSwap(const std::vector< bitLenInt > &controls, bitLenInt qubit1, bitLenInt qubit2)
Apply a square root of swap with arbitrary (anti) control bits.
Definition: gates.cpp:375
virtual void CIT(bitLenInt control, bitLenInt target)
Controlled inverse T gate.
Definition: qinterface.hpp:1341
virtual void IT(bitLenInt qubit)
Inverse T gate.
Definition: qinterface.hpp:1066
virtual void MCMtrx(const std::vector< bitLenInt > &controls, const complex mtrx[4U], bitLenInt target)=0
Apply an arbitrary single bit unitary transformation, with arbitrary control bits.
virtual void AntiCCZ(bitLenInt control1, bitLenInt control2, bitLenInt target)
Anti doubly-controlled Z gate.
Definition: qinterface.hpp:830
virtual void CSwap(const std::vector< bitLenInt > &controls, bitLenInt qubit1, bitLenInt qubit2)
Apply a swap with arbitrary control bits.
Definition: gates.cpp:247
virtual void T(bitLenInt qubit)
T gate.
Definition: qinterface.hpp:1059
virtual void CCNOT(bitLenInt control1, bitLenInt control2, bitLenInt target)
Doubly-controlled NOT gate.
Definition: qinterface.hpp:705
virtual void XMask(const bitCapInt &mask)
Masked X gate.
Definition: gates.cpp:101
virtual void AntiCH(bitLenInt control, bitLenInt target)
(Anti-)controlled H gate
Definition: qinterface.hpp:1266
virtual void UCInvert(const std::vector< bitLenInt > &controls, const complex &topRight, const complex &bottomLeft, bitLenInt target, const bitCapInt &perm)
Apply a single bit transformation that reverses bit probability and might effect phase,...
Definition: qinterface.hpp:624
virtual void XOR(bitLenInt inputBit1, bitLenInt inputBit2, bitLenInt outputBit)
Quantum analog of classical "XOR" gate.
Definition: logic.cpp:55
virtual void OR(bitLenInt inputBit1, bitLenInt inputBit2, bitLenInt outputBit)
Quantum analog of classical "OR" gate.
Definition: logic.cpp:36
virtual void XNOR(bitLenInt inputBit1, bitLenInt inputBit2, bitLenInt outputBit)
Quantum analog of classical "XNOR" gate.
Definition: logic.cpp:83
virtual void CLXNOR(bitLenInt inputQBit, bool inputClassicalBit, bitLenInt outputBit)
Quantum analog of classical "XNOR" gate.
Definition: logic.cpp:129
virtual void CLNAND(bitLenInt inputQBit, bool inputClassicalBit, bitLenInt outputBit)
Quantum analog of classical "NAND" gate.
Definition: logic.cpp:117
virtual void AND(bitLenInt inputBit1, bitLenInt inputBit2, bitLenInt outputBit)
Quantum analog of classical "AND" gate.
Definition: logic.cpp:18
virtual void CLAND(bitLenInt inputQBit, bool inputClassicalBit, bitLenInt outputBit)
Quantum analog of classical "AND" gate.
Definition: logic.cpp:89
virtual void CLOR(bitLenInt inputQBit, bool inputClassicalBit, bitLenInt outputBit)
Quantum analog of classical "OR" gate.
Definition: logic.cpp:96
virtual void NAND(bitLenInt inputBit1, bitLenInt inputBit2, bitLenInt outputBit)
Quantum analog of classical "NAND" gate.
Definition: logic.cpp:71
virtual void CLNOR(bitLenInt inputQBit, bool inputClassicalBit, bitLenInt outputBit)
Quantum analog of classical "NOR" gate.
Definition: logic.cpp:123
virtual void CLXOR(bitLenInt inputQBit, bool inputClassicalBit, bitLenInt outputBit)
Quantum analog of classical "XOR" gate.
Definition: logic.cpp:105
virtual void NOR(bitLenInt inputBit1, bitLenInt inputBit2, bitLenInt outputBit)
Quantum analog of classical "NOR" gate.
Definition: logic.cpp:77
virtual void X(bitLenInt start, bitLenInt length)
Bitwise Pauli X (or logical "NOT") operator.
Definition: qinterface.hpp:1740
virtual void H(bitLenInt start, bitLenInt length)
Bitwise Hadamard.
virtual void ExpZDyad(int numerator, int denomPower, bitLenInt qubit)
Dyadic fraction Pauli Z exponentiation gate.
Definition: qinterface.cpp:1334
virtual void RZDyad(int numerator, int denomPower, bitLenInt qubit)
Dyadic fraction Z axis rotation gate.
Definition: qinterface.cpp:1346
virtual void ExpX(real1_f radians, bitLenInt qubit)
Pauli X exponentiation gate.
Definition: rotational.cpp:251
virtual void CRTDyad(int numerator, int denomPower, bitLenInt control, bitLenInt target)
Controlled dyadic fraction "phase shift gate".
Definition: qinterface.cpp:1350
virtual void UniformlyControlledRZ(const std::vector< bitLenInt > &controls, bitLenInt qubit, const real1 *angles)
Apply a "uniformly controlled" rotation of a bit around the Pauli Z axis.
Definition: rotational.cpp:153
virtual void ExpDyad(int numerator, int denomPower, bitLenInt qubit)
Dyadic fraction (identity) exponentiation gate.
Definition: qinterface.cpp:1316
virtual void CRZDyad(int numerator, int denomPower, bitLenInt control, bitLenInt target)
Controlled dyadic fraction Z axis rotation gate.
Definition: qinterface.cpp:1368
virtual void RX(real1_f radians, bitLenInt qubit)
X axis rotation gate.
Definition: rotational.cpp:179
virtual void CRZ(real1_f radians, bitLenInt control, bitLenInt target)
Controlled Z axis rotation gate.
Definition: rotational.cpp:206
virtual void RYDyad(int numerator, int denomPower, bitLenInt qubit)
Dyadic fraction Y axis rotation gate.
Definition: qinterface.cpp:1343
virtual void UniformlyControlledRY(const std::vector< bitLenInt > &controls, bitLenInt qubit, const real1 *angles)
Apply a "uniformly controlled" rotation of a bit around the Pauli Y axis.
Definition: rotational.cpp:132
virtual void ExpY(real1_f radians, bitLenInt qubit)
Pauli Y exponentiation gate.
Definition: rotational.cpp:258
virtual void CRT(real1_f radians, bitLenInt control, bitLenInt target)
Controlled "phase shift gate".
Definition: rotational.cpp:272
virtual void CRY(real1_f radians, bitLenInt control, bitLenInt target)
Controlled Y axis rotation gate.
Definition: rotational.cpp:215
virtual void RY(real1_f radians, bitLenInt qubit)
Y axis rotation gate.
Definition: rotational.cpp:189
virtual void CRX(real1_f radians, bitLenInt control, bitLenInt target)
Controlled X axis rotation gate.
Definition: rotational.cpp:279
virtual void ExpYDyad(int numerator, int denomPower, bitLenInt qubit)
Dyadic fraction Pauli Y exponentiation gate.
Definition: qinterface.cpp:1328
virtual void RTDyad(int numerator, int denomPower, bitLenInt qubit)
Dyadic fraction phase shift gate.
Definition: qinterface.cpp:1313
virtual void RZ(real1_f radians, bitLenInt qubit)
Z axis rotation gate.
Definition: rotational.cpp:198
virtual void RT(real1_f radians, bitLenInt qubit)
Phase shift gate.
Definition: rotational.cpp:173
virtual void ExpZ(real1_f radians, bitLenInt qubit)
Pauli Z exponentiation gate.
Definition: rotational.cpp:265
virtual void CRYDyad(int numerator, int denomPower, bitLenInt control, bitLenInt target)
Controlled dyadic fraction y axis rotation gate.
Definition: qinterface.cpp:1362
virtual void RXDyad(int numerator, int denomPower, bitLenInt qubit)
Dyadic fraction X axis rotation gate.
Definition: qinterface.cpp:1340
virtual void ExpXDyad(int numerator, int denomPower, bitLenInt qubit)
Dyadic fraction Pauli X exponentiation gate.
Definition: qinterface.cpp:1322
virtual void Exp(real1_f radians, bitLenInt qubit)
(Identity) Exponentiation gate
Definition: rotational.cpp:227
virtual void CRXDyad(int numerator, int denomPower, bitLenInt control, bitLenInt target)
Controlled dyadic fraction X axis rotation gate.
Definition: qinterface.cpp:1356
virtual void Dump()
If asynchronous work is still running, let the simulator know that it can be aborted.
Definition: qinterface.hpp:2887
virtual bool isBinaryDecisionTree()
Returns "true" if current state representation is definitely a binary decision tree,...
Definition: qinterface.hpp:2893
virtual std::vector< int64_t > GetDeviceList()
Get the device index.
Definition: qinterface.hpp:3077
virtual void SetSparseAceMaxMb(size_t mb)
Set the (sparse-simulation) "automatic circuit elision" (ACE) maximum memory megabytes.
Definition: qinterface.hpp:3028
virtual real1_f VarianceBitsFactorized(const std::vector< bitLenInt > &bits, const std::vector< bitCapInt > &perms, const bitCapInt &offset=ZERO_BCI)
Get expectation value of bits, given an array of qubit weights.
Definition: qinterface.cpp:579
virtual real1_f ProbAllRdm(bool roundRz, const bitCapInt &fullRegister)
Direct measure of full permutation probability, treating all ancillary qubits as post-selected T gate...
Definition: qinterface.hpp:2766
virtual bool ApproxCompare(QInterfacePtr toCompare, real1_f error_tol=TRYDECOMPOSE_EPSILON)
Compare state vectors approximately, to determine whether this state vector is the same as the target...
Definition: qinterface.hpp:2834
virtual real1_f ExpectationBitsFactorizedRdm(bool roundRz, const std::vector< bitLenInt > &bits, const std::vector< bitCapInt > &perms, const bitCapInt &offset=ZERO_BCI)
Get (reduced density matrix) expectation value of bits, given an array of qubit weights.
Definition: qinterface.hpp:2730
virtual bool isClifford(bitLenInt qubit)
Returns "true" if current qubit state is identifiably within the Clifford set, or "false" if it is no...
Definition: qinterface.hpp:2905
virtual real1_f VarianceUnitaryAll(const std::vector< bitLenInt > &bits, const std::vector< std::shared_ptr< complex >> &basisOps, std::vector< real1_f > eigenVals={})
Direct measure of variance of listed (2x2 operator) single-qubit tensor product probability.
Definition: qinterface.hpp:2622
virtual real1_f VarianceUnitaryAll(const std::vector< bitLenInt > &bits, const std::vector< real1_f > &basisOps, std::vector< real1_f > eigenVals={})
Direct measure of variance of listed (3-parameter) single-qubit tensor product probability.
Definition: qinterface.hpp:2610
virtual real1_f FirstNonzeroPhase()
Get phase of lowest permutation nonzero amplitude.
Definition: qinterface.hpp:3087
virtual void SetMajorQuadrant(bool q)
Set major vs.
Definition: qinterface.hpp:3040
virtual real1_f VarianceFloatsFactorized(const std::vector< bitLenInt > &bits, const std::vector< real1_f > &weights)
Direct measure of variance of listed bit string probability.
Definition: qinterface.cpp:620
virtual real1_f VarianceBitsFactorizedRdm(bool roundRz, const std::vector< bitLenInt > &bits, const std::vector< bitCapInt > &perms, const bitCapInt &offset=ZERO_BCI)
Get (reduced density matrix) expectation value of bits, given an array of qubit weights.
Definition: qinterface.hpp:2665
virtual real1_f ExpectationUnitaryAll(const std::vector< bitLenInt > &bits, const std::vector< real1_f > &basisOps, std::vector< real1_f > eigenVals={})
Get single-qubit (3-parameter) tensor product (arbitrary real) observable.
Definition: qinterface.hpp:2708
virtual real1_f CProb(bitLenInt control, bitLenInt target)
Direct measure of bit probability to be in |1> state, if control bit is |1>.
Definition: qinterface.hpp:2487
virtual double GetUnitaryFidelity()
When "Schmidt-decomposition rounding parameter" ("SDRP") is being used, starting from initial 1....
Definition: qinterface.hpp:2950
virtual void SetSdrp(real1_f sdrp)
Set the "Schmidt decomposition rounding parameter" value, (between 0 and 1)
Definition: qinterface.hpp:2958
virtual bool TrySeparate(bitLenInt qubit1, bitLenInt qubit2)
Two-qubit TrySeparate()
Definition: qinterface.hpp:2933
virtual bool isClifford()
Returns "true" if current state is identifiably within the Clifford set, or "false" if it is not or c...
Definition: qinterface.hpp:2899
virtual void SetMajorQuadrant(bitLenInt t, bool q)
Set major vs.
Definition: qinterface.hpp:3044
virtual real1_f ProbAll(const bitCapInt &fullRegister)
Direct measure of full permutation probability.
Definition: qinterface.hpp:2538
virtual void ProbMaskAll(const bitCapInt &mask, real1 *probsArray)
Direct measure of masked permutation probability.
Definition: qinterface.cpp:423
virtual bool AreFactorized(std::vector< bitLenInt > a, std::vector< bitLenInt > b, bool flushCache=false)
Check if two vectors of qubit indices are factorized, in internal representation.
Definition: qinterface.hpp:2937
virtual void SetStochastic(bool s)
Toggle probabilistic approximate near-Clifford vs.
Definition: qinterface.hpp:3036
virtual QInterfacePtr Clone()=0
Clone this QInterface.
virtual real1_f ACProb(bitLenInt control, bitLenInt target)
Direct measure of bit probability to be in |1> state, if control bit is |0>.
Definition: qinterface.hpp:2498
virtual real1_f VariancePauliAll(std::vector< bitLenInt > bits, std::vector< Pauli > paulis)
Direct measure of variance of listed Pauli tensor product probability.
Definition: qinterface.cpp:659
virtual void Finish()
If asynchronous work is still running, block until it finishes.
Definition: qinterface.hpp:2875
virtual bool GetReactiveSeparate()
Get reactive separation option.
Definition: qinterface.hpp:2978
virtual QInterfacePtr Copy()
Copy this QInterface.
Definition: qinterface.hpp:3058
virtual real1_f ExpectationBitsAll(const std::vector< bitLenInt > &bits, const bitCapInt &offset=ZERO_BCI)
Get permutation expectation value of bits.
Definition: qinterface.hpp:2677
virtual real1_f Prob(bitLenInt qubit)=0
Direct measure of bit probability to be in |1> state.
virtual std::map< bitCapInt, int > MultiShotMeasureMask(const std::vector< bitCapInt > &qPowers, unsigned shots)
Statistical measure of masked permutation probability.
Definition: qinterface.cpp:807
virtual void SetTInjection(bool useGadget)
Set the option to use T-injection gadgets (off by default)
Definition: qinterface.hpp:2986
virtual real1_f VarianceFloatsFactorizedRdm(bool roundRz, const std::vector< bitLenInt > &bits, const std::vector< real1_f > &weights)
Direct measure of (reduced density matrix) variance of bits, given an array of qubit weights.
Definition: qinterface.hpp:2643
virtual void ResetUnitaryFidelity()
Reset the internal fidelity calculation tracker to 1.0.
Definition: qinterface.hpp:2954
virtual bool TryDecompose(bitLenInt start, QInterfacePtr dest, real1_f error_tol=TRYDECOMPOSE_EPSILON)
Attempt to Decompose() a bit range.
Definition: qinterface.cpp:836
virtual real1_f GetNoiseParameter()
Get the noise level option (only for a noisy interface)
Definition: qinterface.hpp:3020
virtual void SetUseExactNearClifford(bool useExact)
Set the option to use exact-method near-Clifford simulation (on by default)
Definition: qinterface.hpp:3001
virtual void ProbBitsAll(const std::vector< bitLenInt > &bits, real1 *probsArray)
Direct measure of listed permutation probability.
Definition: qinterface.cpp:446
virtual bool GetUseExactNearClifford()
Get the option to use exact-method near-Clifford simulation (on by default)
Definition: qinterface.hpp:3008
virtual real1_f ProbRdm(bitLenInt qubit)
Direct measure of bit probability to be in |1> state, treating all ancillary qubits as post-selected ...
Definition: qinterface.hpp:2762
bitCapIntOcl GetMaxSize()
Get maximum number of amplitudes that can be allocated on current device.
Definition: qinterface.hpp:3082
virtual bool GetTInjection()
Get the option to use T-injection gadgets.
Definition: qinterface.hpp:2994
virtual void SetSparseProbabilityFloor(real1_f p)
Set the sparse-simulation amplitude probability floor, before truncation.
Definition: qinterface.hpp:3032
virtual void SetDeviceList(std::vector< int64_t > dIDs)
Set the device index list, if more than one device is available.
Definition: qinterface.hpp:3072
virtual real1_f ProbMask(const bitCapInt &mask, const bitCapInt &permutation)
Direct measure of masked permutation probability.
Definition: qinterface.cpp:280
virtual real1_f ExpectationPauliAll(std::vector< bitLenInt > bits, std::vector< Pauli > paulis)
Get Pauli tensor product observable.
Definition: qinterface.cpp:715
virtual void SetReactiveSeparate(bool isAggSep)
Set reactive separation option (on by default if available)
Definition: qinterface.hpp:2970
virtual void UpdateRunningNorm(real1_f norm_thresh=REAL1_DEFAULT_ARG)=0
Force a calculation of the norm of the state vector, in order to make it unit length before the next ...
virtual real1_f VarianceBitsAll(const std::vector< bitLenInt > &bits, const bitCapInt &offset=ZERO_BCI)
Direct measure of variance of listed permutation probability.
Definition: qinterface.hpp:2579
virtual void FlipQuadrant(bitLenInt t)
Toggle major vs.
Definition: qinterface.hpp:3048
virtual real1_f ExpectationBitsFactorized(const std::vector< bitLenInt > &bits, const std::vector< bitCapInt > &perms, const bitCapInt &offset=ZERO_BCI)
Get expectation value of bits, given an array of qubit weights.
Definition: qinterface.cpp:542
virtual real1_f ProbMaskRdm(bool roundRz, const bitCapInt &mask, const bitCapInt &permutation)
Direct measure of masked permutation probability, treating all ancillary qubits as post-selected T ga...
Definition: qinterface.hpp:2774
virtual void SetNcrp(real1_f ncrp)
Set the "Near-clifford rounding parameter" value, (between 0 and 1)
Definition: qinterface.hpp:2962
virtual void SetDevice(int64_t dID)
Set the device index, if more than one device is available.
Definition: qinterface.hpp:3063
virtual void DepolarizingChannelWeak1Qb(bitLenInt qubit, real1_f lambda)
Simulate a local qubit depolarizing noise channel, under a stochastic "weak simulation condition....
Definition: gates.cpp:487
virtual bool isOpenCL()
Returns "true" if current simulation is OpenCL-based.
Definition: qinterface.hpp:2910
virtual real1_f ExpectationFloatsFactorized(const std::vector< bitLenInt > &bits, const std::vector< real1_f > &weights)
Get expectation value of bits, given a (floating-point) array of qubit weights.
Definition: qinterface.cpp:771
virtual real1_f ProbReg(bitLenInt start, bitLenInt length, const bitCapInt &permutation)
Direct measure of register permutation probability.
Definition: qinterface.cpp:264
virtual int64_t GetDevice()
Get the device index.
Definition: qinterface.hpp:3068
virtual bool TrySeparate(const std::vector< bitLenInt > &qubits, real1_f error_tol)
Qrack::QUnit types maintain explicit separation of representations of qubits, which reduces memory us...
Definition: qinterface.hpp:2925
virtual void SetAceMaxQubits(bitLenInt qb)
Set the "automatic circuit elision" (ACE) maximum entangled subsystem qubit count.
Definition: qinterface.hpp:3024
virtual real1_f SumSqrDiff(QInterfacePtr toCompare)=0
Calculates (1 - <\psi_e|\psi_c>) between states |\psi_c> and |\psi_e>.
virtual void SetBit(bitLenInt qubit, bool value)
Set individual bit to pure |0> (false) or |1> (true) state.
Definition: qinterface.hpp:2821
virtual real1_f ExpectationBitsAllRdm(bool roundRz, const std::vector< bitLenInt > &bits, const bitCapInt &offset=ZERO_BCI)
Get permutation expectation value of bits, treating all ancillary qubits as post-selected T gate gadg...
Definition: qinterface.hpp:2784
virtual void NormalizeState(real1_f nrm=REAL1_DEFAULT_ARG, real1_f norm_thresh=REAL1_DEFAULT_ARG, real1_f phaseArg=ZERO_R1_F)=0
Apply the normalization factor found by UpdateRunningNorm() or on the fly by a single bit gate.
virtual real1_f ExpectationFloatsFactorizedRdm(bool roundRz, const std::vector< bitLenInt > &bits, const std::vector< real1_f > &weights)
Get (reduced density matrix) expectation value of bits, given a (floating-point) array of qubit weigh...
Definition: qinterface.hpp:2752
virtual real1_f VarianceBitsAllRdm(bool roundRz, const std::vector< bitLenInt > &bits, const bitCapInt &offset=ZERO_BCI)
Direct measure of (reduced density matrix) variance of listed permutation probability.
Definition: qinterface.hpp:2590
virtual bitCapInt HighestProbAll()
Get highest probability permutation.
Definition: qinterface.hpp:2510
virtual real1_f ExpectationUnitaryAll(const std::vector< bitLenInt > &bits, const std::vector< std::shared_ptr< complex >> &basisOps, std::vector< real1_f > eigenVals={})
Get single-qubit tensor product (arbitrary real) observable.
Definition: qinterface.hpp:2696
virtual bool TrySeparate(bitLenInt qubit)
Single-qubit TrySeparate()
Definition: qinterface.hpp:2929
virtual void SetNoiseParameter(real1_f lambda)
Set the noise level option (only for a noisy interface)
Definition: qinterface.hpp:3014
virtual bool isFinished()
Returns "false" if asynchronous work is still running, and "true" if all previously dispatched asynch...
Definition: qinterface.hpp:2881
GLOSSARY: bitLenInt - "bit-length integer" - unsigned integer ID of qubit position in register bitCap...
Definition: complex16x2simd.hpp:25
bitCapInt bitRegMask(const bitLenInt &start, const bitLenInt &length)
Definition: qrack_functions.hpp:170
QRACK_CONST real1 SQRT1_2_R1
Definition: qrack_types.hpp:182
QInterfaceEngine
Enumerated list of supported engines.
Definition: qinterface.hpp:37
@ QINTERFACE_OPTIMAL_BASE
Definition: qinterface.hpp:124
@ QINTERFACE_QPAGER
Create a QPager, which breaks up the work of a QEngine into equally sized "pages.".
Definition: qinterface.hpp:82
@ QINTERFACE_OPTIMAL_SCHROEDINGER
Definition: qinterface.hpp:122
@ QINTERFACE_OPTIMAL_MULTI
Definition: qinterface.hpp:129
@ QINTERFACE_CUDA
Create a QEngineCUDA, leveraging CUDA hardware to increase the speed of certain calculations.
Definition: qinterface.hpp:52
@ QINTERFACE_STABILIZER_HYBRID
Create a QStabilizerHybrid, switching between a QStabilizer and a QHybrid as efficient.
Definition: qinterface.hpp:77
@ QINTERFACE_HYBRID
Create a QHybrid, switching between QEngineCPU and QEngineOCL as efficient.
Definition: qinterface.hpp:57
@ QINTERFACE_OPTIMAL
Definition: qinterface.hpp:127
@ QINTERFACE_BDT_HYBRID
Create a QBinaryDecisionTree, (CPU-based).
Definition: qinterface.hpp:67
@ QINTERFACE_BDT
Create a QBinaryDecisionTree, (CPU-based).
Definition: qinterface.hpp:62
@ QINTERFACE_TENSOR_NETWORK
Circuit-simplification layer.
Definition: qinterface.hpp:107
@ QINTERFACE_NOISY
Noisy wrapper layer.
Definition: qinterface.hpp:112
@ QINTERFACE_QUNIT_CLIFFORD
Clifford-specialized QUnit.
Definition: qinterface.hpp:102
@ QINTERFACE_OPENCL
Create a QEngineOCL, leveraging OpenCL hardware to increase the speed of certain calculations.
Definition: qinterface.hpp:47
@ QINTERFACE_STABILIZER
Create a QStabilizer, limited to Clifford/Pauli operations, but efficient.
Definition: qinterface.hpp:72
@ QINTERFACE_QUNIT
Create a QUnit, which utilizes other QInterface classes to minimize the amount of work that's needed ...
Definition: qinterface.hpp:91
@ QINTERFACE_QUNIT_MULTI
Create a QUnitMulti, which distributes the explicitly separated "shards" of a QUnit across available ...
Definition: qinterface.hpp:97
@ QINTERFACE_MAX
Definition: qinterface.hpp:131
@ QINTERFACE_CPU
Create a QEngineCPU leveraging only local CPU and memory resources.
Definition: qinterface.hpp:42
std::shared_ptr< QInterface > QInterfacePtr
Definition: qinterface.hpp:29
QRACK_CONST real1 SQRT2_R1
Definition: qrack_types.hpp:181
QRACK_CONST real1_f TRYDECOMPOSE_EPSILON
Definition: qrack_types.hpp:265
QRACK_CONST complex C_SQRT1_2_NEG
Definition: gates.cpp:21
void seed(quid sid, unsigned s)
"Seed" random number generator (if pseudo-random Mersenne twister is in use)
Definition: wasm_api.cpp:873
half_float::half real1
Definition: qrack_types.hpp:106
std::complex< real1 > complex
Definition: qrack_types.hpp:140
QRACK_CONST real1 FP_NORM_EPSILON
Definition: qrack_types.hpp:263
bitCapInt pow2(const bitLenInt &p)
Definition: qrack_functions.hpp:156
double norm(const complex2 &c)
Definition: complex16x2simd.hpp:122
QRACK_CONST real1 REAL1_EPSILON
Definition: qrack_types.hpp:203
QRACK_CONST complex ONE_CMPLX
Definition: qrack_types.hpp:257
QRACK_CONST real1 ONE_R1
Definition: qrack_types.hpp:188
std::vector< HamiltonianOpPtr > Hamiltonian
Definition: hamiltonian.hpp:122
QRACK_CONST real1 ZERO_R1
Definition: qrack_types.hpp:186
float real1_f
Definition: qrack_types.hpp:107
QRACK_CONST complex CMPLX_DEFAULT_ARG
Definition: qrack_types.hpp:262
QRACK_CONST complex I_CMPLX
Definition: qrack_types.hpp:259
QRACK_CONST complex C_SQRT1_2
Definition: gates.cpp:17
QRACK_CONST complex ZERO_CMPLX
Definition: qrack_types.hpp:258
QRACK_CONST real1 PI_R1
Definition: qrack_types.hpp:180
const bitCapInt ONE_BCI
Definition: qrack_types.hpp:141
const bitCapInt ZERO_BCI
Definition: qrack_types.hpp:142
bitCapIntOcl pow2Ocl(const bitLenInt &p)
Definition: qrack_functions.hpp:157
unsigned int gamma(unsigned int arg)
Gamma function and postprocessing.
Definition: half.hpp:2101
HALF_CONSTEXPR half abs(half arg)
Absolute value.
Definition: half.hpp:2958
half sin(half arg)
Sine function.
Definition: half.hpp:3868
half cos(half arg)
Cosine function.
Definition: half.hpp:3905
half pow(half x, half y)
Power function.
Definition: half.hpp:3721
half exp(half arg)
Exponential function.
Definition: half.hpp:3184
#define REAL1_DEFAULT_ARG
Definition: qrack_types.hpp:179
#define QRACK_CONST
Definition: qrack_types.hpp:176
#define bitLenInt
Definition: qrack_types.hpp:41
#define ZERO_R1_F
Definition: qrack_types.hpp:162
#define qrack_rand_gen_ptr
Definition: qrack_types.hpp:158
#define bitCapInt
Definition: qrack_types.hpp:65
#define bitCapIntOcl
Definition: qrack_types.hpp:53
#define ONE_R1_F
Definition: qrack_types.hpp:165
#define IS_NORM_0(c)
Definition: qrack_types.hpp:28
#define C_I_SQRT1_2
Definition: qunitclifford.cpp:412