|
Maestro 0.1.0
Unified interface for quantum circuit simulation
|
Interface class for a quantum computing simulator state. More...
#include <State.h>
Public Member Functions | |
| virtual | ~IState ()=default |
| Virtual destructor. | |
| virtual void | Initialize ()=0 |
| Initializes the state. | |
| virtual void | InitializeState (size_t num_qubits, std::vector< std::complex< double > > &litudes)=0 |
| Initializes the state. | |
| virtual void | InitializeState (size_t num_qubits, AER::Vector< std::complex< double > > &litudes)=0 |
| Initializes the state. | |
| virtual void | InitializeState (size_t num_qubits, Eigen::VectorXcd &litudes)=0 |
| Initializes the state. | |
| virtual void | Reset ()=0 |
| Just resets the state to 0. | |
| virtual void | Configure (const char *key, const char *value)=0 |
| Configures the state. | |
| virtual std::string | GetConfiguration (const char *key) const =0 |
| Returns configuration value. | |
| virtual size_t | AllocateQubits (size_t num_qubits)=0 |
| Allocates qubits. | |
| virtual size_t | GetNumberOfQubits () const =0 |
| Returns the number of qubits. | |
| virtual void | Clear ()=0 |
| Clears the state. | |
| virtual size_t | Measure (const Types::qubits_vector &qubits)=0 |
| Performs a measurement on the specified qubits. | |
| virtual void | ApplyReset (const Types::qubits_vector &qubits)=0 |
| Performs a reset of the specified qubits. | |
| virtual double | Probability (Types::qubit_t outcome)=0 |
| Returns the probability of the specified outcome. | |
| virtual std::complex< double > | Amplitude (Types::qubit_t outcome)=0 |
| Returns the amplitude of the specified state. | |
| virtual std::vector< double > | AllProbabilities ()=0 |
| Returns the probabilities of all possible outcomes. | |
| virtual std::vector< double > | Probabilities (const Types::qubits_vector &qubits)=0 |
| Returns the probabilities of the specified outcomes. | |
| virtual std::unordered_map< Types::qubit_t, Types::qubit_t > | SampleCounts (const Types::qubits_vector &qubits, size_t shots=1000)=0 |
| Returns the counts of the outcomes of measurement of the specified qubits, for repeated measurements. | |
| virtual double | ExpectationValue (const std::string &pauliString)=0 |
| Returns the expected value of a Pauli string. | |
| void | RegisterObserver (const std::shared_ptr< ISimulatorObserver > &observer) |
| Registers an observer. | |
| void | UnregisterObserver (const std::shared_ptr< ISimulatorObserver > &observer) |
| Unregisters an observer. | |
| void | ClearObservers () |
| Clears all observers. | |
| virtual SimulatorType | GetType () const =0 |
| Returns the type of simulator. | |
| virtual SimulationType | GetSimulationType () const =0 |
| Returns the type of simulation. | |
| virtual void | Flush ()=0 |
| Flushes the applied operations. | |
| virtual void | SaveStateToInternalDestructive ()=0 |
| Saves the state to internal storage. | |
| virtual void | RestoreInternalDestructiveSavedState ()=0 |
| Restores the state from the internally saved state. | |
| virtual void | SaveState ()=0 |
| Saves the state to internal storage. | |
| virtual void | RestoreState ()=0 |
| Restores the state from the internally saved state. | |
| virtual std::complex< double > | AmplitudeRaw (Types::qubit_t outcome)=0 |
| Gets the amplitude. | |
| virtual void | SetMultithreading (bool multithreading=true)=0 |
| Enable/disable multithreading. | |
| virtual bool | GetMultithreading () const =0 |
| Get the multithreading flag. | |
| virtual bool | IsQcsim () const =0 |
| Returns if the simulator is a qcsim simulator. | |
| virtual Types::qubit_t | MeasureNoCollapse ()=0 |
| Measures all the qubits without collapsing the state. | |
Protected Member Functions | |
| void | DontNotify () |
| Stops notifying observers. | |
| void | Notify () |
| Starts notifying observers. | |
| void | NotifyObservers (const Types::qubits_vector &affectedQubits) |
| Notifies observers. | |
Interface class for a quantum computing simulator state.
Use this interface if only the state of the simulator is required.
|
virtualdefault |
Virtual destructor.
Since this is a base class, the destructor should be virtual.
|
pure virtual |
Allocates qubits.
This function is called to allocate qubits.
| num_qubits | The number of qubits to allocate. |
|
pure virtual |
Returns the probabilities of all possible outcomes.
Use it to obtain the probabilities of all possible outcomes.
|
pure virtual |
Returns the amplitude of the specified state.
Use it to obtain the amplitude of the specified state.
| outcome | The outcome to obtain the amplitude for. |
|
pure virtual |
Gets the amplitude.
Gets the amplitude, from the internal storage if needed. This is needed only for the composite simulator, for an optimization for qiskit aer.
|
pure virtual |
Performs a reset of the specified qubits.
Measures the qubits and for those that are 1, applies X on them
| qubits | A vector with the qubits to be reset. |
|
pure virtual |
Clears the state.
Sets the number of allocated qubits to 0 and clears the state. After this qubits allocation is required then calling IState::AllocateQubits in order to use the simulator.
|
inline |
|
pure virtual |
Configures the state.
This function is called to configure the simulator. Currently only aer supports configuration, qcsim will gracefully ignore this.
| key | The key of the configuration option. |
| value | The value of the configuration. |
|
inlineprotected |
|
pure virtual |
Returns the expected value of a Pauli string.
Use it to obtain the expected value of a Pauli string. The Pauli string is a string of characters representing the Pauli operators, e.g. "XIZY". The length of the string should be less or equal to the number of qubits (if it's less, it's completed with I).
| pauliString | The Pauli string to obtain the expected value for. |
|
pure virtual |
Flushes the applied operations.
This function is called to flush the applied operations. qcsim applies them right away, so this has no effect on it, but qiskit aer does not.
|
pure virtual |
Returns configuration value.
This function is called get a configuration value.
| key | The key of the configuration value. |
|
pure virtual |
Get the multithreading flag.
Returns the multithreading flag.
|
pure virtual |
Returns the number of qubits.
This function is called to obtain the number of the allocated qubits.
|
pure virtual |
Returns the type of simulation.
Returns the type of simulation.
|
pure virtual |
Returns the type of simulator.
Returns the type of simulator.
|
pure virtual |
Initializes the state.
This function is called when the simulator is initialized. Call it after the qubits allocation.
|
pure virtual |
Initializes the state.
This function is called when the simulator is initialized. Call it only on a non-initialized state. This is good only for a statevector simulator and should be used only by calling from a composite simulator.
| num_qubits | The number of qubits to initialize the state with. |
| amplitudes | A vector with the amplitudes to initialize the state with. |
|
pure virtual |
Initializes the state.
This function is called when the simulator is initialized. Call it only on a non-initialized state. This is good only for a statevector simulator and should be used only by calling from a composite simulator.
| num_qubits | The number of qubits to initialize the state with. |
| amplitudes | A vector with the amplitudes to initialize the state with. |
|
pure virtual |
Initializes the state.
This function is called when the simulator is initialized. Call it only on a non-initialized state. This is good only for a statevector simulator and should be used only by calling from a composite simulator.
| num_qubits | The number of qubits to initialize the state with. |
| amplitudes | A vector with the amplitudes to initialize the state with. |
|
pure virtual |
Returns if the simulator is a qcsim simulator.
Returns if the simulator is a qcsim simulator. This is just a helper function to ease things up: qcsim has different functionality exposed sometimes so it's good to know if we deal with qcsim or with qiskit aer.
|
pure virtual |
Performs a measurement on the specified qubits.
| qubits | A vector with the qubits to be measured. |
|
pure virtual |
Measures all the qubits without collapsing the state.
Measures all the qubits without collapsing the state, allowing to perform multiple shots. This is to be used only internally, only for the statevector simulators (or those based on them, as the composite ones). For the qiskit aer case, SaveStateToInternalDestructive is needed to be called before this. If one wants to use the simulator after such measurement(s), RestoreInternalDestructiveSavedState should be called at the end.
|
inlineprotected |
|
inlineprotected |
|
pure virtual |
Returns the probabilities of the specified outcomes.
Use it to obtain the probabilities of the specified outcomes.
| qubits | A vector with the qubits configuration outcomes. |
|
pure virtual |
Returns the probability of the specified outcome.
Use it to obtain the probability to obtain the specified outcome, if all qubits are measured.
| outcome | The outcome to obtain the probability for. |
|
inline |
Registers an observer.
Registers an observer that will be notified when the state changes.
| observer | A smart pointer to an observer. |
|
pure virtual |
Just resets the state to 0.
Does not destroy the internal state, just resets it to zero (as a 'reset' op on each qubit would do).
|
pure virtual |
Restores the state from the internally saved state.
Restores the state from the internally saved state, if needed. This does something only for qiskit aer.
|
pure virtual |
Restores the state from the internally saved state.
Restores the state from the internally saved state, if needed. To be used in order to recover the state after doing measurements, for multiple shots executions. In the first phase, only qcsim will implement this.
|
pure virtual |
Returns the counts of the outcomes of measurement of the specified qubits, for repeated measurements.
Use it to obtain the counts of the outcomes of the specified qubits measurements. The state is not collapsed, so the measurement can be repeated 'shots' times.
| qubits | A vector with the qubits to be measured. |
| shots | The number of shots to perform. |
|
pure virtual |
Saves the state to internal storage.
Saves the state to internal storage, if needed. Calling this will not destroy the internal state, unlike the 'Destructive' variant. To be used in order to recover the state after doing measurements, for multiple shots executions. In the first phase, only qcsim will implement this.
|
pure virtual |
Saves the state to internal storage.
Saves the state to internal storage, if needed. Calling this should consider as the simulator is gone to uninitialized. Either do not use it except for getting amplitudes, or reinitialize the simulator after calling it. This is needed only for the composite simulator, for an optimization for qiskit aer.
|
pure virtual |
Enable/disable multithreading.
Enable/disable multithreading. Default is enabled.
| multithreading | A flag to indicate if multithreading should be enabled. |
|
inline |
Unregisters an observer.
Unegisters an observer.
| observer | A smart pointer to an observer. |