|
Maestro 0.2.5
Unified interface for quantum circuit simulation
|
Interface class for a quantum computing simulator. More...
#include <Simulator.h>
Inheritance diagram for Simulators::ISimulator:
Collaboration diagram for Simulators::ISimulator:Public Member Functions | |
| virtual size_t | AllocateQubits (size_t num_qubits)=0 |
| Allocates qubits. | |
| virtual std::vector< double > | AllProbabilities ()=0 |
| Returns the probabilities of all possible outcomes. | |
| virtual std::complex< double > | Amplitude (Types::qubit_t outcome)=0 |
| Returns the amplitude of the specified state. | |
| virtual std::complex< double > | AmplitudeRaw (Types::qubit_t outcome)=0 |
| Gets the amplitude. | |
| virtual void | ApplyCCX (Types::qubit_t qubit0, Types::qubit_t qubit1, Types::qubit_t qubit2)=0 |
| Applies a controlled controlled not gate to the qubits. | |
| virtual void | ApplyCH (Types::qubit_t ctrl_qubit, Types::qubit_t tgt_qubit)=0 |
| Applies a CH gate to the qubits. | |
| virtual void | ApplyCP (Types::qubit_t ctrl_qubit, Types::qubit_t tgt_qubit, double lambda)=0 |
| Applies a CP gate to the qubits. | |
| virtual void | ApplyCRx (Types::qubit_t ctrl_qubit, Types::qubit_t tgt_qubit, double theta)=0 |
| Applies a CRx gate to the qubits. | |
| virtual void | ApplyCRy (Types::qubit_t ctrl_qubit, Types::qubit_t tgt_qubit, double theta)=0 |
| Applies a CRy gate to the qubits. | |
| virtual void | ApplyCRz (Types::qubit_t ctrl_qubit, Types::qubit_t tgt_qubit, double theta)=0 |
| Applies a CRz gate to the qubits. | |
| virtual void | ApplyCSwap (Types::qubit_t ctrl_qubit, Types::qubit_t qubit0, Types::qubit_t qubit1)=0 |
| Applies a controlled swap gate to the qubits. | |
| virtual void | ApplyCSx (Types::qubit_t ctrl_qubit, Types::qubit_t tgt_qubit)=0 |
| Applies a CSx gate to the qubits. | |
| virtual void | ApplyCSxDAG (Types::qubit_t ctrl_qubit, Types::qubit_t tgt_qubit)=0 |
| Applies a CSx dagger gate to the qubits. | |
| virtual void | ApplyCU (Types::qubit_t ctrl_qubit, Types::qubit_t tgt_qubit, double theta, double phi, double lambda, double gamma)=0 |
| Applies a controlled U gate to the qubits. | |
| virtual void | ApplyCX (Types::qubit_t ctrl_qubit, Types::qubit_t tgt_qubit)=0 |
| Applies a CX gate to the qubits. | |
| virtual void | ApplyCY (Types::qubit_t ctrl_qubit, Types::qubit_t tgt_qubit)=0 |
| Applies a CY gate to the qubits. | |
| virtual void | ApplyCZ (Types::qubit_t ctrl_qubit, Types::qubit_t tgt_qubit)=0 |
| Applies a CZ gate to the qubits. | |
| virtual void | ApplyH (Types::qubit_t qubit)=0 |
| Applies a Hadamard gate to the qubit. | |
| virtual void | ApplyK (Types::qubit_t qubit)=0 |
| Applies a K gate to the qubit. | |
| virtual void | ApplyNop ()=0 |
| Applies a nop. | |
| virtual void | ApplyP (Types::qubit_t qubit, double lambda)=0 |
| Applies a phase shift gate to the qubit. | |
| virtual void | ApplyReset (const Types::qubits_vector &qubits)=0 |
| Performs a reset of the specified qubits. | |
| virtual void | ApplyRx (Types::qubit_t qubit, double theta)=0 |
| Applies a Rx gate to the qubit. | |
| virtual void | ApplyRy (Types::qubit_t qubit, double theta)=0 |
| Applies a Ry gate to the qubit. | |
| virtual void | ApplyRz (Types::qubit_t qubit, double theta)=0 |
| Applies a Rz gate to the qubit. | |
| virtual void | ApplyS (Types::qubit_t qubit)=0 |
| Applies a S gate to the qubit. | |
| virtual void | ApplySDG (Types::qubit_t qubit)=0 |
| Applies a S dagger gate to the qubit. | |
| virtual void | ApplySwap (Types::qubit_t qubit0, Types::qubit_t qubit1)=0 |
| Applies a swap gate to the qubits. | |
| virtual void | ApplySx (Types::qubit_t qubit)=0 |
| Applies a Sx gate to the qubit. | |
| virtual void | ApplySxDAG (Types::qubit_t qubit)=0 |
| Applies a Sx dagger gate to the qubit. | |
| virtual void | ApplyT (Types::qubit_t qubit)=0 |
| Applies a T gate to the qubit. | |
| virtual void | ApplyTDG (Types::qubit_t qubit)=0 |
| Applies a T dagger gate to the qubit. | |
| virtual void | ApplyU (Types::qubit_t qubit, double theta, double phi, double lambda, double gamma)=0 |
| Applies a U gate to the qubit. | |
| virtual void | ApplyX (Types::qubit_t qubit)=0 |
| Applies a not gate to the qubit. | |
| virtual void | ApplyY (Types::qubit_t qubit)=0 |
| Applies a Y gate to the qubit. | |
| virtual void | ApplyZ (Types::qubit_t qubit)=0 |
| Applies a Z gate to the qubit. | |
| virtual void | Clear ()=0 |
| Clears the state. | |
| void | ClearObservers () |
| Clears all observers. | |
| virtual std::unique_ptr< ISimulator > | Clone ()=0 |
| Clones the simulator. | |
| virtual void | Configure (const char *key, const char *value)=0 |
| Configures the state. | |
| virtual double | ExpectationValue (const std::string &pauliString)=0 |
| Returns the expected value of a Pauli string. | |
| virtual void | Flush ()=0 |
| Flushes the applied operations. | |
| virtual std::string | GetConfiguration (const char *key) const =0 |
| Returns configuration value. | |
| virtual long long int | GetGatesCounter () const |
| Returns the gates counter. | |
| virtual bool | GetMultithreading () const =0 |
| Get the multithreading flag. | |
| virtual size_t | GetNumberOfQubits () const =0 |
| Returns the number of qubits. | |
| std::shared_ptr< ISimulator > | getptr () |
| Get a shared pointer to this object. | |
| virtual SimulationType | GetSimulationType () const =0 |
| Returns the type of simulation. | |
| virtual SimulatorType | GetType () const =0 |
| Returns the type of simulator. | |
| virtual void | IncrementGatesCounter () |
| Increments the gates counter. | |
| virtual void | Initialize ()=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 | InitializeState (size_t num_qubits, std::vector< std::complex< double > > &litudes)=0 |
| Initializes the state. | |
| virtual bool | IsQcsim () const =0 |
| Returns if the simulator is a qcsim simulator. | |
| virtual size_t | Measure (const Types::qubits_vector &qubits)=0 |
| Performs a measurement on the specified qubits. | |
| virtual std::vector< bool > | MeasureMany (const Types::qubits_vector &qubits)=0 |
| Performs a measurement on the specified qubits. | |
| virtual Types::qubit_t | MeasureNoCollapse ()=0 |
| Measures all the qubits without collapsing the state. | |
| virtual std::vector< bool > | MeasureNoCollapseMany ()=0 |
| Measures all the qubits without collapsing the state. | |
| virtual std::vector< double > | Probabilities (const Types::qubits_vector &qubits)=0 |
| Returns the probabilities of the specified outcomes. | |
| virtual double | Probability (Types::qubit_t outcome)=0 |
| Returns the probability of the specified outcome. | |
| virtual std::complex< double > | ProjectOnZero ()=0 |
| Projects the state onto the zero state. | |
| void | RegisterObserver (const std::shared_ptr< ISimulatorObserver > &observer) |
| Registers an observer. | |
| virtual void | Reset ()=0 |
| Just resets the state to 0. | |
| virtual void | RestoreInternalDestructiveSavedState ()=0 |
| Restores the state from the internally saved state. | |
| virtual void | RestoreState ()=0 |
| Restores the state from the internally saved state. | |
| 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 std::unordered_map< std::vector< bool >, Types::qubit_t > | SampleCountsMany (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 void | SaveState ()=0 |
| Saves the state to internal storage. | |
| virtual void | SaveStateToInternalDestructive ()=0 |
| Saves the state to internal storage. | |
| virtual void | SetGatesCounter (long long int) |
| Sets the gates counter. | |
| virtual void | SetInitialQubitsMap (const std::vector< long long int > &initialMap) |
| Sets the initial qubits map, if possible. | |
| virtual void | SetLookaheadDepth (int) |
| Sets the lookahead depth for swap optimization. | |
| virtual void | SetLookaheadDepthWithHeuristic (int) |
| Sets the lookahead depth for swap optimization. | |
| virtual void | SetMultithreading (bool multithreading=true)=0 |
| Enable/disable multithreading. | |
| virtual void | SetUpcomingGates (const std::vector< std::shared_ptr< Circuits::IOperation< double > > > &) |
| Supplies upcoming gates for lookahead swap optimization. | |
| virtual void | SetUseOptimalMeetingPosition (bool) |
| Enables or disables optimal meeting position for MPS swaps. | |
| virtual bool | SupportsMPSSwapOptimization () const |
| Returns if the simulator supports MPS swap optimization. | |
| void | UnregisterObserver (const std::shared_ptr< ISimulatorObserver > &observer) |
| Unregisters an observer. | |
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.
This is the interface that exposes the functionality of the quantum computing simulators. Use them wrapped in shared pointers.
Definition at line 33 of file Simulator.h.
|
pure virtualinherited |
Allocates qubits.
This function is called to allocate qubits.
| num_qubits | The number of qubits to allocate. |
Referenced by AllocateQubits().
|
pure virtualinherited |
Returns the probabilities of all possible outcomes.
Use it to obtain the probabilities of all possible outcomes.
Referenced by AllProbabilities().
|
pure virtualinherited |
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. |
Referenced by Amplitude().
|
pure virtualinherited |
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 |
Applies a controlled controlled not gate to the qubits.
Applies a controlled controlled not gate to the specified qubits
| qubit0 | The first control qubit |
| qubit1 | The second control qubit |
| qubit2 | The target qubit |
Referenced by ApplyCCX().
|
pure virtual |
Applies a CH gate to the qubits.
Applies a controlled Hadamard gate to the specified qubits
| ctrl_qubit | The control qubit |
| tgt_qubit | The target qubit |
Referenced by ApplyCH().
|
pure virtual |
Applies a CP gate to the qubits.
Applies a controlled phase gate to the specified qubits
| ctrl_qubit | The control qubit |
| tgt_qubit | The target qubit |
| lambda | The phase shift angle. |
Referenced by ApplyCP().
|
pure virtual |
Applies a CRx gate to the qubits.
Applies a controlled x rotation gate to the specified qubits
| ctrl_qubit | The control qubit |
| tgt_qubit | The target qubit |
| theta | The rotation angle. |
Referenced by ApplyCRx().
|
pure virtual |
Applies a CRy gate to the qubits.
Applies a controlled y rotation gate to the specified qubits
| ctrl_qubit | The control qubit |
| tgt_qubit | The target qubit |
| theta | The rotation angle. |
Referenced by ApplyCRy().
|
pure virtual |
Applies a CRz gate to the qubits.
Applies a controlled z rotation gate to the specified qubits
| ctrl_qubit | The control qubit |
| tgt_qubit | The target qubit |
| theta | The rotation angle. |
Referenced by ApplyCRz().
|
pure virtual |
Applies a controlled swap gate to the qubits.
Applies a controlled swap gate to the specified qubits
| ctrl_qubit | The control qubit |
| qubit0 | The first qubit |
| qubit1 | The second qubit |
Referenced by ApplyCSwap().
|
pure virtual |
Applies a CSx gate to the qubits.
Applies a controlled squared root not gate to the specified qubits
| ctrl_qubit | The control qubit |
| tgt_qubit | The target qubit |
Referenced by ApplyCSX().
|
pure virtual |
Applies a CSx dagger gate to the qubits.
Applies a controlled squared root not dagger gate to the specified qubits
| ctrl_qubit | The control qubit |
| tgt_qubit | The target qubit |
Referenced by ApplyCSXDG().
|
pure virtual |
Applies a controlled U gate to the qubits.
Applies a controlled U gate to the specified qubits
| ctrl_qubit | The control qubit |
| tgt_qubit | The target qubit |
| theta | Theta parameter for the U gate |
| phi | Phi parameter for the U gate |
| lambda | Lambda parameter for the U gate |
| gamma | Gamma parameter for the U gate |
Referenced by ApplyCU().
|
pure virtual |
Applies a CX gate to the qubits.
Applies a controlled X gate to the specified qubits
| ctrl_qubit | The control qubit |
| tgt_qubit | The target qubit |
Referenced by ApplyCX().
|
pure virtual |
Applies a CY gate to the qubits.
Applies a controlled Y gate to the specified qubits
| ctrl_qubit | The control qubit |
| tgt_qubit | The target qubit |
Referenced by ApplyCY().
|
pure virtual |
Applies a CZ gate to the qubits.
Applies a controlled Z gate to the specified qubits
| ctrl_qubit | The control qubit |
| tgt_qubit | The target qubit |
Referenced by ApplyCZ().
|
pure virtual |
Applies a Hadamard gate to the qubit.
Applies a Hadamard gate to the specified qubit
| qubit | The qubit to apply the gate to. |
Referenced by ApplyH().
|
pure virtual |
Applies a K gate to the qubit.
Applies a K (Hy) gate to the specified qubit
| qubit | The qubit to apply the gate to. |
Referenced by ApplyK().
|
pure virtual |
Applies a nop.
Applies a nop (no operation). Typically does (almost) nothing. Equivalent to an identity. For qiskit aer it will send the 'nop' to the qiskit aer simulator.
|
pure virtual |
Applies a phase shift gate to the qubit.
Applies a specified phase shift gate to the qubit
| qubit | The qubit to apply the gate to. |
| lambda | The phase shift angle. |
Referenced by ApplyP().
|
pure virtualinherited |
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 |
Applies a Rx gate to the qubit.
Applies an x rotation gate to the specified qubit
| qubit | The qubit to apply the gate to. |
| theta | The rotation angle. |
Referenced by ApplyRx().
|
pure virtual |
Applies a Ry gate to the qubit.
Applies a y rotation gate to the specified qubit
| qubit | The qubit to apply the gate to. |
| theta | The rotation angle. |
Referenced by ApplyRy().
|
pure virtual |
Applies a Rz gate to the qubit.
Applies a z rotation gate to the specified qubit
| qubit | The qubit to apply the gate to. |
| theta | The rotation angle. |
Referenced by ApplyRz().
|
pure virtual |
Applies a S gate to the qubit.
Applies a S gate to the specified qubit
| qubit | The qubit to apply the gate to. |
Referenced by ApplyS().
|
pure virtual |
Applies a S dagger gate to the qubit.
Applies a S dagger gate to the specified qubit
| qubit | The qubit to apply the gate to. |
Referenced by ApplySDG().
|
pure virtual |
Applies a swap gate to the qubits.
Applies a swap gate to the specified qubits
| qubit0 | The first qubit |
| qubit1 | The second qubit |
Referenced by ApplySwap().
|
pure virtual |
Applies a Sx gate to the qubit.
Applies a Sx gate to the specified qubit
| qubit | The qubit to apply the gate to. |
Referenced by ApplySX().
|
pure virtual |
Applies a Sx dagger gate to the qubit.
Applies a Sx dagger gate to the specified qubit
| qubit | The qubit to apply the gate to. |
Referenced by ApplySXDG().
|
pure virtual |
Applies a T gate to the qubit.
Applies a T gate to the specified qubit
| qubit | The qubit to apply the gate to. |
Referenced by ApplyT().
|
pure virtual |
Applies a T dagger gate to the qubit.
Applies a T dagger gate to the specified qubit
| qubit | The qubit to apply the gate to. |
Referenced by ApplyTDG().
|
pure virtual |
Applies a U gate to the qubit.
Applies a U gate to the specified qubit
| qubit | The qubit to apply the gate to. |
| theta | The first parameter. |
| phi | The second parameter. |
| lambda | The third parameter. |
| gamma | The fourth parameter. |
Referenced by ApplyU().
|
pure virtual |
Applies a not gate to the qubit.
Applies a not (X) gate to the specified qubit
| qubit | The qubit to apply the gate to. |
Referenced by ApplyX().
|
pure virtual |
Applies a Y gate to the qubit.
Applies a not (Y) gate to the specified qubit
| qubit | The qubit to apply the gate to. |
Referenced by ApplyY().
|
pure virtual |
Applies a Z gate to the qubit.
Applies a not (Z) gate to the specified qubit
| qubit | The qubit to apply the gate to. |
Referenced by ApplyZ().
|
pure virtualinherited |
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.
Referenced by ClearSimulator().
|
inlineinherited |
|
pure virtual |
Clones the simulator.
Clones the simulator, including the state, the configuration and the internally saved state, if any. Does not copy the observers. Should be used mainly internally, to optimise multiple shots execution, copying the state from the simulator used for timing.
|
pure virtualinherited |
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. |
Referenced by ConfigureSimulator().
|
inlineprotectedinherited |
|
pure virtualinherited |
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 virtualinherited |
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.
Referenced by FlushSimulator().
|
pure virtualinherited |
Returns configuration value.
This function is called get a configuration value.
| key | The key of the configuration value. |
Referenced by GetConfiguration().
|
inlinevirtualinherited |
|
pure virtualinherited |
Get the multithreading flag.
Returns the multithreading flag.
Referenced by GetMultithreading().
|
pure virtualinherited |
Returns the number of qubits.
This function is called to obtain the number of the allocated qubits.
Referenced by GetNumberOfQubits().
|
inline |
Get a shared pointer to this object.
Returns a shared pointer to this object. The object needs to be already wrapped in a shared pointer.
Definition at line 346 of file Simulator.h.
|
pure virtualinherited |
Returns the type of simulation.
Returns the type of simulation.
|
pure virtualinherited |
Returns the type of simulator.
Returns the type of simulator.
|
inlinevirtualinherited |
Increments the gates counter.
Usually does nothing, except for MPS simulators that support swap optimization. Increments the position in the circuit from where the execution should continue. Useful for classically controlled gates, for the case when the controlled gate is not executed.
|
pure virtualinherited |
Initializes the state.
This function is called when the simulator is initialized. Call it after the qubits allocation.
Referenced by InitializeSimulator().
|
pure virtualinherited |
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 virtualinherited |
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 virtualinherited |
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 virtualinherited |
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.
Referenced by IsQcsim().
|
pure virtualinherited |
Performs a measurement on the specified qubits.
Don't use it if the number of qubits is larger than the number of bits in the size_t type (usually 64), as the outcome will be undefined
| qubits | A vector with the qubits to be measured. |
|
pure virtualinherited |
Performs a measurement on the specified qubits.
| qubits | A vector with the qubits to be measured. |
|
pure virtualinherited |
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.
Don't use this for more qubits than the size of Types::qubit_t, as the result is packed in a limited number of bits (e.g. 64 bits for uint64_t)
|
pure virtualinherited |
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.
Use this for more qubits than the size of Types::qubit_t
|
inlineprotectedinherited |
|
inlineprotectedinherited |
|
pure virtualinherited |
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 virtualinherited |
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. |
Referenced by Probability().
|
pure virtualinherited |
Projects the state onto the zero state.
Use it to project the state onto the zero state. For most simulator is the same as calling Amplitude(0), but for some simulators it can be optimized to be faster than calling Amplitude(0). This for now is done for qcsim mps and gpu mps.
|
inlineinherited |
Registers an observer.
Registers an observer that will be notified when the state changes.
| observer | A smart pointer to an observer. |
|
pure virtualinherited |
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).
Referenced by ResetSimulator().
|
pure virtualinherited |
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.
Referenced by RestoreInternalDestructiveSavedState().
|
pure virtualinherited |
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.
Referenced by RestoreState().
|
pure virtualinherited |
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.
Don't use it if the number of qubits is larger than the number of bits in the Types::qubit_t type (usually 64), as the outcome will be undefined.
| qubits | A vector with the qubits to be measured. |
| shots | The number of shots to perform. |
|
pure virtualinherited |
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 virtualinherited |
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.
Referenced by SaveState().
|
pure virtualinherited |
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.
Referenced by SaveStateToInternalDestructive().
|
inlinevirtualinherited |
|
inlinevirtualinherited |
Sets the initial qubits map, if possible.
This will do nothing for most simulators, but for the MPS simulator it will set the initial qubits if it supports it - that is, for qcsim and the gpu simulator it can set the mapping of the qubits to the positions in the chain, which can be used to optimize the swapping cost.
|
inlinevirtualinherited |
Sets the lookahead depth for swap optimization.
Controls how many upcoming 2-qubit gates are considered when choosing the swap meeting position. 0 means no lookahead (immediate cost only). Only effective for MPS simulators. Requires upcoming gates to be supplied via SetUpcomingGates.
|
inlinevirtualinherited |
Sets the lookahead depth for swap optimization.
Controls how many upcoming 2-qubit gates are considered when choosing the swap meeting position. 0 means no lookahead (immediate cost only). Only effective for MPS simulators. Requires upcoming gates to be supplied via SetUpcomingGates. This value sets a number of gates to lookahead without much cost increase.
|
pure virtualinherited |
Enable/disable multithreading.
Enable/disable multithreading. Default is enabled.
| multithreading | A flag to indicate if multithreading should be enabled. |
Referenced by SetMultithreading().
|
inlinevirtualinherited |
|
inlinevirtualinherited |
|
inlinevirtualinherited |
|
inlineinherited |
Unregisters an observer.
Unegisters an observer.
| observer | A smart pointer to an observer. |