It looks like one function not tested by pytest
Robert
rxjwg98 at gmail.com
Tue Jan 12 20:23:32 EST 2016
On Tuesday, January 12, 2016 at 3:36:13 PM UTC-5, Robert wrote:
> Hi,
>
> I modify a test suite, and simplified to the below content.
> I am interested in function:
> test_bad_covariance_type()
>
> I think that it tests for wrong type input, i.e.
> 'badcovariance_type'
> will generate error, which is expected. Thus, it passes test.
>
> When a correct type, such as 'diag', is given, there will be no error
> generated. pytest will declare a failure.
>
>
> Unfortunately, it will always pass the pytest for both cases.
>
> What is wrong with my code or my understanding?
>
>
> Thanks,
>
>
>
>
> //////////////
> from __future__ import absolute_import
>
> from unittest import TestCase
>
> import numpy as np
> import pytest
>
> from hmmlearn import hmm
>
> from . import log_likelihood_increasing, make_covar_matrix, normalized
>
>
> class GaussianHMMTestMixin(object):
> covariance_type = None # set by subclasses
>
> def setUp(self):
> self.prng = prng = np.random.RandomState(10)
> self.n_components = n_components = 3
> self.n_features = n_features = 3
> self.startprob = prng.rand(n_components)
> self.startprob = self.startprob / self.startprob.sum()
> self.transmat = prng.rand(n_components, n_components)
> self.transmat /= np.tile(self.transmat.sum(axis=1)[:, np.newaxis],
> (1, n_components))
> self.means = prng.randint(-20, 20, (n_components, n_features))
> self.covars = dict(
> (cv_type, make_covar_matrix(cv_type, n_components, n_features))
> for cv_type in ["spherical", "tied", "diag", "full"])
> self.expanded_covars = {
> 'spherical': [np.eye(n_features) * cov
> for cov in self.covars['spherical']],
> 'diag': [np.diag(cov) for cov in self.covars['diag']],
> 'tied': [self.covars['tied']] * n_components,
> 'full': self.covars['full'],
> }
>
> def test_bad_covariance_type(self):
> with pytest.raises(ValueError):
> #h = hmm.GaussianHMM(20, covariance_type='badcovariance_type')
> h = hmm.GaussianHMM(covariance_type='diag')
> h.means_ = self.means
> h.covars_ = []
> h.startprob_ = self.startprob
> h.transmat_ = self.transmat
> h._check()
>
> def test_fit(self, params='stmc', n_iter=5, **kwargs):
> h = hmm.GaussianHMM(self.n_components, self.covariance_type)
> h.startprob_ = self.startprob
> h.transmat_ = normalized(
> self.transmat + np.diag(self.prng.rand(self.n_components)), 1)
> h.means_ = 20 * self.means
> h.covars_ = self.covars[self.covariance_type]
>
> lengths = [10] * 10
> X, _state_sequence = h.sample(sum(lengths), random_state=self.prng)
>
> # Mess up the parameters and see if we can re-learn them.
> # TODO: change the params and uncomment the check
> h.fit(X, lengths=lengths)
>
>
>
>
> class TestGaussianHMMWithSphericalCovars(GaussianHMMTestMixin, TestCase):
> covariance_type = 'spherical'
>
> def test_fit_startprob_and_transmat(self):
> self.test_fit('st')
>
> def test_bad_covariance_type0(self):
> self.test_bad_covariance_type()
It turns out that it always raises error, because there are other errors
besides the covariance_type object. That is, pytest works as expected.
Thanks,
More information about the Python-list
mailing list