qermit.utils

class qermit.taskgraph.utils.SymbolsDict

A helper class for standardising interfacing with Circuit Symbolics in qermit. Methods take different containers that hold some kind of symbols representation and return a SymbolsDict object. Methods access self._symbolic_map or use other accessors to modify or add new symbols.

__init__()

Default constructor, creates an empty OrderedDict() object for future symbols to be added to.

__repr__()

Return repr(self).

__str__()

Return str(self).

__weakref__

list of weak references to the object (if defined)

add_symbol(symbol: Union[str, sympy.core.symbol.Symbol])

Adds any passed Symbol (in string form or sympy Symbol type) as a key to dictionary with None value assigned.

Parameters

symbol (Union[str, Symbol]) – Symbol to be added to self._symbolic_map

add_value(symbol: sympy.core.symbol.Symbol, value: float)

Assigns value to self._symbolic_map[symbol]. If symbol not in object then throws an error.

Parameters
  • symbol (Symbol) – Symbol to have value assigned.

  • value (float) – Value to assign to symbol.

get_symbolic_map(symbol_values: numpy.ndarray)Dict[sympy.core.symbol.Symbol, float]

Assigns given values in parameters to keys in self._symbolic_map in order, for a new dictionary object. Returns just this dictionary type.

Parameters

symbol_values (ndarray) – Ordered values to match to ordered keys for new dict object.

Returns

New dict object mapping symbol to value.

Return type

Dict[Symbol, float]

set_values(symbol_values: numpy.ndarray)

Assigns given values in parameters to keys in self._symbolic_map in order, for a new dictionary object.

Parameters

symbol_values (ndarray) – Orderd values to match to ordered keys for new dict object.

Returns

New dict object mapping symbol to value.

Return type

Dict[Symbol, float]

classmethod symbols_from_circuit(circuit: pytket._tket.circuit.Circuit)qermit.taskgraph.utils.SymbolsDict

Given a pytket Circuit, returns a SymbolsDict object capturing given circuits free symbols.

Parameters

circuit (Circuit) – Pytket circuit with potential symbols.

classmethod symbols_from_dict(symbol_dict: Dict[sympy.core.symbol.Symbol, Union[None, float]])qermit.taskgraph.utils.SymbolsDict

Assigns to mit_symbols attribute _symbolic_map straight from passed dictionary of Symbol to None/float.

Parameters

