def test_send_out_state_to_active_leaf_unit_different_leaf_unit_velocities_raises_error(
         self):
     cnode = Node(Unit(identifier=(1, ),
                       position=[0.1, 0.2, 0.3],
                       velocity=[1.5, 0.0, 0.0],
                       time_stamp=1.5),
                  weight=1)
     first_child = Node(Unit(identifier=(1, 0),
                             position=[0.7, 0.8, 0.9],
                             charge={"charge": 1.0},
                             velocity=[1.0, 0.0, 0.0],
                             time_stamp=1.5),
                        weight=0.5)
     cnode.add_child(first_child)
     second_child = Node(Unit(identifier=(1, 1),
                              position=[0.5, 0.4, 0.3],
                              charge={"charge": -1.0},
                              velocity=[2.0, 0.0, 0.0],
                              time_stamp=1.5),
                         weight=0.5)
     cnode.add_child(second_child)
     # Call this to update the event time
     self._event_handler_to_leaf_unit_motion.send_event_time([cnode])
     with self.assertRaises(AssertionError):
         self._event_handler_to_leaf_unit_motion.send_out_state([cnode])
    def test_send_out_state_to_active_root_unit_root_unit_active_raises_error(
            self):
        cnode = Node(Unit(identifier=(0, ),
                          position=[0.1, 0.2, 0.3],
                          velocity=[1.0, 0.0, 0.0],
                          time_stamp=1.0),
                     weight=1)
        cnode.add_child(
            Node(Unit(identifier=(0, 0),
                      position=[0.7, 0.8, 0.9],
                      charge={"charge": 1.0},
                      velocity=[1.0, 0.0, 0.0],
                      time_stamp=1.0),
                 weight=0.5))
        # Call this to update the event time
        self._event_handler_to_root_unit_motion.send_event_time([cnode])

        cnode.add_child(
            Node(Unit(identifier=(0, 1),
                      position=[0.5, 0.6, 0.1],
                      charge={"charge": -1.0},
                      velocity=[1.0, 0.0, 0.0],
                      time_stamp=1.0),
                 weight=0.5))
        with self.assertRaises(AssertionError):
            self._event_handler_to_root_unit_motion.send_out_state([cnode])
    def test_send_event_time_without_charge(self, random_expovariate_mock, _):
        self._setUpSendEventTime(random_expovariate_mock,
                                 self._bounding_potential_mock_without_charge)
        in_state_one = Node(Unit(identifier=(0, ),
                                 position=[0.2, 0.8],
                                 velocity=[0.0, 0.5],
                                 time_stamp=1.2),
                            weight=1)
        in_state_one.add_child(
            Node(Unit(identifier=(0, 2),
                      position=[0.5, 0.9],
                      velocity=[0.0, 1.0],
                      time_stamp=1.3),
                 weight=0.5))

        in_state_two = Node(Unit(identifier=(3, ), position=[0.5, 0.6]),
                            weight=1)
        in_state_two.add_child(
            Node(Unit(identifier=(3, 1), position=[0.1, 0.3]), weight=0.5))

        event_time = self._event_handler_without_charge.send_event_time(
            [in_state_one, in_state_two])
        # Should be called with beta
        random_expovariate_mock.assert_called_once_with(1)
        self._bounding_potential_mock_without_charge.displacement.assert_called_once_with(
            1, [(0.1 - 0.5 + 0.5) % 1.0 - 0.5, (0.3 - 0.9 + 0.5) % 1.0 - 0.5],
            2)
        self.assertAlmostEqual(event_time, 1.6)
Exemplo n.º 4
0
    def test_send_out_state_two(self):
        self._event_handler_two.send_event_time()

        cnode = Node(Unit(identifier=(0,), position=[0.1, 0.2, 0.3],
                          velocity=[0.5, 0.0, 0.0], time_stamp=1.0), weight=1)
        cnode.add_child(Node(Unit(identifier=(0, 0), position=[0.7, 0.8, 0.9], charge={"charge": 1.0},
                                  velocity=[1.0, 0.0, 0.0], time_stamp=1.0), weight=0.5))
        out_state = self._event_handler_two.send_out_state([cnode])
        self.assertEqual(len(out_state), 1)

        out_state_cnode = out_state[0]
        self.assertIsNone(out_state_cnode.parent)
        self.assertEqual(out_state_cnode.value.identifier, (0,))
        self.assertEqual(out_state_cnode.value.position, [0.1 + 0.5 * 0.3, 0.2, 0.3])
        self.assertEqual(out_state_cnode.weight, 1)
        self.assertEqual(out_state_cnode.value.velocity, [0.5, 0.0, 0.0])
        self.assertEqual(out_state_cnode.value.time_stamp, 1.3)
        self.assertIsNone(out_state_cnode.value.charge)
        self.assertEqual(len(out_state_cnode.children), 1)

        child_cnode = out_state_cnode.children[0]
        self.assertEqual(len(child_cnode.children), 0)
        self.assertIs(child_cnode.parent, out_state_cnode)
        self.assertEqual(child_cnode.value.identifier, (0, 0))
        self.assertEqual(child_cnode.value.position, [0.0, 0.8, 0.9])
        self.assertEqual(child_cnode.value.velocity, [1.0, 0.0, 0.0])
        self.assertEqual(child_cnode.value.time_stamp, 1.3)
        self.assertEqual(child_cnode.value.charge, {"charge": 1.0})
    def test_send_out_state_leaf_unit_branch(self):
        self._event_handler.send_event_time()

        cnode = Node(Unit(identifier=(0,), position=[0.1, 0.2, 0.3],
                          velocity=[0.25, 0.0, 0.0], time_stamp=0.5), weight=1)
        cnode.add_child(Node(Unit(identifier=(0, 0), position=[0.7, 0.8, 0.9], charge={"charge": 1.0},
                                  velocity=[0.5, 0.0, 0.0], time_stamp=0.4), weight=0.5))
        out_state = self._event_handler.send_out_state([cnode], [])

        self.assertEqual(len(out_state), 1)
        out_state_cnode = out_state[0]
        self.assertIsNone(out_state_cnode.parent)
        self.assertEqual(out_state_cnode.value.identifier, (0,))
        self.assertEqual(out_state_cnode.value.position, [0.1 + (0.7 - 0.5) * 0.25, 0.2, 0.3])
        self.assertEqual(out_state_cnode.weight, 1)
        self.assertEqual(out_state_cnode.value.velocity, [0.0, 0.25, 0.0])
        self.assertEqual(out_state_cnode.value.time_stamp, 0.7)
        self.assertIsNone(out_state_cnode.value.charge)

        self.assertEqual(len(out_state_cnode.children), 1)
        child_cnode = out_state_cnode.children[0]
        self.assertIs(child_cnode.parent, out_state_cnode)
        self.assertEqual(child_cnode.children, [])
        self.assertEqual(child_cnode.value.identifier, (0, 0))
        self.assertEqual(child_cnode.value.position, [(0.7 + (0.7 - 0.4) * 0.5) % 1.0, 0.8, 0.9])
        self.assertEqual(child_cnode.weight, 0.5)
        self.assertEqual(child_cnode.value.velocity, [0.0, 0.5, 0.0])
        self.assertEqual(child_cnode.value.time_stamp, 0.7)
        self.assertEqual(child_cnode.value.charge, {"charge": 1.0})
