def _create_random_dipole(self, center: Sequence[float] = None ) -> List[Particle]: """Create the particles of a dipole molecule at the given center with random positions.""" if center is None: center = setting.random_position() random_direction = random_vector_on_unit_sphere(setting.dimension) dipole_separation = random.uniform( self._min_initial_dipole_separation / 2.0, self._max_initial_dipole_separation / 2.0) position_one = [ center[d] + random_direction[d] * dipole_separation for d in range(setting.dimension) ] position_two = [ center[d] - random_direction[d] * dipole_separation for d in range(setting.dimension) ] setting.periodic_boundaries.correct_position(position_one) setting.periodic_boundaries.correct_position(position_two) return [ Particle( position_one, { charge_value.charge_name: charge_value[0] for charge_value in self._charge_values }), Particle( position_two, { charge_value.charge_name: charge_value[1] for charge_value in self._charge_values }) ]
def test_setting_random_position(self, random_mock): random_mock.side_effect = [0.1, 0.2, 0.3, 0.4, 0.5] random_position = setting.random_position() self.assertEqual(random_position, [0.1, 0.2, 0.3, 0.4, 0.5]) self.assertEqual(random_mock.call_args_list, [ mock.call(0.0, 1.0), mock.call(0.0, 2.0), mock.call(0.0, 3.0), mock.call(0.0, 4.0), mock.call(0.0, 5.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)
def fill_root_node(self, node: Node) -> None: """ Fill the root node with a random point mass. Parameters ---------- node : base.node.Node The root node. """ node.value = Particle( setting.random_position(), { charge_value.charge_name: charge_value[0] for charge_value in self._charge_values })
def test_setting_random_position(self, random_mock): random_mock.side_effect = [0.1, 0.2, 0.3, 0.4, 0.5] random_position = setting.random_position() self.assertEqual(random_position, [0.1, 0.2, 0.3, 0.4, 0.5]) self.assertEqual(random_mock.call_args_list, [mock.call(0.0, 1.5) for _ in range(5)])