34 class QBdtNodeInterface;
45 #if ENABLE_QBDT_CPU_PARALLEL && ENABLE_PTHREAD
64 throw std::out_of_range(
"QBdtNodeInterface::PushStateVector() not implemented! (You probably set "
65 "QRACK_QBDT_SEPARABILITY_THRESHOLD too high.)");
70 #if ENABLE_QBDT_CPU_PARALLEL && ENABLE_PTHREAD
100 #if ENABLE_QBDT_CPU_PARALLEL && ENABLE_PTHREAD
106 throw std::out_of_range(
"QBdtNodeInterface::InsertAtDepth() not implemented! (You probably set "
107 "QRACK_QBDT_SEPARABILITY_THRESHOLD too high.)");
110 #if ENABLE_QBDT_CPU_PARALLEL && ENABLE_PTHREAD
121 #if ENABLE_QBDT_CPU_PARALLEL && ENABLE_PTHREAD
124 std::lock_guard<std::mutex> lock(b0->mtx);
130 std::lock_guard<std::mutex> lock(b1->mtx);
147 throw std::out_of_range(
"QBdtNodeInterface::ShallowClone() not implemented! (You probably set "
148 "QRACK_QBDT_SEPARABILITY_THRESHOLD too high.)");
151 #if ENABLE_QBDT_CPU_PARALLEL && ENABLE_PTHREAD
161 throw std::out_of_range(
"QBdtNodeInterface::PopStateVector() not implemented! (You probably set "
162 "QRACK_QBDT_SEPARABILITY_THRESHOLD too high.)");
165 #if ENABLE_QBDT_CPU_PARALLEL && ENABLE_PTHREAD
175 throw std::out_of_range(
"QBdtNodeInterface::Branch() not implemented! (You probably set "
176 "QRACK_QBDT_SEPARABILITY_THRESHOLD too high.)");
179 #if ENABLE_QBDT_CPU_PARALLEL && ENABLE_PTHREAD
189 throw std::out_of_range(
"QBdtNodeInterface::Prune() not implemented! (You probably set "
190 "QRACK_QBDT_SEPARABILITY_THRESHOLD too high.)");
199 throw std::out_of_range(
"QBdtNodeInterface::Normalize() not implemented! (You probably set "
200 "QRACK_QBDT_SEPARABILITY_THRESHOLD too high.)");
203 #if ENABLE_COMPLEX_X2
214 throw std::out_of_range(
"QBdtNodeInterface::Apply2x2() not implemented! (You probably set "
215 "QRACK_QBDT_SEPARABILITY_THRESHOLD too high.)");
218 #if ENABLE_COMPLEX_X2
225 throw std::out_of_range(
"QBdtNodeInterface::PushSpecial() not implemented! (You probably called "
226 "PushStateVector() past terminal depth.)");
int bi_and_1(const BigInteger &left)
Definition: big_integer.hpp:418
Definition: qbdt_node_interface.hpp:39
virtual void Normalize(bitLenInt depth=1U)
Definition: qbdt_node_interface.hpp:193
virtual QBdtNodeInterfacePtr RemoveSeparableAtDepth(bitLenInt depth, const bitLenInt &size)
Definition: node_interface.cpp:114
virtual bool isEqualUnder(QBdtNodeInterfacePtr r)
Definition: node_interface.cpp:57
virtual bool isEqual(QBdtNodeInterfacePtr r)
Definition: node_interface.cpp:48
virtual void PushStateVector(const complex mtrx[4U], QBdtNodeInterfacePtr &b0, QBdtNodeInterfacePtr &b1, bitLenInt depth)
Definition: qbdt_node_interface.hpp:59
virtual void PopStateVector(bitLenInt depth=1U)
Definition: qbdt_node_interface.hpp:154
virtual ~QBdtNodeInterface()
Definition: qbdt_node_interface.hpp:95
virtual void Branch(bitLenInt depth=1U)
Definition: qbdt_node_interface.hpp:168
virtual QBdtNodeInterfacePtr ShallowClone()
Definition: qbdt_node_interface.hpp:145
virtual void SetZero()
Definition: qbdt_node_interface.hpp:117
QBdtNodeInterface()
Definition: qbdt_node_interface.hpp:74
virtual void InsertAtDepth(QBdtNodeInterfacePtr b, bitLenInt depth, const bitLenInt &size)
Definition: qbdt_node_interface.hpp:103
QBdtNodeInterfacePtr branches[2U]
Definition: qbdt_node_interface.hpp:69
complex scale
Definition: qbdt_node_interface.hpp:68
QBdtNodeInterface(const complex &scl)
Definition: qbdt_node_interface.hpp:81
virtual void Prune(bitLenInt depth=1U)
Definition: qbdt_node_interface.hpp:182
virtual void PushSpecial(const complex mtrx[4U], QBdtNodeInterfacePtr &b1)
Definition: qbdt_node_interface.hpp:222
virtual bool isEqualBranch(QBdtNodeInterfacePtr r, const bool &b)
Definition: node_interface.cpp:66
QBdtNodeInterface(const complex &scl, QBdtNodeInterfacePtr *b)
Definition: qbdt_node_interface.hpp:88
virtual void Apply2x2(const complex mtrx[4U], bitLenInt depth)
Definition: qbdt_node_interface.hpp:207
static size_t SelectBit(bitCapInt perm, bitLenInt bit)
Definition: qbdt_node_interface.hpp:41
static void _par_for_qbdt(const bitCapInt &end, BdtFunc fn)
Definition: node_interface.cpp:178
GLOSSARY: bitLenInt - "bit-length integer" - unsigned integer ID of qubit position in register bitCap...
Definition: complex16x2simd.hpp:25
std::function< bitCapInt(const bitCapInt &)> BdtFunc
Definition: qbdt_node_interface.hpp:37
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:1199
std::complex< real1 > complex
Definition: qrack_types.hpp:140
bool operator==(QBdtNodeInterfacePtr lhs, QBdtNodeInterfacePtr rhs)
Definition: node_interface.cpp:37
QRACK_CONST complex ONE_CMPLX
Definition: qrack_types.hpp:257
bool operator!=(QBdtNodeInterfacePtr lhs, QBdtNodeInterfacePtr rhs)
Definition: node_interface.cpp:46
std::shared_ptr< QBdtNodeInterface > QBdtNodeInterfacePtr
Definition: qbdt_node_interface.hpp:34
QRACK_CONST complex ZERO_CMPLX
Definition: qrack_types.hpp:258
#define bitLenInt
Definition: qrack_types.hpp:41
#define bitCapInt
Definition: qrack_types.hpp:65
SIMD implementation of the double precision complex vector type of 2 complex numbers,...
Definition: complex16x2simd.hpp:30