Browse Source

class LineSegment is now public

Fabian Peter Hammerle 5 years ago
parent
commit
5e38149b63

+ 6 - 6
freesurfer_surface/__init__.py

@@ -139,14 +139,14 @@ class PolygonalCircuit:
                      for offset in range(vertices_num)))
 
 
-class _LineSegment(PolygonalCircuit):
+class LineSegment(PolygonalCircuit):
 
     def __init__(self, indices: PolygonalCircuit._VERTEX_INDICES_TYPE):
         super().__init__(indices)
         assert len(self.vertex_indices) == 2
 
     def __repr__(self) -> str:
-        return '_LineSegment(vertex_indices={})'.format(self.vertex_indices)
+        return 'LineSegment(vertex_indices={})'.format(self.vertex_indices)
 
 
 class Triangle(PolygonalCircuit):
@@ -197,8 +197,8 @@ class PolygonalChain:
                                       len(self.vertex_indices))
                      for offset in range(vertices_num)))
 
-    def segments(self) -> typing.Iterable[_LineSegment]:
-        return map(_LineSegment, self.adjacent_vertex_indices(2))
+    def segments(self) -> typing.Iterable[LineSegment]:
+        return map(LineSegment, self.adjacent_vertex_indices(2))
 
 
 class Label:
@@ -447,14 +447,14 @@ class Surface:
     def _get_vertex_label_index(self, vertex_index: int) -> typing.Optional[int]:
         return self.annotation.vertex_label_index.get(vertex_index, None)
 
-    def _find_label_border_segments(self, label: Label) -> typing.Iterator[_LineSegment]:
+    def _find_label_border_segments(self, label: Label) -> typing.Iterator[LineSegment]:
         for triangle in self.triangles:
             border_vertex_indices = tuple(filter(
                 lambda i: self._get_vertex_label_index(i) == label.index,
                 triangle.vertex_indices,
             ))
             if len(border_vertex_indices) == 2:
-                yield _LineSegment(border_vertex_indices)
+                yield LineSegment(border_vertex_indices)
 
     def find_label_border_polygonal_chains(self, label: Label) -> typing.Iterator[PolygonalChain]:
         segments = set(self._find_label_border_segments(label))

+ 31 - 7
tests/test_line_segment.py

@@ -1,19 +1,43 @@
 import pytest
 
-from freesurfer_surface import _LineSegment
+from freesurfer_surface import LineSegment
 
 
 def test_init_fail():
     with pytest.raises(Exception):
-        _LineSegment((1, 2, 3))
+        LineSegment((1, 2, 3))
 
 
 def test_eq():
-    assert _LineSegment((67018, 67019)) == _LineSegment((67018, 67019))
-    assert _LineSegment((67018, 67019)) == _LineSegment((67019, 67018))
-    assert _LineSegment((67019, 67018)) == _LineSegment((67018, 67019))
+    assert LineSegment((67018, 67019)) == LineSegment((67018, 67019))
+    assert LineSegment((67018, 67019)) == LineSegment((67019, 67018))
+    assert LineSegment((67019, 67018)) == LineSegment((67018, 67019))
 
 
 def test_repr():
-    assert repr(_LineSegment((67018, 67019))) \
-        == '_LineSegment(vertex_indices=(67018, 67019))'
+    assert repr(LineSegment((67018, 67019))) \
+        == 'LineSegment(vertex_indices=(67018, 67019))'
+
+
+def test_adjacent_vertex_indices_1():
+    chain = LineSegment((1, 4))
+    singles = list(chain.adjacent_vertex_indices(1))
+    assert len(singles) == 2
+    assert singles[0] == (1,)
+    assert singles[1] == (4,)
+
+
+def test_adjacent_vertex_indices_2():
+    chain = LineSegment((1, 4))
+    pairs = list(chain.adjacent_vertex_indices(2))
+    assert len(pairs) == 2
+    assert pairs[0] == (1, 4)
+    assert pairs[1] == (4, 1)
+
+
+def test_adjacent_vertex_indices_3():
+    chain = LineSegment((1, 4))
+    triplets = list(chain.adjacent_vertex_indices(3))
+    assert len(triplets) == 2
+    assert triplets[0] == (1, 4, 1)
+    assert triplets[1] == (4, 1, 4)

+ 4 - 4
tests/test_polygonal_chain.py

@@ -1,6 +1,6 @@
 import pytest
 
-from freesurfer_surface import PolygonalChain, PolygonalChainsNotOverlapingError, _LineSegment
+from freesurfer_surface import PolygonalChain, PolygonalChainsNotOverlapingError, LineSegment
 
 
 def test_init():
@@ -99,6 +99,6 @@ def test_segments():
     chain = PolygonalChain((0, 1, 4, 8))
     segments = list(chain.segments())
     assert len(segments) == 3
-    assert segments[0] == _LineSegment((0, 1))
-    assert segments[1] == _LineSegment((1, 4))
-    assert segments[2] == _LineSegment((4, 8))
+    assert segments[0] == LineSegment((0, 1))
+    assert segments[1] == LineSegment((1, 4))
+    assert segments[2] == LineSegment((4, 8))

+ 5 - 5
tests/test_surface.py

@@ -3,7 +3,7 @@ import datetime
 import numpy
 import pytest
 
-from freesurfer_surface import setlocale, Vertex, Triangle, _LineSegment, \
+from freesurfer_surface import setlocale, Vertex, Triangle, LineSegment, \
                                Annotation, Surface, PolygonalCircuit
 
 from conftest import ANNOTATION_FILE_PATH, SURFACE_FILE_PATH
@@ -369,14 +369,14 @@ def test__find_label_border_segments():
     border_segments = set(
         surface._find_label_border_segments(precentral_label))
     assert len(border_segments) == 417
-    assert _LineSegment((33450, 32065)) in border_segments
-    assert _LineSegment((33454, 33450)) in border_segments
+    assert LineSegment((33450, 32065)) in border_segments
+    assert LineSegment((33454, 33450)) in border_segments
     for border_vertex_index in [33450, 33454, 32065]:
         assert surface.annotation.vertex_label_index[border_vertex_index] == precentral_label.index
         for other_vertex_index in [32064, 33449, 33455, 33449, 33455]:
-            assert _LineSegment((other_vertex_index, border_vertex_index)) \
+            assert LineSegment((other_vertex_index, border_vertex_index)) \
                 not in border_segments
-            assert _LineSegment((border_vertex_index, other_vertex_index)) \
+            assert LineSegment((border_vertex_index, other_vertex_index)) \
                 not in border_segments