Exemplo n.º 6
0
    def test_send_out_state_cell_for_composite_objects_leaf_unit_active(self):
        self._setUpCellForCompositeObjectsLeafUnitActive()
        in_state = Node(Unit(identifier=(0, ),
                             position=[0.2, 0.8],
                             velocity=[0.0, 0.5],
                             time_stamp=1.4),
                        weight=1)
        in_state.add_child(
            Node(Unit(identifier=(0, 2),
                      position=[0.5, 0.9],
                      velocity=[0.0, 1.0],
                      time_stamp=1.3),
                 weight=0.5))
        self._event_handler.send_event_time([in_state])
        out_state = self._event_handler.send_out_state()
        self.assertEqual(len(out_state), 1)
        cnode = out_state[0]
        self.assertIsNone(cnode.parent)
        self.assertEqual(cnode.value.identifier, (0, ))
        self.assertEqual(cnode.value.position, [0.2, 0.0])
        self.assertEqual(cnode.weight, 1)
        self.assertIsNone(cnode.value.charge)
        self.assertEqual(cnode.value.velocity, [0.0, 0.5])
        self.assertAlmostEqual(cnode.value.time_stamp, 1.8, places=13)

        self.assertEqual(len(cnode.children), 1)
        child_cnode = cnode.children[0]
        self.assertIs(child_cnode.parent, cnode)
        self.assertEqual(child_cnode.children, [])
        self.assertEqual(child_cnode.value.identifier, (0, 2))
        self.assertEqual(child_cnode.value.position, [0.5, (0.9 + 0.5) % 1.0])
        self.assertEqual(child_cnode.weight, 0.5)
        self.assertIsNone(child_cnode.value.charge)
        self.assertEqual(child_cnode.value.velocity, [0.0, 1.0])
        self.assertAlmostEqual(child_cnode.value.time_stamp, 1.8, places=13)
 def test_send_event_time_to_active_root_unit_two_root_nodes_raises_error(
         self):
     cnode_one = Node(Unit(identifier=(0, ),
                           position=[0.1, 0.2, 0.3],
                           velocity=[0.5, 0.0, 0.0],
                           time_stamp=1.0),
                      weight=1)
     cnode_one.add_child(
         Node(Unit(identifier=(0, 0),
                   position=[0.7, 0.8, 0.9],
                   charge={"charge": 1.0},
                   velocity=[1.0, 0.0, 0.0],
                   time_stamp=1.0),
              weight=0.5))
     cnode_two = Node(Unit(identifier=(5, ),
                           position=[0.4, 0.5, 0.6],
                           velocity=[0.5, 0.0, 0.0],
                           time_stamp=1.0),
                      weight=1)
     cnode_two.add_child(
         Node(Unit(identifier=(5, 0),
                   position=[0.3, 0.2, 0.1],
                   charge={"charge": 1.0},
                   velocity=[1.0, 0.0, 0.0],
                   time_stamp=1.0),
              weight=0.5))
     with self.assertRaises(AssertionError):
         self._event_handler_to_root_unit_motion.send_event_time(
             [cnode_one, cnode_two])
