Source code for qurry.qurries.magnet_square.qurry

"""MagnetSquare - Qurrium (:mod:`qurry.qurries.magnet_square.qurry`)"""

from pathlib import Path
from typing import Union, Optional, Type, Literal
from collections.abc import Hashable
import tqdm

from qiskit import QuantumCircuit
from qiskit.circuit import Gate
from qiskit.quantum_info import Operator
from qiskit.providers import Backend

from .arguments import (
    SHORT_NAME,
    MagnetSquareMeasureArgs,
    MagnetSquareOutputArgs,
    MagnetSquareAnalyzeArgs,
)
from .experiment import MagnetSquareExperiment
from ...qurrium import QurriumPrototype
from ...declare import RunArgsType, TranspileArgs, PassManagerType


[docs] class MagnetSquare( QurriumPrototype[ MagnetSquareExperiment, MagnetSquareMeasureArgs, MagnetSquareOutputArgs, MagnetSquareAnalyzeArgs, ] ): """Magnetization Square Qurry.""" __name__ = "MagnetSquare" short_name = SHORT_NAME @property def experiment_instance(self) -> Type[MagnetSquareExperiment]: """The container class responding to this Qurrium class.""" return MagnetSquareExperiment
[docs] def measure_to_output( self, wave: Optional[Union[QuantumCircuit, Hashable]] = None, unitary_operator: Optional[Union[Operator, Gate, Literal["x", "y", "z"]]] = None, shots: int = 1024, backend: Optional[Backend] = None, exp_name: str = "experiment", run_args: RunArgsType = None, transpile_args: Optional[TranspileArgs] = None, passmanager: PassManagerType = None, tags: Optional[tuple[str, ...]] = None, # process tool qasm_version: Literal["qasm2", "qasm3"] = "qasm3", export: bool = False, save_location: Optional[Union[Path, str]] = None, pbar: Optional[tqdm.tqdm] = None, ) -> MagnetSquareOutputArgs: """Trasnform :meth:`measure` arguments form into :meth:`output` form. Args: wave (Union[QuantumCircuit, Hashable]): The key or the circuit to execute. unitary_operator (Union[Operator, Gate, Literal["x", "y", "z"]]): The unitary operator to apply. It can be a `qiskit.quantum_info.Operator`, a `qiskit.circuit.Gate`, or a string representing the axis of rotation ('x', 'y', or 'z'). shots (int, optional): Shots of the job. Defaults to `1024`. backend (Optional[Backend], optional): The quantum backend. Defaults to None. exp_name (str, optional): The name of the experiment. Naming this experiment to recognize it when the jobs are pending to IBMQ Service. This name is also used for creating a folder to store the exports. Defaults to `'exps'`. run_args (RunArgsType, optional): Arguments for :meth:`Backend.run`. Defaults to None. transpile_args (Optional[TranspileArgs], optional): Arguments of :func:`~qiskit.compiler.transpile`. Defaults to None. passmanager (Optional[Union[str, PassManager, tuple[str, PassManager]], optional): The passmanager. Defaults to None. tags (Optional[tuple[str, ...]], optional): The tags of the experiment. Defaults to None. qasm_version (Literal["qasm2", "qasm3"], optional): The version of OpenQASM. Defaults to "qasm3". export (bool, optional): Whether to export the experiment. Defaults to False. save_location (Optional[Union[Path, str]], optional): The location to save the experiment. Defaults to None. pbar (Optional[tqdm.tqdm], optional): The progress bar for showing the progress of the experiment. Defaults to None. Returns: MagnetSquareOutputArgs: The output arguments. """ if wave is None: raise ValueError("The `wave` must be provided.") if unitary_operator is None: raise ValueError("The `unitary_operator` must be provided.") return { "circuits": [wave], "unitary_operator": unitary_operator, "shots": shots, "backend": backend, "exp_name": exp_name, "run_args": run_args, "transpile_args": transpile_args, "passmanager": passmanager, "tags": tags, # process tool "qasm_version": qasm_version, "export": export, "save_location": save_location, "pbar": pbar, }
[docs] def measure( self, wave: Optional[Union[QuantumCircuit, Hashable]] = None, unitary_operator: Optional[Union[Operator, Gate, Literal["x", "y", "z"]]] = None, # basic inputs shots: int = 1024, backend: Optional[Backend] = None, exp_name: str = "experiment", run_args: RunArgsType = None, transpile_args: Optional[TranspileArgs] = None, passmanager: PassManagerType = None, tags: Optional[tuple[str, ...]] = None, # process tool qasm_version: Literal["qasm2", "qasm3"] = "qasm3", export: bool = False, save_location: Optional[Union[Path, str]] = None, pbar: Optional[tqdm.tqdm] = None, ) -> str: """Execute the experiment. Args: wave (Union[QuantumCircuit, Hashable]): The key or the circuit to execute. unitary_operator (Union[Operator, Gate, Literal["x", "y", "z"]]): The unitary operator to apply. It can be a `qiskit.quantum_info.Operator`, a `qiskit.circuit.Gate`, or a string representing the axis of rotation ('x', 'y', or 'z'). shots (int, optional): Shots of the job. Defaults to `1024`. backend (Optional[Backend], optional): The quantum backend. Defaults to None. exp_name (str, optional): The name of the experiment. Naming this experiment to recognize it when the jobs are pending to IBMQ Service. This name is also used for creating a folder to store the exports. Defaults to `'exps'`. run_args (RunArgsType, optional): Arguments for :meth:`Backend.run`. Defaults to None. transpile_args (Optional[TranspileArgs], optional): Arguments of :func:`~qiskit.compiler.transpile`. Defaults to None. passmanager (Optional[Union[str, PassManager, tuple[str, PassManager]], optional): The passmanager. Defaults to None. tags (Optional[tuple[str, ...]], optional): The tags of the experiment. Defaults to None. qasm_version (Literal["qasm2", "qasm3"], optional): The version of OpenQASM. Defaults to "qasm3". export (bool, optional): Whether to export the experiment. Defaults to False. save_location (Optional[Union[Path, str]], optional): The location to save the experiment. Defaults to None. pbar (Optional[tqdm.tqdm], optional): The progress bar for showing the progress of the experiment. Defaults to None. Returns: str: The ID of the experiment """ output_args = self.measure_to_output( wave=wave, shots=shots, unitary_operator=unitary_operator, backend=backend, exp_name=exp_name, run_args=run_args, transpile_args=transpile_args, passmanager=passmanager, tags=tags, # process tool qasm_version=qasm_version, export=export, save_location=save_location, pbar=pbar, ) return self.output(**output_args)