21 #define bitLenInt uint8_t 22 #define bitCapInt uint64_t 29 #define complex std::complex<float> 34 #define complex Complex16Simd 36 #define min_norm 1e-15 115 : rand_distribution(0.0, 1.0)
120 rand_generator = std::make_shared<std::default_random_engine>();
121 randomSeed = std::time(0);
124 rand_generator = rgp;
180 virtual std::map<QInterfacePtr, bitLenInt>
Cohere(std::vector<QInterfacePtr> toCopy) = 0;
477 virtual void RTDyad(
int numerator,
int denomPower,
bitLenInt qubitIndex);
491 virtual void RXDyad(
int numerator,
int denomPower,
bitLenInt qubitIndex);
577 virtual void RYDyad(
int numerator,
int denomPower,
bitLenInt qubitIndex);
608 virtual void RZDyad(
int numerator,
int denomPower,
bitLenInt qubitIndex);
1057 bitLenInt valueLength,
unsigned char* values) = 0;
1122 while ((first < last) && (first < (last - 1))) {
1142 virtual void CopyState(QInterfacePtr orig) = 0;
Create a QEngineOCL, derived from QEngineCPU, leveraging OpenCL hardware to increase the speed of cer...
Definition: qinterface.hpp:59
virtual void INC(bitCapInt toAdd, bitLenInt start, bitLenInt length)=0
Add integer (without sign)
virtual void SetQuantumState(complex *inputState)=0
Set an arbitrary pure quantum state.
virtual bool M(bitLenInt qubitIndex)=0
Measurement gate.
virtual void CRT(real1 radians, bitLenInt control, bitLenInt target)=0
Controlled "phase shift gate".
virtual void Exp(real1 radians, bitLenInt qubitIndex)=0
(Identity) Exponentiation gate
virtual void CRTDyad(int numerator, int denomPower, bitLenInt control, bitLenInt target)
Controlled dyadic fraction "phase shift gate".
Definition: qinterface.cpp:658
virtual void H(bitLenInt qubitIndex)=0
Hadamard gate.
virtual void Y(bitLenInt qubitIndex)=0
Y gate.
virtual void OR(bitLenInt inputBit1, bitLenInt inputBit2, bitLenInt outputBit)
Quantum analog of classical "OR" gate.
Definition: qinterface.cpp:53
virtual void ExpYDyad(int numerator, int denomPower, bitLenInt qubitIndex)
Dyadic fraction Pauli Y exponentiation gate.
Definition: qinterface.cpp:482
virtual void INCS(bitCapInt toAdd, bitLenInt start, bitLenInt length, bitLenInt overflowIndex)=0
Add a classical integer to the register, with sign and without carry.
virtual void RXDyad(int numerator, int denomPower, bitLenInt qubitIndex)
Dyadic fraction X axis rotation gate.
Definition: qinterface.cpp:556
virtual void LSL(bitLenInt shift, bitLenInt start, bitLenInt length)
Logical shift left, filling the extra bits with |0>
Definition: qinterface.cpp:306
virtual void ROL(bitLenInt shift, bitLenInt start, bitLenInt length)
Circular shift left - shift bits left, and carry last bits.
Definition: qinterface.cpp:783
virtual void ASL(bitLenInt shift, bitLenInt start, bitLenInt length)
Arithmetic shift left, with last 2 bits as sign and carry.
Definition: qinterface.cpp:274
virtual void ApplySingleBit(const complex *mtrx, bool doCalcNorm, bitLenInt qubitIndex)=0
Apply an arbitrary single bit unitary transformation.
virtual void Z(bitLenInt qubitIndex)=0
Z gate.
virtual void DECS(bitCapInt toAdd, bitLenInt start, bitLenInt length, bitLenInt overflowIndex)=0
Subtract a classical integer from the register, with sign and without carry.
virtual void SetQubitCount(bitLenInt qb)
Definition: qinterface.hpp:103
virtual void INCBCDC(bitCapInt toAdd, bitLenInt start, bitLenInt length, bitLenInt carryIndex)=0
Add classical BCD integer (without sign, with carry)
virtual void CLAND(bitLenInt inputQBit, bool inputClassicalBit, bitLenInt outputBit)
Quantum analog of classical "AND" gate.
Definition: qinterface.cpp:88
virtual void RZDyad(int numerator, int denomPower, bitLenInt qubitIndex)
Dyadic fraction Z axis rotation gate.
Definition: qinterface.cpp:627
bitCapInt maxQPower
Definition: qinterface.hpp:97
Definition: qinterface.hpp:81
virtual void CLXOR(bitLenInt inputQBit, bool inputClassicalBit, bitLenInt outputBit)
Quantum analog of classical "XOR" gate.
Definition: qinterface.cpp:104
#define real1
Definition: qinterface.hpp:35
virtual void Decohere(bitLenInt start, bitLenInt length, QInterfacePtr dest)=0
Minimally decohere a set of contiguous bits from the full coherent unit, into "destination.".
virtual void CRZDyad(int numerator, int denomPower, bitLenInt control, bitLenInt target)
Controlled dyadic fraction Z axis rotation gate.
Definition: qinterface.cpp:756
virtual void CRZ(real1 radians, bitLenInt control, bitLenInt target)=0
Controlled Z axis rotation gate.
uint32_t randomSeed
Definition: qinterface.hpp:99
virtual void ExpZ(real1 radians, bitLenInt qubitIndex)=0
Pauli Z exponentiation gate.
virtual void DECC(bitCapInt toSub, bitLenInt start, bitLenInt length, bitLenInt carryIndex)=0
Subtract classical integer (without sign, with carry)
virtual void RZ(real1 radians, bitLenInt qubitIndex)=0
Z axis rotation gate.
virtual void XOR(bitLenInt inputBit1, bitLenInt inputBit2, bitLenInt outputBit)
Quantum analog of classical "XOR" gate.
Definition: qinterface.cpp:71
virtual void RTDyad(int numerator, int denomPower, bitLenInt qubitIndex)
Dyadic fraction phase shift gate.
Definition: qinterface.cpp:369
virtual void ExpXDyad(int numerator, int denomPower, bitLenInt qubitIndex)
Dyadic fraction Pauli X exponentiation gate.
Definition: qinterface.cpp:444
virtual void ExpDyad(int numerator, int denomPower, bitLenInt qubitIndex)
Dyadic fraction (identity) exponentiation gate.
Definition: qinterface.cpp:406
virtual void CNOT(bitLenInt control, bitLenInt target)=0
Controlled NOT gate.
#define complex
Definition: qinterface.hpp:34
virtual void RYDyad(int numerator, int denomPower, bitLenInt qubitIndex)
Dyadic fraction Y axis rotation gate.
Definition: qinterface.cpp:592
virtual void SetPermutation(bitCapInt perm)=0
Set to a specific permutation.
virtual void RX(real1 radians, bitLenInt qubitIndex)=0
X axis rotation gate.
virtual void X(bitLenInt qubitIndex)=0
X gate.
virtual real1 Rand()
Generate a random real1 from 0 to 1.
Definition: qinterface.hpp:110
virtual void ROR(bitLenInt shift, bitLenInt start, bitLenInt length)
Circular shift right - shift bits right, and carry first bits.
Definition: qinterface.cpp:795
virtual bitLenInt Cohere(QInterfacePtr toCopy)=0
Combine another QInterface with this one, after the last bit index of this one.
virtual void DECSC(bitCapInt toAdd, bitLenInt start, bitLenInt length, bitLenInt overflowIndex, bitLenInt carryIndex)=0
Subtract a classical integer from the register, with sign and with carry.
virtual void RY(real1 radians, bitLenInt qubitIndex)=0
Y axis rotation gate.
QInterfaceEngine
Enumerated list of supported engines.
Definition: qinterface.hpp:49
virtual void CRXDyad(int numerator, int denomPower, bitLenInt control, bitLenInt target)
Controlled dyadic fraction X axis rotation gate.
Definition: qinterface.cpp:692
#define bitCapInt
Definition: qinterface.hpp:22
QInterface(bitLenInt n, std::shared_ptr< std::default_random_engine > rgp=nullptr)
Definition: qinterface.hpp:114
std::shared_ptr< std::default_random_engine > rand_generator
Definition: qinterface.hpp:100
Definition: qinterface.hpp:84
virtual void SetRandomSeed(uint32_t seed)
Definition: qinterface.hpp:111
#define bitLenInt
Definition: qinterface.hpp:21
virtual void CY(bitLenInt control, bitLenInt target)=0
Controlled Y gate.
virtual ~QInterface()
Destructor of QInterface.
Definition: qinterface.hpp:129
virtual void CRY(real1 radians, bitLenInt control, bitLenInt target)=0
Controlled Y axis rotation gate.
virtual void DEC(bitCapInt toSub, bitLenInt start, bitLenInt length)=0
Subtract classical integer (without sign)
Definition: qinterface.hpp:77
virtual void ASR(bitLenInt shift, bitLenInt start, bitLenInt length)
Arithmetic shift right, with last 2 bits as sign and carry.
Definition: qinterface.cpp:290
int GetMaxQPower()
Get the maximum number of basis states, namely for qubits.
Definition: qinterface.hpp:135
virtual real1 Prob(bitLenInt qubitIndex)=0
Direct measure of bit probability to be in |1> state.
virtual void CopyState(QInterfacePtr orig)=0
Direct copy of raw state vector to produce a clone.
virtual void DECBCD(bitCapInt toAdd, bitLenInt start, bitLenInt length)=0
Subtract BCD integer (without sign)
virtual void ExpY(real1 radians, bitLenInt qubitIndex)=0
Pauli Y exponentiation gate.
virtual void AND(bitLenInt inputBit1, bitLenInt inputBit2, bitLenInt outputBit)
Quantum analog of classical "AND" gate.
Definition: qinterface.cpp:35
A "Qrack::QInterface" is an abstract interface exposing qubit permutation state vector with methods t...
Definition: qinterface.hpp:94
virtual void SetBit(bitLenInt qubitIndex1, bool value)
Set individual bit to pure |0> (false) or |1> (true) state.
Definition: qinterface.cpp:161
bitLenInt qubitCount
Definition: qinterface.hpp:96
Create a QUnit, which utilizes other QInterface classes to minimize the amount of work that's needed ...
Definition: qinterface.hpp:75
virtual void DECBCDC(bitCapInt toSub, bitLenInt start, bitLenInt length, bitLenInt carryIndex)=0
Subtract BCD integer (without sign, with carry)
virtual void INCC(bitCapInt toAdd, bitLenInt start, bitLenInt length, bitLenInt carryIndex)=0
Add integer (without sign, with carry)
virtual real1 ProbAll(bitCapInt fullRegister)=0
Direct measure of full register probability to be in permutation state.
std::uniform_real_distribution< real1 > rand_distribution
Definition: qinterface.hpp:101
virtual void AntiCNOT(bitLenInt control, bitLenInt target)
Anti controlled NOT gate.
Definition: qinterface.cpp:17
virtual void CRYDyad(int numerator, int denomPower, bitLenInt control, bitLenInt target)
Controlled dyadic fraction y axis rotation gate.
Definition: qinterface.cpp:725
virtual void ExpZDyad(int numerator, int denomPower, bitLenInt qubitIndex)
Dyadic fraction Pauli Z exponentiation gate.
Definition: qinterface.cpp:510
virtual void ExpX(real1 radians, bitLenInt qubitIndex)=0
Pauli X exponentiation gate.
std::shared_ptr< QInterface > QInterfacePtr
Definition: qinterface.hpp:41
virtual void CCNOT(bitLenInt control1, bitLenInt control2, bitLenInt target)=0
Doubly-controlled NOT gate.
virtual void Dispose(bitLenInt start, bitLenInt length)=0
Minimally decohere a set of contigious bits from the full coherent unit, throwing these qubits away...
Definition: complex16simd.hpp:21
virtual void RT(real1 radians, bitLenInt qubitIndex)=0
Phase shift gate.
virtual void INCBCD(bitCapInt toAdd, bitLenInt start, bitLenInt length)=0
Add classical BCD integer (without sign)
virtual void LSR(bitLenInt shift, bitLenInt start, bitLenInt length)
Logical shift right, filling the extra bits with |0>
Definition: qinterface.cpp:319
Create a QEngineOCLMUlti, composed from multiple QEngineOCLs, using OpenCL in parallel across 2^N dev...
Definition: qinterface.hpp:65
virtual void CRX(real1 radians, bitLenInt control, bitLenInt target)=0
Controlled X axis rotation gate.
int GetQubitCount()
Get the count of bits in this register.
Definition: qinterface.hpp:132
virtual void CZ(bitLenInt control, bitLenInt target)=0
Controlled Z gate.
virtual void AntiCCNOT(bitLenInt control1, bitLenInt control2, bitLenInt target)
Anti doubly-controlled NOT gate.
Definition: qinterface.cpp:24
virtual void CLOR(bitLenInt inputQBit, bool inputClassicalBit, bitLenInt outputBit)
Quantum analog of classical "OR" gate.
Definition: qinterface.cpp:95
virtual void INCSC(bitCapInt toAdd, bitLenInt start, bitLenInt length, bitLenInt overflowIndex, bitLenInt carryIndex)=0
Add a classical integer to the register, with sign and with carry.
Create a QEngineCPU leveraging only local CPU and memory resources.
Definition: qinterface.hpp:54