Source code for ewoksxas.fit.tests.test_lca_fit

import numpy as np
import pytest

from ewoksxas.fit.lca_fit import LCAModel

# The shared XYData container and as_1d_array helper (formerly duplicated here)
# are now covered by tests/test_data.py; this module tests LCAModel/FitResult.


[docs] def test_lca_fit_unbounded(sample, components): lca = LCAModel.from_dicts(sample, components) # Bounds assert lca.xmin == 0 assert lca.xmax == np.pi assert lca.roi.x.min() == lca.xmin assert lca.roi.x.max() == lca.xmax assert lca.sample.x.size == lca.sample.y.size == 100 assert lca.roi.x.size == lca.roi.y.size == 100 # Components assert len(lca.components) == 5 matrix, _ = lca._build_component_matrix() assert matrix.shape == (5, 100) # Fit fit = lca.fit() expected_solution = [0.1, 0.2, 0.3, 0.35, 0.05] assert np.allclose(expected_solution, fit.solution, atol=1e-6) assert np.allclose(fit.rmse, 0.0, atol=1e-6) assert np.allclose(fit.r2, 1.0, atol=1e-6) assert np.allclose(lca.roi.y, fit.model.y, atol=1e-6)
[docs] def test_lca_fit_bounded(sample, components): parameters = {"xmin": 1, "xmax": 2} lca = LCAModel.from_dicts(sample, components, parameters) # Bounds assert lca.xmin == 1 assert lca.xmax == 2 assert np.allclose([lca.roi.x.min(), lca.roi.x.max()], [1, 2], atol=0.1) assert lca.sample.x.size == lca.sample.y.size == 100 assert lca.roi.x.size == lca.roi.y.size == 32 # Components assert len(lca.components) == 5 matrix, _ = lca._build_component_matrix() assert matrix.shape == (5, 32) # Fit fit = lca.fit() expected_solution = [0.1, 0.2, 0.3, 0.35, 0.05] assert np.allclose(expected_solution, fit.solution, atol=1e-3) assert np.allclose(fit.rmse, 0.0, atol=1e-6) assert np.allclose(fit.r2, 1.0, atol=1e-6) assert np.allclose(lca.roi.y, fit.model.y, atol=1e-6)
[docs] @pytest.mark.filterwarnings("ignore::RuntimeWarning") def test_lca_fit_excess_components(sample, excess_components, rand_components): lca = LCAModel.from_dicts(sample, excess_components) fit = lca.fit() expected_solution = [0.1, 0.2, 0.3, 0.35, 0.05] + [0.0] * 9 assert np.allclose(expected_solution, fit.solution, atol=1e-2) assert np.allclose(fit.rmse, 0.0, atol=1e-3) assert np.allclose(fit.r2, 1.0, atol=1e-3) assert np.allclose(lca.roi.y, fit.model.y, atol=1e-3) # randomize component list lca = LCAModel.from_dicts(sample, rand_components) fit = lca.fit() expected_solution = [ 0.35, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.3, 0.0, 0.05, 0.0, 0.1, 0.2, ] assert np.allclose(expected_solution, fit.solution, atol=1e-2) assert np.allclose(fit.rmse, 0.0, atol=1e-3) assert np.allclose(fit.r2, 1.0, atol=1e-3) assert np.allclose(lca.roi.y, fit.model.y, atol=1e-3)