Exemplo n.º 8
0
    def test_extract_active_global_state_leaf_unit_active(self):
        self._state_handler.initialize(self._root_nodes)
        branch = Node(Unit(identifier=(0, ),
                           position=[0.2, 0.3],
                           charge=None,
                           velocity=[0.2, 0],
                           time_stamp=0.1),
                      weight=1)
        branch.add_child(
            Node(Unit(identifier=(0, 0),
                      position=[0.4, 0.6],
                      charge={"e": -1},
                      velocity=[0.6, -0.1],
                      time_stamp=0.2),
                 weight=0.5))
        self._state_handler.insert_into_global_state([branch])

        branches = self._state_handler.extract_active_global_state()
        self.assertEqual(len(branches), 1)
        info = branches[0].value
        self.assertEqual(info.position, [0.2, 0.3])
        self.assertEqual(info.charge, None)
        self.assertEqual(info.identifier, (0, ))
        self.assertEqual(info.velocity, [0.2, 0])
        self.assertEqual(info.time_stamp, 0.1)
        self.assertEqual(len(branches[0].children), 1)
        info = branches[0].children[0].value
        self.assertEqual(info.position, [0.4, 0.6])
        self.assertEqual(info.charge, {"e": 1})
        self.assertEqual(info.identifier, (0, 0))
        self.assertEqual(info.velocity, [0.6, -0.1])
        self.assertEqual(info.time_stamp, 0.2)
        self.assertEqual(len(branches[0].children[0].children), 0)
    def test_send_out_state_two(self):
        self._event_handler_two.send_event_time()

        cnode = Node(Unit(identifier=(0, ), position=[0.1, 0.2, 0.3]),
                     weight=1)
        cnode.add_child(
            Node(Unit(identifier=(0, 1),
                      position=[0.4, 0.5, 0.6],
                      charge={"charge": 1.0}),
                 weight=0.5))

        out_state = self._event_handler_two.send_out_state(cnode)
        self.assertEqual(len(out_state), 1)
        out_state_cnode = out_state[0]
        self.assertIsNone(out_state_cnode.parent)
        self.assertEqual(out_state_cnode.value.identifier, (0, ))
        self.assertEqual(out_state_cnode.value.position, [0.1, 0.2, 0.3])
        self.assertEqual(out_state_cnode.weight, 1)
        self.assertEqual(out_state_cnode.value.velocity, [0.0, 0.0, 0.25])
        self.assertEqual(out_state_cnode.value.time_stamp, 0.0)
        self.assertIsNone(out_state_cnode.value.charge)

        self.assertEqual(len(out_state_cnode.children), 1)
        first_child_cnode = out_state_cnode.children[0]
        self.assertIs(first_child_cnode.parent, out_state_cnode)
        self.assertEqual(first_child_cnode.children, [])
        self.assertEqual(first_child_cnode.value.identifier, (0, 1))
        self.assertEqual(first_child_cnode.value.position, [0.4, 0.5, 0.6])
        self.assertEqual(first_child_cnode.weight, 0.5)
        self.assertEqual(first_child_cnode.value.velocity, [0.0, 0.0, 0.5])
        self.assertEqual(first_child_cnode.value.time_stamp, 0.0)
        self.assertEqual(first_child_cnode.value.charge, {"charge": 1.0})
Exemplo n.º 10
0
    def test_send_event_time_without_charge(self, random_expovariate_mock, _):
        self._setUpSendEventTime(
            random_expovariate_mock,
            self._cell_bounding_potential_mock_without_charge, [0.5, 0.9],
            [0.1, 0.3])
        in_state_one = Node(Unit(identifier=(0, ),
                                 position=[0.2, 0.8],
                                 velocity=[0.0, 0.5],
                                 time_stamp=1.3),
                            weight=1)
        in_state_one.add_child(
            Node(Unit(identifier=(0, 2),
                      position=[0.5, 0.9],
                      velocity=[0.0, 1.0],
                      time_stamp=1.3),
                 weight=0.5))

        in_state_two = Node(Unit(identifier=(3, ), position=[0.5, 0.6]),
                            weight=1)
        in_state_two.add_child(
            Node(Unit(identifier=(3, 1), position=[0.1, 0.3]), weight=0.5))

        event_time = self._event_handler_without_charge.send_event_time(
            [in_state_one, in_state_two])
        # Should be called with beta
        random_expovariate_mock.assert_called_once_with(1)
        # Arguments are checked in _setUpSendEventTime
        self.assertEqual(self._cells_mock.position_to_cell.call_count, 2)
        self._cells_mock.excluded_cells.assert_called_once_with(4)
        self._cells_mock.relative_cell.assert_called_once_with(12, 4)
        self._cell_bounding_potential_mock_without_charge.displacement.assert_called_once_with(
            1, 8, 2)
        self.assertAlmostEqual(event_time, 1.6)
    def test_send_out_state_to_active_leaf_unit(self, random_choice_mock):
        cnode = Node(Unit(identifier=(1, ),
                          position=[0.1, 0.2, 0.3],
                          velocity=[1.0, 0.0, 0.0],
                          time_stamp=1.5),
                     weight=1)
        first_child = Node(Unit(identifier=(1, 0),
                                position=[0.7, 0.8, 0.9],
                                charge={"charge": 1.0},
                                velocity=[1.0, 0.0, 0.0],
                                time_stamp=1.5),
                           weight=0.5)
        cnode.add_child(first_child)
        second_child = Node(Unit(identifier=(1, 1),
                                 position=[0.5, 0.4, 0.3],
                                 charge={"charge": -1.0},
                                 velocity=[1.0, 0.0, 0.0],
                                 time_stamp=1.5),
                            weight=0.5)
        cnode.add_child(second_child)
        # Call this to update the event time
        self._event_handler_to_leaf_unit_motion.send_event_time([cnode])
        random_choice_mock.return_value = second_child

        out_state = self._event_handler_to_leaf_unit_motion.send_out_state(
            [cnode])
        random_choice_mock.assert_called_once_with([first_child, second_child])
        self.assertEqual(len(out_state), 1)
        cnode = out_state[0]
        self.assertIsNone(cnode.parent)
        self.assertEqual(cnode.weight, 1)
        self.assertEqual(cnode.value.identifier, (1, ))
        self.assertEqual(cnode.value.position,
                         [(0.1 + (2.2 - 1.5) * 1.0) % 1.0, 0.2, 0.3])
        self.assertEqual(cnode.value.velocity, [0.5, 0.0, 0.0])
        self.assertEqual(cnode.value.time_stamp, 2.2)
        self.assertEqual(len(cnode.children), 2)
        first_child = cnode.children[0]
        self.assertIs(first_child.parent, cnode)
        self.assertEqual(first_child.weight, 0.5)
        self.assertEqual(first_child.value.identifier, (1, 0))
        self.assertEqual(first_child.value.position,
                         [(0.7 + (2.2 - 1.5) * 1.0) % 1.0, 0.8, 0.9])
        self.assertIsNone(first_child.value.velocity)
        self.assertIsNone(first_child.value.time_stamp)
        self.assertEqual(len(first_child.children), 0)
        second_child = cnode.children[1]
        self.assertIs(second_child.parent, cnode)
        self.assertEqual(second_child.weight, 0.5)
        self.assertEqual(second_child.value.identifier, (1, 1))
        self.assertEqual(second_child.value.position,
                         [(0.5 + (2.2 - 1.5) * 1.0) % 1.0, 0.4, 0.3])
        self.assertEqual(second_child.value.velocity, [1.0, 0.0, 0.0])
        self.assertEqual(second_child.value.time_stamp, 2.2)
        self.assertEqual(len(second_child.children), 0)
