33 class QBdtNodeInterface;
42 #if ENABLE_QBDT_CPU_PARALLEL && ENABLE_PTHREAD
61 throw std::out_of_range(
"QBdtNodeInterface::PushStateVector() not implemented! (You probably set "
62 "QRACK_QBDT_SEPARABILITY_THRESHOLD too high.)");
67 #if ENABLE_QBDT_CPU_PARALLEL && ENABLE_PTHREAD
97 #if ENABLE_QBDT_CPU_PARALLEL && ENABLE_PTHREAD
103 throw std::out_of_range(
"QBdtNodeInterface::InsertAtDepth() not implemented! (You probably set "
104 "QRACK_QBDT_SEPARABILITY_THRESHOLD too high.)");
107 #if ENABLE_QBDT_CPU_PARALLEL && ENABLE_PTHREAD
118 #if ENABLE_QBDT_CPU_PARALLEL && ENABLE_PTHREAD
121 std::lock_guard<std::mutex> lock(b0->mtx);
127 std::lock_guard<std::mutex> lock(b1->mtx);
144 throw std::out_of_range(
"QBdtNodeInterface::ShallowClone() not implemented! (You probably set "
145 "QRACK_QBDT_SEPARABILITY_THRESHOLD too high.)");
148 #if ENABLE_QBDT_CPU_PARALLEL && ENABLE_PTHREAD
158 throw std::out_of_range(
"QBdtNodeInterface::PopStateVector() not implemented! (You probably set "
159 "QRACK_QBDT_SEPARABILITY_THRESHOLD too high.)");
162 #if ENABLE_QBDT_CPU_PARALLEL && ENABLE_PTHREAD
172 throw std::out_of_range(
"QBdtNodeInterface::Branch() not implemented! (You probably set "
173 "QRACK_QBDT_SEPARABILITY_THRESHOLD too high.)");
176 #if ENABLE_QBDT_CPU_PARALLEL && ENABLE_PTHREAD
186 throw std::out_of_range(
"QBdtNodeInterface::Prune() not implemented! (You probably set "
187 "QRACK_QBDT_SEPARABILITY_THRESHOLD too high.)");
196 throw std::out_of_range(
"QBdtNodeInterface::Normalize() not implemented! (You probably set "
197 "QRACK_QBDT_SEPARABILITY_THRESHOLD too high.)");
200 #if ENABLE_COMPLEX_X2
211 throw std::out_of_range(
"QBdtNodeInterface::Apply2x2() not implemented! (You probably set "
212 "QRACK_QBDT_SEPARABILITY_THRESHOLD too high.)");
215 #if ENABLE_COMPLEX_X2
222 throw std::out_of_range(
"QBdtNodeInterface::PushSpecial() not implemented! (You probably called "
223 "PushStateVector() past terminal depth.)");
int bi_and_1(const BigInteger &left)
Definition: big_integer.hpp:400
Definition: qbdt_node_interface.hpp:36
virtual void Normalize(bitLenInt depth=1U)
Definition: qbdt_node_interface.hpp:190
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 PopStateVector(bitLenInt depth=1U)
Definition: qbdt_node_interface.hpp:151
virtual ~QBdtNodeInterface()
Definition: qbdt_node_interface.hpp:92
virtual void Branch(bitLenInt depth=1U)
Definition: qbdt_node_interface.hpp:165
virtual QBdtNodeInterfacePtr ShallowClone()
Definition: qbdt_node_interface.hpp:142
virtual void Apply2x2(const complex *mtrx, bitLenInt depth)
Definition: qbdt_node_interface.hpp:204
virtual void SetZero()
Definition: qbdt_node_interface.hpp:114
QBdtNodeInterface()
Definition: qbdt_node_interface.hpp:71
virtual void InsertAtDepth(QBdtNodeInterfacePtr b, bitLenInt depth, const bitLenInt &size)
Definition: qbdt_node_interface.hpp:100
QBdtNodeInterfacePtr branches[2U]
Definition: qbdt_node_interface.hpp:66
complex scale
Definition: qbdt_node_interface.hpp:65
QBdtNodeInterface(const complex &scl)
Definition: qbdt_node_interface.hpp:78
virtual void Prune(bitLenInt depth=1U)
Definition: qbdt_node_interface.hpp:179
virtual bool isEqualBranch(QBdtNodeInterfacePtr r, const bool &b)
Definition: node_interface.cpp:66
QBdtNodeInterface(const complex &scl, QBdtNodeInterfacePtr *b)
Definition: qbdt_node_interface.hpp:85
virtual void PushSpecial(const complex *mtrx, QBdtNodeInterfacePtr &b1)
Definition: qbdt_node_interface.hpp:219
static size_t SelectBit(bitCapInt perm, bitLenInt bit)
Definition: qbdt_node_interface.hpp:38
static void _par_for_qbdt(const bitCapInt &end, BdtFunc fn)
Definition: node_interface.cpp:177
virtual void PushStateVector(const complex *mtrx, QBdtNodeInterfacePtr &b0, QBdtNodeInterfacePtr &b1, bitLenInt depth)
Definition: qbdt_node_interface.hpp:56
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: qrack_types.hpp:138
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
bool operator==(QBdtNodeInterfacePtr lhs, QBdtNodeInterfacePtr rhs)
Definition: node_interface.cpp:37
QRACK_CONST complex ONE_CMPLX
Definition: qrack_types.hpp:252
bool operator!=(QBdtNodeInterfacePtr lhs, QBdtNodeInterfacePtr rhs)
Definition: node_interface.cpp:46
std::shared_ptr< QBdtNodeInterface > QBdtNodeInterfacePtr
Definition: qbdt_node_interface.hpp:33
QRACK_CONST complex ZERO_CMPLX
Definition: qrack_types.hpp:253
#define bitLenInt
Definition: qrack_types.hpp:38
#define bitCapInt
Definition: qrack_types.hpp:62
SIMD implementation of the double precision complex vector type of 2 complex numbers,...
Definition: complex16x2simd.hpp:30