def test_fit(self):
        """On fit, the attribute model is set with an instance of scipy.stats.truncnorm."""
        # Setup
        instance = TruncatedGaussian()

        # Generate data from a truncated gaussian
        loc, scale = 2.0, 1.0
        min_value, max_value = -1.0, 4.0
        a = (min_value - loc) / scale
        b = (max_value - loc) / scale
        data = truncnorm.rvs(a=a,
                             b=b,
                             loc=loc,
                             scale=scale,
                             size=1000000,
                             random_state=42)

        # Run
        instance.fit(data)

        # Check
        assert isinstance(instance.model, rv_frozen)
        self.assertAlmostEqual(min_value, instance.min, places=2)
        self.assertAlmostEqual(max_value, instance.max, places=2)
        self.assertAlmostEqual(loc, instance.mean, places=2)
        self.assertAlmostEqual(scale, instance.std, places=2)
    def test__extract_constant(self):
        distribution = TruncatedGaussian()
        distribution._params = {'a': 1, 'b': 1, 'loc': 1, 'scale': 0}

        constant = distribution._extract_constant()

        assert 1 == constant
    def test__fit(self):
        distribution = TruncatedGaussian()

        data = truncnorm.rvs(size=10000, a=0, b=3, loc=3, scale=1)
        distribution._fit(data)

        expected = {'loc': 3, 'scale': 1, 'a': 0, 'b': 3}
        for key, value in distribution._params.items():
            np.testing.assert_allclose(value, expected[key], atol=0.3)
Exemple #4
0
    def test_fit(self):
        """On fit, the attribute model is set with an instance of scipy.stats.truncnorm."""
        # Setup
        instance = TruncatedGaussian()
        data = np.array([0, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 4])

        # Run
        instance.fit(data)

        # Check
        assert isinstance(instance.model, rv_frozen)
        assert instance.min == 0 - EPSILON
        assert instance.max == 4 + EPSILON
        assert instance.mean == 2
        assert instance.std == 1
    def test_init(self):
        """On init, there are no errors and attributes are set as expected."""
        # Run / Setup
        instance = TruncatedGaussian()

        # Check
        assert instance.model_class == 'truncnorm'
        assert instance.unfittable_model is True
        assert instance.probability_density == 'pdf'
        assert instance.cumulative_distribution == 'cdf'
        assert instance.percent_point == 'ppf'
        assert instance.sample == 'rvs'
        assert instance.model is None
        assert instance.fitted is False
        assert instance.constant_value is None
    def test_from_dict_unfitted(self):
        """from_dict creates a new instance from a dict of params."""
        # Setup
        parameters = {
            'type': 'copulas.univariate.truncnorm.TruncatedGaussian',
            'fitted': False,
        }

        # Run
        instance = TruncatedGaussian.from_dict(parameters)

        # Check
        assert instance.fitted is False
        assert instance.constant_value is None
        assert instance.model is None
    def test_from_dict_constant(self):
        """from_dict creates a new instance from a dict of params."""
        # Setup
        parameters = {
            'type': 'copulas.univariate.truncnorm.TruncatedGaussian',
            'fitted': True,
            'min': 10,
            'max': 10,
            'std': 0,
            'mean': 10,
        }

        # Run
        instance = TruncatedGaussian.from_dict(parameters)

        # Check
        assert instance.fitted is True
        assert instance.constant_value == 10
    def test__fit_params(self):
        """_fit_params returns a dict with the params of the scipy model."""
        # Setup
        instance = TruncatedGaussian()
        instance.min = 0
        instance.max = 4
        instance.std = 1
        instance.mean = 2

        expected_result = {
            'min': 0,
            'max': 4,
            'std': 1,
            'mean': 2,
        }

        # Run
        result = instance._fit_params()

        # Check
        assert result == expected_result
    def test_from_dict_fitted(self):
        """from_dict creates a new instance from a dict of params."""
        # Setup
        parameters = {
            'type': 'copulas.univariate.truncnorm.TruncatedGaussian',
            'fitted': True,
            'min': -10,
            'max': 10,
            'std': 1,
            'mean': 1,
        }

        # Run
        instance = TruncatedGaussian.from_dict(parameters)

        # Check
        assert instance.fitted is True
        assert isinstance(instance.model, rv_frozen)
        assert instance.constant_value is None
        assert instance.min == -10
        assert instance.max == 10
        assert instance.std == 1
        assert instance.mean == 1
    def test__fit_constant(self):
        distribution = TruncatedGaussian()

        distribution._fit_constant(np.array([1, 1, 1, 1]))

        assert distribution._params == {'a': 1, 'b': 1, 'loc': 1, 'scale': 0}
    def test__is_constant_false(self):
        distribution = TruncatedGaussian()

        distribution.fit(np.array([1, 2, 3, 4]))

        assert not distribution._is_constant()
    def test__is_constant_true(self):
        distribution = TruncatedGaussian()

        distribution.fit(np.array([1, 1, 1, 1]))

        assert distribution._is_constant()