Source code for diffBloch.io.diagnostics
"""Parse diagnostics for input-file tolerance and fallback decisions."""
from __future__ import annotations
from collections.abc import Mapping
from dataclasses import dataclass, field
from pathlib import Path
from types import MappingProxyType
from typing import ClassVar, Literal
type ParseDetail = str | int | float | bool
type InputKind = Literal["structure", "experimental_data"]
type ParseDiagnosticCode = Literal[
"cif_block_selected",
"duplicate_scalar_tag_dropped",
"hydrogen_sites_filtered",
"pets_geometry_defaulted",
"pets_optional_metadata_absent",
"pets_summary_tag_used",
"symmetry_from_spacegroup",
]
[docs]
@dataclass(frozen=True)
class ParseDiagnostic:
"""A non-fatal input parse decision worth surfacing at the app boundary."""
channel: ClassVar[str] = "input parse"
code: ParseDiagnosticCode
input_kind: InputKind
source_path: Path | None
message: str
details: Mapping[str, ParseDetail] = field(default_factory=dict)
def __post_init__(self) -> None:
source = None if self.source_path is None else Path(self.source_path)
object.__setattr__(self, "source_path", source)
object.__setattr__(self, "details", MappingProxyType(dict(self.details)))
@property
def step(self) -> int | None:
return None
@property
def measurements(self) -> Mapping[str, float]:
return {}