Source code for magmap.tests.test_detector

# MagellanMapper unit testing for detector
"""Unit testing for the MagellanMapper detector module."""

import unittest

import numpy as np

from magmap.cv import detector


[docs] class TestDetector(unittest.TestCase):
[docs] def make_random_blobs(self) -> "detector.Blobs": """Make blobs with random coordinates. Returns: Blobs instance. """ # set up basic blobs with random coordinates and radii blobs = np.random.rand(20).reshape((5, 4)) blobs[:, :3] = np.multiply(blobs[:, :3], 100).astype(int) blobs[:, 3] = blobs[:, 3] * 10 # test constructing blobs with default columns bl = detector.Blobs(blobs) self.assertTrue(bl.cols == [c.value for c in bl.Cols][:4]) self.assertTrue(bl._col_inds[bl.Cols.RADIUS] == 3) self.assertTrue(bl._col_inds[bl.Cols.ABS_X] is None) # test formatting blobs for full set of columns bl.format_blobs() self.assertTrue(bl.cols == [c.value for c in bl.Cols]) self.assertTrue(bl._col_inds[bl.Cols.RADIUS] == 3) self.assertTrue(bl._col_inds[bl.Cols.ABS_X] == 9) print(f"Blobs:\n{bl.blobs}") return bl
[docs] def test_blob_accessors(self): # set up random blobs bl = self.make_random_blobs() # test blob confirmation flag np.testing.assert_array_equal( bl.get_blob_confirmed(bl.blobs), bl.blobs[:, 4]) conf_flag = 1 bl.set_blob_confirmed(bl.blobs, conf_flag) self.assertTrue(np.all(bl.get_blob_confirmed(bl.blobs) == conf_flag)) # test blob truth flag np.testing.assert_array_equal( bl.get_blob_truth(bl.blobs), bl.blobs[:, 5]) truth_flag = 2 bl.set_blob_truth(bl.blobs, truth_flag) self.assertTrue(np.all(bl.get_blob_truth(bl.blobs) == truth_flag)) # test blob channel np.testing.assert_array_equal( bl.get_blobs_channel(bl.blobs), bl.blobs[:, 6]) channel = 3 bl.set_blob_channel(bl.blobs, channel) self.assertTrue(np.all(bl.get_blobs_channel(bl.blobs) == channel)) # test blob absolute coordinates np.testing.assert_array_equal( bl.get_blob_abs_coords(bl.blobs), bl.blobs[:, 7:10]) abs_coords = (1, 2, 3) bl.set_blob_abs_coords(bl.blobs, abs_coords) self.assertTrue(all(np.all( bl.get_blob_abs_coords(bl.blobs) == abs_coords, axis=1)))
if __name__ == "__main__": unittest.main()