Exemplo n.º 12
0
    def test_send_out_state_cell_for_composite_objects_root_unit_active(self):
        self._setUpCellForCompositeObjectsRootUnitActive()
        in_state = Node(Unit(identifier=(1, ),
                             position=[0.2, 0.4],
                             velocity=[2.0, 0.0],
                             time_stamp=0.7),
                        weight=1)
        in_state.add_child(
            Node(Unit(identifier=(1, 0),
                      position=[0.5, 0.6],
                      velocity=[2.0, 0.0],
                      time_stamp=0.7),
                 weight=0.5))
        in_state.add_child(
            Node(Unit(identifier=(1, 1),
                      position=[0.3, 0.8],
                      velocity=[2.0, 0.0],
                      time_stamp=0.7),
                 weight=0.5))
        self._event_handler.send_event_time([in_state])
        out_state = self._event_handler.send_out_state()
        self.assertEqual(len(out_state), 1)
        cnode = out_state[0]
        self.assertIsNone(cnode.parent)
        self.assertEqual(cnode.value.identifier, (1, ))
        self.assertEqual(cnode.value.position, [0.5, 0.4])
        self.assertEqual(cnode.weight, 1)
        self.assertIsNone(cnode.value.charge)
        self.assertEqual(cnode.value.velocity, [2.0, 0.0])
        self.assertAlmostEqual(cnode.value.time_stamp, 0.85, places=13)

        self.assertEqual(len(cnode.children), 2)
        child_cnode = cnode.children[0]
        self.assertIs(child_cnode.parent, cnode)
        self.assertEqual(child_cnode.children, [])
        self.assertEqual(child_cnode.value.identifier, (1, 0))
        self.assertEqual(child_cnode.value.position, [0.8, 0.6])
        self.assertEqual(child_cnode.weight, 0.5)
        self.assertIsNone(child_cnode.value.charge)
        self.assertEqual(child_cnode.value.velocity, [2.0, 0.0])
        self.assertAlmostEqual(child_cnode.value.time_stamp, 0.85, places=13)

        child_cnode = cnode.children[1]
        self.assertIs(child_cnode.parent, cnode)
        self.assertEqual(child_cnode.children, [])
        self.assertEqual(child_cnode.value.identifier, (1, 1))
        self.assertEqual(child_cnode.value.position,
                         [(0.3 + (0.85 - 0.7) * 2.0) % 1.0, 0.8])
        self.assertEqual(child_cnode.weight, 0.5)
        self.assertIsNone(child_cnode.value.charge)
        self.assertEqual(child_cnode.value.velocity, [2.0, 0.0])
        self.assertAlmostEqual(child_cnode.value.time_stamp, 0.85, places=13)
Exemplo n.º 13
0
    def fill_root_node(self, node: Node) -> None:
        """
        Fill the root node with a random water composite object.

        Parameters
        ----------
        node : base.node.Node
            The root node.
        """
        molecule_center = setting.random_position()
        particles = self._create_random_water_molecule(molecule_center)
        for particle in particles:
            node.add_child(Node(particle))
        node.value = Particle(position=molecule_center)
