24 #define IS_ARG_0(c) IS_SAME(c, ONE_CMPLX)
25 #define IS_ARG_PI(c) IS_OPPOSITE(c, ONE_CMPLX)
336 typedef std::vector<QEngineShard>::iterator
iterator;
360 swapMap[(size_t)start + lcv] += oSize;
384 std::map<QInterfacePtr, bitLenInt> indices;
385 for (
auto&& shard :
shards) {
390 shard.mapped = indices[shard.unit]++;
392 for (
size_t i = 0
U; i <
shards.size(); ++i) {
Definition: qengineshard.hpp:316
std::vector< bitLenInt > swapMap
Definition: qengineshard.hpp:319
std::vector< QEngineShard >::iterator iterator
Definition: qengineshard.hpp:336
std::vector< QEngineShard > shards
Definition: qengineshard.hpp:318
void push_back(const QEngineShard &shard)
Definition: qengineshard.hpp:346
bitLenInt size()
Definition: qengineshard.hpp:344
QEngineShardMap()
Definition: qengineshard.hpp:322
QEngineShardMap(const bitLenInt &size)
Definition: qengineshard.hpp:327
void swap(bitLenInt qubit1, bitLenInt qubit2)
Definition: qengineshard.hpp:380
void erase(bitLenInt begin, bitLenInt end)
Definition: qengineshard.hpp:364
void insert(bitLenInt start, QEngineShardMap &toInsert)
Definition: qengineshard.hpp:352
iterator begin()
Definition: qengineshard.hpp:340
iterator end()
Definition: qengineshard.hpp:342
void reindex()
Definition: qengineshard.hpp:382
QEngineShard & operator[](const bitLenInt &i)
Definition: qengineshard.hpp:338
Associates a QInterface object with a set of bits.
Definition: qengineshard.hpp:50
void CombineGates()
If this bit is both control and target of another bit, try to combine the operations into one gate.
Definition: qengineshard.hpp:252
void AddBuffer(QEngineShardPtr p, ShardToPhaseMap &localMap, GetBufferFn remoteFn)
Definition: qengineshard.cpp:110
void OptimizeBothTargets()
Definition: qengineshard.cpp:165
void AddAntiInversionAngles(QEngineShardPtr control, const complex &bottomLeft, const complex &topRight)
Definition: qengineshard.hpp:214
void AddAngles(QEngineShardPtr control, const complex &cmplxDiff, const complex &cmplxSame, AddRemoveFn localFn, ShardToPhaseMap &localMap, AddRemoveFn remoteFn)
Definition: qengineshard.cpp:119
void DumpControlOf()
Definition: qengineshard.hpp:163
QEngineShard(QInterfacePtr u, const bitLenInt &mapping)
Definition: qengineshard.hpp:118
ShardToPhaseMap & GetAntiControlsShards()
Definition: qengineshard.hpp:80
void DumpMultiBit()
Definition: qengineshard.cpp:48
void MakePhaseControlledBy(QEngineShardPtr p)
Definition: qengineshard.hpp:181
void AddPhaseAngles(QEngineShardPtr control, const complex &topLeft, const complex &bottomRight)
Definition: qengineshard.hpp:197
complex amp0
Definition: qengineshard.hpp:63
ShardToPhaseMap & GetControlsShards()
Definition: qengineshard.hpp:79
void FlipPhaseAnti()
Definition: qengineshard.cpp:255
void RemoveIdentityBuffers(ShardToPhaseMap &localMap, GetBufferFn remoteMapGet)
Definition: qengineshard.cpp:301
void OptimizeAntiTargets()
Definition: qengineshard.hpp:239
bool ClampAmps()
Definition: qengineshard.cpp:26
bitLenInt mapped
Definition: qengineshard.hpp:60
void(QEngineShard::* OptimizeFn)()
Definition: qengineshard.hpp:53
void OptimizeAntiControls()
Definition: qengineshard.hpp:234
ShardToPhaseMap antiTargetOfShards
Definition: qengineshard.hpp:73
void RemovePhaseBuffers(ShardToPhaseMap &localMap, GetBufferFn remoteMapGet)
Definition: qengineshard.cpp:321
void CommutePhase(const complex &topLeft, const complex &bottomRight)
Definition: qengineshard.cpp:278
bool isProbDirty
Definition: qengineshard.hpp:61
ShardToPhaseMap targetOfShards
Definition: qengineshard.hpp:71
void RemoveControl(QEngineShardPtr p)
Definition: qengineshard.hpp:147
bitLenInt GetQubitCount()
Definition: qengineshard.hpp:296
void DumpAntiControlOf()
Definition: qengineshard.hpp:164
bool isClifford()
Definition: qengineshard.hpp:305
QEngineShard()
Definition: qengineshard.hpp:85
QInterfacePtr unit
Definition: qengineshard.hpp:59
void MakePhaseAntiControlledBy(QEngineShardPtr p)
Definition: qengineshard.hpp:183
void RemoveTarget(QEngineShardPtr p)
Definition: qengineshard.hpp:148
void RemoveAntiTarget(QEngineShardPtr p)
Definition: qengineshard.hpp:153
QEngineShard(const bool &set, const complex &rand_phase=ONE_CMPLX)
Definition: qengineshard.hpp:101
void RemoveBuffer(QEngineShardPtr p, ShardToPhaseMap &localMap, GetBufferFn remoteMapGet)
Definition: qengineshard.cpp:72
void MakePhaseAntiControlOf(QEngineShardPtr p)
Definition: qengineshard.hpp:187
ShardToPhaseMap & GetAntiTargetOfShards()
Definition: qengineshard.hpp:82
void OptimizeBuffer(ShardToPhaseMap &localMap, GetBufferFn remoteMapGet, AddAnglesFn phaseFn, bool makeThisControl)
Definition: qengineshard.cpp:141
void AddAntiPhaseAngles(QEngineShardPtr control, const complex &bottomRight, const complex &topLeft)
Definition: qengineshard.hpp:202
void ClearInvertPhase()
Definition: qengineshard.hpp:286
real1_f Prob()
Definition: qengineshard.hpp:297
void AddInversionAngles(QEngineShardPtr control, const complex &topRight, const complex &bottomLeft)
Definition: qengineshard.hpp:207
ShardToPhaseMap & GetTargetOfShards()
Definition: qengineshard.hpp:81
void DumpPhaseBuffers()
Definition: qengineshard.hpp:271
ShardToPhaseMap controlsShards
Definition: qengineshard.hpp:67
Pauli pauliBasis
Definition: qengineshard.hpp:65
void DumpBuffer(OptimizeFn optimizeFn, ShardToPhaseMap &localMap, AddRemoveFn remoteFn)
Definition: qengineshard.cpp:81
ShardToPhaseMap &(QEngineShard::* GetBufferFn)()
Definition: qengineshard.hpp:52
void(QEngineShard::* AddRemoveFn)(QEngineShardPtr)
Definition: qengineshard.hpp:54
void MakePhaseControlOf(QEngineShardPtr p)
Definition: qengineshard.hpp:182
void SwapTargetAnti(QEngineShardPtr control)
Definition: qengineshard.cpp:236
void OptimizeTargets()
Definition: qengineshard.hpp:230
complex amp1
Definition: qengineshard.hpp:64
void DumpSamePhaseAntiControlOf()
Definition: qengineshard.hpp:172
bool found
Definition: qengineshard.hpp:75
void MakeDirty()
Definition: qengineshard.hpp:134
bool IsInvertTarget()
Definition: qengineshard.cpp:399
void RemoveAntiControl(QEngineShardPtr p)
Definition: qengineshard.hpp:149
void DumpSamePhaseControlOf()
Definition: qengineshard.hpp:168
ShardToPhaseMap antiControlsShards
Definition: qengineshard.hpp:69
bool IsInvertControl()
Definition: qengineshard.cpp:382
void(QEngineShard::* AddAnglesFn)(QEngineShardPtr control, const complex &cmplxDiff, const complex &cmplxSame)
Definition: qengineshard.hpp:55
void ClearMapInvertPhase(ShardToPhaseMap &shards)
Definition: qengineshard.cpp:416
bool isPhaseDirty
Definition: qengineshard.hpp:62
void DumpSamePhaseBuffer(OptimizeFn optimizeFn, ShardToPhaseMap &localMap, AddRemoveFn remoteFn)
Definition: qengineshard.cpp:91
void CombineBuffers(GetBufferFn targetMapGet, GetBufferFn controlMapGet, AddAnglesFn angleFn)
Definition: qengineshard.cpp:208
void CommuteH()
Definition: qengineshard.cpp:340
void OptimizeControls()
Definition: qengineshard.hpp:226
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
std::shared_ptr< PhaseShard > PhaseShardPtr
Definition: qengineshard.hpp:46
void U(quid sid, bitLenInt q, real1_f theta, real1_f phi, real1_f lambda)
(External API) 3-parameter unitary gate
Definition: wasm_api.cpp:1143
std::complex< real1 > complex
Definition: qrack_types.hpp:128
QRACK_CONST real1 FP_NORM_EPSILON
Definition: qrack_types.hpp:258
double norm(const complex2 &c)
Definition: complex16x2simd.hpp:101
QRACK_CONST complex ONE_CMPLX
Definition: qrack_types.hpp:252
float real1_f
Definition: qrack_types.hpp:95
QRACK_CONST complex I_CMPLX
Definition: qrack_types.hpp:254
std::map< QEngineShardPtr, PhaseShardPtr > ShardToPhaseMap
Definition: qengineshard.hpp:47
Pauli
Enumerated list of Pauli bases.
Definition: pauli.hpp:19
@ PauliZ
Pauli Z operator. Corresponds to Q# constant "PauliZ.".
Definition: pauli.hpp:27
QRACK_CONST complex ZERO_CMPLX
Definition: qrack_types.hpp:253
std::map< QInterface *, std::map< quid, bitLenInt > > shards
Definition: wasm_api.cpp:240
QEngineShard * QEngineShardPtr
Definition: qengineshard.hpp:44
#define bitLenInt
Definition: qrack_types.hpp:38
Caches controlled gate phase between shards, (as a case of "gate fusion" optimization particularly us...
Definition: qengineshard.hpp:31
complex cmplxSame
Definition: qengineshard.hpp:33
PhaseShard()
Definition: qengineshard.hpp:36
bool isInvert
Definition: qengineshard.hpp:34
complex cmplxDiff
Definition: qengineshard.hpp:32