Qrack
7.0
General classical-emulating-quantum development framework
|
Abstract QEngine implementation, for all "Schroedinger method" engines. More...
#include <qengine.hpp>
Public Member Functions | |
QEngine (bitLenInt qBitCount, qrack_rand_gen_ptr rgp=nullptr, bool doNorm=false, bool randomGlobalPhase=true, bool useHostMem=false, bool useHardwareRNG=true, real1_f norm_thresh=REAL1_EPSILON) | |
QEngine () | |
Default constructor, primarily for protected internal use. More... | |
virtual void | SetQubitCount (bitLenInt qb) |
virtual real1_f | GetRunningNorm () |
Get in-flight renormalization factor. More... | |
virtual void | ZeroAmplitudes ()=0 |
Set all amplitudes to 0, and optionally temporarily deallocate state vector RAM. More... | |
virtual void | CopyStateVec (QEnginePtr src)=0 |
Exactly copy the state vector of a different QEngine instance. More... | |
virtual bool | IsZeroAmplitude ()=0 |
Returns "true" only if amplitudes are all totally 0. More... | |
virtual void | GetAmplitudePage (complex *pagePtr, bitCapIntOcl offset, bitCapIntOcl length)=0 |
Copy a "page" of amplitudes from this QEngine's internal state, into pagePtr . More... | |
virtual void | SetAmplitudePage (const complex *pagePtr, bitCapIntOcl offset, bitCapIntOcl length)=0 |
Copy a "page" of amplitudes from pagePtr into this QEngine's internal state. More... | |
virtual void | SetAmplitudePage (QEnginePtr pageEnginePtr, bitCapIntOcl srcOffset, bitCapIntOcl dstOffset, bitCapIntOcl length)=0 |
Copy a "page" of amplitudes from another QEngine, pointed to by pageEnginePtr , into this QEngine's internal state. More... | |
virtual void | ShuffleBuffers (QEnginePtr engine)=0 |
Swap the high half of this engine with the low half of another. More... | |
virtual QEnginePtr | CloneEmpty ()=0 |
Clone this QEngine's settings, with a zeroed state vector. More... | |
virtual void | QueueSetDoNormalize (bool doNorm)=0 |
Add an operation to the (OpenCL) queue, to set the value of doNormalize , which controls whether to automatically normalize the state. More... | |
virtual void | QueueSetRunningNorm (real1_f runningNrm)=0 |
Add an operation to the (OpenCL) queue, to set the value of runningNorm , which is the normalization constant for the next normalization operation. More... | |
virtual void | ZMask (bitCapInt mask) |
Masked Z gate. More... | |
virtual bool | ForceM (bitLenInt qubitIndex, bool result, bool doForce=true, bool doApply=true) |
PSEUDO-QUANTUM - Acts like a measurement gate, except with a specified forced result. More... | |
virtual bitCapInt | ForceM (const bitLenInt *bits, bitLenInt length, const bool *values, bool doApply=true) |
Measure permutation state of a register. More... | |
virtual bitCapInt | ForceMReg (bitLenInt start, bitLenInt length, bitCapInt result, bool doForce=true, bool doApply=true) |
Measure permutation state of a register. More... | |
virtual void | ApplyM (bitCapInt qPower, bool result, complex nrm) |
virtual void | ApplyM (bitCapInt regMask, bitCapInt result, complex nrm)=0 |
virtual void | Mtrx (const complex *mtrx, bitLenInt qubit) |
Apply an arbitrary single bit unitary transformation. More... | |
virtual void | MCMtrx (const bitLenInt *controls, bitLenInt controlLen, const complex *mtrx, bitLenInt target) |
Apply an arbitrary single bit unitary transformation, with arbitrary control bits. More... | |
virtual void | MACMtrx (const bitLenInt *controls, bitLenInt controlLen, const complex *mtrx, bitLenInt target) |
Apply an arbitrary single bit unitary transformation, with arbitrary (anti-)control bits. More... | |
virtual void | CSwap (const bitLenInt *controls, bitLenInt controlLen, bitLenInt qubit1, bitLenInt qubit2) |
Apply a swap with arbitrary control bits. More... | |
virtual void | AntiCSwap (const bitLenInt *controls, bitLenInt controlLen, bitLenInt qubit1, bitLenInt qubit2) |
Apply a swap with arbitrary (anti) control bits. More... | |
virtual void | CSqrtSwap (const bitLenInt *controls, bitLenInt controlLen, bitLenInt qubit1, bitLenInt qubit2) |
Apply a square root of swap with arbitrary control bits. More... | |
virtual void | AntiCSqrtSwap (const bitLenInt *controls, bitLenInt controlLen, bitLenInt qubit1, bitLenInt qubit2) |
Apply a square root of swap with arbitrary (anti) control bits. More... | |
virtual void | CISqrtSwap (const bitLenInt *controls, bitLenInt controlLen, bitLenInt qubit1, bitLenInt qubit2) |
Apply an inverse square root of swap with arbitrary control bits. More... | |
virtual void | AntiCISqrtSwap (const bitLenInt *controls, bitLenInt controlLen, bitLenInt qubit1, bitLenInt qubit2) |
Apply an inverse square root of swap with arbitrary (anti) control bits. More... | |
virtual bool | M (bitLenInt q) |
virtual void | X (bitLenInt q) |
virtual void | INC (bitCapInt toAdd, bitLenInt start, bitLenInt length) |
Add integer (without sign) More... | |
virtual void | DEC (bitCapInt toSub, bitLenInt start, bitLenInt length) |
Add integer (without sign) More... | |
virtual void | INCC (bitCapInt toAdd, bitLenInt start, bitLenInt length, bitLenInt carryIndex) |
Add integer (without sign, with carry) More... | |
virtual void | DECC (bitCapInt toSub, bitLenInt start, bitLenInt length, bitLenInt carryIndex) |
Subtract classical integer (without sign, with carry) More... | |
virtual void | INCS (bitCapInt toAdd, bitLenInt start, bitLenInt length, bitLenInt overflowIndex) |
Add a classical integer to the register, with sign and without carry. More... | |
virtual void | DECS (bitCapInt toSub, bitLenInt start, bitLenInt length, bitLenInt overflowIndex) |
Add a classical integer to the register, with sign and without carry. More... | |
virtual void | CINC (bitCapInt toAdd, bitLenInt inOutStart, bitLenInt length, const bitLenInt *controls, bitLenInt controlLen) |
Add integer (without sign, with controls) More... | |
virtual void | CDEC (bitCapInt toSub, bitLenInt inOutStart, bitLenInt length, const bitLenInt *controls, bitLenInt controlLen) |
Subtract integer (without sign, with controls) More... | |
virtual void | INCDECC (bitCapInt toAdd, bitLenInt start, bitLenInt length, bitLenInt carryIndex) |
Common driver method behind INCC and DECC (without sign, with carry) More... | |
virtual void | Swap (bitLenInt qubit1, bitLenInt qubit2) |
Swap values of two bits in register. More... | |
virtual void | ISwap (bitLenInt qubit1, bitLenInt qubit2) |
Swap values of two bits in register, applying a phase factor of i if bits are different. More... | |
virtual void | SqrtSwap (bitLenInt qubit1, bitLenInt qubit2) |
Square root of swap gate. More... | |
virtual void | ISqrtSwap (bitLenInt qubit1, bitLenInt qubit2) |
Inverse of square root of swap gate. More... | |
virtual void | FSim (real1_f theta, real1_f phi, bitLenInt qubitIndex1, bitLenInt qubitIndex2) |
"fSim" gate, (useful in the simulation of particles with fermionic statistics) More... | |
virtual real1_f | ProbAll (bitCapInt fullRegister) |
PSEUDO-QUANTUM Direct measure of full register probability to be in permutation state. More... | |
virtual real1_f | ProbReg (bitLenInt start, bitLenInt length, bitCapInt permutation)=0 |
Direct measure of register permutation probability. More... | |
virtual void | ProbRegAll (bitLenInt start, bitLenInt length, real1 *probsArray) |
virtual real1_f | ProbMask (bitCapInt mask, bitCapInt permutation)=0 |
Direct measure of masked permutation probability. More... | |
virtual real1_f | GetExpectation (bitLenInt valueStart, bitLenInt valueLength)=0 |
virtual void | Apply2x2 (bitCapIntOcl offset1, bitCapIntOcl offset2, const complex *mtrx, bitLenInt bitCount, const bitCapIntOcl *qPowersSorted, bool doCalcNorm, real1_f norm_thresh=REAL1_DEFAULT_ARG)=0 |
virtual void | ApplyControlled2x2 (const bitLenInt *controls, bitLenInt controlLen, bitLenInt target, const complex *mtrx) |
virtual void | ApplyAntiControlled2x2 (const bitLenInt *controls, bitLenInt controlLen, bitLenInt target, const complex *mtrx) |
virtual QInterfacePtr | Decompose (bitLenInt start, bitLenInt length) |
Schmidt decompose a length of qubits. More... | |
virtual void | FreeStateVec (complex *sv=NULL)=0 |
![]() | |
virtual void | PhaseFlipIfLess (bitCapInt greaterPerm, bitLenInt start, bitLenInt length)=0 |
This is an expedient for an adaptive Grover's search for a function's global minimum. More... | |
virtual void | CPhaseFlipIfLess (bitCapInt greaterPerm, bitLenInt start, bitLenInt length, bitLenInt flagIndex)=0 |
The 6502 uses its carry flag also as a greater-than/less-than flag, for the CMP operation. More... | |
virtual void | INCSC (bitCapInt toAdd, bitLenInt start, bitLenInt length, bitLenInt overflowIndex, bitLenInt carryIndex) |
Add a classical integer to the register, with sign and with carry. More... | |
virtual void | INCSC (bitCapInt toAdd, bitLenInt start, bitLenInt length, bitLenInt carryIndex) |
Add a classical integer to the register, with sign and with (phase-based) carry. More... | |
virtual void | DECSC (bitCapInt toSub, bitLenInt start, bitLenInt length, bitLenInt overflowIndex, bitLenInt carryIndex) |
Subtract a classical integer from the register, with sign and with carry. More... | |
virtual void | DECSC (bitCapInt toSub, bitLenInt start, bitLenInt length, bitLenInt carryIndex) |
Subtract a classical integer from the register, with sign and with carry. More... | |
virtual void | INCDECSC (bitCapInt toMod, bitLenInt start, bitLenInt length, bitLenInt carryIndex)=0 |
Common driver method behind INCSC and DECSC (without overflow flag) More... | |
virtual void | INCDECSC (bitCapInt toMod, bitLenInt start, bitLenInt length, bitLenInt overflowIndex, bitLenInt carryIndex)=0 |
Common driver method behind INCSC and DECSC (with overflow flag) More... | |
virtual void | MUL (bitCapInt toMul, bitLenInt start, bitLenInt carryStart, bitLenInt length)=0 |
Multiply by integer. More... | |
virtual void | DIV (bitCapInt toDiv, bitLenInt start, bitLenInt carryStart, bitLenInt length)=0 |
Divide by integer. More... | |
virtual void | MULModNOut (bitCapInt toMul, bitCapInt modN, bitLenInt inStart, bitLenInt outStart, bitLenInt length)=0 |
Multiplication modulo N by integer, (out of place) More... | |
virtual void | IMULModNOut (bitCapInt toMul, bitCapInt modN, bitLenInt inStart, bitLenInt outStart, bitLenInt length)=0 |
Inverse of multiplication modulo N by integer, (out of place) More... | |
virtual void | POWModNOut (bitCapInt base, bitCapInt modN, bitLenInt inStart, bitLenInt outStart, bitLenInt length)=0 |
Raise a classical base to a quantum power, modulo N, (out of place) More... | |
virtual void | CMUL (bitCapInt toMul, bitLenInt start, bitLenInt carryStart, bitLenInt length, const bitLenInt *controls, bitLenInt controlLen)=0 |
Controlled multiplication by integer. More... | |
virtual void | CDIV (bitCapInt toDiv, bitLenInt start, bitLenInt carryStart, bitLenInt length, const bitLenInt *controls, bitLenInt controlLen)=0 |
Controlled division by power of integer. More... | |
virtual void | CMULModNOut (bitCapInt toMul, bitCapInt modN, bitLenInt inStart, bitLenInt outStart, bitLenInt length, const bitLenInt *controls, bitLenInt controlLen)=0 |
Controlled multiplication modulo N by integer, (out of place) More... | |
virtual void | CIMULModNOut (bitCapInt toMul, bitCapInt modN, bitLenInt inStart, bitLenInt outStart, bitLenInt length, const bitLenInt *controls, bitLenInt controlLen)=0 |
Inverse of controlled multiplication modulo N by integer, (out of place) More... | |
virtual void | CPOWModNOut (bitCapInt base, bitCapInt modN, bitLenInt inStart, bitLenInt outStart, bitLenInt length, const bitLenInt *controls, bitLenInt controlLen)=0 |
Controlled, raise a classical base to a quantum power, modulo N, (out of place) More... | |
virtual void | INCBCD (bitCapInt toAdd, bitLenInt start, bitLenInt length)=0 |
Add classical BCD integer (without sign) More... | |
virtual void | DECBCD (bitCapInt toSub, bitLenInt start, bitLenInt length) |
Subtract classical BCD integer (without sign) More... | |
virtual void | INCDECBCDC (bitCapInt toMod, bitLenInt start, bitLenInt length, bitLenInt carryIndex)=0 |
Common driver method behind INCSC and DECSC (without overflow flag) More... | |
virtual bitCapInt | IndexedLDA (bitLenInt indexStart, bitLenInt indexLength, bitLenInt valueStart, bitLenInt valueLength, const unsigned char *values, bool resetValue=true)=0 |
Set 8 bit register bits by a superposed index-offset-based read from classical memory. More... | |
virtual bitCapInt | IndexedADC (bitLenInt indexStart, bitLenInt indexLength, bitLenInt valueStart, bitLenInt valueLength, bitLenInt carryIndex, const unsigned char *values)=0 |
Add to entangled 8 bit register state with a superposed index-offset-based read from classical memory. More... | |
virtual bitCapInt | IndexedSBC (bitLenInt indexStart, bitLenInt indexLength, bitLenInt valueStart, bitLenInt valueLength, bitLenInt carryIndex, const unsigned char *values)=0 |
Subtract from an entangled 8 bit register state with a superposed index-offset-based read from classical memory. More... | |
virtual void | Hash (bitLenInt start, bitLenInt length, const unsigned char *values)=0 |
Transform a length of qubit register via lookup through a hash table. More... | |
virtual void | INCBCDC (bitCapInt toAdd, bitLenInt start, bitLenInt length, bitLenInt carryIndex) |
Add classical BCD integer (without sign, with carry) More... | |
virtual void | DECBCDC (bitCapInt toSub, bitLenInt start, bitLenInt length, bitLenInt carryIndex) |
Subtract BCD integer (without sign, with carry) More... | |
![]() | |
virtual bool | MParity (bitCapInt mask) |
Measure (and collapse) parity of the masked set of qubits. More... | |
virtual void | UniformParityRZ (bitCapInt mask, real1_f angle) |
If the target qubit set parity is odd, this applies a phase factor of \(e^{i angle}\). More... | |
virtual real1_f | ProbParity (bitCapInt mask)=0 |
Overall probability of any odd permutation of the masked set of bits. More... | |
virtual bool | ForceMParity (bitCapInt mask, bool result, bool doForce=true)=0 |
Act as if is a measurement of parity of the masked set of qubits was applied, except force the (usually random) result. More... | |
virtual void | CUniformParityRZ (const bitLenInt *controls, bitLenInt controlLen, bitCapInt mask, real1_f angle)=0 |
If the controls are set and the target qubit set parity is odd, this applies a phase factor of \(e^{i angle}\). More... | |
![]() | |
QInterface (bitLenInt n, qrack_rand_gen_ptr rgp=nullptr, bool doNorm=false, bool useHardwareRNG=true, bool randomGlobalPhase=true, real1_f norm_thresh=REAL1_EPSILON) | |
QInterface () | |
Default constructor, primarily for protected internal use. More... | |
virtual | ~QInterface () |
void | SetRandomSeed (uint32_t seed) |
virtual void | SetConcurrency (uint32_t threadsPerEngine) |
Set the number of threads in parallel for loops, per component QEngine. More... | |
virtual bitLenInt | GetQubitCount () |
Get the count of bits in this register. More... | |
virtual bitCapInt | GetMaxQPower () |
Get the maximum number of basis states, namely \( 2^n \) for \( n \) qubits. More... | |
virtual bool | GetIsArbitraryGlobalPhase () |
real1_f | Rand () |
Generate a random real number between 0 and 1. More... | |
virtual void | SetQuantumState (const complex *inputState)=0 |
Set an arbitrary pure quantum state representation. More... | |
virtual void | GetQuantumState (complex *outputState)=0 |
Get the pure quantum state representation. More... | |
virtual void | GetProbs (real1 *outputProbs)=0 |
Get the pure quantum state representation. More... | |
virtual complex | GetAmplitude (bitCapInt perm)=0 |
Get the representational amplitude of a full permutation. More... | |
virtual void | SetAmplitude (bitCapInt perm, complex amp)=0 |
Sets the representational amplitude of a full permutation. More... | |
virtual void | SetPermutation (bitCapInt perm, complex phaseFac=CMPLX_DEFAULT_ARG) |
Set to a specific permutation of all qubits. More... | |
virtual bitLenInt | Compose (QInterfacePtr toCopy) |
Combine another QInterface with this one, after the last bit index of this one. More... | |
virtual std::map< QInterfacePtr, bitLenInt > | Compose (std::vector< QInterfacePtr > toCopy) |
virtual bitLenInt | Compose (QInterfacePtr toCopy, bitLenInt start) |
virtual void | Decompose (bitLenInt start, QInterfacePtr dest)=0 |
Minimally decompose a set of contiguous bits from the separably composed unit, into "destination". More... | |
virtual void | Dispose (bitLenInt start, bitLenInt length)=0 |
Minimally decompose a set of contiguous bits from the separably composed unit, and discard the separable bits from index "start" for "length.". More... | |
virtual void | Dispose (bitLenInt start, bitLenInt length, bitCapInt disposedPerm)=0 |
Dispose a a contiguous set of qubits that are already in a permutation eigenstate. More... | |
virtual void | Phase (const complex topLeft, const complex bottomRight, bitLenInt qubitIndex) |
Apply a single bit transformation that only effects phase. More... | |
virtual void | Invert (const complex topRight, const complex bottomLeft, bitLenInt qubitIndex) |
Apply a single bit transformation that reverses bit probability and might effect phase. More... | |
virtual void | MCPhase (const bitLenInt *controls, bitLenInt controlLen, complex topLeft, complex bottomRight, bitLenInt target) |
Apply a single bit transformation that only effects phase, with arbitrary control bits. More... | |
virtual void | MCInvert (const bitLenInt *controls, bitLenInt controlLen, complex topRight, complex bottomLeft, bitLenInt target) |
Apply a single bit transformation that reverses bit probability and might effect phase, with arbitrary control bits. More... | |
virtual void | MACPhase (const bitLenInt *controls, bitLenInt controlLen, complex topLeft, complex bottomRight, bitLenInt target) |
Apply a single bit transformation that only effects phase, with arbitrary (anti-)control bits. More... | |
virtual void | MACInvert (const bitLenInt *controls, bitLenInt controlLen, complex topRight, complex bottomLeft, bitLenInt target) |
Apply a single bit transformation that reverses bit probability and might effect phase, with arbitrary (anti-)control bits. More... | |
virtual void | UniformlyControlledSingleBit (const bitLenInt *controls, bitLenInt controlLen, bitLenInt qubitIndex, const complex *mtrxs) |
Apply a "uniformly controlled" arbitrary single bit unitary transformation. More... | |
virtual void | UniformlyControlledSingleBit (const bitLenInt *controls, bitLenInt controlLen, bitLenInt qubitIndex, const complex *mtrxs, const bitCapInt *mtrxSkipPowers, bitLenInt mtrxSkipLen, bitCapInt mtrxSkipValueMask) |
virtual void | TimeEvolve (Hamiltonian h, real1_f timeDiff) |
To define a Hamiltonian, give a vector of controlled single bit gates ("HamiltonianOp" instances) that are applied by left-multiplication in low-to-high vector index order on the state vector. More... | |
virtual void | CCNOT (bitLenInt control1, bitLenInt control2, bitLenInt target) |
Doubly-controlled NOT gate. More... | |
virtual void | AntiCCNOT (bitLenInt control1, bitLenInt control2, bitLenInt target) |
Anti doubly-controlled NOT gate. More... | |
virtual void | CNOT (bitLenInt control, bitLenInt target) |
Controlled NOT gate. More... | |
virtual void | AntiCNOT (bitLenInt control, bitLenInt target) |
Anti controlled NOT gate. More... | |
virtual void | CY (bitLenInt control, bitLenInt target) |
Controlled Y gate. More... | |
virtual void | AntiCY (bitLenInt control, bitLenInt target) |
Anti controlled Y gate. More... | |
virtual void | CCY (bitLenInt control1, bitLenInt control2, bitLenInt target) |
Doubly-Controlled Y gate. More... | |
virtual void | AntiCCY (bitLenInt control1, bitLenInt control2, bitLenInt target) |
Anti doubly-controlled Y gate. More... | |
virtual void | CZ (bitLenInt control, bitLenInt target) |
Controlled Z gate. More... | |
virtual void | AntiCZ (bitLenInt control, bitLenInt target) |
Anti controlled Z gate. More... | |
virtual void | CCZ (bitLenInt control1, bitLenInt control2, bitLenInt target) |
Doubly-Controlled Z gate. More... | |
virtual void | AntiCCZ (bitLenInt control1, bitLenInt control2, bitLenInt target) |
Anti doubly-controlled Z gate. More... | |
virtual void | U (bitLenInt target, real1_f theta, real1_f phi, real1_f lambda) |
General unitary gate. More... | |
virtual void | U2 (bitLenInt target, real1_f phi, real1_f lambda) |
2-parameter unitary gate More... | |
virtual void | IU2 (bitLenInt target, real1_f phi, real1_f lambda) |
Inverse 2-parameter unitary gate. More... | |
virtual void | AI (bitLenInt target, real1_f azimuth, real1_f inclination) |
"Azimuth, Inclination" (RY-RZ) More... | |
virtual void | IAI (bitLenInt target, real1_f azimuth, real1_f inclination) |
Invert "Azimuth, Inclination" (RY-RZ) More... | |
virtual void | CU (const bitLenInt *controls, bitLenInt controlLen, bitLenInt target, real1_f theta, real1_f phi, real1_f lambda) |
Controlled general unitary gate. More... | |
virtual void | AntiCU (const bitLenInt *controls, bitLenInt controlLen, bitLenInt target, real1_f theta, real1_f phi, real1_f lambda) |
(Anti-)Controlled general unitary gate More... | |
virtual void | H (bitLenInt qubitIndex) |
Hadamard gate. More... | |
virtual void | SqrtH (bitLenInt qubitIndex) |
Square root of Hadamard gate. More... | |
virtual void | SH (bitLenInt qubitIndex) |
Y-basis transformation gate. More... | |
virtual void | HIS (bitLenInt qubitIndex) |
Y-basis (inverse) transformation gate. More... | |
virtual void | S (bitLenInt qubitIndex) |
S gate. More... | |
virtual void | IS (bitLenInt qubitIndex) |
Inverse S gate. More... | |
virtual void | T (bitLenInt qubitIndex) |
T gate. More... | |
virtual void | IT (bitLenInt qubitIndex) |
Inverse T gate. More... | |
virtual void | PhaseRootN (bitLenInt n, bitLenInt qubitIndex) |
"PhaseRootN" gate More... | |
virtual void | IPhaseRootN (bitLenInt n, bitLenInt qubitIndex) |
Inverse "PhaseRootN" gate. More... | |
virtual void | PhaseParity (real1_f radians, bitCapInt mask) |
Parity phase gate. More... | |
virtual void | XMask (bitCapInt mask) |
Masked X gate. More... | |
virtual void | Y (bitLenInt qubitIndex) |
Y gate. More... | |
virtual void | YMask (bitCapInt mask) |
Masked Y gate. More... | |
virtual void | Z (bitLenInt qubitIndex) |
Z gate. More... | |
virtual void | SqrtX (bitLenInt qubitIndex) |
Square root of X gate. More... | |
virtual void | ISqrtX (bitLenInt qubitIndex) |
Inverse square root of X gate. More... | |
virtual void | SqrtXConjT (bitLenInt qubitIndex) |
Phased square root of X gate. More... | |
virtual void | ISqrtXConjT (bitLenInt qubitIndex) |
Inverse phased square root of X gate. More... | |
virtual void | SqrtY (bitLenInt qubitIndex) |
Square root of Y gate. More... | |
virtual void | ISqrtY (bitLenInt qubitIndex) |
Square root of Y gate. More... | |
virtual void | CH (bitLenInt control, bitLenInt target) |
Controlled H gate. More... | |
virtual void | AntiCH (bitLenInt control, bitLenInt target) |
(Anti-)controlled H gate More... | |
virtual void | CS (bitLenInt control, bitLenInt target) |
Controlled S gate. More... | |
virtual void | AntiCS (bitLenInt control, bitLenInt target) |
(Anti-)controlled S gate More... | |
virtual void | CIS (bitLenInt control, bitLenInt target) |
Controlled inverse S gate. More... | |
virtual void | AntiCIS (bitLenInt control, bitLenInt target) |
(Anti-)controlled inverse S gate More... | |
virtual void | CT (bitLenInt control, bitLenInt target) |
Controlled T gate. More... | |
virtual void | CIT (bitLenInt control, bitLenInt target) |
Controlled inverse T gate. More... | |
virtual void | CPhaseRootN (bitLenInt n, bitLenInt control, bitLenInt target) |
Controlled "PhaseRootN" gate. More... | |
virtual void | AntiCPhaseRootN (bitLenInt n, bitLenInt control, bitLenInt target) |
(Anti-)controlled "PhaseRootN" gate More... | |
virtual void | CIPhaseRootN (bitLenInt n, bitLenInt control, bitLenInt target) |
Controlled inverse "PhaseRootN" gate. More... | |
virtual void | AntiCIPhaseRootN (bitLenInt n, bitLenInt control, bitLenInt target) |
(Anti-)controlled inverse "PhaseRootN" gate More... | |
virtual void | AND (bitLenInt inputBit1, bitLenInt inputBit2, bitLenInt outputBit) |
Quantum analog of classical "AND" gate. More... | |
virtual void | OR (bitLenInt inputBit1, bitLenInt inputBit2, bitLenInt outputBit) |
Quantum analog of classical "OR" gate. More... | |
virtual void | XOR (bitLenInt inputBit1, bitLenInt inputBit2, bitLenInt outputBit) |
Quantum analog of classical "XOR" gate. More... | |
virtual void | CLAND (bitLenInt inputQBit, bool inputClassicalBit, bitLenInt outputBit) |
Quantum analog of classical "AND" gate. More... | |
virtual void | CLOR (bitLenInt inputQBit, bool inputClassicalBit, bitLenInt outputBit) |
Quantum analog of classical "OR" gate. More... | |
virtual void | CLXOR (bitLenInt inputQBit, bool inputClassicalBit, bitLenInt outputBit) |
Quantum analog of classical "XOR" gate. More... | |
virtual void | NAND (bitLenInt inputBit1, bitLenInt inputBit2, bitLenInt outputBit) |
Quantum analog of classical "NAND" gate. More... | |
virtual void | NOR (bitLenInt inputBit1, bitLenInt inputBit2, bitLenInt outputBit) |
Quantum analog of classical "NOR" gate. More... | |
virtual void | XNOR (bitLenInt inputBit1, bitLenInt inputBit2, bitLenInt outputBit) |
Quantum analog of classical "XNOR" gate. More... | |
virtual void | CLNAND (bitLenInt inputQBit, bool inputClassicalBit, bitLenInt outputBit) |
Quantum analog of classical "NAND" gate. More... | |
virtual void | CLNOR (bitLenInt inputQBit, bool inputClassicalBit, bitLenInt outputBit) |
Quantum analog of classical "NOR" gate. More... | |
virtual void | CLXNOR (bitLenInt inputQBit, bool inputClassicalBit, bitLenInt outputBit) |
Quantum analog of classical "XNOR" gate. More... | |
virtual void | UniformlyControlledRY (const bitLenInt *controls, bitLenInt controlLen, bitLenInt qubitIndex, const real1 *angles) |
Apply a "uniformly controlled" rotation of a bit around the Pauli Y axis. More... | |
virtual void | UniformlyControlledRZ (const bitLenInt *controls, bitLenInt controlLen, bitLenInt qubitIndex, const real1 *angles) |
Apply a "uniformly controlled" rotation of a bit around the Pauli Z axis. More... | |
virtual void | RT (real1_f radians, bitLenInt qubitIndex) |
Phase shift gate. More... | |
virtual void | RX (real1_f radians, bitLenInt qubitIndex) |
X axis rotation gate. More... | |
virtual void | RY (real1_f radians, bitLenInt qubitIndex) |
Y axis rotation gate. More... | |
virtual void | RZ (real1_f radians, bitLenInt qubitIndex) |
Z axis rotation gate. More... | |
virtual void | CRZ (real1_f radians, bitLenInt control, bitLenInt target) |
Controlled Z axis rotation gate. More... | |
virtual void | RTDyad (int numerator, int denomPower, bitLenInt qubitIndex) |
Dyadic fraction phase shift gate. More... | |
virtual void | RXDyad (int numerator, int denomPower, bitLenInt qubitIndex) |
Dyadic fraction X axis rotation gate. More... | |
virtual void | Exp (real1_f radians, bitLenInt qubitIndex) |
(Identity) Exponentiation gate More... | |
virtual void | Exp (const bitLenInt *controls, bitLenInt controlLen, bitLenInt qubit, const complex *matrix2x2, bool antiCtrled=false) |
Imaginary exponentiation of arbitrary 2x2 gate. More... | |
virtual void | ExpDyad (int numerator, int denomPower, bitLenInt qubitIndex) |
Dyadic fraction (identity) exponentiation gate. More... | |
virtual void | ExpX (real1_f radians, bitLenInt qubitIndex) |
Pauli X exponentiation gate. More... | |
virtual void | ExpXDyad (int numerator, int denomPower, bitLenInt qubitIndex) |
Dyadic fraction Pauli X exponentiation gate. More... | |
virtual void | ExpY (real1_f radians, bitLenInt qubitIndex) |
Pauli Y exponentiation gate. More... | |
virtual void | ExpYDyad (int numerator, int denomPower, bitLenInt qubitIndex) |
Dyadic fraction Pauli Y exponentiation gate. More... | |
virtual void | ExpZ (real1_f radians, bitLenInt qubitIndex) |
Pauli Z exponentiation gate. More... | |
virtual void | ExpZDyad (int numerator, int denomPower, bitLenInt qubitIndex) |
Dyadic fraction Pauli Z exponentiation gate. More... | |
virtual void | CRX (real1_f radians, bitLenInt control, bitLenInt target) |
Controlled X axis rotation gate. More... | |
virtual void | CRXDyad (int numerator, int denomPower, bitLenInt control, bitLenInt target) |
Controlled dyadic fraction X axis rotation gate. More... | |
virtual void | RYDyad (int numerator, int denomPower, bitLenInt qubitIndex) |
Dyadic fraction Y axis rotation gate. More... | |
virtual void | CRY (real1_f radians, bitLenInt control, bitLenInt target) |
Controlled Y axis rotation gate. More... | |
virtual void | CRYDyad (int numerator, int denomPower, bitLenInt control, bitLenInt target) |
Controlled dyadic fraction y axis rotation gate. More... | |
virtual void | RZDyad (int numerator, int denomPower, bitLenInt qubitIndex) |
Dyadic fraction Z axis rotation gate. More... | |
virtual void | CRZDyad (int numerator, int denomPower, bitLenInt control, bitLenInt target) |
Controlled dyadic fraction Z axis rotation gate. More... | |
virtual void | CRT (real1_f radians, bitLenInt control, bitLenInt target) |
Controlled "phase shift gate". More... | |
virtual void | CRTDyad (int numerator, int denomPower, bitLenInt control, bitLenInt target) |
Controlled dyadic fraction "phase shift gate". More... | |
virtual void | H (bitLenInt start, bitLenInt length) |
Bitwise Hadamard. More... | |
virtual void | X (bitLenInt start, bitLenInt length) |
Bitwise Pauli X (or logical "NOT") operator. More... | |
virtual void | ROL (bitLenInt shift, bitLenInt start, bitLenInt length) |
Circular shift left - shift bits left, and carry last bits. More... | |
virtual void | ROR (bitLenInt shift, bitLenInt start, bitLenInt length) |
Circular shift right - shift bits right, and carry first bits. More... | |
virtual void | ASL (bitLenInt shift, bitLenInt start, bitLenInt length) |
Arithmetic shift left, with last 2 bits as sign and carry. More... | |
virtual void | ASR (bitLenInt shift, bitLenInt start, bitLenInt length) |
Arithmetic shift right, with last 2 bits as sign and carry. More... | |
virtual void | LSL (bitLenInt shift, bitLenInt start, bitLenInt length) |
Logical shift left, filling the extra bits with |0> More... | |
virtual void | LSR (bitLenInt shift, bitLenInt start, bitLenInt length) |
Logical shift right, filling the extra bits with |0> More... | |
virtual void | FullAdd (bitLenInt inputBit1, bitLenInt inputBit2, bitLenInt carryInSumOut, bitLenInt carryOut) |
Quantum analog of classical "Full Adder" gate. More... | |
virtual void | IFullAdd (bitLenInt inputBit1, bitLenInt inputBit2, bitLenInt carryInSumOut, bitLenInt carryOut) |
Inverse of FullAdd. More... | |
virtual void | CFullAdd (const bitLenInt *controls, bitLenInt controlLen, bitLenInt inputBit1, bitLenInt inputBit2, bitLenInt carryInSumOut, bitLenInt carryOut) |
Controlled quantum analog of classical "Full Adder" gate. More... | |
virtual void | CIFullAdd (const bitLenInt *controls, bitLenInt controlLen, bitLenInt inputBit1, bitLenInt inputBit2, bitLenInt carryInSumOut, bitLenInt carryOut) |
Inverse of CFullAdd. More... | |
virtual void | ADC (bitLenInt input1, bitLenInt input2, bitLenInt output, bitLenInt length, bitLenInt carry) |
Add a quantum integer to a quantum integer, with carry. More... | |
virtual void | IADC (bitLenInt input1, bitLenInt input2, bitLenInt output, bitLenInt length, bitLenInt carry) |
Inverse of ADC. More... | |
virtual void | CADC (const bitLenInt *controls, bitLenInt controlLen, bitLenInt input1, bitLenInt input2, bitLenInt output, bitLenInt length, bitLenInt carry) |
Add a quantum integer to a quantum integer, with carry and with controls. More... | |
virtual void | CIADC (const bitLenInt *controls, bitLenInt controlLen, bitLenInt input1, bitLenInt input2, bitLenInt output, bitLenInt length, bitLenInt carry) |
Inverse of CADC. More... | |
virtual void | QFT (bitLenInt start, bitLenInt length, bool trySeparate=false) |
Quantum Fourier Transform - Apply the quantum Fourier transform to the register. More... | |
virtual void | QFTR (const bitLenInt *qubits, bitLenInt length, bool trySeparate=false) |
Quantum Fourier Transform (random access) - Apply the quantum Fourier transform to the register. More... | |
virtual void | IQFT (bitLenInt start, bitLenInt length, bool trySeparate=false) |
Inverse Quantum Fourier Transform - Apply the inverse quantum Fourier transform to the register. More... | |
virtual void | IQFTR (const bitLenInt *qubits, bitLenInt length, bool trySeparate=false) |
Inverse Quantum Fourier Transform (random access) - Apply the inverse quantum Fourier transform to the register. More... | |
virtual void | ZeroPhaseFlip (bitLenInt start, bitLenInt length) |
Reverse the phase of the state where the register equals zero. More... | |
virtual void | PhaseFlip () |
Phase flip always - equivalent to Z X Z X on any bit in the QInterface. More... | |
virtual void | SetReg (bitLenInt start, bitLenInt length, bitCapInt value) |
Set register bits to given permutation. More... | |
virtual bitCapInt | MReg (bitLenInt start, bitLenInt length) |
Measure permutation state of a register. More... | |
virtual bitCapInt | MAll () |
Measure permutation state of all coherent bits. More... | |
virtual bitCapInt | M (const bitLenInt *bits, bitLenInt length) |
Measure bits with indices in array, and return a mask of the results. More... | |
virtual void | Reverse (bitLenInt first, bitLenInt last) |
Reverse all of the bits in a sequence. More... | |
virtual real1_f | Prob (bitLenInt qubitIndex)=0 |
Direct measure of bit probability to be in |1> state. More... | |
virtual void | ProbMaskAll (bitCapInt mask, real1 *probsArray) |
Direct measure of masked permutation probability. More... | |
virtual void | ProbBitsAll (const bitLenInt *bits, bitLenInt length, real1 *probsArray) |
Direct measure of listed permutation probability. More... | |
virtual real1_f | ExpectationBitsAll (const bitLenInt *bits, bitLenInt length, bitCapInt offset=0) |
Get permutation expectation value of bits. More... | |
virtual std::map< bitCapInt, int > | MultiShotMeasureMask (const bitCapInt *qPowers, bitLenInt qPowerCount, unsigned shots) |
Statistical measure of masked permutation probability. More... | |
virtual void | MultiShotMeasureMask (const bitCapInt *qPowers, bitLenInt qPowerCount, unsigned shots, unsigned *shotsArray) |
Statistical measure of masked permutation probability (returned as array) More... | |
virtual void | SetBit (bitLenInt qubitIndex1, bool value) |
Set individual bit to pure |0> (false) or |1> (true) state. More... | |
virtual bool | ApproxCompare (QInterfacePtr toCompare, real1_f error_tol=TRYDECOMPOSE_EPSILON) |
Compare state vectors approximately, component by component, to determine whether this state vector is the same as the target. More... | |
virtual real1_f | SumSqrDiff (QInterfacePtr toCompare)=0 |
virtual bool | TryDecompose (bitLenInt start, QInterfacePtr dest, real1_f error_tol=TRYDECOMPOSE_EPSILON) |
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 probability or measurement operation. More... | |
virtual void | NormalizeState (real1_f nrm=REAL1_DEFAULT_ARG, real1_f norm_thresh=REAL1_DEFAULT_ARG, real1_f phaseArg=ZERO_R1)=0 |
Apply the normalization factor found by UpdateRunningNorm() or on the fly by a single bit gate. More... | |
virtual void | Finish () |
If asynchronous work is still running, block until it finishes. More... | |
virtual bool | isFinished () |
Returns "false" if asynchronous work is still running, and "true" if all previously dispatched asynchronous work is done. More... | |
virtual void | Dump () |
If asynchronous work is still running, let the simulator know that it can be aborted. More... | |
virtual bool | isBinaryDecisionTree () |
Returns "true" if current state representation is definitely a binary decision tree, "false" if it is definitely not, or "true" if it cannot be determined. More... | |
virtual bool | isClifford () |
Returns "true" if current state is identifiably within the Clifford set, or "false" if it is not or cannot be determined. More... | |
virtual bool | isClifford (bitLenInt qubit) |
Returns "true" if current qubit state is identifiably within the Clifford set, or "false" if it is not or cannot be determined. More... | |
virtual bool | TrySeparate (const bitLenInt *qubits, bitLenInt length, real1_f error_tol) |
Qrack::QUnit types maintain explicit separation of representations of qubits, which reduces memory usage and increases gate speed. More... | |
virtual bool | TrySeparate (bitLenInt qubit) |
Single-qubit TrySeparate() More... | |
virtual bool | TrySeparate (bitLenInt qubit1, bitLenInt qubit2) |
Two-qubit TrySeparate() More... | |
virtual void | SetReactiveSeparate (bool isAggSep) |
Set reactive separation option (on by default if available) More... | |
virtual bool | GetReactiveSeparate () |
Get reactive separation option. More... | |
virtual QInterfacePtr | Clone ()=0 |
Clone this QInterface. More... | |
virtual void | SetDevice (int dID, bool forceReInit=false) |
Set the device index, if more than one device is available. More... | |
virtual int64_t | GetDevice () |
Get the device index. More... | |
bitCapIntOcl | GetMaxSize () |
Get maximum number of amplitudes that can be allocated on current device. More... | |
virtual real1_f | FirstNonzeroPhase () |
Get phase of lowest permutation nonzero amplitude. More... | |
![]() | |
ParallelFor () | |
virtual | ~ParallelFor () |
void | SetConcurrencyLevel (unsigned num) |
unsigned | GetConcurrencyLevel () |
bitCapIntOcl | GetStride () |
void | par_for_inc (const bitCapIntOcl begin, const bitCapIntOcl itemCount, IncrementFunc, ParallelFunc fn) |
Iterate through the permutations a maximum of end-begin times, allowing the caller to control the incrementation offset through 'inc'. More... | |
void | par_for (const bitCapIntOcl begin, const bitCapIntOcl end, ParallelFunc fn) |
Call fn once for every numerical value between begin and end. More... | |
void | par_for_skip (const bitCapIntOcl begin, const bitCapIntOcl end, const bitCapIntOcl skipPower, const bitLenInt skipBitCount, ParallelFunc fn) |
Skip over the skipPower bits. More... | |
void | par_for_mask (const bitCapIntOcl, const bitCapIntOcl, const bitCapIntOcl *maskArray, const bitLenInt maskLen, ParallelFunc fn) |
Skip over the bits listed in maskArray in the same fashion as par_for_skip. More... | |
void | par_for_set (const std::set< bitCapIntOcl > &sparseSet, ParallelFunc fn) |
Iterate over a sparse state vector. More... | |
void | par_for_set (const std::vector< bitCapIntOcl > &sparseSet, ParallelFunc fn) |
Iterate over a sparse state vector. More... | |
void | par_for_sparse_compose (const std::vector< bitCapIntOcl > &lowSet, const std::vector< bitCapIntOcl > &highSet, const bitLenInt &highStart, ParallelFunc fn) |
Iterate over the power set of 2 sparse state vectors. More... | |
void | par_for_qbdt (const bitCapInt begin, const bitCapInt end, BdtFunc fn) |
Iterate over a QBDT tree. More... | |
real1_f | par_norm (const bitCapIntOcl maxQPower, const StateVectorPtr stateArray, real1_f norm_thresh=ZERO_R1) |
Calculate the normal for the array, (with flooring). More... | |
real1_f | par_norm_exact (const bitCapIntOcl maxQPower, const StateVectorPtr stateArray) |
Calculate the normal for the array, (without flooring.) More... | |
Protected Member Functions | |
bool | IsPhase (const complex *mtrx) |
bool | IsInvert (const complex *mtrx) |
bool | IsIdentity (const complex *mtrx, bool isControlled) |
![]() | |
template<typename GateFunc > | |
void | ControlledLoopFixture (bitLenInt length, GateFunc gate) |
void | FreeAligned (void *toFree) |
complex | GetNonunitaryPhase () |
template<typename Fn > | |
void | MACWrapper (const bitLenInt *controls, bitLenInt controlLen, Fn fn) |
Protected Attributes | |
bool | useHostRam |
bitCapIntOcl | maxQPowerOcl |
The value stored in runningNorm should always be the total probability implied by the norm of all amplitudes, summed, at each update. More... | |
real1 | runningNorm |
![]() | |
bitLenInt | qubitCount |
bitCapInt | maxQPower |
uint32_t | randomSeed |
qrack_rand_gen_ptr | rand_generator |
std::uniform_real_distribution< real1_f > | rand_distribution |
std::shared_ptr< RdRandom > | hardware_rand_generator |
bool | doNormalize |
bool | randGlobalPhase |
bool | useRDRAND |
real1 | amplitudeFloor |
Additional Inherited Members | |
![]() | |
static real1_f | normHelper (complex c) |
static real1_f | clampProb (real1_f toClamp) |
Abstract QEngine implementation, for all "Schroedinger method" engines.
|
inline |
|
inline |
Default constructor, primarily for protected internal use.
|
virtual |
Apply an inverse square root of swap with arbitrary (anti) control bits.
Reimplemented from Qrack::QInterface.
Reimplemented in Qrack::QMaskFusion, and Qrack::QHybrid.
|
virtual |
Apply a square root of swap with arbitrary (anti) control bits.
Reimplemented from Qrack::QInterface.
Reimplemented in Qrack::QMaskFusion, and Qrack::QHybrid.
|
virtual |
Apply a swap with arbitrary (anti) control bits.
Reimplemented from Qrack::QInterface.
Reimplemented in Qrack::QMaskFusion, and Qrack::QHybrid.
|
pure virtual |
Implemented in Qrack::QMaskFusion, Qrack::QEngineOCL, Qrack::QHybrid, and Qrack::QEngineCPU.
|
virtual |
Reimplemented in Qrack::QMaskFusion, and Qrack::QHybrid.
|
virtual |
Reimplemented in Qrack::QMaskFusion, and Qrack::QHybrid.
Reimplemented in Qrack::QEngineOCL.
|
pure virtual |
Implemented in Qrack::QEngineOCL, Qrack::QMaskFusion, Qrack::QEngineCPU, and Qrack::QHybrid.
|
inlinevirtual |
Subtract integer (without sign, with controls)
Reimplemented from Qrack::QAlu.
|
inlinevirtual |
Add integer (without sign, with controls)
Implements Qrack::QAlu.
Reimplemented in Qrack::QMaskFusion, Qrack::QEngineOCL, Qrack::QHybrid, and Qrack::QEngineCPU.
|
virtual |
Apply an inverse square root of swap with arbitrary control bits.
Reimplemented from Qrack::QInterface.
Reimplemented in Qrack::QMaskFusion, and Qrack::QHybrid.
|
pure virtual |
Clone this QEngine's settings, with a zeroed state vector.
Implemented in Qrack::QEngineOCL, Qrack::QMaskFusion, Qrack::QEngineCPU, and Qrack::QHybrid.
|
pure virtual |
Exactly copy the state vector of a different QEngine instance.
Implemented in Qrack::QEngineOCL, Qrack::QMaskFusion, Qrack::QEngineCPU, and Qrack::QHybrid.
|
virtual |
Apply a square root of swap with arbitrary control bits.
Reimplemented from Qrack::QInterface.
Reimplemented in Qrack::QMaskFusion, and Qrack::QHybrid.
|
virtual |
Apply a swap with arbitrary control bits.
Reimplemented from Qrack::QInterface.
Reimplemented in Qrack::QMaskFusion, and Qrack::QHybrid.
|
inlinevirtual |
Subtract classical integer (without sign, with carry)
Subtract integer (without sign, with carry)
Reimplemented from Qrack::QAlu.
Reimplemented in Qrack::QHybrid.
|
virtual |
Schmidt decompose a length of qubits.
Implements Qrack::QInterface.
|
inlinevirtual |
Add a classical integer to the register, with sign and without carry.
Subtract an integer from the register, with sign and without carry.
Because the register length is an arbitrary number of bits, the sign bit position on the integer to add is variable. Hence, the integer to add is specified as cast to an unsigned format, with the sign bit assumed to be set at the appropriate position before the cast.
Implements Qrack::QAlu.
|
virtual |
PSEUDO-QUANTUM - Acts like a measurement gate, except with a specified forced result.
Implements Qrack::QInterface.
Reimplemented in Qrack::QMaskFusion, and Qrack::QHybrid.
|
virtual |
Measure permutation state of a register.
Reimplemented from Qrack::QInterface.
|
virtual |
Measure permutation state of a register.
Reimplemented from Qrack::QInterface.
|
pure virtual |
Implemented in Qrack::QMaskFusion, Qrack::QHybrid, Qrack::QEngineOCL, and Qrack::QEngineCPU.
|
virtual |
"fSim" gate, (useful in the simulation of particles with fermionic statistics)
Implements Qrack::QInterface.
Reimplemented in Qrack::QMaskFusion, and Qrack::QHybrid.
|
pure virtual |
Copy a "page" of amplitudes from this QEngine's internal state, into pagePtr
.
Implemented in Qrack::QEngineOCL, Qrack::QMaskFusion, Qrack::QEngineCPU, and Qrack::QHybrid.
|
pure virtual |
Implemented in Qrack::QMaskFusion, Qrack::QEngineOCL, Qrack::QHybrid, and Qrack::QEngineCPU.
|
inlinevirtual |
Get in-flight renormalization factor.
Reimplemented in Qrack::QMaskFusion, and Qrack::QHybrid.
|
inlinevirtual |
Add integer (without sign)
Implements Qrack::QAlu.
Reimplemented in Qrack::QMaskFusion, Qrack::QEngineOCL, Qrack::QHybrid, and Qrack::QEngineCPU.
|
inlinevirtual |
Add integer (without sign, with carry)
Reimplemented from Qrack::QAlu.
Reimplemented in Qrack::QHybrid.
|
inlinevirtual |
Common driver method behind INCC and DECC (without sign, with carry)
Implements Qrack::QAlu.
Reimplemented in Qrack::QMaskFusion, Qrack::QEngineOCL, Qrack::QHybrid, and Qrack::QEngineCPU.
|
inlinevirtual |
Add a classical integer to the register, with sign and without carry.
Implements Qrack::QAlu.
Reimplemented in Qrack::QMaskFusion, Qrack::QEngineOCL, Qrack::QHybrid, and Qrack::QEngineCPU.
|
protected |
|
inlineprotected |
|
inlineprotected |
Inverse of square root of swap gate.
Reimplemented from Qrack::QInterface.
Reimplemented in Qrack::QMaskFusion, and Qrack::QHybrid.
Swap values of two bits in register, applying a phase factor of i if bits are different.
Reimplemented from Qrack::QInterface.
Reimplemented in Qrack::QMaskFusion, and Qrack::QHybrid.
|
pure virtual |
Returns "true" only if amplitudes are all totally 0.
Implemented in Qrack::QEngineOCL, Qrack::QMaskFusion, Qrack::QEngineCPU, and Qrack::QHybrid.
|
inlinevirtual |
Implements Qrack::QAlu.
|
virtual |
Apply an arbitrary single bit unitary transformation, with arbitrary (anti-)control bits.
Reimplemented from Qrack::QInterface.
Reimplemented in Qrack::QMaskFusion, and Qrack::QHybrid.
|
virtual |
Apply an arbitrary single bit unitary transformation, with arbitrary control bits.
Implements Qrack::QInterface.
Reimplemented in Qrack::QMaskFusion, and Qrack::QHybrid.
Apply an arbitrary single bit unitary transformation.
Implements Qrack::QInterface.
Reimplemented in Qrack::QMaskFusion, and Qrack::QHybrid.
PSEUDO-QUANTUM Direct measure of full register probability to be in permutation state.
Reimplemented from Qrack::QInterface.
Reimplemented in Qrack::QMaskFusion, and Qrack::QHybrid.
Direct measure of masked permutation probability.
Returns probability of permutation of the mask.
"mask" masks the bits to check the probability of. "permutation" sets the 0 or 1 value for each bit in the mask. Bits which are set in the mask can be set to 0 or 1 in the permutation, while reset bits in the mask should be 0 in the permutation.
Reimplemented from Qrack::QInterface.
Implemented in Qrack::QMaskFusion, Qrack::QEngineOCL, Qrack::QHybrid, and Qrack::QEngineCPU.
|
pure virtual |
Direct measure of register permutation probability.
Returns probability of permutation of the register.
Reimplemented from Qrack::QInterface.
Implemented in Qrack::QEngineOCL, Qrack::QEngineCPU, Qrack::QMaskFusion, and Qrack::QHybrid.
Reimplemented in Qrack::QEngineOCL.
|
pure virtual |
Add an operation to the (OpenCL) queue, to set the value of doNormalize
, which controls whether to automatically normalize the state.
Implemented in Qrack::QEngineOCL, Qrack::QMaskFusion, Qrack::QEngineCPU, and Qrack::QHybrid.
|
pure virtual |
Add an operation to the (OpenCL) queue, to set the value of runningNorm
, which is the normalization constant for the next normalization operation.
Implemented in Qrack::QEngineOCL, Qrack::QMaskFusion, Qrack::QEngineCPU, and Qrack::QHybrid.
|
pure virtual |
Copy a "page" of amplitudes from pagePtr
into this QEngine's internal state.
Implemented in Qrack::QEngineOCL, Qrack::QMaskFusion, Qrack::QEngineCPU, and Qrack::QHybrid.
|
pure virtual |
Copy a "page" of amplitudes from another QEngine, pointed to by pageEnginePtr
, into this QEngine's internal state.
Implemented in Qrack::QEngineOCL, Qrack::QMaskFusion, Qrack::QEngineCPU, and Qrack::QHybrid.
|
inlinevirtual |
Reimplemented from Qrack::QInterface.
|
pure virtual |
Swap the high half of this engine with the low half of another.
This is necessary for gates which cross sub-engine boundaries.
Implemented in Qrack::QEngineOCL, Qrack::QMaskFusion, Qrack::QEngineCPU, and Qrack::QHybrid.
Square root of swap gate.
Reimplemented from Qrack::QInterface.
Reimplemented in Qrack::QMaskFusion, and Qrack::QHybrid.
Swap values of two bits in register.
Reimplemented from Qrack::QInterface.
Reimplemented in Qrack::QMaskFusion, and Qrack::QHybrid.
|
inlinevirtual |
Implements Qrack::QAlu.
Reimplemented in Qrack::QMaskFusion, and Qrack::QEngineOCL.
|
pure virtual |
Set all amplitudes to 0, and optionally temporarily deallocate state vector RAM.
Implemented in Qrack::QEngineOCL, Qrack::QMaskFusion, Qrack::QEngineCPU, and Qrack::QHybrid.
|
inlinevirtual |
Masked Z gate.
Applies the Pauli "Z" operator to all qubits in the mask. A qubit index "n" is in the mask if (((1 << n) & mask)
0). The Pauli "Z" operator reverses the phase of |1> and leaves |0> unchanged.
Reimplemented from Qrack::QInterface.
|
protected |
The value stored in runningNorm should always be the total probability implied by the norm of all amplitudes, summed, at each update.
To normalize, we should always multiply by 1/sqrt(runningNorm).
|
protected |
|
protected |