Qrack
9.13
General classical-emulating-quantum development framework
|
#include "qengine_gpu_util.hpp"
#include "qfactory.hpp"
#include <ctime>
#include <initializer_list>
#include <map>
Namespaces | |
Qrack | |
GLOSSARY: bitLenInt - "bit-length integer" - unsigned integer ID of qubit position in register bitCapInt - "bit-capacity integer" - unsigned integer single-permutation value of a qubit register (typically "big integer") real1 - "real number (1-dimensional)" - floating-point real-valued number complex - "complex number" - floating-point complex-valued number (with two real1 component dimensions) quid - "quantum (simulator) unique
identifier" - unsigned integer that indexes and IDs running simulators, circuits, and neurons. | |
Macros | |
#define | DIRTY(shard) (shard.isPhaseDirty || shard.isProbDirty) |
#define | IS_AMP_0(c) (norm(c) <= separabilityThreshold) |
#define | IS_1_CMPLX(c) (norm(ONE_CMPLX - (c)) <= FP_NORM_EPSILON) |
#define | SHARD_STATE(shard) ((2 * norm(shard.amp0)) < ONE_R1) |
#define | QUEUED_PHASE(shard) |
#define | CACHED_X(shard) ((shard.pauliBasis == PauliX) && !DIRTY(shard) && !QUEUED_PHASE(shard)) |
#define | CACHED_X_OR_Y(shard) ((shard.pauliBasis != PauliZ) && !DIRTY(shard) && !QUEUED_PHASE(shard)) |
#define | CACHED_Z(shard) ((shard.pauliBasis == PauliZ) && !DIRTY(shard) && !QUEUED_PHASE(shard)) |
#define | CACHED_ZERO(q) |
#define | CACHED_ONE(q) |
#define | CACHED_PLUS(q) |
#define | UNSAFE_CACHED_ZERO_OR_ONE(shard) (!shard.isProbDirty && (shard.pauliBasis == PauliZ) && (IS_NORM_0(shard.amp0) || IS_NORM_0(shard.amp1))) |
#define | UNSAFE_CACHED_X(shard) (!shard.isProbDirty && (shard.pauliBasis == PauliX) && (IS_NORM_0(shard.amp0) || IS_NORM_0(shard.amp1))) |
#define | UNSAFE_CACHED_ONE(shard) (!shard.isProbDirty && (shard.pauliBasis == PauliZ) && IS_NORM_0(shard.amp0)) |
#define | UNSAFE_CACHED_ZERO(shard) (!shard.isProbDirty && (shard.pauliBasis == PauliZ) && IS_NORM_0(shard.amp1)) |
#define | IS_SAME_UNIT(shard1, shard2) (shard1.unit && (shard1.unit == shard2.unit)) |
#define | ARE_CLIFFORD(shard1, shard2) ((engines[0U] == QINTERFACE_STABILIZER_HYBRID) && shard1.isClifford() && shard2.isClifford()) |
#define | BLOCKED_SEPARATE(shard) (shard.unit && shard.unit->isClifford() && !shard.unit->TrySeparate(shard.mapped)) |
#define | IS_PHASE_OR_INVERT(mtrx) ((IS_NORM_0(mtrx[1U]) && IS_NORM_0(mtrx[2U])) || (IS_NORM_0(mtrx[0U]) && IS_NORM_0(mtrx[3U]))) |
#define | CTRLED_GEN_WRAP(ctrld) |
#define | CTRLED_PHASE_INVERT_WRAP(ctrld, ctrldgen, isInvert, top, bottom) |
#define | CTRLED_SWAP_WRAP(ctrld, bare, anti) |
#define | CTRL_GEN_ARGS mappedControls, trnsMtrx, shards[target].mapped, controlPerm |
#define | CTRL_S_ARGS mappedControls, shards[qubit1].mapped, shards[qubit2].mapped |
#define | CTRL_P_ARGS mappedControls, topLeft, bottomRight, shards[target].mapped, controlPerm |
#define | CTRL_I_ARGS mappedControls, topRight, bottomLeft, shards[target].mapped, controlPerm |
#define ARE_CLIFFORD | ( | shard1, | |
shard2 | |||
) | ((engines[0U] == QINTERFACE_STABILIZER_HYBRID) && shard1.isClifford() && shard2.isClifford()) |
#define BLOCKED_SEPARATE | ( | shard | ) | (shard.unit && shard.unit->isClifford() && !shard.unit->TrySeparate(shard.mapped)) |
#define CACHED_ONE | ( | q | ) |
#define CACHED_PLUS | ( | q | ) |
#define CACHED_X | ( | shard | ) | ((shard.pauliBasis == PauliX) && !DIRTY(shard) && !QUEUED_PHASE(shard)) |
#define CACHED_X_OR_Y | ( | shard | ) | ((shard.pauliBasis != PauliZ) && !DIRTY(shard) && !QUEUED_PHASE(shard)) |
#define CACHED_Z | ( | shard | ) | ((shard.pauliBasis == PauliZ) && !DIRTY(shard) && !QUEUED_PHASE(shard)) |
#define CACHED_ZERO | ( | q | ) |
#define CTRL_GEN_ARGS mappedControls, trnsMtrx, shards[target].mapped, controlPerm |
#define CTRL_I_ARGS mappedControls, topRight, bottomLeft, shards[target].mapped, controlPerm |
#define CTRL_P_ARGS mappedControls, topLeft, bottomRight, shards[target].mapped, controlPerm |
#define CTRLED_GEN_WRAP | ( | ctrld | ) |
#define CTRLED_PHASE_INVERT_WRAP | ( | ctrld, | |
ctrldgen, | |||
isInvert, | |||
top, | |||
bottom | |||
) |
#define CTRLED_SWAP_WRAP | ( | ctrld, | |
bare, | |||
anti | |||
) |
#define DIRTY | ( | shard | ) | (shard.isPhaseDirty || shard.isProbDirty) |
#define IS_1_CMPLX | ( | c | ) | (norm(ONE_CMPLX - (c)) <= FP_NORM_EPSILON) |
#define IS_AMP_0 | ( | c | ) | (norm(c) <= separabilityThreshold) |
#define IS_PHASE_OR_INVERT | ( | mtrx | ) | ((IS_NORM_0(mtrx[1U]) && IS_NORM_0(mtrx[2U])) || (IS_NORM_0(mtrx[0U]) && IS_NORM_0(mtrx[3U]))) |
#define IS_SAME_UNIT | ( | shard1, | |
shard2 | |||
) | (shard1.unit && (shard1.unit == shard2.unit)) |
#define QUEUED_PHASE | ( | shard | ) |
#define SHARD_STATE | ( | shard | ) | ((2 * norm(shard.amp0)) < ONE_R1) |
#define UNSAFE_CACHED_ONE | ( | shard | ) | (!shard.isProbDirty && (shard.pauliBasis == PauliZ) && IS_NORM_0(shard.amp0)) |
#define UNSAFE_CACHED_X | ( | shard | ) | (!shard.isProbDirty && (shard.pauliBasis == PauliX) && (IS_NORM_0(shard.amp0) || IS_NORM_0(shard.amp1))) |
#define UNSAFE_CACHED_ZERO | ( | shard | ) | (!shard.isProbDirty && (shard.pauliBasis == PauliZ) && IS_NORM_0(shard.amp1)) |