28 #if __GNUC__ && QBCAPPOW < 7
31 return (
bitLenInt)(
bitsInByte *
sizeof(
unsigned int) - __builtin_clz((
unsigned int)n) - 1U);
33 return (
bitLenInt)(
bitsInByte *
sizeof(
unsigned long long) - __builtin_clzll((
unsigned long long)n) - 1U);
65 return ((start + length) > qubitCount) || ((
bitLenInt)(start + length) < start);
69 return ((start + length) > maxQPowerOcl) || ((
bitCapIntOcl)(start + length) < start);
72 const std::vector<bitLenInt>& controls,
const bitLenInt& qubitCount, std::string message)
74 std::set<bitLenInt> dupes;
75 for (
size_t i = 0
U; i < controls.size(); ++i) {
76 if (controls[i] >= qubitCount) {
77 throw std::invalid_argument(message);
80 if (dupes.find(controls[i]) == dupes.end()) {
81 dupes.insert(controls[i]);
83 throw std::invalid_argument(message +
" (Found duplicate qubit indices!)");
89 unsigned char*
cl_alloc(
size_t ucharCount);
107 ? (
real1_f)std::stof(std::string(getenv(
"QRACK_QBDT_SEPARABILITY_THRESHOLD")))
Definition: complex16x2simd.hpp:25
void ThrowIfQbIdArrayIsBad(const std::vector< bitLenInt > &controls, const bitLenInt &qubitCount, std::string message)
Definition: qrack_functions.hpp:71
constexpr uint8_t ONE_BCI
Definition: qrack_types.hpp:90
bitCapInt bitRegMask(const bitLenInt &start, const bitLenInt &length)
Definition: qrack_functions.hpp:53
bool isOverflowSub(bitCapInt inOutInt, bitCapInt inInt, const bitCapInt &signMask, const bitCapInt &lengthPower)
Check if a subtraction with overflow sets the flag.
Definition: functions.cpp:222
std::complex< half_float::half > complex
Definition: qrack_types.hpp:62
void cl_free(void *toFree)
Definition: functions.cpp:49
bool isPowerOfTwo(const bitCapInt &x)
Definition: qrack_functions.hpp:62
unsigned char * cl_alloc(size_t ucharCount)
Definition: functions.cpp:27
void log2x2(complex const *matrix2x2, complex *outMatrix2x2)
Definition: functions.cpp:189
void mul2x2(complex const *left, complex const *right, complex *out)
Definition: functions.cpp:97
bitCapInt intPow(bitCapInt base, bitCapInt power)
std::istream & operator>>(std::istream &os, QCircuitGatePtr &g)
Definition: qcircuit.cpp:44
const real1_f _qrack_qbdt_sep_thresh
Definition: qrack_functions.hpp:110
QRACK_CONST real1 FP_NORM_EPSILON
Definition: qrack_types.hpp:243
bitCapInt pushApartBits(const bitCapInt &perm, const std::vector< bitCapInt > &skipPowers)
Definition: functions.cpp:240
bitCapInt pow2(const bitLenInt &p)
Definition: qrack_functions.hpp:22
bitCapIntOcl bitRegMaskOcl(const bitLenInt &start, const bitLenInt &length)
Definition: qrack_functions.hpp:57
void inv2x2(complex const *matrix2x2, complex *outMatrix2x2)
Definition: functions.cpp:191
void exp2x2(complex const *matrix2x2, complex *outMatrix2x2)
Definition: functions.cpp:187
bitCapInt bitSlice(const bitLenInt &bit, const bitCapInt &source)
Definition: qrack_functions.hpp:45
bitCapInt pow2Mask(const bitLenInt &p)
Definition: qrack_functions.hpp:24
float real1_f
Definition: qrack_types.hpp:64
bool isOverflowAdd(bitCapInt inOutInt, bitCapInt inInt, const bitCapInt &signMask, const bitCapInt &lengthPower)
Check if an addition with overflow sets the flag.
Definition: functions.cpp:201
bitCapIntOcl intPowOcl(bitCapIntOcl base, bitCapIntOcl power)
std::ostream & operator<<(std::ostream &os, const QCircuitGatePtr g)
Definition: qcircuit.cpp:19
bitCapIntOcl pow2MaskOcl(const bitLenInt &p)
Definition: qrack_functions.hpp:25
bool isBadPermRange(const bitCapIntOcl &start, const bitCapIntOcl &length, const bitCapIntOcl &maxQPowerOcl)
Definition: qrack_functions.hpp:67
bool isBadBitRange(const bitLenInt &start, const bitLenInt &length, const bitLenInt &qubitCount)
Definition: qrack_functions.hpp:63
bitCapIntOcl pow2Ocl(const bitLenInt &p)
Definition: qrack_functions.hpp:23
bitCapIntOcl bitSliceOcl(const bitLenInt &bit, const bitCapIntOcl &source)
Definition: qrack_functions.hpp:49
bitLenInt log2(bitCapInt n)
Definition: qrack_functions.hpp:26
half pow(half x, half y)
Power function.
Definition: half.hpp:3738
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 bitsInByte
Definition: qrack_types.hpp:144
#define bitLenInt
Definition: qrack_types.hpp:44
#define bitCapInt
Definition: qrack_types.hpp:105
#define bitCapIntOcl
Definition: qrack_types.hpp:91