Beispiel #1
0
class Test_BaseNeo_merge_annotations_merge(unittest.TestCase):
    '''
    TestCase to make sure merge_annotations and merge methods work
    '''
    def setUp(self):
        self.name1 = 'a base 1'
        self.name2 = 'a base 2'
        self.description1 = 'this is a test 1'
        self.description2 = 'this is a test 2'
        self.base1 = BaseNeo(name=self.name1, description=self.description1)
        self.base2 = BaseNeo(name=self.name2, description=self.description2)

    def test_merge_annotations__dict(self):
        self.base1.annotations = {'val0': 'val0', 'val1': 1,
                                  'val2': 2.2, 'val3': 'test1',
                                  'val4': [.4], 'val5': {0: 0, 1: {0: 0}},
                                  'val6': np.array([0, 1, 2])}
        self.base2.annotations = {'val2': 2.2, 'val3': 'test2',
                                  'val4': [4, 4.4], 'val5': {1: {1: 1}, 2: 2},
                                  'val6': np.array([4, 5, 6]), 'val7': True}

        ann1 = self.base1.annotations
        ann2 = self.base2.annotations
        ann1c = self.base1.annotations.copy()
        ann2c = self.base2.annotations.copy()

        targ = {'val0': 'val0', 'val1': 1, 'val2': 2.2, 'val3': 'test1;test2',
                'val4': [.4, 4, 4.4], 'val5': {0: 0, 1: {0: 0, 1: 1}, 2: 2},
                'val7': True}

        self.base1.merge_annotations(self.base2)

        val6t = np.array([0, 1, 2, 4, 5, 6])
        val61 = ann1.pop('val6')
        val61c = ann1c.pop('val6')
        val62 = ann2.pop('val6')
        val62c = ann2c.pop('val6')

        self.assertEqual(ann1, self.base1.annotations)
        self.assertNotEqual(ann1c, self.base1.annotations)
        self.assertEqual(ann2c, self.base2.annotations)
        self.assertEqual(targ, self.base1.annotations)

        assert_arrays_equal(val61, val6t)
        self.assertRaises(AssertionError, assert_arrays_equal, val61c, val6t)
        assert_arrays_equal(val62, val62c)

        self.assertEqual(self.name1, self.base1.name)
        self.assertEqual(self.name2, self.base2.name)
        self.assertEqual(self.description1, self.base1.description)
        self.assertEqual(self.description2, self.base2.description)

    def test_merge_annotations__func__dict(self):
        ann1 = {'val0': 'val0', 'val1': 1, 'val2': 2.2, 'val3': 'test1',
                'val4': [.4], 'val5': {0: 0, 1: {0: 0}},
                'val6': np.array([0, 1, 2])}
        ann2 = {'val2': 2.2, 'val3': 'test2',
                'val4': [4, 4.4], 'val5': {1: {1: 1}, 2: 2},
                'val6': np.array([4, 5, 6]), 'val7': True}

        ann1c = ann1.copy()
        ann2c = ann2.copy()

        targ = {'val0': 'val0', 'val1': 1, 'val2': 2.2, 'val3': 'test1;test2',
                'val4': [.4, 4, 4.4], 'val5': {0: 0, 1: {0: 0, 1: 1}, 2: 2},
                'val7': True}

        res = merge_annotations(ann1, ann2)

        val6t = np.array([0, 1, 2, 4, 5, 6])
        val6r = res.pop('val6')
        val61 = ann1.pop('val6')
        val61c = ann1c.pop('val6')
        val62 = ann2.pop('val6')
        val62c = ann2c.pop('val6')

        self.assertEqual(ann1, ann1c)
        self.assertEqual(ann2, ann2c)
        self.assertEqual(res, targ)

        assert_arrays_equal(val6r, val6t)
        self.assertRaises(AssertionError, assert_arrays_equal, val61, val6t)
        assert_arrays_equal(val61, val61c)
        assert_arrays_equal(val62, val62c)

    def test_merge_annotation__func__str(self):
        ann1 = 'test1'
        ann2 = 'test2'

        targ = 'test1;test2'

        res = merge_annotation(ann1, ann2)

        self.assertEqual(res, targ)

    def test_merge_annotation__func__ndarray(self):
        ann1 = np.array([0, 1, 2])
        ann2 = np.array([4, 5, 6])

        ann1c = ann1.copy()
        ann2c = ann2.copy()

        targ = np.array([0, 1, 2, 4, 5, 6])

        res = merge_annotation(ann1, ann2)

        assert_arrays_equal(res, targ)
        assert_arrays_equal(ann1, ann1c)
        assert_arrays_equal(ann2, ann2c)

    def test_merge_annotation__func__list(self):
        ann1 = [0, 1, 2]
        ann2 = [4, 5, 6]

        ann1c = ann1[:]
        ann2c = ann2[:]

        targ = [0, 1, 2, 4, 5, 6]

        res = merge_annotation(ann1, ann2)

        self.assertEqual(res, targ)
        self.assertEqual(ann1, ann1c)
        self.assertEqual(ann2, ann2c)

    def test_merge_annotation__func__dict(self):
        ann1 = {0: 0, 1: {0: 0}}
        ann2 = {1: {1: 1}, 2: 2}

        ann1c = ann1.copy()
        ann2c = ann2.copy()

        targ = {0: 0, 1: {0: 0, 1: 1}, 2: 2}

        res = merge_annotation(ann1, ann2)

        self.assertEqual(res, targ)
        self.assertEqual(ann1, ann1c)
        self.assertEqual(ann2, ann2c)

    def test_merge_annotation__func__int(self):
        ann1 = 1
        ann2 = 1
        ann3 = 3

        targ = 1

        res = merge_annotation(ann1, ann2)

        self.assertEqual(res, targ)
        self.assertRaises(AssertionError, merge_annotation, ann1, ann3)

    def test_merge_annotation__func__float(self):
        ann1 = 1.1
        ann2 = 1.1
        ann3 = 1.3

        targ = 1.1

        res = merge_annotation(ann1, ann2)

        self.assertEqual(res, targ)
        self.assertRaises(AssertionError, merge_annotation, ann1, ann3)

    def test_merge_annotation__func__bool(self):
        ann1 = False
        ann2 = False
        ann3 = True
        ann4 = True

        targ1 = False
        targ2 = True

        res1 = merge_annotation(ann1, ann2)
        res2 = merge_annotation(ann3, ann4)

        self.assertEqual(res1, targ1)
        self.assertEqual(res2, targ2)
        self.assertRaises(AssertionError, merge_annotation, ann1, ann3)
        self.assertRaises(AssertionError, merge_annotation, ann2, ann4)

    def test_merge__dict(self):
        self.base1.annotations = {'val0': 'val0', 'val1': 1,
                                  'val2': 2.2, 'val3': 'test1'}
        self.base2.annotations = {'val2': 2.2, 'val3': 'test2',
                                  'val4': [4, 4.4], 'val5': True}

        ann1 = self.base1.annotations
        ann1c = self.base1.annotations.copy()
        ann2c = self.base2.annotations.copy()

        targ = {'val0': 'val0', 'val1': 1, 'val2': 2.2, 'val3': 'test1;test2',
                'val4': [4, 4.4], 'val5': True}

        self.base1.merge(self.base2)

        self.assertEqual(ann1, self.base1.annotations)
        self.assertNotEqual(ann1c, self.base1.annotations)
        self.assertEqual(ann2c, self.base2.annotations)
        self.assertEqual(targ, self.base1.annotations)

        self.assertEqual(self.name1, self.base1.name)
        self.assertEqual(self.name2, self.base2.name)
        self.assertEqual(self.description1, self.base1.description)
        self.assertEqual(self.description2, self.base2.description)

    def test_merge_annotations__different_type_AssertionError(self):
        self.base1.annotations = {'val1': 1, 'val2': 2.2, 'val3': 'tester'}
        self.base2.annotations = {'val3': False, 'val4': [4, 4.4],
                                  'val5': True}
        self.base1.merge_annotations(self.base2)
        self.assertEqual(self.base1.annotations,
                         {'val1': 1,
                          'val2': 2.2,
                          'val3': 'MERGE CONFLICT',
                          'val4': [4, 4.4],
                          'val5': True})

    def test_merge__different_type_AssertionError(self):
        self.base1.annotations = {'val1': 1, 'val2': 2.2, 'val3': 'tester'}
        self.base2.annotations = {'val3': False, 'val4': [4, 4.4],
                                  'val5': True}
        self.base1.merge(self.base2)
        self.assertEqual(self.base1.annotations,
                         {'val1': 1,
                          'val2': 2.2,
                          'val3': 'MERGE CONFLICT',
                          'val4': [4, 4.4],
                          'val5': True})

    def test_merge_annotations__unmergable_unequal_AssertionError(self):
        self.base1.annotations = {'val1': 1, 'val2': 2.2, 'val3': True}
        self.base2.annotations = {'val3': False, 'val4': [4, 4.4],
                                  'val5': True}
        self.base1.merge_annotations(self.base2)
        self.assertEqual(self.base1.annotations,
                         {'val1': 1,
                          'val2': 2.2,
                          'val3': 'MERGE CONFLICT',
                          'val4': [4, 4.4],
                          'val5': True})

    def test_merge__unmergable_unequal_AssertionError(self):
        self.base1.annotations = {'val1': 1, 'val2': 2.2, 'val3': True}
        self.base2.annotations = {'val3': False, 'val4': [4, 4.4],
                                  'val5': True}
        self.base1.merge(self.base2)
        self.assertEqual(self.base1.annotations,
                         {'val1': 1,
                          'val2': 2.2,
                          'val3': 'MERGE CONFLICT',
                          'val4': [4, 4.4],
                          'val5': True})
