Ejemplo n.º 1
0
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)
Ejemplo n.º 2
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)