Exemplo n.º 14
0
 def test_more_than_two_leaf_units_raises_error(self,
                                                random_expovariate_mock, _):
     self._setUpSendEventTime(
         random_expovariate_mock,
         self._cell_bounding_potential_mock_without_charge, [0.5, 0.6],
         [0.3, 0.8])
     in_state_one = Node(Unit(identifier=(1, ),
                              position=[0.2, 0.4],
                              velocity=[1.0, 0.0],
                              time_stamp=0.7),
                         weight=1)
     in_state_one.add_child(
         Node(Unit(identifier=(1, 0),
                   position=[0.5, 0.6],
                   velocity=[2.0, 0.0],
                   time_stamp=0.7),
              weight=0.5))
     in_state_one.add_child(
         Node(Unit(identifier=(1, 1), position=[0.3, 0.8]), weight=0.5))
     in_state_two = Node(Unit(identifier=(2, ),
                              position=[0.2, 0.4],
                              velocity=[1.0, 0.0],
                              time_stamp=0.7),
                         weight=1)
     in_state_two.add_child(
         Node(Unit(identifier=(2, 0),
                   position=[0.5, 0.6],
                   velocity=[2.0, 0.0],
                   time_stamp=0.7),
              weight=0.5))
     in_state_two.add_child(
         Node(Unit(identifier=(2, 1), position=[0.3, 0.8]), weight=0.5))
     with self.assertRaises(AssertionError):
         self._event_handler_without_charge.send_event_time(
             [in_state_one, in_state_two])
    def test_send_out_state_to_active_root_unit(self):
        cnode = Node(Unit(identifier=(0, ),
                          position=[0.1, 0.2, 0.3],
                          velocity=[0.5, 0.0, 0.0],
                          time_stamp=1.0),
                     weight=1)
        cnode.add_child(
            Node(Unit(identifier=(0, 0),
                      position=[0.7, 0.8, 0.9],
                      charge={"charge": 1.0},
                      velocity=[1.0, 0.0, 0.0],
                      time_stamp=1.0),
                 weight=0.5))
        # Call this to update the event time
        self._event_handler_to_root_unit_motion.send_event_time([cnode])

        cnode.add_child(
            Node(Unit(identifier=(0, 1),
                      position=[0.5, 0.6, 0.1],
                      charge={"charge": -1.0}),
                 weight=0.5))
        out_state = self._event_handler_to_root_unit_motion.send_out_state(
            [cnode])
        self.assertEqual(len(out_state), 1)
        cnode = out_state[0]
        self.assertIsNone(cnode.parent)
        self.assertEqual(cnode.weight, 1)
        self.assertEqual(cnode.value.identifier, (0, ))
        self.assertEqual(cnode.value.position, [0.1 + 0.5 * 0.5, 0.2, 0.3])
        self.assertEqual(cnode.value.velocity, [1.0, 0.0, 0.0])
        self.assertEqual(cnode.value.time_stamp, 1.5)
        self.assertEqual(len(cnode.children), 2)
        first_child = cnode.children[0]
        self.assertIs(first_child.parent, cnode)
        self.assertEqual(first_child.weight, 0.5)
        self.assertEqual(first_child.value.identifier, (0, 0))
        self.assertEqual(first_child.value.position,
                         [(0.7 + 0.5) % 1.0, 0.8, 0.9])
        self.assertEqual(first_child.value.velocity, [1.0, 0.0, 0.0])
        self.assertEqual(first_child.value.time_stamp, 1.5)
        self.assertEqual(len(first_child.children), 0)
        second_child = cnode.children[1]
        self.assertIs(second_child.parent, cnode)
        self.assertEqual(second_child.weight, 0.5)
        self.assertEqual(second_child.value.identifier, (0, 1))
        self.assertEqual(second_child.value.position, [0.5, 0.6, 0.1])
        self.assertEqual(second_child.value.velocity, [1.0, 0.0, 0.0])
        self.assertEqual(second_child.value.time_stamp, 1.5)
        self.assertEqual(len(second_child.children), 0)
 def test_send_event_time_to_active_root_unit(self):
     cnode = Node(Unit(identifier=(0, ),
                       position=[0.1, 0.2, 0.3],
                       velocity=[0.5, 0.0, 0.0],
                       time_stamp=1.0),
                  weight=1)
     cnode.add_child(
         Node(Unit(identifier=(0, 0),
                   position=[0.7, 0.8, 0.9],
                   charge={"charge": 1.0},
                   velocity=[1.0, 0.0, 0.0],
                   time_stamp=1.0),
              weight=0.5))
     self.assertEqual(
         self._event_handler_to_root_unit_motion.send_event_time([cnode]),
         1.5)
Exemplo n.º 17
0
    def _construct_cnode_with_all_children_cnodes(
            self, starting_node: Node, starting_identifier: StateId,
            copy_method: Callable[[Sequence[float]], Sequence[float]] = lambda vector: vector) -> Node:
        """
        Construct the cnode for the given node and add all children after converting them to cnodes.

        The copy method will be applied to the position and the velocity. Per default this method does not copy them.
        """
        velocity, time_stamp = self._lifting_state.get(starting_identifier)
        unit = Unit(starting_identifier, copy_method(starting_node.value.position), starting_node.value.charge,
                    copy_method(velocity), time_stamp)
        cnode = Node(unit, starting_node.weight)
        for index, child in enumerate(starting_node.children):
            next_cnode = self._construct_cnode_with_all_children_cnodes(child, starting_identifier + (index,),
                                                                        copy_method)
            cnode.add_child(next_cnode)
        return cnode
Exemplo n.º 18
0
 def test_send_event_time_cell_for_leaf_units_leaf_unit_active(self):
     self._setUpCellForLeafUnitsLeafUnitActive()
     in_state = Node(Unit(identifier=(0, ),
                          position=[0.2, 0.8],
                          velocity=[0.0, 0.5],
                          time_stamp=1.2),
                     weight=1)
     in_state.add_child(
         Node(Unit(identifier=(0, 2),
                   position=[0.5, 0.9],
                   velocity=[0.0, 1.0],
                   time_stamp=1.3),
              weight=0.5))
     event_time = self._event_handler.send_event_time([in_state])
     self._cells_mock.position_to_cell.assert_called_once_with([0.5, 0.9])
     self._cells_mock.successor.assert_called_once_with(5, 1)
     self._cells_mock.cell_min.assert_called_once_with(6)
     self.assertAlmostEqual(event_time, 1.4)
    def test_send_out_state_root_unit(self):
        self._event_handler.send_event_time()

        cnode = Node(Unit(identifier=(1,), position=[0.1, 0.2, 0.3], velocity=[0.0, 2.0, 0.0],
                          time_stamp=0.0), weight=1)
        cnode.add_child(Node(Unit(identifier=(1, 0), position=[0.4, 0.5, 0.6],
                                  velocity=[0.0, 2.0, 0.0], time_stamp=0.0,
                                  charge={"charge": 1.0}), weight=0.5))
        cnode.add_child(Node(Unit(identifier=(1, 1), position=[0.7, 0.8, 0.9],
                                  velocity=[0.0, 2.0, 0.0], time_stamp=0.0,
                                  charge={"charge": -1.0}), weight=0.5))

        out_state = self._event_handler.send_out_state([cnode], [])
        self.assertEqual(len(out_state), 1)
        out_state_cnode = out_state[0]
        self.assertIsNone(out_state_cnode.parent)
        self.assertEqual(out_state_cnode.value.identifier, (1,))
        self.assertEqual(out_state_cnode.value.position, [0.1, (0.2 + 0.7 * 2.0) % 1.0, 0.3])
        self.assertEqual(out_state_cnode.weight, 1)
        self.assertEqual(out_state_cnode.value.velocity, [0.0, 0.0, 2.0])
        self.assertEqual(out_state_cnode.value.time_stamp, 0.7)
        self.assertIsNone(out_state_cnode.value.charge)

        self.assertEqual(len(out_state_cnode.children), 2)
        first_child_cnode = out_state_cnode.children[0]
        self.assertIs(first_child_cnode.parent, out_state_cnode)
        self.assertEqual(first_child_cnode.children, [])
        self.assertEqual(first_child_cnode.value.identifier, (1, 0))
        self.assertEqual(first_child_cnode.value.position, [0.4, (0.5 + 0.7 * 2.0) % 1.0, 0.6])
        self.assertEqual(first_child_cnode.weight, 0.5)
        self.assertEqual(first_child_cnode.value.velocity, [0.0, 0.0, 2.0])
        self.assertEqual(first_child_cnode.value.time_stamp, 0.7)
        self.assertEqual(first_child_cnode.value.charge, {"charge": 1.0})

        second_child_cnode = out_state_cnode.children[1]
        self.assertIs(second_child_cnode.parent, out_state_cnode)
        self.assertEqual(second_child_cnode.children, [])
        self.assertEqual(second_child_cnode.value.identifier, (1, 1))
        self.assertEqual(second_child_cnode.value.position, [0.7, (0.8 + 0.7 * 2.0) % 1.0, 0.9])
        self.assertEqual(second_child_cnode.weight, 0.5)
        self.assertEqual(second_child_cnode.value.velocity, [0.0, 0.0, 2.0])
        self.assertEqual(second_child_cnode.value.time_stamp, 0.7)
        self.assertEqual(second_child_cnode.value.charge, {"charge": -1.0})
