def test_fit_sample_constant(self): model = GaussianKDE() model.fit(self.constant) sampled_data = model.sample(50) assert isinstance(sampled_data, np.ndarray) assert sampled_data.shape == (50, ) assert model._constant_value == 5 np.testing.assert_equal(np.full(50, 5), model.sample(50))
def test_fit_sample(self): model = GaussianKDE() model.fit(self.data) sampled_data = model.sample(50) assert isinstance(sampled_data, np.ndarray) assert sampled_data.shape == (50, )
def test_pdf(self): model = GaussianKDE() model.fit(self.data) sampled_data = model.sample(50) # Test PDF pdf = model.probability_density(sampled_data) assert (0 < pdf).all()
def test_sample(self, kde_mock): """Sample calls the gaussian_kde.resample method.""" instance = GaussianKDE() instance.fit(np.array([1, 2, 3, 4])) model = kde_mock.return_value model.resample.return_value = np.array([[1, 2, 3]]) samples = instance.sample(3) instance._model.resample.assert_called_once_with(3) np.testing.assert_equal(samples, np.array([1, 2, 3]))
def test_cdf(self): model = GaussianKDE() model.fit(self.data) sampled_data = model.sample(50) # Test the CDF cdf = model.cumulative_distribution(sampled_data) assert (0 <= cdf).all() and (cdf <= 1).all() # Test CDF increasing function sorted_data = sorted(sampled_data) cdf = model.cumulative_distribution(sorted_data) assert (np.diff(cdf) >= 0).all()
def test_sample_constant(self): """If constant_value is set, all the sample have the same value.""" # Setup instance = GaussianKDE() instance.fitted = True instance.constant_value = 3 instance._replace_constant_methods() expected_result = np.array([3, 3, 3, 3, 3]) # Run result = instance.sample(5) # Check compare_nested_iterables(result, expected_result)
def test_to_dict_from_dict(self): model = GaussianKDE() model.fit(self.data) sampled_data = model.sample(50) params = model.to_dict() model2 = GaussianKDE.from_dict(params) pdf = model.probability_density(sampled_data) pdf2 = model2.probability_density(sampled_data) assert np.all(np.isclose(pdf, pdf2, atol=0.01)) cdf = model.cumulative_distribution(sampled_data) cdf2 = model2.cumulative_distribution(sampled_data) assert np.all(np.isclose(cdf, cdf2, atol=0.01))
def test_save_load(self): model = GaussianKDE() model.fit(self.data) sampled_data = model.sample(50) path_to_model = os.path.join(self.test_dir.name, "model.pkl") model.save(path_to_model) model2 = GaussianKDE.load(path_to_model) pdf = model.probability_density(sampled_data) pdf2 = model2.probability_density(sampled_data) assert np.all(np.isclose(pdf, pdf2, atol=0.01)) cdf = model.cumulative_distribution(sampled_data) cdf2 = model2.cumulative_distribution(sampled_data) assert np.all(np.isclose(cdf, cdf2, atol=0.01))
def test_to_dict_from_dict_constant(self): model = GaussianKDE() model.fit(self.constant) sampled_data = model.sample(50) pdf = model.probability_density(sampled_data) cdf = model.cumulative_distribution(sampled_data) params = model.to_dict() model2 = GaussianKDE.from_dict(params) np.testing.assert_equal(np.full(50, 5), sampled_data) np.testing.assert_equal(np.full(50, 5), model2.sample(50)) np.testing.assert_equal(np.full(50, 1), pdf) np.testing.assert_equal(np.full(50, 1), model2.probability_density(sampled_data)) np.testing.assert_equal(np.full(50, 1), cdf) np.testing.assert_equal(np.full(50, 1), model2.cumulative_distribution(sampled_data))
def test_sample(self, kde_mock): """When fitted, we are able to use the model to get samples.""" # Setup model_mock = kde_mock.return_value model_mock.resample.return_value = np.array([[0, 1, 0, 1, 0]]) instance = GaussianKDE() X = np.array([1, 2, 3, 4, 5]) instance.fit(X) expected_result = np.array([0, 1, 0, 1, 0]) # Run result = instance.sample(5) # Check compare_nested_iterables(result, expected_result) assert instance.model == model_mock kde_mock.assert_called_once_with(X) model_mock.resample.assert_called_once_with(5)