def test_concatenate_coordinates(self): fd1 = FDataGrid([[1, 2, 3, 4], [2, 3, 4, 5]]) fd2 = FDataGrid([[3, 4, 5, 6], [4, 5, 6, 7]]) fd1.argument_names = ["x"] fd1.coordinate_names = ["y"] fd2.argument_names = ["w"] fd2.coordinate_names = ["t"] fd = fd1.concatenate(fd2, as_coordinates=True) np.testing.assert_equal(fd.n_samples, 2) np.testing.assert_equal(fd.dim_codomain, 2) np.testing.assert_equal(fd.dim_domain, 1) np.testing.assert_array_equal(fd.data_matrix, [[[1, 3], [2, 4], [3, 5], [4, 6]], [[2, 4], [3, 5], [4, 6], [5, 7]]]) # Testing labels np.testing.assert_array_equal(("y", "t"), fd.coordinate_names) fd2.coordinate_names = None fd = fd1.concatenate(fd2, as_coordinates=True) np.testing.assert_array_equal(("y", None), fd.coordinate_names) fd1.coordinate_names = None fd = fd1.concatenate(fd2, as_coordinates=True) np.testing.assert_equal((None, None), fd.coordinate_names)
def test_coordinates(self): fd1 = FDataGrid([[1, 2, 3, 4], [2, 3, 4, 5]]) fd1.argument_names = ["x"] fd1.coordinate_names = ["y"] fd2 = FDataGrid([[3, 4, 5, 6], [4, 5, 6, 7]]) fd = fd1.concatenate(fd2, as_coordinates=True) # Indexing with number np.testing.assert_array_equal(fd.coordinates[0].data_matrix, fd1.data_matrix) np.testing.assert_array_equal(fd.coordinates[1].data_matrix, fd2.data_matrix) # Iteration for fd_j, fd_i in zip([fd1, fd2], fd.coordinates): np.testing.assert_array_equal(fd_j.data_matrix, fd_i.data_matrix) fd3 = fd1.concatenate(fd2, fd1, fd, as_coordinates=True) # Multiple indexation np.testing.assert_equal(fd3.dim_codomain, 5) np.testing.assert_array_equal(fd3.coordinates[:2].data_matrix, fd.data_matrix) np.testing.assert_array_equal(fd3.coordinates[-2:].data_matrix, fd.data_matrix) np.testing.assert_array_equal( fd3.coordinates[np.array( (False, False, True, False, True))].data_matrix, fd.data_matrix)
class TestLpMetrics(unittest.TestCase): def setUp(self): grid_points = [1, 2, 3, 4, 5] self.fd = FDataGrid([[2, 3, 4, 5, 6], [1, 4, 9, 16, 25]], grid_points=grid_points) basis = Monomial(n_basis=3, domain_range=(1, 5)) self.fd_basis = FDataBasis(basis, [[1, 1, 0], [0, 0, 1]]) self.fd_curve = self.fd.concatenate(self.fd, as_coordinates=True) self.fd_surface = make_multimodal_samples(n_samples=3, dim_domain=2, random_state=0) def test_lp_norm(self): np.testing.assert_allclose(lp_norm(self.fd, p=1), [16., 41.33333333]) np.testing.assert_allclose(lp_norm(self.fd, p='inf'), [6, 25]) def test_lp_norm_curve(self): np.testing.assert_allclose(lp_norm(self.fd_curve, p=1, p2=1), [32., 82.666667]) np.testing.assert_allclose(lp_norm(self.fd_curve, p='inf', p2='inf'), [6, 25]) def test_lp_norm_surface_inf(self): np.testing.assert_allclose( lp_norm(self.fd_surface, p='inf').round(5), [0.99994, 0.99793, 0.99868]) def test_lp_norm_surface(self): # Integration of surfaces not implemented, add test case after # implementation self.assertEqual(lp_norm(self.fd_surface, p=1), NotImplemented) def test_lp_error_dimensions(self): # Case internal arrays with np.testing.assert_raises(ValueError): lp_distance(self.fd, self.fd_surface) with np.testing.assert_raises(ValueError): lp_distance(self.fd, self.fd_curve) with np.testing.assert_raises(ValueError): lp_distance(self.fd_surface, self.fd_curve) def test_lp_error_domain_ranges(self): grid_points = [2, 3, 4, 5, 6] fd2 = FDataGrid([[2, 3, 4, 5, 6], [1, 4, 9, 16, 25]], grid_points=grid_points) with np.testing.assert_raises(ValueError): lp_distance(self.fd, fd2) def test_lp_error_grid_points(self): grid_points = [1, 2, 4, 4.3, 5] fd2 = FDataGrid([[2, 3, 4, 5, 6], [1, 4, 9, 16, 25]], grid_points=grid_points) with np.testing.assert_raises(ValueError): lp_distance(self.fd, fd2)
def test_concatenate(self): fd1 = FDataGrid([[1, 2, 3, 4, 5], [2, 3, 4, 5, 6]]) fd2 = FDataGrid([[3, 4, 5, 6, 7], [4, 5, 6, 7, 8]]) fd1.argument_names = ["x"] fd1.coordinate_names = ["y"] fd = fd1.concatenate(fd2) np.testing.assert_equal(fd.n_samples, 4) np.testing.assert_equal(fd.dim_codomain, 1) np.testing.assert_equal(fd.dim_domain, 1) np.testing.assert_array_equal(fd.data_matrix[..., 0], [[1, 2, 3, 4, 5], [2, 3, 4, 5, 6], [3, 4, 5, 6, 7], [4, 5, 6, 7, 8]]) np.testing.assert_array_equal(fd1.argument_names, fd.argument_names) np.testing.assert_array_equal(fd1.coordinate_names, fd.coordinate_names)