Exemplo n.º 20
0
 def test_send_event_time_cell_for_composite_objects_root_unit_active(self):
     self._setUpCellForCompositeObjectsRootUnitActive()
     in_state = Node(Unit(identifier=(1, ),
                          position=[0.2, 0.4],
                          velocity=[2.0, 0.0],
                          time_stamp=0.7),
                     weight=1)
     in_state.add_child(
         Node(Unit(identifier=(1, 0),
                   position=[0.5, 0.6],
                   velocity=[2.0, 0.0],
                   time_stamp=0.7),
              weight=0.5))
     in_state.add_child(
         Node(Unit(identifier=(1, 1),
                   position=[0.3, 0.8],
                   velocity=[2.0, 0.0],
                   time_stamp=0.7),
              weight=0.5))
     event_time = self._event_handler.send_event_time([in_state])
     self._cells_mock.position_to_cell.assert_called_once_with([0.2, 0.4])
     self._cells_mock.successor.assert_called_once_with(1, 0)
     self._cells_mock.cell_min.assert_called_once_with(13)
     self.assertAlmostEqual(event_time, 0.85)
Exemplo n.º 21
0
    def test_insert_into_global_state_two_branches(self):
        self._state_handler.initialize(self._root_nodes)
        branch_one = Node(Unit(identifier=(0, ),
                               position=[0.2, 0.3],
                               charge=None,
                               velocity=[0.5, 0],
                               time_stamp=0.3),
                          weight=1)
        branch_one.add_child(
            Node(Unit(identifier=(0, 1),
                      position=[0.4, 0.6],
                      charge={"e": -1},
                      velocity=[1, 0],
                      time_stamp=0.3),
                 weight=0.5))
        branch_two = Node(Unit(identifier=(1, ),
                               position=[0.5, 0.6],
                               charge=None,
                               velocity=[1, 1],
                               time_stamp=0.2),
                          weight=1)
        # There are no consistency checks within the state handler
        branch_two.add_child(
            Node(Unit(identifier=(1, 0),
                      position=[0.4, 0.6],
                      charge={"e": 1},
                      velocity=[-0.3, 2.1],
                      time_stamp=0.53),
                 weight=0.5))
        branch_two.add_child(
            Node(Unit(identifier=(1, 1),
                      position=[0.1, 0.2],
                      charge={"e": -1},
                      velocity=[0.7, 0.7],
                      time_stamp=0.1),
                 weight=0.5))
        self._state_handler.insert_into_global_state([branch_one, branch_two])
        all_root_cnodes = self._state_handler.extract_global_state()

        self.assertEqual(len(all_root_cnodes), 2)
        unit = all_root_cnodes[0].value
        self.assertEqual(unit.position, [0.2, 0.3])
        self.assertIsNone(unit.charge)
        self.assertEqual(unit.identifier, (0, ))
        self.assertEqual(unit.velocity, [0.5, 0])
        self.assertEqual(unit.time_stamp, 0.3)
        self.assertEqual(len(all_root_cnodes[0].children), 2)

        unit = all_root_cnodes[0].children[0].value
        self.assertEqual(unit.position, [0, 0])
        self.assertEqual(unit.charge, {"e": 1})
        self.assertEqual(unit.identifier, (0, 0))
        self.assertIsNone(unit.velocity)
        self.assertIsNone(unit.time_stamp)
        self.assertEqual(len(all_root_cnodes[0].children[0].children), 0)

        unit = all_root_cnodes[0].children[1].value
        self.assertEqual(unit.position, [0.4, 0.6])
        self.assertEqual(unit.charge, {"e": -1})
        self.assertEqual(unit.identifier, (0, 1))
        self.assertEqual(unit.velocity, [1, 0])
        self.assertEqual(unit.time_stamp, 0.3)
        self.assertEqual(len(all_root_cnodes[0].children[1].children), 0)

        unit = all_root_cnodes[1].value
        self.assertEqual(unit.position, [0.5, 0.6])
        self.assertIsNone(unit.charge)
        self.assertEqual(unit.identifier, (1, ))
        self.assertEqual(unit.velocity, [1, 1])
        self.assertEqual(unit.time_stamp, 0.2)
        self.assertEqual(len(all_root_cnodes[1].children), 2)

        unit = all_root_cnodes[1].children[0].value
        self.assertEqual(unit.position, [0.4, 0.6])
        self.assertEqual(unit.charge, {"e": 1})
        self.assertEqual(unit.identifier, (1, 0))
        self.assertEqual(unit.velocity, [-0.3, 2.1])
        self.assertEqual(unit.time_stamp, 0.53)
        self.assertEqual(len(all_root_cnodes[1].children[0].children), 0)

        unit = all_root_cnodes[1].children[1].value
        self.assertEqual(unit.position, [0.1, 0.2])
        self.assertEqual(unit.charge, {"e": -1})
        self.assertEqual(unit.identifier, (1, 1))
        self.assertEqual(unit.velocity, [0.7, 0.7])
        self.assertEqual(unit.time_stamp, 0.1)
        self.assertEqual(len(all_root_cnodes[1].children[1].children), 0)
