Esempio n. 1
0
    def test_get_min(self):

        cases = (
            (((1, 2, '12'), ),                           (0, [1, 2, '12'], '12')),
            (((1, 2, '34'), (3, 4, '12')),               (1, [3, 4, '12'], '12')),
            (((1, 2, '34'), (3, 4, '12'), (5, 6, '56')), (1, [3, 4, '12'], '12')),
            (((1, 2, '12'), (3, 4, '34'), (5, 6, '12')), (0, [1, 2, '12'], '12')),
        )

        for src_rngs, expected in cases:

            dd("expected index: ", expected[0])
            dd("expected range: ", rangeset.ValueRange(*expected[1]))
            dd("expected value: ", expected[2])

            rd = rangeset.RangeDict(src_rngs)
            idx, rng, val = rd.get_min()

            dd("got index: ", idx)
            dd("got range: ", rng)
            dd("got value: ", val)

            self.assertEqual(idx, expected[0])
            self.assertEqual(rng, rangeset.ValueRange(*expected[1]))
            self.assertEqual(val, expected[2])

        rd = rangeset.RangeDict()
        self.assertRaises(ValueError, rd.get_min)
Esempio n. 2
0
    def test_intersect(self):

        # intersect is implemented with substract, thus we simplified the test.

        a = rangeset.RangeDict([[1, 3, 'a'], [5, 10, 'b']])
        b = rangeset.RangeDict([[2, 8, 'x']])

        self.assertEqual([[2, 3, 'a'], [5, 8, 'b']], rangeset.intersect(a, b))
Esempio n. 3
0
    def test_substract(self):

        cases = (
            ([[None, 10, 'a'], [20, 30, 'b'], [40, None, 'c']], [[None, None]],  []),

            ([[None, 10, 'a'], [20, 30, 'b'], [40, None, 'c']], [[None, 1]],    [[1,    10, 'a'], [20, 30, 'b'],                     [40, None, 'c']]),
            ([[None, 10, 'a'], [20, 30, 'b'], [40, None, 'c']], [[None, 10]],   [                 [20, 30, 'b'],                     [40, None, 'c']]),
            ([[None, 10, 'a'], [20, 30, 'b'], [40, None, 'c']], [[None, 11]],   [                 [20, 30, 'b'],                     [40, None, 'c']]),
            ([[None, 10, 'a'], [20, 30, 'b'], [40, None, 'c']], [[9,    11]],   [[None,  9, 'a'], [20, 30, 'b'],                     [40, None, 'c']]),
            ([[None, 10, 'a'], [20, 30, 'b'], [40, None, 'c']], [[10,   11]],   [[None, 10, 'a'], [20, 30, 'b'],                     [40, None, 'c']]),
            ([[None, 10, 'a'], [20, 30, 'b'], [40, None, 'c']], [[11,   12]],   [[None, 10, 'a'], [20, 30, 'b'],                     [40, None, 'c']]),
            ([[None, 10, 'a'], [20, 30, 'b'], [40, None, 'c']], [[19,   20]],   [[None, 10, 'a'], [20, 30, 'b'],                     [40, None, 'c']]),
            ([[None, 10, 'a'], [20, 30, 'b'], [40, None, 'c']], [[19,   21]],   [[None, 10, 'a'], [21, 30, 'b'],                     [40, None, 'c']]),
            ([[None, 10, 'a'], [20, 30, 'b'], [40, None, 'c']], [[20,   21]],   [[None, 10, 'a'], [21, 30, 'b'],                     [40, None, 'c']]),
            ([[None, 10, 'a'], [20, 30, 'b'], [40, None, 'c']], [[24,   25]],   [[None, 10, 'a'], [20, 24, 'b'], [25, 30, 'b'],      [40, None, 'c']]),
            ([[None, 10, 'a'], [20, 30, 'b'], [40, None, 'c']], [[29,   30]],   [[None, 10, 'a'], [20, 29, 'b'],                     [40, None, 'c']]),
            ([[None, 10, 'a'], [20, 30, 'b'], [40, None, 'c']], [[29,   31]],   [[None, 10, 'a'], [20, 29, 'b'],                     [40, None, 'c']]),
            ([[None, 10, 'a'], [20, 30, 'b'], [40, None, 'c']], [[30,   31]],   [[None, 10, 'a'], [20, 30, 'b'],                     [40, None, 'c']]),
            ([[None, 10, 'a'], [20, 30, 'b'], [40, None, 'c']], [[31,   32]],   [[None, 10, 'a'], [20, 30, 'b'],                     [40, None, 'c']]),
            ([[None, 10, 'a'], [20, 30, 'b'], [40, None, 'c']], [[39,   40]],   [[None, 10, 'a'], [20, 30, 'b'],                     [40, None, 'c']]),
            ([[None, 10, 'a'], [20, 30, 'b'], [40, None, 'c']], [[39,   41]],   [[None, 10, 'a'], [20, 30, 'b'],                     [41, None, 'c']]),
            ([[None, 10, 'a'], [20, 30, 'b'], [40, None, 'c']], [[40,   41]],   [[None, 10, 'a'], [20, 30, 'b'],                     [41, None, 'c']]),
            ([[None, 10, 'a'], [20, 30, 'b'], [40, None, 'c']], [[41,   42]],   [[None, 10, 'a'], [20, 30, 'b'],           [40, 41, 'c'], [42, None, 'c']]),
            ([[None, 10, 'a'], [20, 30, 'b'], [40, None, 'c']], [[41,   None]], [[None, 10, 'a'], [20, 30, 'b'],           [40, 41, 'c'], ]),

            ([[20,   30, 'a']                                ], [[20, 24], [25, 30]], [[24, 25, 'a']]),
            ([[None, 10, 'a'], [20, 30, 'b'], [40, None, 'c']], [[20, 24], [25, 30]], [[None, 10, 'a'], [24, 25, 'b'], [40, None, 'c'], ]),
            ([[None, 10, 'a'], [20, 30, 'b'], [40, None, 'c']], [[1, 2], [8, 25], [35, 45]], [[None, 1, 'a'], [2, 8, 'a'], [25, 30, 'b'], [45, None, 'c']]),
        )

        dd()
        for a, b, expected in cases:
            dd('case:', a, b, expected)

            # RangeDict - RangeSet

            a = rangeset.RangeDict(a)
            b = rangeset.RangeSet(b)

            rst = rangeset.substract(a, b)
            dd('rst:', rst)

            self.assertEqual(expected, rst)

            # RangeDict - RangeDict

            b = rangeset.RangeDict(b)

            rst = rangeset.substract(a, b)
            dd('rst:', rst)

            self.assertEqual(expected, rst)
