tket
Loading...
Searching...
No Matches
Namespaces | Functions
Diagonalisation.cpp File Reference
#include "tket/Diagonalisation/Diagonalisation.hpp"
#include <tkassert/Assert.hpp>
#include "tket/PauliGraph/ConjugatePauliFunctions.hpp"
#include "tket/Utils/UnitID.hpp"
Include dependency graph for Diagonalisation.cpp:

Go to the source code of this file.

Namespaces

namespace  tket
 Defines tket::DeviceCharacterisation, used in NoiseAwarePlacement and in commute_SQ_gates_through_SWAPS as a simple device noise model.
 

Functions

void tket::check_easy_diagonalise (std::list< SpSymPauliTensor > &gadgets, std::set< Qubit > &qubits, Circuit &circ)
 Check whether there are any qubits which only requires a single qubit Clifford to make all Paulis I or Z.
 
std::optional< std::pair< Pauli, Pauli > > tket::check_pair_compatibility (const Qubit &qb1, const Qubit &qb2, const std::list< SpSymPauliTensor > &gadgets)
 Given two qubits, attempt to find a basis in which a single CX will make the Paulis on one of qubits fully diagonal.
 
void tket::greedy_diagonalise (const std::list< SpSymPauliTensor > &gadgets, std::set< Qubit > &qubits, Conjugations &conjugations, Circuit &circ, CXConfigType cx_config)
 Diagonalise a qubit greedily by finding the Pauli Gadget with the lowest residual support over the non-diagonal qubits, and apply single qubit Cliffords and CXs to make it a ZIII...I string.
 
Circuit tket::mutual_diagonalise (std::list< SpSymPauliTensor > &gadgets, std::set< Qubit > qubits, CXConfigType cx_config)
 Diagonalise a mutually commuting set of Pauli strings.
 
void tket::apply_conjugations (SpSymPauliTensor &qps, const Conjugations &conjugations)
 Applies Clifford conjugations to a SpSymPauliTensor.
 
std::pair< Circuit, Qubittket::reduce_pauli_to_z (const SpPauliStabiliser &pauli, CXConfigType cx_config)
 Given a Pauli tensor P, produces a short Clifford circuit C which maps P to Z on a single qubit, i.e.
 
std::pair< Circuit, std::optional< Qubit > > tket::reduce_overlap_of_paulis (SpPauliStabiliser &pauli0, SpPauliStabiliser &pauli1, CXConfigType cx_config, bool allow_matching_final=false)
 Given a pair of (either commuting or anticommuting) Pauli tensors P0, P1, produces a short Clifford circuit C which maps P0 and P1 to strings which overlap on at most one qubit (which is also returned).
 
std::pair< Circuit, Qubittket::reduce_anticommuting_paulis_to_z_x (SpPauliStabiliser pauli0, SpPauliStabiliser pauli1, CXConfigType cx_config)
 Given a pair of anticommuting Pauli tensors P0, P1, produces a short Clifford circuit C which maps P0 to Z and P1 to X on the same qubit, i.e.
 
std::tuple< Circuit, Qubit, Qubittket::reduce_commuting_paulis_to_zi_iz (SpPauliStabiliser pauli0, SpPauliStabiliser pauli1, CXConfigType cx_config)
 Given a pair of commuting Pauli tensors P0, P1, produces a short Clifford circuit C which maps P0 and P1 to Z on different qubits, i.e.