Exemplo n.º 22
0
    def test_insert_into_global_state_velocity_to_none(self):
        self._state_handler.initialize(self._root_nodes)
        branch = Node(Unit(identifier=(0, ),
                           position=[0.2, 0.3],
                           charge=None,
                           velocity=[0.5, 0],
                           time_stamp=0.3),
                      weight=1)
        branch.add_child(
            Node(Unit(identifier=(0, 1),
                      position=[0.4, 0.6],
                      charge={"e": -1},
                      velocity=[1, 0],
                      time_stamp=0.3),
                 weight=0.5))
        self._state_handler.insert_into_global_state([branch])
        branch = Node(Unit(identifier=(0, ),
                           position=[0.1, 0.2],
                           charge=None,
                           velocity=None,
                           time_stamp=None),
                      weight=1)
        branch.add_child(
            Node(Unit(identifier=(0, 1),
                      position=[0.3, 0.4],
                      charge={"e": -1},
                      velocity=None,
                      time_stamp=None),
                 weight=0.5))
        branch.add_child(
            Node(Unit(identifier=(0, 0),
                      position=[0.5, 0.6],
                      charge={"e": 1},
                      velocity=None,
                      time_stamp=None),
                 weight=0.5))
        self._state_handler.insert_into_global_state([branch])

        all_root_cnodes = self._state_handler.extract_global_state()

        self.assertEqual(len(all_root_cnodes), 2)
        unit = all_root_cnodes[0].value
        self.assertEqual(unit.position, [0.1, 0.2])
        self.assertIsNone(unit.charge)
        self.assertEqual(unit.identifier, (0, ))
        self.assertIsNone(unit.velocity)
        self.assertIsNone(unit.time_stamp)
        self.assertEqual(len(all_root_cnodes[0].children), 2)

        unit = all_root_cnodes[0].children[0].value
        self.assertEqual(unit.position, [0.5, 0.6])
        self.assertEqual(unit.charge, {"e": 1})
        self.assertEqual(unit.identifier, (0, 0))
        self.assertIsNone(unit.velocity)
        self.assertIsNone(unit.time_stamp)
        self.assertEqual(len(all_root_cnodes[0].children[0].children), 0)

        unit = all_root_cnodes[0].children[1].value
        self.assertEqual(unit.position, [0.3, 0.4])
        self.assertEqual(unit.charge, {"e": -1})
        self.assertEqual(unit.identifier, (0, 1))
        self.assertIsNone(unit.velocity)
        self.assertIsNone(unit.time_stamp)
        self.assertEqual(len(all_root_cnodes[0].children[1].children), 0)

        unit = all_root_cnodes[1].value
        self.assertEqual(unit.position, [0.9, 0.775])
        self.assertIsNone(unit.charge)
        self.assertEqual(unit.identifier, (1, ))
        self.assertIsNone(unit.velocity)
        self.assertIsNone(unit.time_stamp)
        self.assertEqual(len(all_root_cnodes[1].children), 2)

        unit = all_root_cnodes[1].children[0].value
        self.assertEqual(unit.position, [0.9, 0.8])
        self.assertEqual(unit.charge, {"e": 1})
        self.assertEqual(unit.identifier, (1, 0))
        self.assertIsNone(unit.velocity)
        self.assertIsNone(unit.time_stamp)
        self.assertEqual(len(all_root_cnodes[1].children[0].children), 0)

        unit = all_root_cnodes[1].children[1].value
        self.assertEqual(unit.position, [0.9, 0.75])
        self.assertEqual(unit.charge, {"e": -1})
        self.assertEqual(unit.identifier, (1, 1))
        self.assertIsNone(unit.velocity)
        self.assertIsNone(unit.time_stamp)
        self.assertEqual(len(all_root_cnodes[1].children[1].children), 0)
    def test_send_out_state_without_charge(self, random_expovariate_mock):
        self._setUpSendEventTime(random_expovariate_mock,
                                 self._potential_mock_without_charge)
        in_state_one = Node(Unit(identifier=(0, ),
                                 position=[0.2, 0.8],
                                 velocity=[0.0, 0.5],
                                 time_stamp=1.2),
                            weight=1)
        in_state_one.add_child(
            Node(Unit(identifier=(0, 2),
                      position=[0.5, 0.9],
                      velocity=[0.0, 1.0],
                      time_stamp=1.3),
                 weight=0.5))

        in_state_two = Node(Unit(identifier=(3, ), position=[0.5, 0.6]),
                            weight=1)
        in_state_two.add_child(
            Node(Unit(identifier=(3, 1), position=[0.1, 0.3]), weight=0.5))
        self._event_handler_without_charge.send_event_time(
            [in_state_one, in_state_two])

        out_state = self._event_handler_without_charge.send_out_state()
        self.assertEqual(len(out_state), 2)
        first_cnode = out_state[0]
        self.assertIsNone(first_cnode.parent)
        self.assertEqual(first_cnode.value.identifier, (0, ))
        self.assertEqual(first_cnode.value.position, [0.2, (0.8 + 0.2) % 1.0])
        self.assertEqual(first_cnode.weight, 1)
        self.assertIsNone(first_cnode.value.velocity)
        self.assertIsNone(first_cnode.value.time_stamp)
        self.assertIsNone(first_cnode.value.charge)
        self.assertEqual(len(first_cnode.children), 1)
        first_child = first_cnode.children[0]
        self.assertIs(first_child.parent, first_cnode)
        self.assertEqual(first_child.children, [])
        self.assertEqual(first_child.value.identifier, (0, 2))
        self.assertEqual(first_child.value.position,
                         [0.5, (0.9 + (1.6 - 1.3) * 1.0) % 1.0])
        self.assertEqual(first_child.weight, 0.5)
        self.assertIsNone(first_child.value.velocity)
        self.assertIsNone(first_child.value.time_stamp)
        self.assertIsNone(first_child.value.charge)

        second_cnode = out_state[1]
        self.assertIsNone(second_cnode.parent)
        self.assertEqual(second_cnode.value.identifier, (3, ))
        self.assertEqual(second_cnode.value.position, [0.5, 0.6])
        self.assertEqual(second_cnode.weight, 1)
        self.assertEqual(second_cnode.value.velocity, [0.0, 0.5])
        self.assertEqual(second_cnode.value.time_stamp, 1.6)
        self.assertIsNone(second_cnode.value.charge)
        self.assertEqual(len(second_cnode.children), 1)
        second_child = second_cnode.children[0]
        self.assertIs(second_child.parent, second_cnode)
        self.assertEqual(second_child.children, [])
        self.assertEqual(second_child.value.identifier, (3, 1))
        self.assertEqual(second_child.value.position, [0.1, 0.3])
        self.assertEqual(second_child.weight, 0.5)
        self.assertEqual(second_child.value.velocity, [0.0, 1.0])
        self.assertEqual(second_child.value.time_stamp, 1.6)
        self.assertIsNone(second_child.value.charge)
