Skip to content

Commit 18d9096

Browse files
Hendrik-codeclaude
andcommitted
fix(poi): carry level_one_info/level_two_info/info through all POI ops
POI.copy(), _set_inplace(), POI_Global.to_other(), and calc_poi_average() dropped the naming metadata (level_one_info, level_two_info, and with it info['label_name']), and POI_Descriptor.copy() dropped its name<->id definition. Now every copy/derive path preserves them, so names survive reorient/rescale/extract/map_labels/to_global/ average (all of which route through copy()). Verified preserved across those ops; 76 existing POI tests still pass. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
1 parent 267153e commit 18d9096

3 files changed

Lines changed: 28 additions & 5 deletions

File tree

‎TPTBox/core/poi.py‎

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -123,13 +123,16 @@ class POI(Abstract_POI, Has_Grid):
123123
_vert_orientation_pir = {} # Elusive; will not be saved; will not be copied. For Buffering results # noqa: RUF012
124124

125125
def _set_inplace(self, poi: Self) -> Self:
126-
"""Copy all grid/affine attributes and centroids from ``poi`` into ``self``."""
126+
"""Copy all grid/affine attributes, centroids, and naming metadata from ``poi`` into ``self``."""
127127
self.orientation = poi.orientation
128128
self.centroids = poi.centroids
129129
self.zoom = poi.zoom
130130
self.shape = poi.shape
131131
self.origin = poi.origin
132132
self.rotation = poi.rotation
133+
self.info = poi.info
134+
self.level_one_info = poi.level_one_info
135+
self.level_two_info = poi.level_two_info
133136
return self
134137

135138
@property
@@ -224,6 +227,8 @@ def copy(
224227
origin=origin if not isinstance(origin, Sentinel) else self.origin,
225228
info=deepcopy(self.info),
226229
format=self.format,
230+
level_one_info=self.level_one_info,
231+
level_two_info=self.level_two_info,
227232
)
228233

229234
def local_to_global(self, x: COORDINATE, itk_coords=False) -> COORDINATE:
@@ -1330,7 +1335,18 @@ def calc_poi_average(pois: list[POI], keep_points_not_present_in_all_pois: bool
13301335

13311336
# Sort the new ctd by keys
13321337
ctd = dict(sorted(ctd.items()))
1333-
return POI(centroids=ctd, orientation=pois[0].orientation, zoom=pois[0].zoom, shape=pois[0].shape, rotation=pois[0].rotation)
1338+
return POI(
1339+
centroids=ctd,
1340+
orientation=pois[0].orientation,
1341+
zoom=pois[0].zoom,
1342+
shape=pois[0].shape,
1343+
rotation=pois[0].rotation,
1344+
origin=pois[0].origin,
1345+
info=deepcopy(pois[0].info),
1346+
format=pois[0].format,
1347+
level_one_info=pois[0].level_one_info,
1348+
level_two_info=pois[0].level_two_info,
1349+
)
13341350

13351351

13361352
def _load_from_POI_spine_r(data: dict) -> POI:

‎TPTBox/core/poi_fun/poi_abstract.py‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -169,10 +169,10 @@ def __set__(self, obj, value) -> None:
169169
setattr(obj, self._name, int(value))
170170

171171
def copy(self) -> POI_Descriptor:
172-
"""Return a deep copy of this descriptor."""
172+
"""Return a deep copy of this descriptor (keeping its name<->id ``definition``)."""
173173
from copy import deepcopy
174174

175-
return POI_Descriptor(default=deepcopy(self.pois))
175+
return POI_Descriptor(default=deepcopy(self.pois), definition=self.definition)
176176

177177
def _sort(self: Self, inplace=True, order_dict: dict | None = None):
178178
"""Sort vertebra dictionary by sorting_list."""

‎TPTBox/core/poi_fun/poi_global.py‎

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -187,7 +187,14 @@ def to_other(self, msk: Has_Grid, verbose=False) -> poi.POI:
187187
log.print(v, "-->", v_out)
188188
out[k1, k2] = tuple(v_out)
189189

190-
return poi.POI(centroids=out, **msk._extract_affine(), info=self.info, format=self.format)
190+
return poi.POI(
191+
centroids=out,
192+
**msk._extract_affine(),
193+
info=self.info,
194+
format=self.format,
195+
level_one_info=self.level_one_info,
196+
level_two_info=self.level_two_info,
197+
)
191198

192199
def copy(self, centroids: POI_Descriptor | None = None) -> Self:
193200
"""Return a deep copy of this ``POI_Global``.

0 commit comments

Comments
 (0)