19 #include "common/cudaengine.cuh"
80 QUnit::Copy(std::dynamic_pointer_cast<QUnit>(orig));
91 bool randomGlobalPhase =
true,
bool useHostMem =
false, int64_t deviceID = -1,
bool useHardwareRNG =
true,
92 bool useSparseStateVec =
false,
real1_f norm_thresh =
REAL1_EPSILON, std::vector<int64_t> devList = {},
97 bool useHostMem =
false, int64_t deviceID = -1,
bool useHardwareRNG =
true,
bool useSparseStateVec =
false,
101 useHostMem, deviceID, useHardwareRNG, useSparseStateVec, norm_thresh, devList, qubitThreshold,
125 virtual std::vector<QEngineInfo>
GetQInfos();
140 return Detach(start, length, std::dynamic_pointer_cast<QUnitMulti>(dest), isTry, tol);
149 const bool result =
QUnit::Detach(start, length, dest, isTry, tol);
159 std::vector<bitLenInt*>::iterator first, std::vector<bitLenInt*>::iterator last)
170 for (
size_t i = 0
U; i < qubits.size(); ++i) {
183 for (
bitLenInt i = qubits.size(); i > 0
U; --i) {
int bi_compare(const BigInteger &left, const BigInteger &right)
Definition: big_integer.hpp:120
real1 amplitudeFloor
Definition: qinterface.hpp:148
bool useRDRAND
Definition: qinterface.hpp:145
qrack_rand_gen_ptr rand_generator
Definition: qinterface.hpp:150
bool randGlobalPhase
Definition: qinterface.hpp:144
bitLenInt qubitCount
Definition: qinterface.hpp:146
bool doNormalize
Definition: qinterface.hpp:143
Definition: qunitmulti.hpp:66
bool isQEngineOCL
Definition: qunitmulti.hpp:70
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: qunitmulti.hpp:168
QUnitMulti(bitLenInt qBitCount, const bitCapInt &initState=ZERO_BCI, qrack_rand_gen_ptr rgp=nullptr, const complex &phaseFac=CMPLX_DEFAULT_ARG, bool doNorm=false, bool randomGlobalPhase=true, bool useHostMem=false, int64_t deviceID=-1, bool useHardwareRNG=true, bool useSparseStateVec=false, real1_f norm_thresh=REAL1_EPSILON, std::vector< int64_t > devList={}, bitLenInt qubitThreshold=0U, real1_f separation_thresh=_qrack_qunit_sep_thresh)
Definition: qunitmulti.hpp:95
virtual bool Detach(bitLenInt start, bitLenInt length, QUnitMultiPtr dest, bool isTry=false, real1_f tol=TRYDECOMPOSE_EPSILON)
Definition: qunitmulti.hpp:142
virtual void Copy(QInterfacePtr orig)
Definition: qunitmulti.hpp:77
QInterfacePtr MakeEngine(bitLenInt length, const bitCapInt &perm)
Definition: qunitmulti.cpp:172
virtual QInterfacePtr EntangleInCurrentBasis(std::vector< bitLenInt * >::iterator first, std::vector< bitLenInt * >::iterator last)
Definition: qunitmulti.hpp:158
virtual bool SeparateBit(bool value, bitLenInt qubit)
Definition: qunitmulti.hpp:127
virtual QInterfacePtr Copy()
Copy this QInterface.
Definition: qunitmulti.hpp:115
virtual QInterfacePtr Clone()
Clone this QInterface.
Definition: qunitmulti.hpp:106
std::vector< DeviceInfo > deviceList
Definition: qunitmulti.hpp:72
virtual void RedistributeQEngines()
Definition: qunitmulti.cpp:217
virtual bool Detach(bitLenInt start, bitLenInt length, QUnitPtr dest, bool isTry=false, real1_f tol=TRYDECOMPOSE_EPSILON)
Definition: qunitmulti.hpp:137
size_t defaultDeviceID
Definition: qunitmulti.hpp:71
virtual std::vector< QEngineInfo > GetQInfos()
Definition: qunitmulti.cpp:193
virtual void Copy(QUnitMultiPtr orig)
Definition: qunitmulti.hpp:78
QUnitMulti(std::vector< QInterfaceEngine > eng, bitLenInt qBitCount, const bitCapInt &initState=ZERO_BCI, qrack_rand_gen_ptr rgp=nullptr, const complex &phaseFac=CMPLX_DEFAULT_ARG, bool doNorm=false, bool randomGlobalPhase=true, bool useHostMem=false, int64_t deviceID=-1, bool useHardwareRNG=true, bool useSparseStateVec=false, real1_f norm_thresh=REAL1_EPSILON, std::vector< int64_t > devList={}, bitLenInt qubitThreshold=0U, real1_f separation_thresh=_qrack_qunit_sep_thresh)
Definition: qunitmulti.cpp:31
bool isRedistributing
Definition: qunitmulti.hpp:69
std::vector< bitLenInt > deviceQbList
Definition: qunitmulti.hpp:73
std::vector< int64_t > deviceIDs
Definition: qunit.hpp:47
virtual QInterfacePtr EntangleInCurrentBasis(std::vector< bitLenInt * >::iterator first, std::vector< bitLenInt * >::iterator last)
Definition: qunit.cpp:414
real1_f separabilityThreshold
Definition: qunit.hpp:41
virtual bitLenInt Compose(QInterfacePtr toCopy)
Combine another QInterface with this one, after the last bit index of this one.
Definition: qinterface.hpp:364
complex phaseFactor
Definition: qunit.hpp:45
virtual bool SeparateBit(bool value, bitLenInt qubit)
Definition: qunit.cpp:1331
virtual bool TryDecompose(bitLenInt start, QInterfacePtr dest, real1_f error_tol=TRYDECOMPOSE_EPSILON)
Attempt to Decompose() a bit range.
Definition: qunit.hpp:229
virtual bool Detach(bitLenInt start, bitLenInt length, QUnitPtr dest, bool isTry=false, real1_f tol=TRYDECOMPOSE_EPSILON)
Definition: qunit.cpp:282
bitLenInt thresholdQubits
Definition: qunit.hpp:40
std::vector< QInterfaceEngine > engines
Definition: qunit.hpp:48
int64_t devID
Definition: qunit.hpp:44
virtual QInterfacePtr CloneBody(QUnitPtr copyPtr, bool isCopy)
Definition: qunit.cpp:3949
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:2881
bool useHostRam
Definition: qunit.hpp:34
virtual void U(bitLenInt target, real1_f theta, real1_f phi, real1_f lambda)
General unitary gate.
Definition: rotational.cpp:18
virtual QInterfacePtr Copy()
Copy this QInterface.
Definition: qunit.cpp:3940
GLOSSARY: bitLenInt - "bit-length integer" - unsigned integer ID of qubit position in register bitCap...
Definition: complex16x2simd.hpp:25
@ QINTERFACE_STABILIZER_HYBRID
Create a QStabilizerHybrid, switching between a QStabilizer and a QHybrid as efficient.
Definition: qinterface.hpp:77
std::shared_ptr< QUnit > QUnitPtr
Definition: qunit.hpp:24
std::shared_ptr< QInterface > QInterfacePtr
Definition: qinterface.hpp:29
const real1_f _qrack_qunit_sep_thresh
Definition: qrack_functions.hpp:235
QRACK_CONST real1_f TRYDECOMPOSE_EPSILON
Definition: qrack_types.hpp:260
void U(quid sid, bitLenInt q, real1_f theta, real1_f phi, real1_f lambda)
(External API) 3-parameter unitary gate
Definition: wasm_api.cpp:1143
std::complex< real1 > complex
Definition: qrack_types.hpp:128
std::shared_ptr< QUnitMulti > QUnitMultiPtr
Definition: qunitmulti.hpp:63
QRACK_CONST real1 REAL1_EPSILON
Definition: qrack_types.hpp:200
float real1_f
Definition: qrack_types.hpp:95
QRACK_CONST complex CMPLX_DEFAULT_ARG
Definition: qrack_types.hpp:257
const bitCapInt ZERO_BCI
Definition: qrack_types.hpp:130
#define bitLenInt
Definition: qrack_types.hpp:38
#define qrack_rand_gen_ptr
Definition: qrack_types.hpp:156
#define bitCapInt
Definition: qrack_types.hpp:62
#define bitCapIntOcl
Definition: qrack_types.hpp:50
Definition: qunitmulti.hpp:55
bitCapIntOcl maxSize
Definition: qunitmulti.hpp:57
bool operator<(const DeviceInfo &other) const
Definition: qunitmulti.hpp:59
bool operator>(const DeviceInfo &other) const
Definition: qunitmulti.hpp:60
size_t id
Definition: qunitmulti.hpp:56
Definition: qunitmulti.hpp:26
bool operator<(const QEngineInfo &other) const
Definition: qunitmulti.hpp:42
QInterfacePtr unit
Definition: qunitmulti.hpp:27
size_t deviceIndex
Definition: qunitmulti.hpp:28
QEngineInfo()
Definition: qunitmulti.hpp:30
QEngineInfo(QInterfacePtr u, size_t devIndex)
Definition: qunitmulti.hpp:36