|
Qrack
10.0
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_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_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)) |