Beispiel #2
0
class Test_BaseNeo_merge_annotations_merge(unittest.TestCase):
    '''
    TestCase to make sure merge_annotations and merge methods work
    '''
    def setUp(self):
        self.name1 = 'a base 1'
        self.name2 = 'a base 2'
        self.description1 = 'this is a test 1'
        self.description2 = 'this is a test 2'
        self.base1 = BaseNeo(name=self.name1, description=self.description1)
        self.base2 = BaseNeo(name=self.name2, description=self.description2)

    def test_merge_annotations__dict(self):
        self.base1.annotations = {
            'val0': 'val0',
            'val1': 1,
            'val2': 2.2,
            'val3': 'test1',
            'val4': [.4],
            'val5': {
                0: 0,
                1: {
                    0: 0
                }
            },
            'val6': np.array([0, 1, 2])
        }
        self.base2.annotations = {
            'val2': 2.2,
            'val3': 'test2',
            'val4': [4, 4.4],
            'val5': {
                1: {
                    1: 1
                },
                2: 2
            },
            'val6': np.array([4, 5, 6]),
            'val7': True
        }

        ann1 = self.base1.annotations
        ann2 = self.base2.annotations
        ann1c = self.base1.annotations.copy()
        ann2c = self.base2.annotations.copy()

        targ = {
            'val0': 'val0',
            'val1': 1,
            'val2': 2.2,
            'val3': 'test1;test2',
            'val4': [.4, 4, 4.4],
            'val5': {
                0: 0,
                1: {
                    0: 0,
                    1: 1
                },
                2: 2
            },
            'val7': True
        }

        self.base1.merge_annotations(self.base2)

        val6t = np.array([0, 1, 2, 4, 5, 6])
        val61 = ann1.pop('val6')
        val61c = ann1c.pop('val6')
        val62 = ann2.pop('val6')
        val62c = ann2c.pop('val6')

        self.assertEqual(ann1, self.base1.annotations)
        self.assertNotEqual(ann1c, self.base1.annotations)
        self.assertEqual(ann2c, self.base2.annotations)
        self.assertEqual(targ, self.base1.annotations)

        assert_arrays_equal(val61, val6t)
        self.assertRaises(AssertionError, assert_arrays_equal, val61c, val6t)
        assert_arrays_equal(val62, val62c)

        self.assertEqual(self.name1, self.base1.name)
        self.assertEqual(self.name2, self.base2.name)
        self.assertEqual(self.description1, self.base1.description)
        self.assertEqual(self.description2, self.base2.description)

    def test_merge_annotations__func__dict(self):
        ann1 = {
            'val0': 'val0',
            'val1': 1,
            'val2': 2.2,
            'val3': 'test1',
            'val4': [.4],
            'val5': {
                0: 0,
                1: {
                    0: 0
                }
            },
            'val6': np.array([0, 1, 2])
        }
        ann2 = {
            'val2': 2.2,
            'val3': 'test2',
            'val4': [4, 4.4],
            'val5': {
                1: {
                    1: 1
                },
                2: 2
            },
            'val6': np.array([4, 5, 6]),
            'val7': True
        }

        ann1c = ann1.copy()
        ann2c = ann2.copy()

        targ = {
            'val0': 'val0',
            'val1': 1,
            'val2': 2.2,
            'val3': 'test1;test2',
            'val4': [.4, 4, 4.4],
            'val5': {
                0: 0,
                1: {
                    0: 0,
                    1: 1
                },
                2: 2
            },
            'val7': True
        }

        res = merge_annotations(ann1, ann2)

        val6t = np.array([0, 1, 2, 4, 5, 6])
        val6r = res.pop('val6')
        val61 = ann1.pop('val6')
        val61c = ann1c.pop('val6')
        val62 = ann2.pop('val6')
        val62c = ann2c.pop('val6')

        self.assertEqual(ann1, ann1c)
        self.assertEqual(ann2, ann2c)
        self.assertEqual(res, targ)

        assert_arrays_equal(val6r, val6t)
        self.assertRaises(AssertionError, assert_arrays_equal, val61, val6t)
        assert_arrays_equal(val61, val61c)
        assert_arrays_equal(val62, val62c)

    def test_merge_annotation__func__str(self):
        ann1 = 'test1'
        ann2 = 'test2'

        targ = 'test1;test2'

        res = merge_annotation(ann1, ann2)

        self.assertEqual(res, targ)

    def test_merge_annotation__func__ndarray(self):
        ann1 = np.array([0, 1, 2])
        ann2 = np.array([4, 5, 6])

        ann1c = ann1.copy()
        ann2c = ann2.copy()

        targ = np.array([0, 1, 2, 4, 5, 6])

        res = merge_annotation(ann1, ann2)

        assert_arrays_equal(res, targ)
        assert_arrays_equal(ann1, ann1c)
        assert_arrays_equal(ann2, ann2c)

    def test_merge_annotation__func__list(self):
        ann1 = [0, 1, 2]
        ann2 = [4, 5, 6]

        ann1c = ann1[:]
        ann2c = ann2[:]

        targ = [0, 1, 2, 4, 5, 6]

        res = merge_annotation(ann1, ann2)

        self.assertEqual(res, targ)
        self.assertEqual(ann1, ann1c)
        self.assertEqual(ann2, ann2c)

    def test_merge_annotation__func__dict(self):
        ann1 = {0: 0, 1: {0: 0}}
        ann2 = {1: {1: 1}, 2: 2}

        ann1c = ann1.copy()
        ann2c = ann2.copy()

        targ = {0: 0, 1: {0: 0, 1: 1}, 2: 2}

        res = merge_annotation(ann1, ann2)

        self.assertEqual(res, targ)
        self.assertEqual(ann1, ann1c)
        self.assertEqual(ann2, ann2c)

    def test_merge_annotation__func__int(self):
        ann1 = 1
        ann2 = 1
        ann3 = 3

        targ = 1

        res = merge_annotation(ann1, ann2)

        self.assertEqual(res, targ)
        self.assertRaises(AssertionError, merge_annotation, ann1, ann3)

    def test_merge_annotation__func__float(self):
        ann1 = 1.1
        ann2 = 1.1
        ann3 = 1.3

        targ = 1.1

        res = merge_annotation(ann1, ann2)

        self.assertEqual(res, targ)
        self.assertRaises(AssertionError, merge_annotation, ann1, ann3)

    def test_merge_annotation__func__bool(self):
        ann1 = False
        ann2 = False
        ann3 = True
        ann4 = True

        targ1 = False
        targ2 = True

        res1 = merge_annotation(ann1, ann2)
        res2 = merge_annotation(ann3, ann4)

        self.assertEqual(res1, targ1)
        self.assertEqual(res2, targ2)
        self.assertRaises(AssertionError, merge_annotation, ann1, ann3)
        self.assertRaises(AssertionError, merge_annotation, ann2, ann4)

    def test_merge__dict(self):
        self.base1.annotations = {
            'val0': 'val0',
            'val1': 1,
            'val2': 2.2,
            'val3': 'test1'
        }
        self.base2.annotations = {
            'val2': 2.2,
            'val3': 'test2',
            'val4': [4, 4.4],
            'val5': True
        }

        ann1 = self.base1.annotations
        ann1c = self.base1.annotations.copy()
        ann2c = self.base2.annotations.copy()

        targ = {
            'val0': 'val0',
            'val1': 1,
            'val2': 2.2,
            'val3': 'test1;test2',
            'val4': [4, 4.4],
            'val5': True
        }

        self.base1.merge(self.base2)

        self.assertEqual(ann1, self.base1.annotations)
        self.assertNotEqual(ann1c, self.base1.annotations)
        self.assertEqual(ann2c, self.base2.annotations)
        self.assertEqual(targ, self.base1.annotations)

        self.assertEqual(self.name1, self.base1.name)
        self.assertEqual(self.name2, self.base2.name)
        self.assertEqual(self.description1, self.base1.description)
        self.assertEqual(self.description2, self.base2.description)

    def test_merge_annotations__different_type_AssertionError(self):
        self.base1.annotations = {'val1': 1, 'val2': 2.2, 'val3': 'tester'}
        self.base2.annotations = {
            'val3': False,
            'val4': [4, 4.4],
            'val5': True
        }
        self.base1.merge_annotations(self.base2)
        self.assertEqual(
            self.base1.annotations, {
                'val1': 1,
                'val2': 2.2,
                'val3': 'MERGE CONFLICT',
                'val4': [4, 4.4],
                'val5': True
            })

    def test_merge__different_type_AssertionError(self):
        self.base1.annotations = {'val1': 1, 'val2': 2.2, 'val3': 'tester'}
        self.base2.annotations = {
            'val3': False,
            'val4': [4, 4.4],
            'val5': True
        }
        self.base1.merge(self.base2)
        self.assertEqual(
            self.base1.annotations, {
                'val1': 1,
                'val2': 2.2,
                'val3': 'MERGE CONFLICT',
                'val4': [4, 4.4],
                'val5': True
            })

    def test_merge_annotations__unmergable_unequal_AssertionError(self):
        self.base1.annotations = {'val1': 1, 'val2': 2.2, 'val3': True}
        self.base2.annotations = {
            'val3': False,
            'val4': [4, 4.4],
            'val5': True
        }
        self.base1.merge_annotations(self.base2)
        self.assertEqual(
            self.base1.annotations, {
                'val1': 1,
                'val2': 2.2,
                'val3': 'MERGE CONFLICT',
                'val4': [4, 4.4],
                'val5': True
            })

    def test_merge__unmergable_unequal_AssertionError(self):
        self.base1.annotations = {'val1': 1, 'val2': 2.2, 'val3': True}
        self.base2.annotations = {
            'val3': False,
            'val4': [4, 4.4],
            'val5': True
        }
        self.base1.merge(self.base2)
        self.assertEqual(
            self.base1.annotations, {
                'val1': 1,
                'val2': 2.2,
                'val3': 'MERGE CONFLICT',
                'val4': [4, 4.4],
                'val5': True
            })