Coverage for python/lsst/scarlet/lite/io/blend_base.py: 74%
25 statements
« prev ^ index » next coverage.py v7.11.0, created at 2025-11-07 01:40 -0800
« prev ^ index » next coverage.py v7.11.0, created at 2025-11-07 01:40 -0800
1from __future__ import annotations
3from abc import ABC, abstractmethod
4from dataclasses import dataclass
5from typing import Any, ClassVar
7from numpy.typing import DTypeLike
9from .utils import PersistenceError
11__all__ = ["ScarletBlendBaseData"]
14@dataclass(kw_only=True)
15class ScarletBlendBaseData(ABC):
16 """Base data for a scarlet Blend data.
18 Attributes
19 ----------
20 blend_registry :
21 A registry of all known blend types used for deserialization.
22 blend_type :
23 The type of blend being stored.
24 metadata :
25 Metadata associated with the blend.
26 version :
27 The schema version of the exact data class.
28 """
30 blend_registry: ClassVar[dict[str, type[ScarletBlendBaseData]]] = {}
31 blend_type: str
32 metadata: dict[str, Any] | None = None
33 version: str
35 @classmethod
36 def register(cls) -> None:
37 """Register a new Blend type"""
38 ScarletBlendBaseData.blend_registry[cls.blend_type] = cls
40 @abstractmethod
41 def as_dict(self) -> dict:
42 """Return the object encoded into a dict for JSON serialization
44 Returns
45 -------
46 result :
47 The object encoded as a JSON compatible dict
48 """
50 @staticmethod
51 def from_dict(data: dict, dtype: DTypeLike | None = None) -> ScarletBlendBaseData:
52 """Reconstruct `ScarletBlendBaseData` from JSON compatible dict.
54 Parameters
55 ----------
56 data :
57 Dictionary representation of the object
58 dtype :
59 Datatype of the resulting model.
61 Returns
62 -------
63 result :
64 The reconstructed object
65 """
66 # Default to "blend" for backwards compatibility
67 blend_type = data.get("blend_type", "blend")
69 if blend_type not in ScarletBlendBaseData.blend_registry:
70 raise PersistenceError(f"Unknown blend type: {blend_type}")
72 cls = ScarletBlendBaseData.blend_registry[blend_type]
73 return cls.from_dict(data, dtype=dtype)