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.

Warning

doxygenfunction: Unable to resolve function “Qrack::QCircuit::QCircuit” with arguments (bool) in doxygen xml output for project “qrack” from directory: /tmp/qrack/doc/xml. Potential matches:

- QCircuit(bitLenInt qbCount, const std::list<QCircuitGatePtr> &g, bool collapse = true, bool clifford = false)
- QCircuit(bool collapse = true, bool clifford = false)

Warning

doxygenfunction: Unable to resolve function “Qrack::QCircuit::QCircuit” with arguments (bitLenInt, const std::list<QCircuitGatePtr>&, bool) in doxygen xml output for project “qrack” from directory: /tmp/qrack/doc/xml. Potential matches:

- QCircuit(bitLenInt qbCount, const std::list<QCircuitGatePtr> &g, bool collapse = true, bool clifford = false)
- QCircuit(bool collapse = true, bool clifford = false)
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.

void 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, bitCapInt perm)

Controlled gate constructor.

inline Qrack::QCircuitGate::QCircuitGate(bitLenInt trgt, const std::map<bitCapInt, std::shared_ptr<complex>> &pylds, const std::set<bitLenInt> &ctrls)

Uniformly controlled gate constructor (that only accepts control qubits is ascending order)