"""Check the availability of the post-processing modules. (:mod:`qurry.process.status.backend`)"""
from typing import Literal, Optional
from ..randomized_measure import (
entangled_availability,
purity_cell_availability,
entangled_v1_availability,
purity_cell_v1_availability,
overlap_availability,
echo_cell_availability,
overlap_v1_availability,
echo_cell_v1_availability,
)
from ..hadamard_test import purity_echo_core_availability
from ..magnet_square import magnet_square_availability
from ..classical_shadow import classical_shadow_core_availability
from ..string_operator import string_operator_availability
from ..utils import (
counts_process_availability,
bit_slice_availability,
randomized_availability,
dummy_availability,
test_availability,
)
from ..availability import BACKEND_TYPES
from ...version import __version__
from ...capsule.hoshi import Hoshi
[docs]
def availability_status_print() -> tuple[
Hoshi,
dict[str, dict[str, dict[str, Literal["Yes", "Error", "Depr.", "No"]]]],
dict[str, dict[str, dict[str, Optional[ImportError]]]],
]:
"""Print the availability status of the post-processing modules.
Returns:
tuple[
Hoshi,
dict[str, dict[str, dict[str, Literal["Yes", "Error", "Depr.", "No"]]]],
dict[str, dict[str, dict[str, Optional[ImportError]]]],
]:
The Hoshi object for the availability status of the post-processing modules,
the availability status of the post-processing modules and the errors.
"""
availability_dict = [
# randomized_measure
entangled_availability,
purity_cell_availability,
entangled_v1_availability,
purity_cell_v1_availability,
overlap_availability,
echo_cell_availability,
overlap_v1_availability,
echo_cell_v1_availability,
# hadamard_test
purity_echo_core_availability,
# magnet_square
magnet_square_availability,
# string_operator
string_operator_availability,
# classical_shadow
classical_shadow_core_availability,
# utils
randomized_availability,
counts_process_availability,
bit_slice_availability,
dummy_availability,
test_availability,
]
pre_hoshi = [
("txt", f"| Qurrium version: {__version__}"),
("divider", 75),
("h3", "Qurrium Post-Processing"),
{
"type": "itemize",
"description": "Backend Availability",
"value": " ".join([f"{bt}".ljust(6) for bt in BACKEND_TYPES]),
"listing_level": 2,
"ljust_description_filler": ".",
},
]
availability_status = {}
errors_status = {}
# pylint: disable=no-member
for mod_location, available_dict, errors in availability_dict:
mod1, *files_tmp = mod_location.split(".")
files = ".".join(files_tmp)
if mod1 not in availability_status:
availability_status[mod1] = {}
errors_status[mod1] = {}
pre_hoshi.append(
{
"type": "itemize",
"description": mod1,
},
)
availability_status[mod1][files] = {}
errors_status[mod1][files] = errors
for bt in BACKEND_TYPES:
availability_status[mod1][files][bt] = available_dict.get(bt, "No")
errors_status[mod1][files][bt] = errors.get(bt, None)
pre_hoshi.append(
{
"type": "itemize",
"description": f"{files}",
"value": " ".join(
[f"{availability_status[mod1][files][bt]}".ljust(6) for bt in BACKEND_TYPES]
),
"listing_level": 2,
"ljust_description_filler": ".",
}
)
pre_hoshi.append(("divider", 75))
for d, v in [
("Yes", "Working normally."),
("Error", "Exception occurred."),
("No", "Not supported."),
("Depr.", "Deprecated."),
]:
pre_hoshi.append(
{
"type": "itemize",
"description": d,
"value": v,
"listing_level": 2,
"ljust_description_filler": ".",
"listing_itemize": "+",
"ljust_description_len": 10,
}
)
pre_hoshi.append(("divider", 75))
return Hoshi(pre_hoshi), availability_status, errors_status
AVAIBILITY_STATESHEET, AVAIBILITY_STATUS, ERROR_STATUS = availability_status_print()