def testSideBySideRecursion(self): ''' 0 1 2 +----------------------------+----------------------+ | 0.5 | 1.5 | | +-----------+------------+ | +--------+---------+ | | | | | | | | | | | | 0 | 1 | | | 2 | 3 | | | | | | | | | | | | | | | | | | | | | +-----------+------------+ | +--------+---------+ | +---------------------------------------------------+ ''' outer_mapper = FuncBinMapper(self.fn1, 2) middle_mapper1 = FuncBinMapper(self.fn2, 2) middle_mapper2 = FuncBinMapper(self.fn4, 2) rmapper = RecursiveBinMapper(outer_mapper) rmapper.add_mapper(middle_mapper1, [0.5]) rmapper.add_mapper(middle_mapper2, [1.5]) assert rmapper.nbins == 4 coords = np.array([[0.1], [0.2], [0.3], [0.4], [0.6], [1.1], [1.6]]) output = rmapper.assign(coords) print('OUTPUT', output) assert list(output) == [0, 0, 0, 0, 1, 2, 3]
def testDeepRecursion(self): ''' 0 1 2 +----------------------------+----------------------+ | 0.5 | | | +-----------+------------+ | | | | 0.25 | | | | | | +---+---+ | | | 0 | | | | 2 | 3 | | 1 | | | | | +---+---+ | | | | | +-----------+------------+ | | +---------------------------------------------------+ ''' outer_mapper = FuncBinMapper(self.fn1, 2) middle_mapper = FuncBinMapper(self.fn2, 2) inner_mapper = FuncBinMapper(self.fn3, 2) rmapper = RecursiveBinMapper(outer_mapper) rmapper.add_mapper(middle_mapper, [0.5]) rmapper.add_mapper(inner_mapper, [0.25]) assert rmapper.nbins == 4 coords = np.array([[0.1], [0.2], [0.3], [0.4], [0.6], [1.1]]) output = rmapper.assign(coords) assert list(output) == [2, 2, 3, 3, 1, 0]
def testMegaComplexRecursion(self): ''' 0 1 2 +----------------------------+----------------------+ | 0.5 | 1.5 | | +-----------+------------+ | +--------+---------+ | | | 0.25 | | | | | | | | | +---+---+ | | | | | | | | | | 1 | 2 | | 0 | | | 3 | 4 | | | | +---+---+ | | | | | | | | +-----------+------------+ | +--------+---------+ | +---------------------------------------------------+ ''' outer_mapper = FuncBinMapper(self.fn1, 2) middle_mapper1 = FuncBinMapper(self.fn2, 2) middle_mapper2 = FuncBinMapper(self.fn4, 2) inner_mapper = FuncBinMapper(self.fn3, 2) rmapper = RecursiveBinMapper(outer_mapper) rmapper.add_mapper(middle_mapper1, [0.5]) rmapper.add_mapper(inner_mapper, [0.25]) rmapper.add_mapper(middle_mapper2, [1.5]) assert rmapper.nbins == 5 coords = np.array([[0.1], [0.2], [0.3], [0.4], [0.6], [1.1], [1.6]]) output = rmapper.assign(coords) assert list(output) == [1, 1, 2, 2, 0, 3, 4]
def testOuterMapperWithOffset(self): ''' 0 1 2 +----------------------------+----------------------+ | 1 | 2 | +---------------------------------------------------+ ''' mapper = FuncBinMapper(self.fn1, 2) rmapper = RecursiveBinMapper(mapper, 1) coords = np.array([[0.1], [0.2], [0.3], [0.4], [0.6], [1.1]]) output = rmapper.assign(coords) assert list(output) == [1, 1, 1, 1, 1, 2]
def testSingleRecursion(self): ''' 0 1 2 +----------------------------+----------------------+ | 0.5 | | | +-----------+------------+ | | | | | | | | | | 1 | 2 | | 0 | | | | | | | | | | | | | | +-----------+------------+ | | +---------------------------------------------------+ ''' outer_mapper = FuncBinMapper(self.fn1, 2) inner_mapper = FuncBinMapper(self.fn2, 2) rmapper = RecursiveBinMapper(outer_mapper) rmapper.add_mapper(inner_mapper, [0.5]) assert rmapper.nbins == 3 coords = np.array([[0.1], [0.2], [0.3], [0.4], [0.6], [1.1]]) output = rmapper.assign(coords) assert list(output) == [1, 1, 1, 1, 2, 0]
def test2dRectilinearRecursion(self): ''' 0 1 2 +----------------------------+----------------------+ | | 1.5 | | | +--------+---------+ | | | | | | | | 0 | | 3 | 4 | | | | | | | | | | | | | | | | +--------+---------+ | 1+---------------------------------------------------+ | 0.5 | | | +-----------+------------+ | | | | | | | | | | 1 | 2 | | 5 | | | | | | | | | | | | | | +-----------+------------+ | | 2+---------------------------------------------------+ ''' outer_mapper = RectilinearBinMapper([[0, 1, 2], [0, 1, 2]]) upper_right_mapper = RectilinearBinMapper([[1, 1.5, 2], [0, 1]]) lower_left_mapper = RectilinearBinMapper([[0, 0.5, 1], [1, 2]]) rmapper = RecursiveBinMapper(outer_mapper) rmapper.add_mapper(upper_right_mapper, [1.5, 0.5]) rmapper.add_mapper(lower_left_mapper, [0.5, 1.5]) pairs = [(0.5, 0.5), (1.25, 0.5), (1.75, 0.5), (0.25, 1.5), (0.75, 1.5), (1.5, 1.5)] assert rmapper.nbins == 6 assignments = rmapper.assign(pairs) expected = [0, 3, 4, 1, 2, 5] print('PAIRS', pairs) print('LABELS', list(rmapper.labels)) print('EXPECTED', expected) print('OUTPUT ', assignments) assert (assignments == expected).all()