def test_legacy_runs_without_errors(self): import random # The old compartment based system should still run without errors v = len(Branch.vectors) root = Branch(*(np.ones(v) for i in range(v))) branches = [root] for _ in range(20): branch = Branch(*(np.ones(v) for i in range(v))) branch.label(random.choice(["A", "B", "C"])) random.choice(branches).attach_child(branch) branches.append(branch) m = Morphology([root]) # Call all of the legacy functions m.update_compartment_tree() m.voxelize(1) # Too complex to give correct input and already covered by other tests # m.create_compartment_map() m.get_bounding_box() m.get_search_radius() m.get_compartment_network() m.get_compartment_positions() m.get_compartment_positions(labels=["A"]) m.get_plot_range() m.get_compartment_tree() m.get_compartment_tree(labels=["B"]) m.get_compartment_submask(["C"]) m.get_compartments() m.get_compartments(labels=["A"]) m.get_branches() m.get_branches(labels=["B"])
def test_point_labels(self): v = len(Branch.vectors) branch = Branch(*(np.ones(v) for i in range(v))) branch.label_points("A", [False, True] + [False] * (v - 2)) self.assertEqual([], branch._full_labels) self.assertEqual([[], ["A"]] + [[]] * (v - 2), list(map(list, branch.label_walk())))
def test_branch_nargs(self): v = len(Branch.vectors) Branch(*(np.ones(i) for i in range(v))) with self.assertRaises(TypeError): Branch(*(np.ones(i) for i in range(v - 1))) with self.assertRaises(TypeError): Branch(*(np.ones(i) for i in range(v + 1)))
def test_full_labels(self): v = len(Branch.vectors) branch = Branch(*(np.ones(v) for i in range(v))) branch.label("A", "B", "C") self.assertEqual(["A", "B", "C"], branch._full_labels) self.assertEqual(["A", "B", "C"], list(next(branch.label_walk()))) self.assertTrue( all(["A", "B", "C"] == list(l) for l in branch.label_walk()))
def test_rotate(self): root = Branch( np.array([0.0, 1.0, 2.0]), np.array([0.0, 0.0, 0.0]), np.array([0.0, 0.0, 0.0]), np.array([1.0, 1.0, 1.0]), ) m = Morphology([root]) v0 = [1.0, 0.0, 0.0] v = [0.0, 1.0, 0.0] # Store pre rotation checks x0 = m.compartments[0].end.copy() # Rotate m.rotate(v0, v) s = m.compartments[0].start # Verify rotations self.assertEqualPoints(s, [0.0, 0.0, 0.0], "Rotation moved the origin!") self.assertEqualPoints(m.compartments[0].end, [0.0, 1.0, 0.0], v0=v0, v=v, x0=x0)
def test_properties(self): branch = Branch( np.array([0, 1, 2]), np.array([0, 1, 2]), np.array([0, 1, 2]), np.array([0, 1, 2]), ) self.assertEqual(3, branch.size, "Incorrect branch size") comps = branch.to_compartments() self.assertTrue(np.array_equal(comps[0].midpoint, [0.5, 0.5, 0.5])) self.assertEqual(comps[0].spherical, np.sqrt(3) / 2) self.assertTrue(branch.terminal) branch.attach_child( Branch(*(np.ones(0) for i in range(len(Branch.vectors))))) self.assertFalse(branch.terminal)
def test_mr_labels(self): v = len(Branch.vectors) branch = Branch(*(np.ones(v) for i in range(v))) branch.label_points("A", [False, True] + [False] * (v - 2)) branch.label("B") m = Morphology([branch]) mr = bsb.output.MorphologyRepository("tmp.h5") mr.get_handle("w") mr.save_morphology("test", m) m_loaded = mr.get_morphology("test") branch_loaded = m_loaded.roots[0] self.assertEqual(["B"], branch_loaded._full_labels) self.assertEqual( [["B"], ["B", "A"]] + [["B"]] * (v - 2), list(map(list, branch_loaded.label_walk())), )
def test_branch_attachment(self): v = len(Branch.vectors) branch_A = Branch(*(np.ones(v) for i in range(v))) branch_B = Branch(*(np.ones(v) for i in range(v))) branch_C = Branch(*(np.ones(v) for i in range(v))) branch_D = Branch(*(np.ones(v) for i in range(v))) branch_A.attach_child(branch_B) branch_A.attach_child(branch_C) branch_B.attach_child(branch_D) self.assertEqual([branch_B, branch_C], branch_A._children) self.assertFalse(branch_A.terminal) self.assertFalse(branch_B.terminal) self.assertTrue(branch_C.terminal) self.assertTrue(branch_D.terminal) branch_A.detach_child(branch_C) self.assertIsNone(branch_C._parent) with self.assertRaises(ValueError): branch_A.detach_child(branch_D) self.assertEqual(branch_B, branch_D._parent)