Skip to content

Commit

Permalink
Bugfix kwargs and variable name and add unit tests for write_annotati…
Browse files Browse the repository at this point in the history
…ons.py (#438)
  • Loading branch information
brifly1 authored Jan 24, 2023
1 parent 915dc97 commit 2200afb
Show file tree
Hide file tree
Showing 2 changed files with 53 additions and 5 deletions.
10 changes: 5 additions & 5 deletions python/neuroglancer/write_annotations.py
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand All @@ -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:
Expand Down
48 changes: 48 additions & 0 deletions python/tests/write_annotations_test.py
Original file line number Diff line number Diff line change
@@ -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'))

0 comments on commit 2200afb

Please sign in to comment.