"""ZDirMagnetSquare - Qurrium (:mod:`qurry.qurries.magnet_square_z.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.providers import Backend
from .arguments import (
SHORT_NAME,
ZDirMagnetSquareMeasureArgs,
ZDirMagnetSquareOutputArgs,
ZDirMagnetSquareAnalyzeArgs,
)
from .experiment import ZDirMagnetSquareExperiment
from ...qurrium import QurriumPrototype
from ...declare import RunArgsType, TranspileArgs, PassManagerType
[docs]
class ZDirMagnetSquare(
QurriumPrototype[
ZDirMagnetSquareExperiment,
ZDirMagnetSquareMeasureArgs,
ZDirMagnetSquareOutputArgs,
ZDirMagnetSquareAnalyzeArgs,
]
):
"""Z Direction Magnetization Square Qurry."""
__name__ = "ZDirMagnetSquare"
short_name = SHORT_NAME
@property
def experiment_instance(self) -> Type[ZDirMagnetSquareExperiment]:
"""The container class responding to this Qurrium class."""
return ZDirMagnetSquareExperiment
[docs]
def measure_to_output(
self,
wave: Optional[Union[QuantumCircuit, Hashable]] = 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,
) -> ZDirMagnetSquareOutputArgs:
"""Trasnform :meth:`measure` arguments form into :meth:`output` form.
Args:
wave (Union[QuantumCircuit, Hashable]):
The key or the circuit to execute.
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.")
return {
"circuits": [wave],
"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,
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.
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,
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)