symbol_dict (Dict[Symbol, Union[None, float]) – Dictionary from Circuit symbolics to values.

classmethod symbols_from_list(symbols_list: Iterable[Union[sympy.core.symbol.Symbol, str]])qermit.taskgraph.utils.SymbolsDict

Adds all symbols (or string representing Symbol) as dict entries with no value.

Parameters

symbols_list (Iterable[Union[Symbol, str]) – A list of strings representing Symbols or Symbols.

property symbols_list: Iterable[sympy.core.symbol.Symbol]

Returns all symbols held in dictionary of symbols in SymbolsDict object.

Returns

Iterable containing all keys from _symbolic_map, i.e. all Symbols

Return type

Iterable[Symbol]

class qermit.taskgraph.utils.MeasurementCircuit(symbolic_circuit: pytket._tket.circuit.Circuit, symbols: Optional[qermit.taskgraph.utils.SymbolsDict] = None)

Stores a single measurement circuit that captures one or multiple observable estimations for some Ansatz Circuit.

__init__(symbolic_circuit: pytket._tket.circuit.Circuit, symbols: Optional[qermit.taskgraph.utils.SymbolsDict] = None)

Stores information required to instantiate any MeasurementCircuit with parameterised symbols.

Parameters
  • symbolic_circuit (Circuit) – Measurement circuit, may or may not have symbolics.

  • symbols (SymbolsDict) – SymbolsDict object holding symbols and values for all symbols in Circuit. Default none if circuit not symbolic.

__weakref__

list of weak references to the object (if defined)

property circuit: pytket._tket.circuit.Circuit

Returns measurement circuit stored in oracle.

Returns

Circuit in oracle

Return type

Circuit

get_parametric_circuit()pytket._tket.circuit.Circuit

Substitutes parameters held in SymbolDict into copy of circuit and returns.

Returns

Substituted circuit

Return type

Circuit

property symbols: Tuple[sympy.core.symbol.Symbol, ...]

Converts symbols_list property held in SymbolsDict to a tuple and returns it.

Returns

All Symbols in object

Return type

Tuple[List[Symbol]]

class qermit.taskgraph.utils.ObservableTracker(qubit_pauli_operator: pytket.utils.operators.QubitPauliOperator = {})

Stores all measurement circuits required to get observable expectations for each QubitPauliString in a given QubitPauliOperator.

__init__(qubit_pauli_operator: pytket.utils.operators.QubitPauliOperator = {})

Default constructor, creates an empty dict object for mapping QubitPauliStrings to measurement circuits and the qubits measured to get expectation, along with an empty list for storing measurement circuits and a list for storing partitions.

Parameters

qubit_pauli_operator – QubitPauliOperator for which given ObservableTracker is expected to retain measurement circuits all QubitPauliString keys for before any Backend execution.

__repr__()

Return repr(self).

__str__()

Return str(self).

__weakref__

list of weak references to the object (if defined)

add_measurement_circuit(circuit: qermit.taskgraph.utils.MeasurementCircuit, measurement_info: List[Tuple[pytket._tket.pauli.QubitPauliString, List[pytket._tket.circuit.Bit], bool]])

Adds given measurement circuit to stored _measurement_circuits attribute and for each qubit pauli string and qubits in associated strings, updates dictionary between string and its measurement circuit + bit to measure and whether result should be inverted.

Parameters
  • circuit (MeasurementCircuit) – Measurement circuit to run to get results.

  • measurement_info (List[MeasurementInfo] i.e. List[Tuple[QubitPauliString, List[Bit], bool]]) – Each entry contains a QubitPauliString, the bits required to take expectation over in resulting result and a bool signifying whether expectation should be inverted when taking result.

check_string(string: pytket._tket.pauli.QubitPauliString)bool

Returns true if given QubitPauliString has a measurement circuit stored in self._measurement_circuits.

Parameters

string (QubitPauliString) – Operator measurement circuit existence being checked for.

Returns

True if string has measurement circuit, false if not.

Return type

bool

extend_operator(new_operator: pytket.utils.operators.QubitPauliOperator)

Extends self._qubit_pauli_operator to include tuples in passed operator.

Parameters

new_operator (QubitPauliOperator) – Each QubitPauliString and coefficient added to held operator.

from_ObservableTracker()qermit.taskgraph.utils.ObservableTracker

Copies each class attribute from to_copy to self. Returns self.

Parameters

to_copy ('ObservableTracker') – An alternative ObservableTracker for making a copy of.

Returns

New ObservableTracker object

get_empty_strings()List[pytket._tket.pauli.QubitPauliString]

Returns all strings in operator that don’t have some assigned MeasurementCircuit.

Returns

Strings that require some MeasurementCircuit to be set

Return type

List[QubitPauliString]

get_expectations(results: List[pytket.backends.backendresult.BackendResult])pytket.utils.operators.QubitPauliOperator

For given list of results, returns a QubitPauliOperator giving an expectation for each QubitPauliString held in self._qps_to_indices. Expectation derived by taking parity of counts.

Parameters

results – Result objects to derive counts and then an expectation from.

Returns

Expectation for each QubitPauliString in self._qps_to_indices

Type

QubitPauliOperator

get_measurement_circuits(string: pytket._tket.pauli.QubitPauliString)List[qermit.taskgraph.utils.MeasurementCircuit]

Returns the measurements required to be run for a single QubitPauliString’s expectation.

Parameters

string (QubitPauliString) – QubitPauliString of interest.

Returns

Measurement Circuit run to find expection of QubitPauliString for some undefined ansatz circuit.

Return type

MeasurementCircuit

property measurement_circuits: List[qermit.taskgraph.utils.MeasurementCircuit]

Returns all measurement circuits aded to ObservableTracker via get_measurement_circuit.

Returns

All measurement circuits held in ObservableTracker self._measurement_circuits attirbute.

Return type

List[MeasurementCircuit]

modify_coefficients(new_coefficients: List[Tuple[pytket._tket.pauli.QubitPauliString, float]])

Updates coefficients in held QubitPauliOperator with new coefficients. Each QubitPauliString must already be in self._qubit_pauli_operator

Parameters

new_coefficients (List[Tuple[QubitPauliString, float]]) – Each Tuple contains a QubitPauliString a new coefficient.

property qubit_pauli_operator

Returns stored qubit pauli operator

Returns

QubitPauliOperator object stored in class

Return type

QubitPauliOperator

remove_strings(strings: List[pytket._tket.pauli.QubitPauliString])

Removes passed qubit pauli strings from held QubitPauliOperator and dict from string to index.

Parameters

strings (List[QubitPauliString]) – Qubit Pauli Strings no longer required to be measured by ObservableTracker