class TestGrid(TestCase): """Grid testcase class.""" def setUp(self): """Test setup function.""" self._ref_points = np.linspace(-1, 1, 21) self._ref_weights = np.ones(21) * 0.1 self.grid = Grid(self._ref_points, self._ref_weights) def test_init_grid(self): """Test Grid init.""" # tests property assert isinstance(self.grid, Grid) assert_allclose(self.grid.points, self._ref_points, atol=1e-7) assert_allclose(self.grid.weights, self._ref_weights) assert self.grid.size == self._ref_weights.size def test_integrate(self): """Test Grid integral.""" # integral test1 result2 = self.grid.integrate(np.ones(21)) assert_allclose(result2, 2.1) # integral test2 value1 = np.linspace(-1, 1, 21) value2 = value1**2 result3 = self.grid.integrate(value1, value2) assert_allclose(result3, 0, atol=1e-7) def test_getitem(self): """Test Grid index and slicing.""" # test index grid_index = self.grid[10] ref_grid = Grid(self._ref_points[10:11], self._ref_weights[10:11]) assert_allclose(grid_index.points, ref_grid.points) assert_allclose(grid_index.weights, ref_grid.weights) assert isinstance(grid_index, Grid) # test slice ref_grid_slice = Grid(self._ref_points[:11], self._ref_weights[:11]) grid_slice = self.grid[:11] assert_allclose(grid_slice.points, ref_grid_slice.points) assert_allclose(grid_slice.weights, ref_grid_slice.weights) assert isinstance(grid_slice, Grid) a = np.array([1, 3, 5]) ref_smt_index = self.grid[a] assert_allclose(ref_smt_index.points, self._ref_points[a]) assert_allclose(ref_smt_index.weights, self._ref_weights[a]) def test_get_localgrid(self): """Test the creation of the local grid with a normal radius.""" center = self.grid.points[3] radius = 0.2 localgrid = self.grid.get_localgrid(center, radius) # Just make sure we are testing with an actual local grid with less (but # not zero) points. assert localgrid.size > 0 assert localgrid.size < self.grid.size # Test that the local grid contains the correct results. assert localgrid.points.ndim == self.grid.points.ndim assert localgrid.weights.ndim == self.grid.weights.ndim assert_allclose(localgrid.points, self.grid.points[localgrid.indices]) assert_allclose(localgrid.weights, self.grid.weights[localgrid.indices]) if self._ref_points.ndim == 2: assert (np.linalg.norm(localgrid.points - center, axis=1) <= radius).all() else: assert (abs(localgrid.points - center) <= radius).all() def test_get_localgrid_radius_inf(self): """Test the creation of the local grid with an infinite radius.""" localgrid = self.grid.get_localgrid(self.grid.points[3], np.inf) # Just make sure we are testing with a real local grid assert localgrid.size == self.grid.size assert_allclose(localgrid.points, self.grid.points) assert_allclose(localgrid.weights, self.grid.weights) assert_allclose(localgrid.indices, np.arange(self.grid.size)) def test_errors_raise(self): """Test errors raise.""" # grid init with self.assertRaises(ValueError): Grid(self._ref_points, np.ones(len(self._ref_weights) + 1)) with self.assertRaises(ValueError): Grid(self._ref_points.reshape(self.grid.size, 1, 1), self._ref_weights) with self.assertRaises(ValueError): Grid(self._ref_points, self._ref_weights.reshape(-1, 1)) # integral with self.assertRaises(ValueError): self.grid.integrate() with self.assertRaises(TypeError): self.grid.integrate(5) if self._ref_points.ndim == 2: with self.assertRaises(ValueError): self.grid.integrate(self._ref_points) # get_localgrid with self.assertRaises(ValueError): self.grid.get_localgrid(self._ref_points[0], -1) with self.assertRaises(ValueError): self.grid.get_localgrid(self._ref_points[0], -np.inf) with self.assertRaises(ValueError): self.grid.get_localgrid(self._ref_points[0], np.nan) if self._ref_points.ndim == 2: with self.assertRaises(ValueError): self.grid.get_localgrid( np.zeros(self._ref_points.shape[1] + 1), 5.0) else: with self.assertRaises(ValueError): self.grid.get_localgrid(np.zeros(2), 5.0)
class TestGrid(TestCase): """Grid testcase class.""" def setUp(self): """Test setup function.""" points = np.linspace(-1, 1, 21) weights = np.ones(21) * 0.1 self.grid = Grid(points, weights) def test_init_grid(self): """Test Grid init.""" # tests property assert isinstance(self.grid, Grid) ref_pts = np.arange(-1, 1.1, 0.1) ref_wts = np.ones(21) * 0.1 assert_allclose(self.grid.points, ref_pts, atol=1e-7) assert_allclose(self.grid.weights, ref_wts) assert self.grid.size == 21 def test_integrate(self): """Test Grid integral.""" # integral test1 result2 = self.grid.integrate(np.ones(21)) assert_allclose(result2, 2.1) # integral test2 value1 = np.linspace(-1, 1, 21) value2 = value1**2 result3 = self.grid.integrate(value1, value2) assert_allclose(result3, 0, atol=1e-7) def test_getitem(self): """Test Grid index and slicing.""" # test index grid_index = self.grid[10] ref_grid = Grid(np.array([0]), np.array([0.1])) assert_allclose(grid_index.points, ref_grid.points) assert_allclose(grid_index.weights, ref_grid.weights) assert isinstance(grid_index, Grid) # test slice ref_grid_slice = Grid(np.linspace(-1, 0, 11), np.ones(11) * 0.1) grid_slice = self.grid[:11] assert_allclose(grid_slice.points, ref_grid_slice.points) assert_allclose(grid_slice.weights, ref_grid_slice.weights) assert isinstance(grid_slice, Grid) a = np.array([1, 3, 5]) ref_smt_index = self.grid[a] assert_allclose(ref_smt_index.points, np.array([-0.9, -0.7, -0.5])) assert_allclose(ref_smt_index.weights, np.array([0.1, 0.1, 0.1])) def test_errors_raise(self): """Test errors raise.""" # grid init weights = np.ones(4) points = np.arange(5) with self.assertRaises(ValueError): Grid(points, weights) # integral with self.assertRaises(ValueError): self.grid.integrate() with self.assertRaises(TypeError): self.grid.integrate(5) with self.assertRaises(ValueError): self.grid.integrate(points)