|
1 | 1 | import logging |
2 | 2 | import pathlib |
3 | | -from typing import Annotated, Dict, List, Literal, Optional, Type, Union |
| 3 | +from dataclasses import dataclass |
| 4 | +from typing import Dict, List, Literal, Optional, Union |
4 | 5 |
|
5 | 6 | import pyarrow.parquet as pq |
6 | | -import pydantic |
7 | 7 | import quivr as qv |
8 | 8 | import ray |
9 | 9 |
|
|
28 | 28 | ] |
29 | 29 |
|
30 | 30 |
|
31 | | -class FilterObservations(pydantic.BaseModel): |
| 31 | +@dataclass |
| 32 | +class FilterObservations: |
32 | 33 | stage: Literal["filter_observations"] |
33 | 34 |
|
34 | 35 |
|
35 | | -class GenerateEphemeris(pydantic.BaseModel): |
36 | | - class Config: |
37 | | - arbitrary_types_allowed = True |
38 | | - |
| 36 | +@dataclass |
| 37 | +class GenerateEphemeris: |
39 | 38 | stage: Literal["generate_ephemeris"] |
40 | 39 | filtered_observations: Union[Observations, ray.ObjectRef] |
41 | 40 | test_orbit_ephemeris: Union[TestOrbitEphemeris, ray.ObjectRef] |
42 | 41 |
|
43 | 42 |
|
44 | | -class RangeAndTransform(pydantic.BaseModel): |
45 | | - class Config: |
46 | | - arbitrary_types_allowed = True |
47 | | - |
| 43 | +@dataclass |
| 44 | +class RangeAndTransform: |
48 | 45 | stage: Literal["range_and_transform"] |
49 | 46 | test_orbit_ephemeris: Union[TestOrbitEphemeris, ray.ObjectRef] |
50 | 47 | filtered_observations: Union[Observations, ray.ObjectRef] |
51 | 48 |
|
52 | 49 |
|
53 | | -class ClusterAndLink(pydantic.BaseModel): |
54 | | - class Config: |
55 | | - arbitrary_types_allowed = True |
56 | | - |
| 50 | +@dataclass |
| 51 | +class ClusterAndLink: |
57 | 52 | stage: Literal["cluster_and_link"] |
58 | 53 | test_orbit_ephemeris: Union[TestOrbitEphemeris, ray.ObjectRef] |
59 | 54 | filtered_observations: Union[Observations, ray.ObjectRef] |
60 | 55 | transformed_detections: Union[TransformedDetections, ray.ObjectRef] |
61 | 56 |
|
62 | 57 |
|
63 | | -class InitialOrbitDetermination(pydantic.BaseModel): |
64 | | - class Config: |
65 | | - arbitrary_types_allowed = True |
66 | | - |
| 58 | +@dataclass |
| 59 | +class InitialOrbitDetermination: |
67 | 60 | stage: Literal["initial_orbit_determination"] |
68 | 61 | filtered_observations: Union[Observations, ray.ObjectRef] |
69 | 62 | clusters: Union[FittedClusters, ray.ObjectRef] |
70 | 63 | cluster_members: Union[FittedClusterMembers, ray.ObjectRef] |
71 | 64 |
|
72 | 65 |
|
73 | | -class DifferentialCorrection(pydantic.BaseModel): |
74 | | - class Config: |
75 | | - arbitrary_types_allowed = True |
76 | | - |
| 66 | +@dataclass |
| 67 | +class DifferentialCorrection: |
77 | 68 | stage: Literal["differential_correction"] |
78 | 69 | filtered_observations: Union[Observations, ray.ObjectRef] |
79 | 70 | iod_orbits: Union[FittedOrbits, ray.ObjectRef] |
80 | 71 | iod_orbit_members: Union[FittedOrbitMembers, ray.ObjectRef] |
81 | 72 |
|
82 | 73 |
|
83 | | -class RecoverOrbits(pydantic.BaseModel): |
84 | | - class Config: |
85 | | - arbitrary_types_allowed = True |
86 | | - |
| 74 | +@dataclass |
| 75 | +class RecoverOrbits: |
87 | 76 | stage: Literal["recover_orbits"] |
88 | 77 | filtered_observations: Union[Observations, ray.ObjectRef] |
89 | 78 | od_orbits: Union[FittedOrbits, ray.ObjectRef] |
90 | 79 | od_orbit_members: Union[FittedOrbitMembers, ray.ObjectRef] |
91 | 80 |
|
92 | 81 |
|
93 | | -class Complete(pydantic.BaseModel): |
94 | | - class Config: |
95 | | - arbitrary_types_allowed = True |
96 | | - |
| 82 | +@dataclass |
| 83 | +class Complete: |
97 | 84 | stage: Literal["complete"] |
98 | 85 | recovered_orbits: Union[FittedOrbits, ray.ObjectRef] |
99 | 86 | recovered_orbit_members: Union[FittedOrbitMembers, ray.ObjectRef] |
100 | 87 |
|
101 | 88 |
|
102 | | -CheckpointData = Annotated[ |
103 | | - Union[ |
104 | | - FilterObservations, |
105 | | - GenerateEphemeris, |
106 | | - RangeAndTransform, |
107 | | - ClusterAndLink, |
108 | | - InitialOrbitDetermination, |
109 | | - DifferentialCorrection, |
110 | | - RecoverOrbits, |
111 | | - Complete, |
112 | | - ], |
113 | | - pydantic.Field(discriminator="stage"), |
| 89 | +CheckpointData = Union[ |
| 90 | + FilterObservations, |
| 91 | + GenerateEphemeris, |
| 92 | + RangeAndTransform, |
| 93 | + ClusterAndLink, |
| 94 | + InitialOrbitDetermination, |
| 95 | + DifferentialCorrection, |
| 96 | + RecoverOrbits, |
| 97 | + Complete, |
114 | 98 | ] |
115 | 99 |
|
116 | 100 | # A mapping from stage to model class |
117 | | -stage_to_model: Dict[str, Type[pydantic.BaseModel]] = { |
| 101 | +stage_to_model: Dict[str, type] = { |
118 | 102 | "filter_observations": FilterObservations, |
119 | 103 | "generate_ephemeris": GenerateEphemeris, |
120 | 104 | "range_and_transform": RangeAndTransform, |
|
0 commit comments