"""Declaration - Run - Simulator (:mod:`qurry.declare.run.simulator`)
This module reveals the full arguments of :meth:`~qiskit.providers.backend.BackendV2.run`
for the simulator backends to avoid the UNnEcEsSaRy and PAINFUL finding of
how many arguments and what types of arguments you can pass to the method.
"""
from typing import Optional, Any
from qiskit.circuit import Parameter
from .base_run import BaseRunArgs
[docs]
class BasicSimulatorRunArgs(BaseRunArgs, total=False):
"""For `BasicSimulator` from :mod:`qiskit.providers.basic_provider`:
For qiskit>=2.0, the signature of :meth:`~qiskit.providers.backend.BackendV2.run` is:
.. code-block:: python
def run(
self, run_input: QuantumCircuit | list[QuantumCircuit], **run_options
) -> BasicProviderJob:
->
.. code-block:: python
@classmethod
def _default_options(cls) -> Options:
return Options(
shots=1024,
memory=True,
initial_statevector=None,
seed_simulator=None,
)
For qiskit<2.0, the signature of :meth:`backend.run` is:
.. code-block:: python
def run(
self, run_input: QuantumCircuit | list[QuantumCircuit], **backend_options
) -> BasicProviderJob:
->
.. code-block:: python
@classmethod
def _default_options(cls) -> Options:
return Options(
shots=1024,
memory=False,
initial_statevector=None,
chop_threshold=1e-15,
allow_sample_measuring=True,
seed_simulator=None,
parameter_binds=None,
)
or ?
.. code-block:: python
def _assemble(
experiments: Union[
QuantumCircuit,
List[QuantumCircuit],
Schedule,
List[Schedule],
ScheduleBlock,
List[ScheduleBlock],
],
backend: Optional[Backend] = None,
qobj_id: Optional[str] = None,
qobj_header: Optional[Union[QobjHeader, Dict]] = None,
shots: Optional[int] = None,
memory: Optional[bool] = False,
seed_simulator: Optional[int] = None,
qubit_lo_freq: Optional[List[float]] = None,
meas_lo_freq: Optional[List[float]] = None,
qubit_lo_range: Optional[List[float]] = None,
meas_lo_range: Optional[List[float]] = None,
schedule_los: Optional[
Union[
List[Union[Dict[PulseChannel, float], LoConfig]],
Union[Dict[PulseChannel, float], LoConfig],
]
] = None,
meas_level: Union[int, MeasLevel] = MeasLevel.CLASSIFIED,
meas_return: Union[str, MeasReturnType] = MeasReturnType.AVERAGE,
meas_map: Optional[List[List[Qubit]]] = None,
memory_slot_size: int = 100,
rep_time: Optional[int] = None,
rep_delay: Optional[float] = None,
parameter_binds: Optional[List[Dict[Parameter, float]]] = None,
parametric_pulses: Optional[List[str]] = None,
init_qubits: bool = True,
**run_config: Dict,
) -> Union[QasmQobj, PulseQobj]:
...
"""
shots: Optional[int]
memory: Optional[bool]
initial_statevector: Optional[Any]
seed_simulator: Optional[int]
chop_threshold: Optional[float]
allow_sample_measuring: Optional[bool]
parameter_binds: Optional[list[dict[Parameter, float]]]
[docs]
class AerBackendRunArgs(BaseRunArgs, total=False):
"""Arguments for :meth:`~qiskit.providers.backend.BackendV2.run`.
For `AerBackend` from :mod:`qiskit_aer.backends.aerbackend`
or `AerBackend` from :mod:`qiskit.providers.aer.backends.aerbackend`,
the old import path:
.. code-block:: python
def run(self, circuits, parameter_binds=None, **run_options):
if isinstance(circuits, (QuantumCircuit, Schedule, ScheduleBlock)):
circuits = [circuits]
return self._run_circuits(circuits, parameter_binds, **run_options)
->
.. code-block:: python
def _run_circuits(self, circuits, parameter_binds, **run_options):
# Submit job
job_id = str(uuid.uuid4())
aer_job = AerJob(
self,
job_id,
self._execute_circuits_job, # This takes run_options
parameter_binds=parameter_binds,
circuits=circuits,
run_options=run_options,
)
aer_job.submit()
return aer_job
->
.. code-block:: python
def set_option(self, key, value):
if hasattr(self._configuration, key):
self._set_configuration_option(key, value)
elif hasattr(self._properties, key):
self._set_properties_option(key, value)
else:
if not hasattr(self._options, key):
raise AerError(f"Invalid option {key}")
if value is not None:
# Only add an option if its value is not None
setattr(self._options, key, value)
else:
# If setting an existing option to None reset it to default
# this is for backwards compatibility when setting it to None would
# remove it from the options dict
setattr(self._options, key, getattr(self._default_options(), key))
`run_options` is a dictionary that will temporarily override any set options
According to the default options has been set in the backend,
the default options are:
.. code-block:: python
@classmethod
def _default_options(cls):
return Options(
# Global options
shots=1024,
method="automatic",
device="CPU",
precision="double",
executor=None,
max_job_size=None,
max_shot_size=None,
enable_truncation=True,
zero_threshold=1e-10,
validation_threshold=None,
max_parallel_threads=None,
max_parallel_experiments=None,
max_parallel_shots=None,
max_memory_mb=None,
fusion_enable=True,
fusion_verbose=False,
fusion_max_qubit=None,
fusion_threshold=None,
accept_distributed_results=None,
memory=None,
noise_model=None,
seed_simulator=None,
# cuStateVec (cuQuantum) option
cuStateVec_enable=False,
# cache blocking for multi-GPUs/MPI options
blocking_qubits=None,
blocking_enable=False,
chunk_swap_buffer_qubits=None,
# multi-shots optimization options (GPU only)
batched_shots_gpu=False,
batched_shots_gpu_max_qubits=16,
num_threads_per_device=1,
# multi-shot branching
shot_branching_enable=False,
shot_branching_sampling_enable=False,
# statevector options
statevector_parallel_threshold=14,
statevector_sample_measure_opt=10,
# stabilizer options
stabilizer_max_snapshot_probabilities=32,
# extended stabilizer options
extended_stabilizer_sampling_method="resampled_metropolis",
extended_stabilizer_metropolis_mixing_time=5000,
extended_stabilizer_approximation_error=0.05,
extended_stabilizer_norm_estimation_samples=100,
extended_stabilizer_norm_estimation_repetitions=3,
extended_stabilizer_parallel_threshold=100,
extended_stabilizer_probabilities_snapshot_samples=3000,
# MPS options
matrix_product_state_truncation_threshold=1e-16,
matrix_product_state_max_bond_dimension=None,
mps_sample_measure_algorithm="mps_heuristic",
mps_log_data=False,
mps_swap_direction="mps_swap_left",
chop_threshold=1e-8,
mps_parallel_threshold=14,
mps_omp_threads=1,
mps_lapack=False,
# tensor network options
tensor_network_num_sampling_qubits=10,
use_cuTensorNet_autotuning=False,
# parameter binding
runtime_parameter_bind_enable=False,
)
(Captured from qiskit-aer 0.16.0)
"""
parameter_binds: Optional[list[dict[Parameter, float]]]
shots: Optional[int]
method: Optional[str]
device: Optional[str]
precision: Optional[str]
executor: Optional[str]
max_job_size: Optional[int]
max_shot_size: Optional[int]
enable_truncation: Optional[bool]
zero_threshold: Optional[float]
validation_threshold: Optional[float]
max_parallel_threads: Optional[int]
max_parallel_experiments: Optional[int]
max_parallel_shots: Optional[int]
max_memory_mb: Optional[int]
fusion_enable: Optional[bool]
fusion_verbose: Optional[bool]
fusion_max_qubit: Optional[int]
fusion_threshold: Optional[float]
accept_distributed_results: Optional[bool]
memory: Optional[bool]
noise_model: Optional[Any]
seed_simulator: Optional[int]
# cuStateVec (cuQuantum) option
cuStateVec_enable: Optional[bool]
# cache blocking for multi-GPUs/MPI options
blocking_qubits: Optional[list[int]]
blocking_enable: Optional[bool]
chunk_swap_buffer_qubits: Optional[list[int]]
# multi-shots optimization options (GPU only)
batched_shots_gpu: Optional[bool]
batched_shots_gpu_max_qubits: Optional[int]
num_threads_per_device: Optional[int]
# multi-shot branching
shot_branching_enable: Optional[bool]
shot_branching_sampling_enable: Optional[bool]
# statevector options
statevector_parallel_threshold: Optional[int]
statevector_sample_measure_opt: Optional[int]
# stabilizer options
stabilizer_max_snapshot_probabilities: Optional[int]
# extended stabilizer options
extended_stabilizer_sampling_method: Optional[str]
extended_stabilizer_metropolis_mixing_time: Optional[int]
extended_stabilizer_approximation_error: Optional[float]
extended_stabilizer_norm_estimation_samples: Optional[int]
extended_stabilizer_norm_estimation_repetitions: Optional[int]
extended_stabilizer_parallel_threshold: Optional[int]
extended_stabilizer_probabilities_snapshot_samples: Optional[int]
# MPS options
matrix_product_state_truncation_threshold: Optional[float]
matrix_product_state_max_bond_dimension: Optional[int]
mps_sample_measure_algorithm: Optional[str]
mps_log_data: Optional[bool]
mps_swap_direction: Optional[str]
chop_threshold: Optional[float]
mps_parallel_threshold: Optional[int]
mps_omp_threads: Optional[int]
mps_lapack: Optional[bool]
# tensor network options
tensor_network_num_sampling_qubits: Optional[int]
use_cuTensorNet_autotuning: Optional[bool]
# parameter binding
runtime_parameter_bind_enable: Optional[bool]
[docs]
class BasicAerBackendRunArgs(BaseRunArgs, total=False):
"""Arguments for :meth:`~qiskit.providers.backend.BackendV2.run`.
For `QasmSimulatorPy` from :mod:`qiskit.providers.basicaer`:
.. code-block:: python
def run(self, qobj, **backend_options):
...
self._set_options(qobj_config=qobj_options, backend_options=backend_options)
job_id = str(uuid.uuid4())
job = BasicAerJob(self, job_id, self._run_job(job_id, qobj))
return job
->
???
Well, It's an example of a FAILED finding
Also, this simulator is just lived short in qiskit then deprecated.
So, I don't think it's worth to find the arguments for this simulator anymore.
"""