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
component.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 ClassVar
6
7import numpy as np
8from numpy.typing import DTypeLike
9
10from ..component import Component
11from ..observation import Observation
12from .utils import PersistenceError
13
14__all__ = ["ScarletComponentBaseData"]
15
16
17@dataclass(kw_only=True)
19 """Base data for a scarlet component
20
21 Attributes
22 ----------
23 component_registry :
24 A registry of all known component types used for deserialization.
25 component_type :
26 The type of component being stored.
27 version :
28 The schema version of the exact data class.
29 """
30
31 component_registry: ClassVar[dict[str, type[ScarletComponentBaseData]]] = {}
32 component_type: str
33 version: str
34
35 @classmethod
36 def register(cls) -> None:
37 """Register a new component type"""
38 ScarletComponentBaseData.component_registry[cls.component_type] = cls
39
40 @abstractmethod
41 def to_component(self, observation: Observation) -> Component:
42 """Convert the storage data model into a scarlet Component
43
44 Parameters
45 ----------
46 observation :
47 The observation that the component is associated with
48
49 Returns
50 -------
51 component :
52 A scarlet component extracted from persisted data.
53 """
54
55 @abstractmethod
56 def as_dict(self) -> dict:
57 """Return the object encoded into a dict for JSON serialization
58
59 Returns
60 -------
61 result :
62 The object encoded as a JSON compatible dict
63 """
64
65 @staticmethod
66 def from_dict(data: dict, dtype: DTypeLike = np.float32) -> ScarletComponentBaseData:
67 """Reconstruct `ScarletComponentBaseData` from JSON compatible
68 dict.
69
70 Parameters
71 ----------
72 data :
73 Dictionary representation of the object
74 dtype :
75 Datatype of the resulting model.
76
77 Returns
78 -------
79 result :
80 The reconstructed object
81 """
82 component_type = data.get("component_type", "factorized")
83 # Fix legacy naming
84 if component_type == "component":
85 component_type = "cube"
86 if component_type not in ScarletComponentBaseData.component_registry:
87 raise PersistenceError(f"Unknown component type: {component_type}")
88 cls = ScarletComponentBaseData.component_registry[component_type]
89 return cls.from_dict(data, dtype=dtype)
Component to_component(self, Observation observation)
Definition component.py:41
ScarletComponentBaseData from_dict(dict data, DTypeLike dtype=np.float32)
Definition component.py:66