Esempio n. 4
0
    def test_substract(self):
        r = rangeset.RangeDict(self.inp, dimension=2)
        r = rangeset.substract(r, rangeset.RangeDict([[0.5, 1.5, None]]))
        dd(r)

        self.assertRaises(KeyError, r.get, 2)
        self.assertRaises(KeyError, r.get, 2, 'e')

        self.assertEqual('bd', r.get(0, 'b'))
        self.assertEqual('ac', r.get(1.6, 'b'))

        r = rangeset.substract(r, rangeset.RangeDict([[0, 1.5, None]]))
        dd(r)
        self.assertRaises(KeyError, r.get, 0)
Esempio n. 5
0
    def test_normalize(self):

        cases = (
            ([(None, 2, '12'), [2, 3, '12']],
             [[None, 3, '12']]),

            ([(None, 2, '12'), [2, None, '12']],
             [[None, None, '12']]),

            ([(1, 2, '12'), [2, 3, '12']],
             [[1, 3, '12']]),

            ([(1, 2, '12'), [2, 3, '12'], [3, 4, '12']],
             [[1, 4, '12']]),

            ([(1, 2, '12'), [2, 3, 'foo']],
             [[1, 2, '12'], [2, 3, 'foo']]),
        )

        for ori, expected in cases:

            rd = rangeset.RangeDict(ori)
            rd.normalize()

            self.assertEqual(expected, rd)
Esempio n. 6
0
    def test_get(self):

        r = rangeset.RangeDict(self.inp, dimension=2)

        cases = (
            (0.5, 'a', 'ab'),
            (0.5, 'c', 'bd'),
            (1.5, 'a', 'ac'),
            (1.5, 'c', 'cd'),
        )

        for tm, string, expected in cases:

            dd(tm, string, expected)

            rst = r.get(tm).get(string)
            dd('rst:', rst)

            self.assertEqual(expected, rst)

            # in one get

            rst = r.get(tm, string)
            dd('rst:', rst)

            self.assertEqual(expected, rst)

        # too many args
        self.assertRaises(TypeError, r.get, 1, 'a', 1)
