Source code for uniqc.simulator.get_backend
from .base_simulator import BaseSimulator
from .mps_simulator import MPSSimulator
from .simulator import Simulator
from .torchquantum_simulator import TorchQuantumSimulator
__all__ = ["create_simulator", "get_simulator"]
[docs]
def create_simulator(
backend: str = "statevector",
program_type: str = "originir",
**kwargs,
) -> BaseSimulator | TorchQuantumSimulator | MPSSimulator:
"""Create a simulator backend.
Args:
backend: Simulator backend name. Supported values include
``"statevector"``, ``"density_matrix"``, ``"densitymatrix"``,
``"density"``, ``"torchquantum"``, and ``"mps"`` (alias
``"matrix_product_state"``).
program_type: Ignored — :class:`Simulator` auto-detects the input
format. Kept for backward compatibility.
**kwargs: Additional arguments passed to the simulator constructor.
Returns:
A simulator instance for the requested backend.
Raises:
ValueError: If the backend is not supported.
ImportError: If the TorchQuantum backend is requested but optional
dependencies are not installed.
"""
normalised_backend = backend.replace("-", "_").lower()
if normalised_backend == "torchquantum":
return TorchQuantumSimulator(**kwargs)
if normalised_backend in ("mps", "matrix_product_state"):
return MPSSimulator(**kwargs)
backend_type_aliases = {
"statevector": "statevector",
"density": "densitymatrix",
"density_matrix": "densitymatrix",
"densitymatrix": "densitymatrix",
}
if normalised_backend not in backend_type_aliases:
raise ValueError(f"Unsupported simulator backend: {backend}")
backend_type = backend_type_aliases[normalised_backend]
return Simulator(backend_type=backend_type, **kwargs)
[docs]
def get_simulator(
backend_type: str = "statevector",
program_type: str = "originir",
**kwargs,
) -> BaseSimulator | TorchQuantumSimulator | MPSSimulator:
"""Create a simulator instance (alias for :func:`create_simulator`).
The argument order matches :func:`create_simulator` — ``backend_type``
first, then ``program_type``. Both arguments default to the most common
case (``"statevector"`` + ``"originir"``).
Args:
backend_type: Simulator backend, e.g. ``"statevector"``,
``"density_matrix"``, ``"mps"``, ``"torchquantum"``.
program_type: Ignored — :class:`Simulator` auto-detects the input
format.
**kwargs: Additional arguments passed to the simulator constructor.
Returns:
A simulator instance.
"""
return create_simulator(backend=backend_type, program_type=program_type, **kwargs)
[docs]
def get_backend(
backend_type: str = "statevector",
program_type: str = "originir",
**kwargs,
) -> BaseSimulator | TorchQuantumSimulator | MPSSimulator:
"""Deprecated: use :func:`get_simulator` or :func:`create_simulator`."""
import warnings
warnings.warn(
"uniqc.simulator.get_backend() is deprecated. Use get_simulator() or create_simulator() instead.",
DeprecationWarning,
stacklevel=2,
)
return create_simulator(backend=backend_type, program_type=program_type, **kwargs)