qermit.utils#

class qermit.taskgraph.utils.SymbolsDict[source]#

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__() None[source]#

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

__repr__()[source]#

Return repr(self).

__str__()[source]#

Return str(self).

__weakref__#

list of weak references to the object (if defined)

add_symbol(symbol: str | Symbol)[source]#

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: Symbol, value: float)[source]#

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: ndarray) Dict[Symbol, float][source]#

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: ndarray)[source]#

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: Circuit) SymbolsDict[source]#

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[Symbol, None | float]) SymbolsDict[source]#

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[Symbol | str]) SymbolsDict[source]#

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[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: Circuit, symbols: SymbolsDict | None = None)[source]#

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

__init__(symbolic_circuit: Circuit, symbols: SymbolsDict | None = None)[source]#

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: Circuit#

Returns measurement circuit stored in oracle.

Returns:

Circuit in oracle

Return type:

Circuit

get_parametric_circuit() Circuit[source]#

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

Returns:

Substituted circuit

Return type:

Circuit

property symbols: Tuple[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: QubitPauliOperator = {})[source]#

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

__init__(qubit_pauli_operator: QubitPauliOperator = {})[source]#

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__()[source]#

Return repr(self).

__str__()[source]#

Return str(self).

__weakref__#

list of weak references to the object (if defined)

add_measurement_circuit(circuit: MeasurementCircuit, measurement_info: List[Tuple[QubitPauliString, List[Bit], bool]])[source]#

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: QubitPauliString) bool[source]#

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

clear() None[source]#

Erases all held information that is not the qubit pauli operator.

extend_operator(new_operator: QubitPauliOperator)[source]#

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() ObservableTracker[source]#

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[QubitPauliString][source]#

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[BackendResult]) QubitPauliOperator[source]#

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: QubitPauliString) List[MeasurementCircuit][source]#

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[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[QubitPauliString, float]])[source]#

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[QubitPauliString])[source]#

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