diff --git a/python/neuroglancer/write_annotations.py b/python/neuroglancer/write_annotations.py index 5e0e4094b..2408b5d76 100644 --- a/python/neuroglancer/write_annotations.py +++ b/python/neuroglancer/write_annotations.py @@ -107,21 +107,21 @@ def add_point(self, point: Sequence[int], id: Optional[int] = None, **kwargs): self.lower_bound = np.minimum(self.lower_bound, point) self.upper_bound = np.maximum(self.upper_bound, point) - self._add_obj(point, id, kwargs) + self._add_obj(point, id, **kwargs) def add_axis_aligned_bounding_box(self, point_a: Sequence[int], point_b: Sequence[int], id: Optional[int] = None, **kwargs): if self.annotation_type != 'axis_aligned_bounding_box': raise ValueError( f'Expected annotation type axis_aligned_bounding_box, but received: {self.annotation_type}' ) - self._add_two_point_obj(point_a, point_b, id, kwargs) + self._add_two_point_obj(point_a, point_b, id, **kwargs) def add_line(self, point_a: Sequence[int], point_b: Sequence[int], id: Optional[int] = None, **kwargs): if self.annotation_type != 'line': raise ValueError( f'Expected annotation type line, but received: {self.annotation_type}' ) - self._add_two_point_obj(point_a, point_b, id, kwargs) + self._add_two_point_obj(point_a, point_b, id, **kwargs) def _add_two_point_obj(self, point_a: Sequence[int], point_b: Sequence[int], id: Optional[int] = None, **kwargs): if len(point_a) != self.coordinate_space.rank: @@ -137,11 +137,11 @@ def _add_two_point_obj(self, point_a: Sequence[int], point_b: Sequence[int], id: self.lower_bound = np.minimum(self.lower_bound, point_a) self.upper_bound = np.maximum(self.upper_bound, point_b) coords = np.concatenate((point_a, point_b)) - self._add_obj(coords, id, kwargs) + self._add_obj(coords, id, **kwargs) def _add_obj(self, coords: Sequence[int], id: Optional[int], **kwargs): encoded = np.zeros(shape=(), dtype=self.dtype) - encoded[()]['geometry'] = point + encoded[()]['geometry'] = coords for i, p in enumerate(self.properties): if p.id in kwargs: diff --git a/python/tests/write_annotations_test.py b/python/tests/write_annotations_test.py new file mode 100644 index 000000000..82294e2d9 --- /dev/null +++ b/python/tests/write_annotations_test.py @@ -0,0 +1,48 @@ +# @license +# Copyright 2023 Google Inc. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import absolute_import + +import os +import pathlib + +import neuroglancer +from neuroglancer import write_annotations + + +def test_annotation_writer_axis_aligned_bounding_box(tmp_path: pathlib.Path): + dim_dict = {'names': ['x', 'y'], 'units': ['m', 'm'], 'scales': [1, 1]} + coordinate_space = neuroglancer.CoordinateSpace(**dim_dict) + writer = write_annotations.AnnotationWriter( + coordinate_space=coordinate_space, + annotation_type='axis_aligned_bounding_box') + writer.add_axis_aligned_bounding_box([2, 5], [3, 6]) + writer.write(tmp_path) + assert os.path.exists(os.path.join(tmp_path, 'info')) + assert os.path.exists(os.path.join(tmp_path, 'spatial0')) + assert os.path.exists(os.path.join(tmp_path, 'by_id')) + + +def test_annotation_writer_point(tmp_path: pathlib.Path): + dim_dict = {'names': ['x', 'y'], 'units': ['m', 'm'], 'scales': [1, 1]} + coordinate_space = neuroglancer.CoordinateSpace(**dim_dict) + writer = write_annotations.AnnotationWriter( + coordinate_space=coordinate_space, + annotation_type='point') + writer.add_point([2, 5]) + writer.write(tmp_path) + assert os.path.exists(os.path.join(tmp_path, 'info')) + assert os.path.exists(os.path.join(tmp_path, 'spatial0')) + assert os.path.exists(os.path.join(tmp_path, 'by_id')) +