Esempio n. 7
0
    def test_add(self):
        r = rangeset.RangeDict(self.inp, dimension=2)
        r.add([2, None], [['a', 'd', 'ad']])

        rst = r.get(2.5, 'b')
        self.assertEqual('ad', rst)

        self.assertRaises(KeyError, r.get, 2.5, 'e')
Esempio n. 8
0
def _levels(levels=None):

    if levels is None:
        levels = []

    for level, blocks in enumerate(levels):
        for b in blocks:
            b[2] = BlockDesc(b[2])

        levels[level] = rangeset.RangeDict(blocks)

    return levels
Esempio n. 9
0
File: region.py Progetto: bsc-s2/ops
def _levels(levels=None):

    if levels is None:
        levels = []

    for level, range_bids in enumerate(levels):
        for b in range_bids:
            b[2] = BlockID(b[2])

        levels[level] = rangeset.RangeDict(range_bids)

    return levels
Esempio n. 10
0
    def add_block(self, active_range, block, level=None):

        max_level = len(self['levels']) - 1

        if level is None:
            level = max_level + 1

        elif level < 0 or level > max_level + 1:
            raise LevelOutOfBound('level is invalid. except level >= 0 and level <= {0}, '
                                  'got: {1}'.format(max_level + 1, level))

        if level == max_level + 1:
            self['levels'].append(rangeset.RangeDict())

        desc = BlockDesc(block)
        self['levels'][level].add(active_range, desc)
Esempio n. 11
0
    def test_find_overlapped(self):

        cases = (
            ([[None, 10, 'a'], [20, 30, 'b'], [40, None, 'c']], [None, None], [[None, 10, 'a'], [20, 30, 'b'], [40, None, 'c']]),
            ([[None, 10, 'a'], [20, 30, 'b'], [40, None, 'c']], [None, 1],    [[None, 10, 'a']                                ]),
            ([[None, 10, 'a'], [20, 30, 'b'], [40, None, 'c']], [None, 10],   [[None, 10, 'a']                                ]),
            ([[None, 10, 'a'], [20, 30, 'b'], [40, None, 'c']], [None, 11],   [[None, 10, 'a']                                ]),
            ([[None, 10, 'a'], [20, 30, 'b'], [40, None, 'c']], [9,    11],   [[None, 10, 'a']                                ]),
            ([[None, 10, 'a'], [20, 30, 'b'], [40, None, 'c']], [9,    21],   [[None, 10, 'a'], [20, 30, 'b']                 ]),
            ([[None, 10, 'a'], [20, 30, 'b'], [40, None, 'c']], [9,    40],   [[None, 10, 'a'], [20, 30, 'b']                 ]),
            ([[None, 10, 'a'], [20, 30, 'b'], [40, None, 'c']], [9,    41],   [[None, 10, 'a'], [20, 30, 'b'], [40, None, 'c']]),
            ([[None, 10, 'a'], [20, 30, 'b'], [40, None, 'c']], [10,   11],   [                                               ]),
            ([[None, 10, 'a'], [20, 30, 'b'], [40, None, 'c']], [11,   12],   [                                               ]),
            ([[None, 10, 'a'], [20, 30, 'b'], [40, None, 'c']], [19,   20],   [                                               ]),
            ([[None, 10, 'a'], [20, 30, 'b'], [40, None, 'c']], [19,   21],   [                 [20, 30, 'b']                 ]),
            ([[None, 10, 'a'], [20, 30, 'b'], [40, None, 'c']], [20,   21],   [                 [20, 30, 'b']                 ]),
            ([[None, 10, 'a'], [20, 30, 'b'], [40, None, 'c']], [24,   25],   [                 [20, 30, 'b']                 ]),
            ([[None, 10, 'a'], [20, 30, 'b'], [40, None, 'c']], [29,   30],   [                 [20, 30, 'b']                 ]),
            ([[None, 10, 'a'], [20, 30, 'b'], [40, None, 'c']], [29,   31],   [                 [20, 30, 'b']                 ]),
            ([[None, 10, 'a'], [20, 30, 'b'], [40, None, 'c']], [29,   41],   [                 [20, 30, 'b'], [40, None, 'c']]),
            ([[None, 10, 'a'], [20, 30, 'b'], [40, None, 'c']], [30,   31],   [                                               ]),
            ([[None, 10, 'a'], [20, 30, 'b'], [40, None, 'c']], [31,   32],   [                                               ]),
            ([[None, 10, 'a'], [20, 30, 'b'], [40, None, 'c']], [39,   40],   [                                               ]),
            ([[None, 10, 'a'], [20, 30, 'b'], [40, None, 'c']], [39,   41],   [                                [40, None, 'c']]),
            ([[None, 10, 'a'], [20, 30, 'b'], [40, None, 'c']], [40,   41],   [                                [40, None, 'c']]),
            ([[None, 10, 'a'], [20, 30, 'b'], [40, None, 'c']], [41,   42],   [                                [40, None, 'c']]),
            ([[None, 10, 'a'], [20, 30, 'b'], [40, None, 'c']], [41,   None], [                                [40, None, 'c']]),

        )

        dd()
        for a, b, expected in cases:

            dd('case:', a, b, expected)

            a = rangeset.RangeDict(a)

            self.assertEqual(expected, a.find_overlapped(b))
            self.assertEqual(expected, a.find_overlapped(rangeset.Range(*b)))
            self.assertEqual(expected, a.find_overlapped(rangeset.ValueRange(*(b+['bar']))))

            a = rangeset.RangeSet([x[:2] for x in a])
            expected = [x[:2] for x in expected]

            self.assertEqual(expected, a.find_overlapped(b))
            self.assertEqual(expected, a.find_overlapped(rangeset.Range(*b)))
            self.assertEqual(expected, a.find_overlapped(rangeset.ValueRange(*(b+['bar']))))
