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
- 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