LSST Applications 30.0.7,g0e76e35be5+e8e946ae08,g19811a7679+138f7293ba,g199a45376c+5e234f8357,g1fd858c14a+2f48dbc4c4,g262e1987ae+fb36cac54d,g29ae962dfc+d9108a0941,g2c21b0017a+4f59a27f16,g31e44d4a5c+b0138be388,g33ac35c1f1+28b9f72785,g35bb328faa+b0138be388,g40c9b15c53+823ad735c1,g47891489e3+bcc48a0b46,g53246c7159+b0138be388,g64539dfbff+e8e946ae08,g67b6fd64d1+bcc48a0b46,g74acd417e5+422380537a,g76965917b2+a5ca99c4d9,g786e29fd12+796b79145d,g7aefaa3e3d+dc0c200193,g86b635cae8+734fe384f0,g87389fa792+d8b5378923,g89139ef638+bcc48a0b46,g8bbb235e95+3f4f7f9447,g8ea07a8fe4+78a4c88802,g9290983e33+ffdc83c6f7,g92c671f44c+e8e946ae08,gaa753fd333+03f406da14,gbf99507273+b0138be388,gc49b57b85e+8df26ee1f0,gca7fc764a6+bcc48a0b46,gd7ef33dd92+bcc48a0b46,gdab6d2f7ff+422380537a,ge1c02a5578+b0138be388,ge410e46f29+bcc48a0b46,ge80df9fc40+e6db5413d1,geaed405ab2+1de65a85c6,gf5dcc679e7+35a0ce2edd,gf5f1c85443+e8e946ae08
LSST Data Management Base Package
Loading...
Searching...
No Matches
blend_base.py
Go to the documentation of this file.
1from __future__ import annotations
2
3from abc import ABC, abstractmethod
4from dataclasses import dataclass
5from typing import Any, ClassVar
6
7import numpy as np
8from numpy.typing import DTypeLike
9
10from ..bbox import Box
11from .utils import PersistenceError
12
13__all__ = ["ScarletBlendBaseData"]
14
15
16@dataclass(kw_only=True)
18 """Base data for a scarlet Blend data.
19
20 Attributes
21 ----------
22 blend_registry :
23 A registry of all known blend types used for deserialization.
24 blend_type :
25 The type of blend being stored.
26 metadata :
27 Metadata associated with the blend.
28 version :
29 The schema version of the exact data class.
30 """
31
32 blend_registry: ClassVar[dict[str, type[ScarletBlendBaseData]]] = {}
33 blend_type: str
34 metadata: dict[str, Any] | None = None
35 version: str
36
37 @property
38 @abstractmethod
39 def bbox(self) -> Box:
40 """The bounding box of the blend"""
41
42 @classmethod
43 def register(cls) -> None:
44 """Register a new Blend type"""
45 ScarletBlendBaseData.blend_registry[cls.blend_type] = cls
46
47 @abstractmethod
48 def as_dict(self) -> dict:
49 """Return the object encoded into a dict for JSON serialization
50
51 Returns
52 -------
53 result :
54 The object encoded as a JSON compatible dict
55 """
56
57 @staticmethod
58 def from_dict(data: dict, dtype: DTypeLike = np.float32) -> ScarletBlendBaseData:
59 """Reconstruct `ScarletBlendBaseData` from JSON compatible dict.
60
61 Parameters
62 ----------
63 data :
64 Dictionary representation of the object
65 dtype :
66 Datatype of the resulting model.
67
68 Returns
69 -------
70 result :
71 The reconstructed object
72 """
73 # Default to "blend" for backwards compatibility
74 blend_type = data.get("blend_type", "blend")
75
76 if blend_type not in ScarletBlendBaseData.blend_registry:
77 raise PersistenceError(f"Unknown blend type: {blend_type}")
78
79 cls = ScarletBlendBaseData.blend_registry[blend_type]
80 return cls.from_dict(data, dtype=dtype)
ScarletBlendBaseData from_dict(dict data, DTypeLike dtype=np.float32)
Definition blend_base.py:58