Esempio n. 12
0
    def test_init(self):

        rd = rangeset.RangeDict([(1, 2, '12'), [3, 4, '34']])

        cases = (
            1, 1.5, 3, 3.5,
        )

        for present in cases:
            self.assertTrue(rd.has(present))

        cases = (
            0, 2, 2.5, 4, 4.5
        )

        for absent in cases:
            self.assertFalse(rd.has(absent))
Esempio n. 13
0
    def test_add(self):

        cases = (
            ([None, 0,    'xx'], [[None, 0,    'xx'], [1, 5, '15'], [7, 9, '79']]),
            ([None, 1,    'xx'], [[None, 1,    'xx'], [1, 5, '15'], [7, 9, '79']]),
            ([None, 2,    'xx'], [[None, 2,    'xx'], [2, 5, '15'], [7, 9, '79']]),
            ([0,    2,    'xx'], [[0,    2,    'xx'], [2, 5, '15'], [7, 9, '79']]),
            ([1,    2,    'xx'], [[1,    2,    'xx'], [2, 5, '15'], [7, 9, '79']]),
            ([1,    5,    'xx'], [[1,    5,    'xx'],               [7, 9, '79']]),
            ([2,    3,    'xx'], [[1,    2,    '15'], [2, 3, 'xx'], [3, 5, '15'], [7, 9, '79']]),
            ([2,    4,    'xx'], [[1,    2,    '15'], [2, 4, 'xx'], [4, 5, '15'], [7, 9, '79']]),
            ([2,    5,    'xx'], [[1,    2,    '15'], [2, 5, 'xx'], [7, 9, '79']]),
            ([2,    6,    'xx'], [[1,    2,    '15'], [2, 6, 'xx'], [7, 9, '79']]),
            ([2,    7,    'xx'], [[1,    2,    '15'], [2, 7, 'xx'], [7, 9, '79']]),
            ([2,    8,    'xx'], [[1,    2,    '15'], [2, 8, 'xx'], [8, 9, '79']]),
            ([5,    7,    'xx'], [[1,    5,    '15'], [5, 7, 'xx'], [7, 9, '79']]),
            ([5,    8,    'xx'], [[1,    5,    '15'], [5, 8, 'xx'], [8, 9, '79']]),
            ([6,    8,    'xx'], [[1,    5,    '15'], [6, 8, 'xx'], [8, 9, '79']]),
            ([6,    9,    'xx'], [[1,    5,    '15'], [6, 9, 'xx'], ]),
            ([6,    10,   'xx'], [[1,    5,    '15'], [6, 10, 'xx'], ]),
            ([7,    8,    'xx'], [[1,    5,    '15'], [7, 8, 'xx'], [8, 9, '79']]),
            ([7,    9,    'xx'], [[1,    5,    '15'], [7, 9, 'xx']]),
            ([7,    10,   'xx'], [[1,    5,    '15'], [7, 10, 'xx']]),
            ([8,    10,   'xx'], [[1,    5,    '15'], [7, 8, '79'], [8, 10, 'xx']]),
            ([9,    10,   'xx'], [[1,    5,    '15'], [7, 9, '79'], [9, 10, 'xx']]),
            ([10,   11,   'xx'], [[1,    5,    '15'], [7, 9, '79'], [10, 11, 'xx']]),
            ([10,   None, 'xx'], [[1,    5,    '15'], [7, 9, '79'], [10, None, 'xx']]),
            ([None, None, 'xx'], [[None, None, 'xx']]),
            ([2,    None, 'xx'], [[1,    2,    '15'], [2, None, 'xx']]),

            ([0,   3,     '15'], [[0,    5,    '15'], [7, 9, '79']]),
            ([2,   6,     '15'], [[1,    6,    '15'], [7, 9, '79']]),
            ([2,   8,     '15'], [[1,    8,    '15'], [8, 9, '79']]),
        )

        for a, expected in cases:
            rd = rangeset.RangeDict([(1, 5, '15'), [7, 9, '79']])
            dd('init:', rd)
            dd('add:', a)
            dd('expected:', expected)

            rd.add(a[:2], a[2])

            self.assertEqual(expected, rd)
