def test_input_validation(self): with self.assertRaises(TypeError): Map(False) with self.assertRaises(TypeError): Map(lambda: None) with self.assertRaises(TypeError): Map(Runnable) self.assertIsInstance(Map(Runnable()), Runnable)
def test_dimensions_match_on_compose(self): class A(Runnable, traits.ProblemSampler): def next(self, state): pass # dimensionality check Map(A()) | ArgMin() with self.assertRaises(TypeError): A() | ArgMin() with self.assertRaises(TypeError): ArgMin() | Map(A()) with self.assertRaises(TypeError): ArgMin() | Map(ArgMin()) with self.assertRaises(TypeError): Loop(ArgMin())
def test_map_lambda(self): states = States(State(cnt=1), State(cnt=2)) result = Map(Lambda(lambda _, s: s.updated(cnt=s.cnt + 1))).run( states).result() self.assertEqual(result[0].cnt, states[0].cnt + 1) self.assertEqual(result[1].cnt, states[1].cnt + 1)
def test_branch(self): class Inc(Runnable): def next(self, state): return state.updated(cnt=state.cnt + 1) states = States(State(cnt=1), State(cnt=2)) branch = Map(Inc()) | ArgMin('cnt') result = branch.run(states).result() self.assertEqual(result.cnt, states[0].cnt + 1)
def test_isolated(self): class Inc(Runnable): def next(self, state): return state.updated(cnt=state.cnt + 1) states = States(State(cnt=1), State(cnt=2)) result = Map(Inc()).run(states).result() self.assertEqual(result[0].cnt, states[0].cnt + 1) self.assertEqual(result[1].cnt, states[1].cnt + 1)
def test_map(self): class A(Runnable, traits.ProblemDecomposer): def next(self, state): return state.updated(subproblem=state.problem) a = A() m = Map(a) r = m.run(States(State(problem=1))).result() self.assertSetEqual(m.inputs, a.inputs) self.assertSetEqual(m.outputs, a.outputs)