def test_grid_generation(self): """Test that ``generate_grid_points`` generates a uniform grid. Test makes assumptions about the ordering of the output that may be invalidated by changes to numpy.meshgrid. """ domain_bounds = ClosedInterval.build_closed_intervals_from_list([[0.0, 1.0], [-2.0, 3.0], [2.71, 3.14]]) points_per_dimension = [7, 11, 8] # Test that all points are present grid = generate_grid_points(points_per_dimension, domain_bounds) per_axis_grid = [numpy.linspace(bounds.min, bounds.max, points_per_dimension[i]) for i, bounds in enumerate(domain_bounds)] # Loop ordering assumes the output is ordered a certain way. for i, y_coord in enumerate(per_axis_grid[1]): for j, x_coord in enumerate(per_axis_grid[0]): for k, z_coord in enumerate(per_axis_grid[2]): truth = numpy.array([x_coord, y_coord, z_coord]) index = i * per_axis_grid[2].size * per_axis_grid[0].size + j * per_axis_grid[2].size + k test = grid[index, ...] self.assert_vector_within_relative(test, truth, 0.0) # Also test that scalar points_per_dimension works points_per_dimension = [5, 5, 5] grid_truth = generate_grid_points(points_per_dimension, domain_bounds) points_per_dimension = 5 grid_test = generate_grid_points(points_per_dimension, domain_bounds) self.assert_vector_within_relative(grid_test, grid_truth, 0.0)
def generate_grid_points_in_domain(self, points_per_dimension, random_source=None): """Generate a grid of ``N_0 by N_1 by ... by N_{dim-1}`` points, with each dimension uniformly spaced along the domain boundary. See python.geometry_utils.generate_grid_points for more details. :param points_per_dimension: (n_1, n_2, ... n_{dim}) number of stencil points per spatial dimension. If len(points_per_dimension) == 1, then n_i = len(points_per_dimension) :type points_per_dimension: tuple or scalar :param random_source: random source producing uniform random numbers (e.g., numpy.random.uniform) (UNUSED) :type random_source: callable yielding uniform random numbers in [0,1] :return: uniform random sampling of points from the domain """ # TODO(GH-56): Allow users to pass in a random source. return generate_grid_points(points_per_dimension, self._domain_bounds)