QCircuit¶
Defined in QCircuit.hpp.
This is a class that represents and optimizes a simple quantum “circuit,” (without directly simulating it). Its constructor argument turns on-the-fly circuit simplification on or off.
Via QCircuitGate, the fundamental “atomic” gate of a QCircuit is “uniformly controlled.” (See Quantum circuits with uniformly controlled one-qubit gates.) In other words, a different “target qubit payload” (as a 2x2 operator on a single qubit, controlled) is associated with every logical permutation of control qubits, which can greatly optimize performance through coalescence in an efficient form for state vector simulation.
-
inline Qrack::QCircuit::QCircuit(bool collapse = true, bool clifford = false)¶
Default constructor.
-
inline Qrack::QCircuit::QCircuit(bitLenInt qbCount, const std::list<QCircuitGatePtr> &g, bool collapse = true, bool clifford = false)¶
Manual constructor.
-
inline QCircuitPtr Qrack::QCircuit::Clone()¶
-
inline QCircuitPtr Qrack::QCircuit::Inverse()¶
-
inline void Qrack::QCircuit::Append(QCircuitPtr circuit)¶
Append circuit (with identical qubit index mappings) at the end of this circuit.
-
inline void Qrack::QCircuit::Combine(QCircuitPtr circuit)¶
Combine circuit (with identical qubit index mappings) at the end of this circuit, by acting all additional gates in sequence.
-
bool Qrack::QCircuit::AppendGate(QCircuitGatePtr nGate)¶
Add a gate to the gate sequence.
-
void Qrack::QCircuit::Run(QInterfacePtr qsim)¶
Run this circuit.
-
inline bitLenInt Qrack::QCircuit::GetQubitCount()¶
Get the (automatically calculated) count of qubits in this circuit, so far.
-
inline void Qrack::QCircuit::SetQubitCount(bitLenInt n)¶
Set the count of qubits in this circuit, so far.
-
inline std::list<QCircuitGatePtr> Qrack::QCircuit::GetGateList()¶
Return the raw list of gates.
-
inline void Qrack::QCircuit::SetGateList(std::list<QCircuitGatePtr> gl)¶
Set the raw list of gates.
-
inline void Qrack::QCircuit::Swap(bitLenInt q1, bitLenInt q2)¶
Add a
Swap
gate to the gate sequence.
-
inline bool Qrack::QCircuit::IsNonPhaseTarget(bitLenInt qubit)¶
Check if an index is any target qubit of this circuit.
-
inline void Qrack::QCircuit::DeletePhaseTarget(bitLenInt qubit, bool eigen)¶
(If the qubit is not a target of a non-phase gate…) Delete this qubits’ controls and phase targets.
-
inline QCircuitPtr Qrack::QCircuit::PastLightCone(std::set<bitLenInt> &qubits)¶
Return (as a new QCircuit) just the gates on the past light cone of a set of qubit indices.
QCircuitGate¶
-
inline Qrack::QCircuitGate::QCircuitGate()¶
Identity gate constructor.
-
inline Qrack::QCircuitGate::QCircuitGate(bitLenInt q1, bitLenInt q2)¶
Swap
gate constructor
-
inline Qrack::QCircuitGate::QCircuitGate(bitLenInt trgt, const complex matrix[])¶
Single-qubit gate constructor.
-
inline Qrack::QCircuitGate::QCircuitGate(bitLenInt trgt, const complex matrix[], const std::set<bitLenInt> &ctrls, const bitCapInt &perm)¶
Controlled gate constructor.
Uniformly controlled gate constructor (that only accepts control qubits is ascending order)