Exemplo n.º 24
0
    def test_send_out_state_leaf_units_in_same_composite_object_reject(
            self, random_expovariate_mock, random_uniform_mock):
        self._setUpSendEventTime(
            random_expovariate_mock,
            self._cell_bounding_potential_mock_without_charge, [0.5, 0.9],
            [0.1, 0.3])
        in_state_one = Node(Unit(identifier=(0, ),
                                 position=[0.2, 0.8],
                                 velocity=[0.0, 0.5],
                                 time_stamp=1.2),
                            weight=1)
        in_state_one.add_child(
            Node(Unit(identifier=(0, 1),
                      position=[0.5, 0.9],
                      velocity=[0.0, 1.0],
                      time_stamp=1.2),
                 weight=0.5))

        in_state_two = Node(Unit(identifier=(0, ),
                                 position=[0.2, 0.8],
                                 velocity=[0.0, 0.5],
                                 time_stamp=1.2),
                            weight=1)
        in_state_two.add_child(
            Node(Unit(identifier=(0, 0), position=[0.1, 0.3]), weight=0.5))
        self._event_handler_without_charge.send_event_time(
            [in_state_one, in_state_two])

        self._setUpSendOutStateReject(
            random_uniform_mock,
            self._cell_bounding_potential_mock_without_charge,
            self._potential_mock_without_charge)
        out_state = self._event_handler_without_charge.send_out_state()
        new_position = (0.9 + (1.5 - 1.2) * 1.0) % 1.0
        self._cell_bounding_potential_mock_without_charge.derivative.assert_called_once_with(
            1, 8)
        self._potential_mock_without_charge.derivative.assert_called_once_with(
            1, [(0.1 - 0.5 + 0.5) % 1.0 - 0.5,
                (0.3 - new_position + 0.5) % 1.0 - 0.5])
        random_uniform_mock.assert_called_once_with(0, 0.7)
        self._cells_mock.position_to_cell.assert_has_calls(
            [mock.call([0.5, new_position])])

        self.assertEqual(len(out_state), 2)
        first_cnode = out_state[0]
        self.assertIsNone(first_cnode.parent)
        self.assertEqual(first_cnode.value.identifier, (0, ))
        self.assertEqual(first_cnode.value.position,
                         [0.2, (0.8 + (1.5 - 1.2) * 0.5) % 1.0])
        self.assertEqual(first_cnode.weight, 1)
        self.assertEqual(first_cnode.value.velocity, [0.0, 0.5])
        self.assertEqual(first_cnode.value.time_stamp, 1.5)
        self.assertIsNone(first_cnode.value.charge)
        self.assertEqual(len(first_cnode.children), 1)
        first_child = first_cnode.children[0]
        self.assertIs(first_child.parent, first_cnode)
        self.assertEqual(first_child.children, [])
        self.assertEqual(first_child.value.identifier, (0, 1))
        self.assertEqual(first_child.value.position,
                         [0.5, (0.9 + (1.5 - 1.2) * 1.0) % 1.0])
        self.assertEqual(first_child.weight, 0.5)
        self.assertEqual(first_child.value.velocity, [0.0, 1.0])
        self.assertEqual(first_child.value.time_stamp, 1.5)
        self.assertIsNone(first_child.value.charge)

        second_cnode = out_state[1]
        self.assertIsNone(second_cnode.parent)
        self.assertEqual(second_cnode.value.identifier, (0, ))
        self.assertEqual(second_cnode.value.position,
                         [0.2, (0.8 + (1.5 - 1.2) * 0.5) % 1.0])
        self.assertEqual(second_cnode.weight, 1)
        self.assertEqual(second_cnode.value.velocity, [0.0, 0.5])
        self.assertEqual(second_cnode.value.time_stamp, 1.5)
        self.assertIsNone(second_cnode.value.charge)
        self.assertEqual(len(second_cnode.children), 1)
        second_child = second_cnode.children[0]
        self.assertIs(second_child.parent, second_cnode)
        self.assertEqual(second_child.children, [])
        self.assertEqual(second_child.value.identifier, (0, 0))
        self.assertEqual(second_child.value.position, [0.1, 0.3])
        self.assertEqual(second_child.weight, 0.5)
        self.assertIsNone(second_child.value.velocity)
        self.assertIsNone(second_child.value.time_stamp)
        self.assertIsNone(second_child.value.charge)