Esempio n. 14
0
File: region.py Progetto: bsc-s2/ops
    def add_block(self, active_range, block_id, level=None, allow_exist=False):

        if self.has(block_id):
            if not allow_exist:
                raise BlockAreadyInRegion('block_id {bid}'.format(bid=block_id))
            return

        max_level = len(self['levels']) - 1

        if level is None:
            level = max_level + 1

        elif level < 0 or level > max_level + 1:
            raise LevelOutOfBound('level is invalid. except level >= 0 and level <= {0}, '
                                  'got: {1}'.format(max_level + 1, level))

        if level == max_level + 1:
            self['levels'].append(rangeset.RangeDict())

        self['levels'][level].add(active_range, BlockID(block_id))
Esempio n. 15
0
    def test_get(self):

        rd = rangeset.RangeDict([(1, 2, '12'), [3, 4, '34']])

        cases = (
            (1, '12'),
            (1.5, '12'),
            (3, '34'),
            (3.5, '34'),
        )

        for present, val in cases:
            self.assertEqual(val, rd.get(present))

        cases = (
            0, 2, 2.5, 4, 4.5
        )

        for absent in cases:
            self.assertRaises(KeyError, rd.get, absent)
Esempio n. 16
0
    def test_get_min_is_lt(self):

        cases = (
            (((1, 2, '12'), (3, 4, '34'), (5, 6, '12')), lambda a, b: a < b, (0, [1, 2, '12'], '12')),
            (((1, 2, '12'), (3, 4, '34'), (5, 6, '12')), lambda a, b: a > b, (1, [3, 4, '34'], '34')),
        )

        for src_rngs, is_lt, expected in cases:

            dd("expected index: ", expected[0])
            dd("expected range: ", rangeset.ValueRange(*expected[1]))
            dd("expected value: ", expected[2])

            rd = rangeset.RangeDict(src_rngs)
            idx, rng, val = rd.get_min(is_lt)

            dd("got index: ", idx)
            dd("got range: ", rng)
            dd("got value: ", val)

            self.assertEqual(idx, expected[0])
            self.assertEqual(rng, rangeset.ValueRange(*expected[1]))
            self.assertEqual(val, expected[2])
Esempio n. 17
0
    def test_adjacent_elts(self):

        rd = rangeset.RangeDict([(1, 2, '12'), [2, 3, '23']])
        self.assertEqual('12', rd.get(1.5))
        self.assertEqual('23', rd.get(2))