33 class QBdtNodeInterface;
51 throw std::out_of_range(
"QBdtNodeInterface::PushStateVector() not implemented! (You probably set "
52 "QRACK_QBDT_SEPARABILITY_THRESHOLD too high.)");
87 throw std::out_of_range(
"QBdtNodeInterface::InsertAtDepth() not implemented! (You probably set "
88 "QRACK_QBDT_SEPARABILITY_THRESHOLD too high.)");
104 std::lock_guard<std::mutex> lock(b0->mtx);
110 std::lock_guard<std::mutex> lock(b1->mtx);
123 throw std::out_of_range(
"QBdtNodeInterface::ShallowClone() not implemented! (You probably set "
124 "QRACK_QBDT_SEPARABILITY_THRESHOLD too high.)");
129 throw std::out_of_range(
"QBdtNodeInterface::PopStateVector() not implemented! (You probably set "
130 "QRACK_QBDT_SEPARABILITY_THRESHOLD too high.)");
135 throw std::out_of_range(
"QBdtNodeInterface::Branch() not implemented! (You probably set "
136 "QRACK_QBDT_SEPARABILITY_THRESHOLD too high.)");
141 throw std::out_of_range(
"QBdtNodeInterface::Prune() not implemented! (You probably set "
142 "QRACK_QBDT_SEPARABILITY_THRESHOLD too high.)");
147 throw std::out_of_range(
"QBdtNodeInterface::Normalize() not implemented! (You probably set "
148 "QRACK_QBDT_SEPARABILITY_THRESHOLD too high.)");
151 #if ENABLE_COMPLEX_X2
158 throw std::out_of_range(
"QBdtNodeInterface::Apply2x2() not implemented! (You probably set "
159 "QRACK_QBDT_SEPARABILITY_THRESHOLD too high.)");
162 #if ENABLE_COMPLEX_X2
169 throw std::out_of_range(
"QBdtNodeInterface::PushSpecial() not implemented! (You probably called "
170 "PushStateVector() past terminal depth.)");
Definition: qbdt_node_interface.hpp:36
virtual void Prune(bitLenInt depth=1U, bitLenInt parDepth=1U)
Definition: qbdt_node_interface.hpp:139
virtual void Normalize(bitLenInt depth=1U)
Definition: qbdt_node_interface.hpp:145
virtual bool isEqualUnder(QBdtNodeInterfacePtr r)
Definition: node_interface.cpp:70
std::mutex mtx
Definition: qbdt_node_interface.hpp:57
virtual void Apply2x2(complex const *mtrx, bitLenInt depth)
Definition: qbdt_node_interface.hpp:155
static void _par_for_qbdt(const bitCapInt end, BdtFunc fn)
Definition: node_interface.cpp:222
virtual bool isEqual(QBdtNodeInterfacePtr r)
Definition: node_interface.cpp:61
virtual ~QBdtNodeInterface()
Definition: qbdt_node_interface.hpp:80
QBdtNodeInterface(complex scl)
Definition: qbdt_node_interface.hpp:66
virtual void Branch(bitLenInt depth=1U, bitLenInt parDepth=1U)
Definition: qbdt_node_interface.hpp:133
virtual QBdtNodeInterfacePtr ShallowClone()
Definition: qbdt_node_interface.hpp:121
virtual void InsertAtDepth(QBdtNodeInterfacePtr b, bitLenInt depth, const bitLenInt &size, bitLenInt parDepth=1U)
Definition: qbdt_node_interface.hpp:85
virtual void PushSpecial(complex const *mtrx, QBdtNodeInterfacePtr &b1)
Definition: qbdt_node_interface.hpp:166
virtual void PushStateVector(complex const *mtrx, QBdtNodeInterfacePtr &b0, QBdtNodeInterfacePtr &b1, bitLenInt depth, bitLenInt parDepth=1U)
Definition: qbdt_node_interface.hpp:47
virtual void SetZero()
Definition: qbdt_node_interface.hpp:94
QBdtNodeInterface()
Definition: qbdt_node_interface.hpp:59
QBdtNodeInterfacePtr branches[2U]
Definition: qbdt_node_interface.hpp:56
complex scale
Definition: qbdt_node_interface.hpp:55
virtual bool isEqualBranch(QBdtNodeInterfacePtr r, const bool &b)
Definition: node_interface.cpp:79
virtual QBdtNodeInterfacePtr RemoveSeparableAtDepth(bitLenInt depth, const bitLenInt &size, bitLenInt parDepth=1U)
Definition: node_interface.cpp:120
static size_t SelectBit(bitCapInt perm, bitLenInt bit)
Definition: qbdt_node_interface.hpp:38
QBdtNodeInterface(complex scl, QBdtNodeInterfacePtr *b)
Definition: qbdt_node_interface.hpp:73
virtual void PopStateVector(bitLenInt depth=1U, bitLenInt parDepth=1U)
Definition: qbdt_node_interface.hpp:127
Definition: complex16x2simd.hpp:25
std::complex< half_float::half > complex
Definition: qrack_types.hpp:62
std::function< bitCapInt(const bitCapInt &)> BdtFunc
Definition: qrack_types.hpp:128
bool operator==(QBdtNodeInterfacePtr lhs, QBdtNodeInterfacePtr rhs)
Definition: node_interface.cpp:46
QRACK_CONST complex ONE_CMPLX
Definition: qrack_types.hpp:239
bool operator!=(QBdtNodeInterfacePtr lhs, QBdtNodeInterfacePtr rhs)
Definition: node_interface.cpp:59
std::shared_ptr< QBdtNodeInterface > QBdtNodeInterfacePtr
Definition: qbdt_node_interface.hpp:33
QRACK_CONST complex ZERO_CMPLX
Definition: qrack_types.hpp:240
MICROSOFT_QUANTUM_DECL void U(_In_ uintq sid, _In_ uintq q, _In_ double theta, _In_ double phi, _In_ double lambda)
(External API) 3-parameter unitary gate
Definition: pinvoke_api.cpp:1362
#define bitLenInt
Definition: qrack_types.hpp:44
#define bitCapInt
Definition: qrack_types.hpp:105
SIMD implementation of the double precision complex vector type of 2 complex numbers,...
Definition: complex16x2simd.hpp:30