30 #include <boost/dynamic_bitset.hpp>
68 std::vector<BoolVector>
r;
70 std::vector<BoolVector>
x;
72 std::vector<BoolVector>
z;
96 uint8_t
GetR(
size_t i) {
return (
r[0
U][i] ? 1U : 0
U) | (
r[1U][i] ? 2U : 0
U); }
119 isTransposed = orig->isTransposed;
129 std::vector<boost::dynamic_bitset<>> FastTranspose(
const std::vector<boost::dynamic_bitset<>>& matrix)
131 const size_t num_rows = matrix.size();
132 const size_t num_cols = matrix[0].size();
134 std::vector<BoolVector> transposed(num_cols,
BoolVector(num_rows));
136 for (
size_t row = 0; row < num_rows; ++row) {
138 for (
size_t col = bit_row.find_first(); col != BoolVector::npos; col = bit_row.find_next(col)) {
139 transposed[col].set(row);
146 void SetTransposeState(
bool isTrans)
148 if (isTrans == isTransposed) {
159 x = FastTranspose(
x);
160 z = FastTranspose(
z);
161 isTransposed = isTrans;
175 throw std::domain_error(
"QStabilizer gate qubit indices are out-of-bounds!");
182 bool ignored2 =
false, int64_t ignored3 = -1,
bool useHardwareRNG =
true,
bool ignored4 =
false,
231 isTransposed =
false;
261 std::swap(
x[k],
x[i]);
262 std::swap(
z[k],
z[i]);
271 BoolVector::swap(
r[0
U][k],
r[0
U][i]);
272 BoolVector::swap(
r[1U][k],
r[1U][i]);
293 std::fill(xi.begin(), xi.end(),
false);
294 std::fill(zi.begin(), zi.end(),
false);
308 r[0
U][i] = (bool)(phase & 1U);
309 r[1U][i] = (bool)(phase & 2U);
318 xi[j] = xi[j] ^
x[k][j];
319 zi[j] = zi[j] ^
z[k][j];
350 const std::vector<bitCapInt>& perms,
const bitCapInt& offset);
354 const real1_f& nrm,
const std::vector<bitCapInt>& bitPowers,
const std::vector<real1_f>& weights);
358 const std::vector<bitCapInt>& perms,
const bitCapInt& offset);
362 const std::vector<real1_f>& weights);
383 throw std::domain_error(
"QStabilizer::SetAmplitude() not implemented!");
422 bool ForceM(
bitLenInt t,
bool result,
bool doForce =
true,
bool doApply =
true);
443 std::vector<complex>
GetAmplitudes(std::vector<bitCapInt> perms);
453 const std::vector<bitLenInt>& bits,
const std::vector<bitCapInt>& perms,
const bitCapInt& offset =
ZERO_BCI);
457 const std::vector<bitLenInt>& bits,
const std::vector<bitCapInt>& perms,
const bitCapInt& offset =
ZERO_BCI);
489 return Compose(std::dynamic_pointer_cast<QStabilizer>(toCopy), start);
494 DecomposeDispose(start, dest->GetQubitCount(), std::dynamic_pointer_cast<QStabilizer>(dest));
511 throw std::out_of_range(
"QStabilizer::Allocate() cannot start past end of register!");
522 return Compose(nQubits, start);
543 return ApproxCompare(std::dynamic_pointer_cast<QStabilizer>(toCompare), error_tol);
551 return GlobalPhaseCompare(std::dynamic_pointer_cast<QStabilizer>(toCompare), error_tol);
557 (std::arg(thisAmpEntry.
amplitude) - std::arg(toCompare->GetAmplitude(thisAmpEntry.
permutation))) /
559 argDiff -= (
real1)(
size_t)argDiff;
585 return MCPhase(controls, mtrx[0
U], mtrx[3U], target);
589 return MCInvert(controls, mtrx[1U], mtrx[2U], target);
592 throw std::domain_error(
"QStabilizer::MCMtrx() not implemented for non-Clifford/Pauli cases!");
597 return MACPhase(controls, mtrx[0
U], mtrx[3U], target);
601 return MACInvert(controls, mtrx[1U], mtrx[2U], target);
604 throw std::domain_error(
"QStabilizer::MACMtrx() not implemented for non-Clifford/Pauli cases!");
612 if (qubit2 < qubit1) {
613 std::swap(qubit1, qubit2);
A "Qrack::QInterface" is an abstract interface exposing qubit permutation state vector with methods t...
Definition: qinterface.hpp:141
bitCapInt maxQPower
Definition: qinterface.hpp:149
virtual bitLenInt Allocate(bitLenInt length)
Allocate new "length" count of |0> state qubits at end of qubit index position.
Definition: qinterface.hpp:477
std::shared_ptr< RdRandom > hardware_rand_generator
Definition: qinterface.hpp:152
virtual bitLenInt Compose(QInterfacePtr toCopy)
Combine another QInterface with this one, after the last bit index of this one.
Definition: qinterface.hpp:371
qrack_rand_gen_ptr rand_generator
Definition: qinterface.hpp:150
bool randGlobalPhase
Definition: qinterface.hpp:144
virtual void SetQubitCount(bitLenInt qb)
Definition: qinterface.hpp:268
std::uniform_real_distribution< real1_s > rand_distribution
Definition: qinterface.hpp:151
bitLenInt qubitCount
Definition: qinterface.hpp:146
Definition: qstabilizer.hpp:49
bitCapInt PermCount()
Definition: qstabilizer.hpp:378
void seed(const bitLenInt &g)
Finds a Pauli operator P such that the basis state P|0...0> occurs with nonzero amplitude in q,...
Definition: qstabilizer.cpp:330
real1_f getVariance(const real1_f &mean, const real1_f &nrm, const std::vector< bitCapInt > &bitPowers, const std::vector< bitCapInt > &perms, const bitCapInt &offset)
Returns the (partial) variance from a state vector amplitude.
Definition: qstabilizer.cpp:453
void S(bitLenInt qubitIndex)
Apply a phase gate (|0>->|0>, |1>->i|1>, or "S") to qubit b.
Definition: qstabilizer.cpp:1542
void MACInvert(const std::vector< bitLenInt > &controls, const complex &topRight, const complex &bottomLeft, bitLenInt target)
Apply a single bit transformation that reverses bit probability and might effect phase,...
Definition: qstabilizer.cpp:2896
bool TrySeparate(bitLenInt qubit1, bitLenInt qubit2)
Two-qubit TrySeparate()
Definition: qstabilizer.hpp:610
bool CanDecomposeDispose(const bitLenInt start, const bitLenInt length)
Definition: qstabilizer.cpp:2118
void Decompose(bitLenInt start, QInterfacePtr dest)
Minimally decompose a set of contiguous bits from the separably composed unit, into "destination".
Definition: qstabilizer.hpp:492
real1_f ExpectationFloatsFactorized(const std::vector< bitLenInt > &bits, const std::vector< real1_f > &weights)
Get expectation value of bits, given a (floating-point) array of qubit weights.
Definition: qstabilizer.cpp:753
bool GlobalPhaseCompare(QStabilizerPtr toCompare, real1_f error_tol=TRYDECOMPOSE_EPSILON)
Definition: qstabilizer.hpp:553
void CZ(bitLenInt control, bitLenInt target)
Apply a CZ gate with control and target.
Definition: qstabilizer.cpp:1120
void ParFor(StabilizerParallelFunc fn, std::vector< bitLenInt > qubits)
Definition: qstabilizer.cpp:62
void setBasisState(const real1_f &nrm, complex *stateVec)
Returns the result of applying the Pauli operator in the "scratch space" of q to |0....
Definition: qstabilizer.cpp:403
friend std::ostream & operator<<(std::ostream &os, const QStabilizerPtr s)
Definition: qstabilizer.cpp:2998
void SetQuantumState(const complex *inputState)
Set an arbitrary pure quantum state representation.
Definition: qstabilizer.cpp:2471
bool TrySeparate(const std::vector< bitLenInt > &qubits, real1_f ignored)
Qrack::QUnit types maintain explicit separation of representations of qubits, which reduces memory us...
Definition: qstabilizer.cpp:2979
void NormalizeState(real1_f nrm=REAL1_DEFAULT_ARG, real1_f norm_thresh=REAL1_DEFAULT_ARG, real1_f phaseArg=ZERO_R1_F)
Apply the normalization factor found by UpdateRunningNorm() or on the fly by a single bit gate.
Definition: qstabilizer.hpp:525
QStabilizer(bitLenInt n, const bitCapInt &perm=ZERO_BCI, qrack_rand_gen_ptr rgp=nullptr, const complex &phaseFac=CMPLX_DEFAULT_ARG, bool doNorm=false, bool randomGlobalPhase=true, bool ignored2=false, int64_t ignored3=-1, bool useHardwareRNG=true, bool ignored4=false, real1_f ignored5=REAL1_EPSILON, std::vector< int64_t > ignored6={}, bitLenInt ignored7=0U, real1_f ignored8=_qrack_qunit_sep_thresh)
Definition: qstabilizer.cpp:39
void AntiCY(bitLenInt control, bitLenInt target)
Apply an (anti-)CY gate with control and target.
Definition: qstabilizer.cpp:1070
void ResetR(size_t i)
Definition: qstabilizer.hpp:97
void ISwap(bitLenInt qubitIndex1, bitLenInt qubitIndex2)
Swap values of two bits in register, and apply phase factor of i if bits are different.
Definition: qstabilizer.cpp:1257
bool Rand()
Definition: qstabilizer.hpp:209
friend std::istream & operator>>(std::istream &is, const QStabilizerPtr s)
Definition: qstabilizer.cpp:3029
bool isGaussianCached
Definition: qstabilizer.hpp:55
uint8_t GetR(size_t i)
Definition: qstabilizer.hpp:96
bitCapInt HighestProbAll()
Get the highest-probability basis dimension in the Hilbert space.
Definition: qstabilizer.cpp:479
void SetRandGlobalPhase(bool isRand)
Definition: qstabilizer.hpp:386
void SetPhaseOffset(real1_f phaseArg)
Definition: qstabilizer.hpp:80
unsigned rawRandBoolsRemaining
Definition: qstabilizer.hpp:52
void rowmult(const bitLenInt &i, const bitLenInt &k)
Left-multiply row i by row k - does not change the logical state.
Definition: qstabilizer.hpp:305
unsigned rawRandBools
Definition: qstabilizer.hpp:51
real1_f ExpectationBitsFactorized(const std::vector< bitLenInt > &bits, const std::vector< bitCapInt > &perms, const bitCapInt &offset=ZERO_BCI)
Get expectation of qubits, interpreting each permutation as an unsigned integer.
Definition: qstabilizer.cpp:717
void AntiCNOT(bitLenInt control, bitLenInt target)
Apply an (anti-)CNOT gate with control and target.
Definition: qstabilizer.cpp:978
void ValidateQubitIndex(bitLenInt qubit)
Definition: qstabilizer.hpp:172
void SetPermutation(const bitCapInt &perm, const complex &phaseFac=CMPLX_DEFAULT_ARG)
Set to a specific permutation of all qubits.
Definition: qstabilizer.cpp:97
void UpdateRunningNorm(real1_f norm_thresh=REAL1_DEFAULT_ARG)
Force a calculation of the norm of the state vector, in order to make it unit length before the next ...
Definition: qstabilizer.hpp:532
virtual bitLenInt Compose(QInterfacePtr toCopy)
Combine another QInterface with this one, after the last bit index of this one.
Definition: qinterface.hpp:371
void IS(bitLenInt qubitIndex)
Apply an inverse phase gate (|0>->|0>, |1>->-i|1>, or "S adjoint") to qubit b.
Definition: qstabilizer.cpp:1587
void MCMtrx(const std::vector< bitLenInt > &controls, const complex *mtrx, bitLenInt target)
Apply an arbitrary single bit unitary transformation, with arbitrary control bits.
Definition: qstabilizer.hpp:582
void Y(bitLenInt qubitIndex)
Apply a Pauli Y gate to target.
Definition: qstabilizer.cpp:1479
void rowset(const bitLenInt &i, bitLenInt b)
Sets row i equal to the bth observable (X_1,...X_n,Z_1,...,Z_n)
Definition: qstabilizer.hpp:276
virtual void H(bitLenInt qubit)
Apply a Hadamard gate to target.
Definition: qinterface.hpp:920
bool ForceM(bitLenInt t, bool result, bool doForce=true, bool doApply=true)
Measure qubit t.
Definition: qstabilizer.cpp:1785
void Dispose(bitLenInt start, bitLenInt length, const bitCapInt &ignored)
Dispose a a contiguous set of qubits that are already in a permutation eigenstate.
Definition: qstabilizer.hpp:498
bool IsSeparableY(const bitLenInt &target)
Returns "true" if target qubit is a Y basis eigenstate.
Definition: qstabilizer.cpp:1751
AmplitudeEntry GetQubitAmplitude(bitLenInt t, bool m)
Get any single basis state amplitude where qubit "t" has value "m".
Definition: qstabilizer.cpp:684
real1_f Prob(bitLenInt qubit)
Direct measure of bit probability to be in |1> state.
Definition: qstabilizer.cpp:2488
real1_f SumSqrDiff(QInterfacePtr toCompare)
Calculates (1 - <\psi_e|\psi_c>) between states |\psi_c> and |\psi_e>.
Definition: qstabilizer.hpp:537
bitLenInt Compose(QStabilizerPtr toCopy)
Definition: qstabilizer.hpp:486
std::function< void(void)> DispatchFn
Definition: qstabilizer.hpp:75
void Z(bitLenInt qubitIndex)
Apply a phase gate (|0>->|0>, |1>->-|1>, or "Z") to qubit b.
Definition: qstabilizer.cpp:1506
real1_f ProbMask(const bitCapInt &mask, const bitCapInt &permutation)
Direct measure of masked permutation probability.
Definition: qstabilizer.cpp:904
bitLenInt maxStateMapCacheQubitCount
Definition: qstabilizer.hpp:54
AmplitudeEntry getBasisAmp(const real1_f &nrm)
Helper for setBasisState() and setBasisProb()
Definition: qstabilizer.cpp:369
real1_f ApproxCompareHelper(QStabilizerPtr toCompare, real1_f error_tol=TRYDECOMPOSE_EPSILON, bool isDiscrete=false)
Definition: qstabilizer.cpp:2371
void DecomposeDispose(const bitLenInt start, const bitLenInt length, QStabilizerPtr toCopy)
Definition: qstabilizer.cpp:2182
void SetRandomSeed(uint32_t seed)
Definition: qstabilizer.hpp:202
void Mtrx(const complex *mtrx, bitLenInt target)
Apply an arbitrary single bit unitary transformation.
Definition: qstabilizer.cpp:2498
real1 phaseOffset
Definition: qstabilizer.hpp:53
virtual void X(bitLenInt qubit)
Apply an X (or NOT) gate to target.
Definition: qinterface.hpp:1091
bitLenInt gaussian(bool s=true)
Do Gaussian elimination to put the stabilizer generators in the following form: At the top,...
Definition: qstabilizer.cpp:248
void Invert(const complex &topRight, const complex &bottomLeft, bitLenInt target)
Apply a single bit transformation that reverses bit probability and might effect phase.
Definition: qstabilizer.cpp:2657
QInterfacePtr Clone()
Clone this QInterface.
Definition: qstabilizer.cpp:76
real1_f getExpectation(const real1_f &nrm, const std::vector< bitCapInt > &bitPowers, const std::vector< bitCapInt > &perms, const bitCapInt &offset)
Returns the (partial) expectation value from a state vector amplitude.
Definition: qstabilizer.cpp:430
std::vector< bool > BoolVector
Definition: qstabilizer.hpp:65
std::function< void(const bitLenInt &)> StabilizerParallelFunc
Definition: qstabilizer.hpp:74
bool IsSeparableZ(const bitLenInt &target)
Returns "true" if target qubit is a Z basis eigenstate.
Definition: qstabilizer.cpp:1709
uint8_t IsSeparable(const bitLenInt &target)
Returns: 0 if target qubit is not separable 1 if target qubit is a Z basis eigenstate 2 if target qub...
Definition: qstabilizer.cpp:1767
bool IsSeparableX(const bitLenInt &target)
Returns "true" if target qubit is an X basis eigenstate.
Definition: qstabilizer.cpp:1739
void AntiCZ(bitLenInt control, bitLenInt target)
Apply an (anti-)CZ gate with control and target.
Definition: qstabilizer.cpp:1174
bitCapInt GetMaxQPower()
Get the maximum number of basis states, namely for qubits.
Definition: qstabilizer.hpp:195
void Phase(const complex &topLeft, const complex &bottomRight, bitLenInt target)
Apply a single bit transformation that only effects phase.
Definition: qstabilizer.cpp:2623
void CNOT(bitLenInt control, bitLenInt target)
Apply a CNOT gate with control and target.
Definition: qstabilizer.cpp:933
real1_f ProbPermRdm(const bitCapInt &perm, bitLenInt ancillaeStart)
Under assumption of a QStabilizerHybrid ancillary buffer, trace out the permutation probability of th...
Definition: qstabilizer.cpp:864
complex GetAmplitude(const bitCapInt &perm)
Get a single basis state amplitude.
Definition: qstabilizer.cpp:599
std::map< bitCapInt, complex > GetQuantumState()
Convert the state to sparse ket notation.
Definition: qstabilizer.cpp:546
std::vector< BoolVector > x
Definition: qstabilizer.hpp:70
void ResetPhaseOffset()
Definition: qstabilizer.hpp:197
complex GetPhaseOffset()
Definition: qstabilizer.hpp:198
std::vector< complex > GetAmplitudes(std::vector< bitCapInt > perms)
Get a single basis state amplitude.
Definition: qstabilizer.cpp:630
bitLenInt Compose(QInterfacePtr toCopy, bitLenInt start)
Compose() a QInterface peer, inserting its qubit into index order at start index.
Definition: qstabilizer.hpp:487
bool GlobalPhaseCompare(QInterfacePtr toCompare, real1_f error_tol=TRYDECOMPOSE_EPSILON)
Definition: qstabilizer.hpp:549
bool ApproxCompare(QInterfacePtr toCompare, real1_f error_tol=TRYDECOMPOSE_EPSILON)
Compare state vectors approximately, to determine whether this state vector is the same as the target...
Definition: qstabilizer.hpp:541
void rowswap(const bitLenInt &i, const bitLenInt &k)
Swaps row i and row k - does not change the logical state.
Definition: qstabilizer.hpp:255
void MCInvert(const std::vector< bitLenInt > &controls, const complex &topRight, const complex &bottomLeft, bitLenInt target)
Apply a single bit transformation that reverses bit probability and might effect phase,...
Definition: qstabilizer.cpp:2830
void GetProbs(real1 *outputProbs)
Get all probabilities corresponding to ket notation.
Definition: qstabilizer.cpp:573
bitLenInt Allocate(bitLenInt start, bitLenInt length)
Allocate new "length" count of |0> state qubits at specified qubit index start position.
Definition: qstabilizer.hpp:504
bool isClifford()
Returns "true" if current state is identifiably within the Clifford set, or "false" if it is not or c...
Definition: qstabilizer.hpp:190
void FSim(real1_f theta, real1_f phi, bitLenInt qubit1, bitLenInt qubit2)
The 2-qubit "fSim" gate, (useful in the simulation of particles with fermionic statistics)
Definition: qstabilizer.cpp:2962
real1_f VarianceBitsFactorized(const std::vector< bitLenInt > &bits, const std::vector< bitCapInt > &perms, const bitCapInt &offset=ZERO_BCI)
Get variance of qubits, interpreting each permutation as an unsigned integer.
Definition: qstabilizer.cpp:790
void CY(bitLenInt control, bitLenInt target)
Apply a CY gate with control and target.
Definition: qstabilizer.cpp:1020
bitLenInt Compose(QInterfacePtr toCopy)
Combine another QInterface with this one, after the last bit index of this one.
Definition: qstabilizer.hpp:485
real1_f VarianceFloatsFactorized(const std::vector< bitLenInt > &bits, const std::vector< real1_f > &weights)
Direct measure of variance of listed bit string probability.
Definition: qstabilizer.cpp:827
bool ApproxCompare(QStabilizerPtr toCompare, real1_f error_tol=TRYDECOMPOSE_EPSILON)
Definition: qstabilizer.hpp:545
void IISwap(bitLenInt qubitIndex1, bitLenInt qubitIndex2)
Inverse ISwap - Swap values of two bits in register, and apply phase factor of -i if bits are differe...
Definition: qstabilizer.cpp:1321
std::vector< BoolVector > z
Definition: qstabilizer.hpp:72
void Copy(QStabilizerPtr orig)
Definition: qstabilizer.hpp:110
void MACMtrx(const std::vector< bitLenInt > &controls, const complex *mtrx, bitLenInt target)
Apply an arbitrary single bit unitary transformation, with arbitrary (anti-)control bits.
Definition: qstabilizer.hpp:594
uint8_t clifford(const bitLenInt &i, const bitLenInt &k)
Return the phase (0,1,2,3) when row i is LEFT-multiplied by row k.
Definition: qstabilizer.cpp:161
void SetAmplitude(const bitCapInt &perm, const complex &)
Sets the representational amplitude of a full permutation.
Definition: qstabilizer.hpp:381
void MACPhase(const std::vector< bitLenInt > &controls, const complex &topLeft, const complex &bottomRight, bitLenInt target)
Apply a single bit transformation that only effects phase, with arbitrary (anti-)control bits.
Definition: qstabilizer.cpp:2757
bitLenInt GetQubitCount()
Get the count of bits in this register.
Definition: qstabilizer.hpp:193
bool TrySeparate(bitLenInt qubit)
Single-qubit TrySeparate()
Definition: qstabilizer.hpp:609
std::vector< BoolVector > r
Definition: qstabilizer.hpp:68
AmplitudeEntry GetAnyAmplitude()
Get any single basis state amplitude.
Definition: qstabilizer.cpp:673
void Dispose(bitLenInt start, bitLenInt length)
Minimally decompose a set of contiguous bits from the separably composed unit, and discard the separa...
Definition: qstabilizer.hpp:497
void Swap(bitLenInt qubitIndex1, bitLenInt qubitIndex2)
Swap values of two bits in register.
Definition: qstabilizer.cpp:1226
std::vector< bitLenInt > EntangledQubits(const bitLenInt &target, const bool &g=true)
Returns all qubits entangled with "target" (including itself)
Definition: qstabilizer.cpp:1634
void setBasisProb(const real1_f &nrm, real1 *outputProbs)
Returns the probability from applying the Pauli operator in the "scratch space" of q to |0....
Definition: qstabilizer.cpp:424
void rowcopy(const bitLenInt &i, const bitLenInt &k)
Sets row i equal to row k.
Definition: qstabilizer.hpp:243
bitLenInt gaussianCached
Definition: qstabilizer.hpp:56
~QStabilizer()
Definition: qstabilizer.hpp:186
void Copy(QInterfacePtr orig)
Definition: qstabilizer.hpp:109
void MCPhase(const std::vector< bitLenInt > &controls, const complex &topLeft, const complex &bottomRight, bitLenInt target)
Apply a single bit transformation that only effects phase, with arbitrary control bits.
Definition: qstabilizer.cpp:2694
bool isClifford(bitLenInt qubit)
Returns "true" if current qubit state is identifiably within the Clifford set, or "false" if it is no...
Definition: qstabilizer.hpp:191
void Dispatch(DispatchFn fn)
Definition: qstabilizer.hpp:76
void Clear()
Definition: qstabilizer.hpp:224
Half-precision floating-point type.
Definition: half.hpp:2222
virtual void H(bitLenInt qubit)
Hadamard gate.
Definition: qinterface.hpp:920
virtual void X(bitLenInt qubit)
X gate.
Definition: qinterface.hpp:1091
virtual void U(bitLenInt target, real1_f theta, real1_f phi, real1_f lambda)
General unitary gate.
Definition: rotational.cpp:18
virtual void Dump()
If asynchronous work is still running, let the simulator know that it can be aborted.
Definition: qinterface.hpp:2862
virtual QInterfacePtr Copy()
Copy this QInterface.
Definition: qinterface.hpp:2992
GLOSSARY: bitLenInt - "bit-length integer" - unsigned integer ID of qubit position in register bitCap...
Definition: complex16x2simd.hpp:25
std::shared_ptr< QInterface > QInterfacePtr
Definition: qinterface.hpp:29
const real1_f _qrack_qunit_sep_thresh
Definition: qrack_functions.hpp:249
QRACK_CONST real1_f TRYDECOMPOSE_EPSILON
Definition: qrack_types.hpp:270
QRACK_CONST real1 HALF_R1
Definition: qrack_types.hpp:192
half_float::half real1
Definition: qrack_types.hpp:102
std::complex< real1 > complex
Definition: qrack_types.hpp:136
QRACK_CONST real1 FP_NORM_EPSILON
Definition: qrack_types.hpp:268
bitCapInt pow2(const bitLenInt &p)
Definition: qrack_functions.hpp:143
QRACK_CONST real1 REAL1_EPSILON
Definition: qrack_types.hpp:208
QRACK_CONST real1 ONE_R1
Definition: qrack_types.hpp:193
QRACK_CONST real1 ZERO_R1
Definition: qrack_types.hpp:191
float real1_f
Definition: qrack_types.hpp:103
QRACK_CONST complex CMPLX_DEFAULT_ARG
Definition: qrack_types.hpp:267
std::shared_ptr< QStabilizer > QStabilizerPtr
Definition: qstabilizer.hpp:46
QRACK_CONST real1 PI_R1
Definition: qrack_types.hpp:186
const bitCapInt ONE_BCI
Definition: qrack_types.hpp:137
const bitCapInt ZERO_BCI
Definition: qrack_types.hpp:138
HALF_CONSTEXPR half abs(half arg)
Absolute value.
Definition: half.hpp:2975
#define HALF_R1_F
Definition: qrack_types.hpp:170
#define bitsInByte
Definition: qrack_types.hpp:162
#define REAL1_DEFAULT_ARG
Definition: qrack_types.hpp:185
#define bitLenInt
Definition: qrack_types.hpp:42
#define ZERO_R1_F
Definition: qrack_types.hpp:168
#define qrack_rand_gen_ptr
Definition: qrack_types.hpp:164
#define bitCapInt
Definition: qrack_types.hpp:66
#define IS_NORM_0(c)
Definition: qrack_types.hpp:29
Definition: qstabilizer.hpp:35
bitCapInt permutation
Definition: qstabilizer.hpp:36
complex amplitude
Definition: qstabilizer.hpp:37
AmplitudeEntry(const bitCapInt &p, const complex &a)
Definition: qstabilizer.hpp:39