KalmanFilter broken on armhf / hppa
authorDebian Science Maintainers <debian-science-maintainers@lists.alioth.debian.org>
Sun, 6 Feb 2022 19:08:08 +0000 (19:08 +0000)
committerRebecca N. Palmer <rebecca_palmer@zoho.com>
Sun, 6 Feb 2022 19:08:08 +0000 (19:08 +0000)
Warn on use, and xfail the tests

Author: Rebecca N. Palmer <rebecca_palmer@zoho.com>
Bug-Debian: https://bugs.debian.org/924036
Bug-Ubuntu: https://launchpad.net/bugs/1819227
Forwarded: no

Gbp-Pq: Name xfail_kalman_armhf.patch

12 files changed:
statsmodels/tsa/innovations/tests/test_arma_innovations.py
statsmodels/tsa/statespace/representation.py
statsmodels/tsa/statespace/tests/test_dynamic_factor.py
statsmodels/tsa/statespace/tests/test_kalman.py
statsmodels/tsa/statespace/tests/test_mlemodel.py
statsmodels/tsa/statespace/tests/test_pickle.py
statsmodels/tsa/statespace/tests/test_representation.py
statsmodels/tsa/statespace/tests/test_sarimax.py
statsmodels/tsa/statespace/tests/test_save.py
statsmodels/tsa/statespace/tests/test_structural.py
statsmodels/tsa/statespace/tests/test_var.py
statsmodels/tsa/statespace/tests/test_varmax.py

index ccbe81f14fd95507f9203265b371a91585575bf5..6c5e46ce47b03a4efed4a648d7511b397a5552d0 100644 (file)
@@ -8,8 +8,10 @@ from numpy.testing import assert_allclose
 
 from statsmodels.tsa.innovations import arma_innovations
 from statsmodels.tsa.statespace.sarimax import SARIMAX
+from statsmodels.tsa.statespace.representation import warn_kalman
 
 
+@pytest.mark.xfail(condition=bool(warn_kalman),reason='https://bugs.debian.org/924036',strict=False)
 @pytest.mark.parametrize("ar_params,ma_params,sigma2", [
     (np.array([]), np.array([]), 1),
     (np.array([0.]), np.array([0.]), 1),
index 1809d2c59fe26b401de502aecce59182640503bb..7d3dec23910b79f80a6f1d69569559a25ee5bd2e 100644 (file)
@@ -11,6 +11,10 @@ from .tools import (
 )
 from .initialization import Initialization
 from . import tools
+import platform
+import warnings
+import sys
+warn_kalman = "Representation/KalmanFilter (and hence much of tsa.statespace) can give wrong results on armhf (armv7) and hppa - https://bugs.debian.org/924036" if ((platform.uname()[4].startswith('arm') or platform.uname()[4].startswith('aarch') or platform.uname()[4].startswith('hppa')) and np.log2(sys.maxsize)<=32) else False # test results at end of https://buildd.debian.org/status/fetch.php?pkg=statsmodels&arch=armhf&ver=0.8.0-8&stamp=1551488279&raw=0 ; the use of log2 rather than 2**32 is to avoid overflow on Python 2
 
 
 class OptionWrapper(object):
@@ -259,6 +263,8 @@ class Representation(object):
                  design=None, obs_intercept=None, obs_cov=None,
                  transition=None, state_intercept=None, selection=None,
                  state_cov=None, statespace_classes=None, **kwargs):
+        if warn_kalman:
+            warnings.warn(warn_kalman)
         self.shapes = {}
 
         # Check if k_endog is actually the endog array
index b924338b52ac86fd72c40da10e7a0e72cc4caf88..beb17a32279a8f0e1c3d0f7d65460b8553446e1b 100644 (file)
@@ -16,13 +16,15 @@ import pytest
 from statsmodels.tsa.statespace import dynamic_factor
 from .results import results_varmax, results_dynamic_factor
 from statsmodels.iolib.summary import forg
+from statsmodels.tsa.statespace.representation import warn_kalman
+import pytest
 
 current_path = os.path.dirname(os.path.abspath(__file__))
 
 output_path = os.path.join('results', 'results_dynamic_factor_stata.csv')
 output_results = pd.read_csv(os.path.join(current_path, output_path))
 
-
+@pytest.mark.xfail(condition=bool(warn_kalman),reason='https://bugs.debian.org/924036',strict=False)
 class CheckDynamicFactor(object):
     @classmethod
     def setup_class(cls, true, k_factors, factor_order, cov_type='approx',
index 6dcd5d5e2bcde787a306c5ba6c54c5a95aff1f7e..c8a75ae419bdf9304eed7244db7fd40e3138f264 100644 (file)
@@ -22,6 +22,7 @@ import pickle
 import numpy as np
 import pandas as pd
 import os
+from statsmodels.tsa.statespace.representation import warn_kalman
 import pytest
 
 from scipy.linalg.blas import find_best_blas_type
@@ -296,7 +297,7 @@ class TestClark1987SingleComplex(Clark1987):
             atol=1e-2
         )
 
-
+@pytest.mark.xfail(condition=bool(warn_kalman),reason='https://bugs.debian.org/924036',strict=False)
 class TestClark1987DoubleComplex(Clark1987):
     """
     Basic double precision complex test for the loglikelihood and filtered
@@ -366,7 +367,7 @@ class TestClark1987ForecastDouble(Clark1987Forecast):
         cls.model, cls.filter = cls.init_filter()
         cls.result = cls.run_filter()
 
-
+@pytest.mark.xfail(condition=bool(warn_kalman),reason='https://bugs.debian.org/924036',strict=False)
 class TestClark1987ForecastDoubleComplex(Clark1987Forecast):
     """
     Basic double complex forecasting test for the loglikelihood and filtered
@@ -659,7 +660,7 @@ class TestClark1989ForecastDouble(Clark1989Forecast):
         cls.model, cls.filter = cls.init_filter()
         cls.result = cls.run_filter()
 
-
+@pytest.mark.xfail(condition=bool(warn_kalman),reason='https://bugs.debian.org/924036',strict=False)
 class TestClark1989ForecastDoubleComplex(Clark1989Forecast):
     """
     Basic double complex forecasting test for the loglikelihood and filtered
index 1eea6c6de7f8323ed0a334c9cbba5e402f4d2ceb..f6c92fdf902ef58cb09a52e9370951f5ac93fb1d 100644 (file)
@@ -9,6 +9,7 @@ from statsmodels.compat.pandas import NumericIndex
 import os
 import re
 import warnings
+from statsmodels.tsa.statespace.representation import warn_kalman
 
 import numpy as np
 import pandas as pd
@@ -276,7 +277,7 @@ def test_score_misc():
 def test_from_formula():
     assert_raises(NotImplementedError, lambda: MLEModel.from_formula(1, 2, 3))
 
-
+@pytest.mark.xfail(condition=bool(warn_kalman),reason='https://bugs.debian.org/924036',strict=False)
 def test_score_analytic_ar1():
     # Test the score against the analytic score for an AR(1) model with 2
     # observations
@@ -445,6 +446,7 @@ def test_cov_params():
             mod.fit(res.params, disp=-1, cov_type='invalid_cov_type')
 
 
+@pytest.mark.xfail(condition=bool(warn_kalman),reason='https://bugs.debian.org/924036',strict=False)
 def test_transform():
     # The transforms in MLEModel are noops
     mod = MLEModel([1, 2], **kwargs)
index ac4b585e7ae443549036eb79a28849b82e47bc2d..2306d683dc5c9b121eb6f7eea875cfaa79d96713 100644 (file)
@@ -17,6 +17,7 @@ import pickle
 import numpy as np
 import pandas as pd
 from numpy.testing import assert_equal, assert_allclose
+from statsmodels.tsa.statespace.representation import warn_kalman
 import pytest
 
 from statsmodels.tsa.statespace import sarimax
@@ -38,6 +39,7 @@ def data():
     return data_
 
 
+@pytest.mark.xfail(condition=bool(warn_kalman),reason='https://bugs.debian.org/924036',strict=False)
 def test_pickle_fit_sarimax(data):
     # Fit an ARIMA(1,1,0) to log GDP
     mod = sarimax.SARIMAX(data['lgdp'], order=(1, 1, 0))
@@ -53,6 +55,7 @@ def test_pickle_fit_sarimax(data):
     assert_allclose(res.impulse_responses(10), res.impulse_responses(10))
 
 
+@pytest.mark.xfail(condition=bool(warn_kalman),reason='https://bugs.debian.org/924036',strict=False)
 def test_unobserved_components_pickle():
     # Tests for missing data
     nobs = 20
@@ -85,6 +88,7 @@ def test_unobserved_components_pickle():
         assert_allclose(res.impulse_responses(10), res.impulse_responses(10))
 
 
+@pytest.mark.xfail(condition=bool(warn_kalman),reason='https://bugs.debian.org/924036',strict=False)
 def test_kalman_filter_pickle(data):
     # Construct the statespace representation
     true = results_kalman_filter.uc_uni
@@ -133,6 +137,7 @@ def test_kalman_filter_pickle(data):
                     pkl_results.filtered_state[3][true['start']:])
 
 
+@pytest.mark.xfail(condition=bool(warn_kalman),reason='https://bugs.debian.org/924036',strict=False)
 def test_representation_pickle():
     nobs = 10
     k_endog = 2
index 566b8dc634b8552aab365494ed7c3dc6e8434661..018c0260707618db608959110d36090a5b281529 100644 (file)
@@ -16,6 +16,7 @@ MIT Press Books. The MIT Press.
 import os
 import warnings
 
+from statsmodels.tsa.statespace.representation import warn_kalman
 import numpy as np
 import pandas as pd
 import pytest
@@ -222,7 +223,7 @@ class TestClark1987ForecastDouble(Clark1987Forecast):
         super(TestClark1987ForecastDouble, cls).setup_class()
         cls.results = cls.run_filter()
 
-
+@pytest.mark.xfail(condition=bool(warn_kalman),reason='https://bugs.debian.org/924036',strict=False)
 class TestClark1987ForecastDoubleComplex(Clark1987Forecast):
     """
     Basic double complex forecasting test for the loglikelihood and filtered
@@ -455,7 +456,7 @@ class TestClark1989ForecastDouble(Clark1989Forecast):
         super(TestClark1989ForecastDouble, cls).setup_class()
         cls.results = cls.run_filter()
 
-
+@pytest.mark.xfail(condition=bool(warn_kalman),reason='https://bugs.debian.org/924036',strict=False)
 class TestClark1989ForecastDoubleComplex(Clark1989Forecast):
     """
     Basic double complex forecasting test for the loglikelihood and filtered
index 051795f47345f23d5b12125d32cb8f358d8aba88..c3ddd07f33fbc7f70dc468c03835a2118c712db1 100644 (file)
@@ -11,6 +11,7 @@ import warnings
 
 from statsmodels.compat.platform import PLATFORM_WIN
 
+from statsmodels.tsa.statespace.representation import warn_kalman
 import numpy as np
 import pandas as pd
 import pytest
@@ -33,6 +34,7 @@ coverage_path = os.path.join('results', 'results_sarimax_coverage.csv')
 coverage_results = pd.read_csv(os.path.join(current_path, coverage_path))
 
 
+@pytest.mark.xfail(condition=bool(warn_kalman),reason='https://bugs.debian.org/924036',strict=False)
 class TestSARIMAXStatsmodels(object):
     """
     Test ARIMA model using SARIMAX class against statsmodels ARIMA class
@@ -133,6 +135,7 @@ class TestRealGDPARStata(object):
         )
 
 
+@pytest.mark.xfail(condition=bool(warn_kalman),reason='https://bugs.debian.org/924036',strict=False)
 class SARIMAXStataTests(object):
     def test_loglike(self):
         assert_almost_equal(
@@ -1030,6 +1033,7 @@ class SARIMAXCoverageTest(object):
         model.enforce_stationarity = stat
         model.enforce_invertibility = inv
 
+    @pytest.mark.xfail(condition=bool(warn_kalman),reason='https://bugs.debian.org/924036',strict=False)
     def test_results(self):
         self.result = self.model.filter(self.true_params)
 
@@ -1792,6 +1796,7 @@ class Test_seasonal_arma_trend_polynomial(SARIMAXCoverageTest):
         tps = cls.true_params
         cls.true_params[:2] = (1 - tps[2:5].sum()) * tps[:2]
 
+    @pytest.mark.xfail(condition=bool(warn_kalman),reason='https://bugs.debian.org/924036',strict=False)
     def test_results(self):
         self.result = self.model.filter(self.true_params)
 
@@ -1842,6 +1847,7 @@ class Test_seasonal_arma_diff_seasonal_diff(SARIMAXCoverageTest):
         super(Test_seasonal_arma_diff_seasonal_diff, cls).setup_class(
             47, *args, **kwargs)
 
+    @pytest.mark.xfail(condition=bool(warn_kalman),reason='https://bugs.debian.org/924036',strict=False)
     def test_results(self):
         self.result = self.model.filter(self.true_params)
 
@@ -2099,6 +2105,7 @@ def test_results():
     assert_almost_equal(res.maparams, [-0.5])
 
 
+@pytest.mark.xfail(condition=bool(warn_kalman),reason='https://bugs.debian.org/924036',strict=False)
 def test_misc_exog():
     # Tests for missing data
     nobs = 20
index db2c9a84b05a3fbb00655996e79e04a30de6cd4c..e29aafe9e57522f71ad4ba131986d81e68b6c647 100644 (file)
@@ -5,6 +5,7 @@ import pickle
 import os
 import tempfile
 
+from statsmodels.tsa.statespace.representation import warn_kalman
 import pytest
 
 from statsmodels import datasets
@@ -28,6 +29,7 @@ def temp_filename():
               "{filename}.".format(filename=filename))
 
 
+@pytest.mark.xfail(condition=bool(warn_kalman),reason='https://bugs.debian.org/924036',strict=False)
 def test_sarimax(temp_filename):
     mod = sarimax.SARIMAX(macrodata['realgdp'].values, order=(4, 1, 0))
     res = mod.smooth(mod.start_params)
@@ -52,6 +54,7 @@ def test_sarimax_save_remove_data(temp_filename, order):
     assert_allclose(res.llf, res2.llf)
 
 
+@pytest.mark.xfail(condition=bool(warn_kalman),reason='https://bugs.debian.org/924036',strict=False)
 def test_sarimax_pickle():
     mod = sarimax.SARIMAX(macrodata['realgdp'].values, order=(4, 1, 0))
     pkl_mod = pickle.loads(pickle.dumps(mod))
@@ -64,6 +67,7 @@ def test_sarimax_pickle():
     assert_allclose(res.llf, pkl_res.llf)
 
 
+@pytest.mark.xfail(condition=bool(warn_kalman),reason='https://bugs.debian.org/924036',strict=False)
 def test_structural(temp_filename):
     mod = structural.UnobservedComponents(
         macrodata['realgdp'].values, 'llevel')
@@ -76,6 +80,7 @@ def test_structural(temp_filename):
     assert_allclose(res.llf, res2.llf)
 
 
+@pytest.mark.xfail(condition=bool(warn_kalman),reason='https://bugs.debian.org/924036',strict=False)
 def test_structural_pickle():
     mod = structural.UnobservedComponents(
         macrodata['realgdp'].values, 'llevel')
@@ -89,6 +94,7 @@ def test_structural_pickle():
     assert_allclose(res.llf, pkl_res.llf)
 
 
+@pytest.mark.xfail(condition=bool(warn_kalman),reason='https://bugs.debian.org/924036',strict=False)
 def test_dynamic_factor(temp_filename):
     mod = dynamic_factor.DynamicFactor(
         macrodata[['realgdp', 'realcons']].diff().iloc[1:].values, k_factors=1,
@@ -102,6 +108,7 @@ def test_dynamic_factor(temp_filename):
     assert_allclose(res.llf, res2.llf)
 
 
+@pytest.mark.xfail(condition=bool(warn_kalman),reason='https://bugs.debian.org/924036',strict=False)
 def test_dynamic_factor_pickle(temp_filename):
     mod = varmax.VARMAX(
         macrodata[['realgdp', 'realcons']].diff().iloc[1:].values,
@@ -123,6 +130,7 @@ def test_dynamic_factor_pickle(temp_filename):
     assert_allclose(res.llf, res2.llf)
 
 
+@pytest.mark.xfail(condition=bool(warn_kalman),reason='https://bugs.debian.org/924036',strict=False)
 def test_varmax(temp_filename):
     mod = varmax.VARMAX(
         macrodata[['realgdp', 'realcons']].diff().iloc[1:].values,
@@ -136,6 +144,7 @@ def test_varmax(temp_filename):
     assert_allclose(res.llf, res2.llf)
 
 
+@pytest.mark.xfail(condition=bool(warn_kalman),reason='https://bugs.debian.org/924036',strict=False)
 def test_varmax_pickle(temp_filename):
     mod = varmax.VARMAX(
         macrodata[['realgdp', 'realcons']].diff().iloc[1:].values,
index 76b8a101cda4c7c7f60b04a297ab3b83af97c6d3..09cdbd4c15b5209fa0119a75b7ec5e684a7116a3 100644 (file)
@@ -10,6 +10,7 @@ import warnings
 import numpy as np
 from numpy.testing import assert_equal, assert_allclose, assert_raises
 import pandas as pd
+from statsmodels.tsa.statespace.representation import warn_kalman
 import pytest
 
 from statsmodels.datasets import macrodata
@@ -203,6 +204,7 @@ def test_local_linear_deterministic_trend(close_figures):
     run_ucm('local_linear_deterministic_trend', use_exact_diffuse=True)
 
 
+@pytest.mark.xfail(condition=bool(warn_kalman),reason='https://bugs.debian.org/924036',strict=False)
 def test_local_linear_trend(close_figures):
     run_ucm('local_linear_trend')
     run_ucm('local_linear_trend', use_exact_diffuse=True)
@@ -218,6 +220,7 @@ def test_random_trend(close_figures):
     run_ucm('random_trend', use_exact_diffuse=True)
 
 
+@pytest.mark.xfail(condition=bool(warn_kalman),reason='https://bugs.debian.org/924036',strict=False)
 def test_cycle(close_figures):
     run_ucm('cycle_approx_diffuse')
     run_ucm('cycle', use_exact_diffuse=True)
@@ -238,11 +241,13 @@ def test_reg(close_figures):
     run_ucm('reg', use_exact_diffuse=True)
 
 
+@pytest.mark.xfail(condition=bool(warn_kalman),reason='https://bugs.debian.org/924036',strict=False)
 def test_rtrend_ar1(close_figures):
     run_ucm('rtrend_ar1')
     run_ucm('rtrend_ar1', use_exact_diffuse=True)
 
 
+@pytest.mark.xfail(condition=bool(warn_kalman),reason='https://bugs.debian.org/924036',strict=False)
 @pytest.mark.slow
 def test_lltrend_cycle_seasonal_reg_ar1(close_figures):
     run_ucm('lltrend_cycle_seasonal_reg_ar1_approx_diffuse')
@@ -365,6 +370,7 @@ def test_forecast():
     assert_allclose(actual, desired)
 
 
+@pytest.mark.xfail(condition=bool(warn_kalman),reason='https://bugs.debian.org/924036',strict=False)
 def test_misc_exog():
     # Tests for missing data
     nobs = 20
index 1768f9ab4cda89b72704806fcec25a960608f495..5db2a9372c4a006f3bdd9afee730cecfc9550539 100644 (file)
@@ -15,6 +15,8 @@ import os
 import numpy as np
 from numpy.testing import assert_allclose
 import pandas as pd
+from statsmodels.tsa.statespace.representation import warn_kalman
+import pytest
 
 from statsmodels.tsa.statespace import varmax
 from .results import results_var_R
@@ -100,6 +102,7 @@ def test_var_basic():
     # FEVD: TODO
 
 
+@pytest.mark.xfail(condition=bool(warn_kalman),reason='https://bugs.debian.org/924036',strict=False)
 def test_var_c():
     test = 'c'
 
@@ -120,6 +123,7 @@ def test_var_c():
     # FEVD: TODO
 
 
+@pytest.mark.xfail(condition=bool(warn_kalman),reason='https://bugs.debian.org/924036',strict=False)
 def test_var_ct():
     test = 'ct'
 
@@ -140,6 +144,7 @@ def test_var_ct():
     # FEVD: TODO
 
 
+@pytest.mark.xfail(condition=bool(warn_kalman),reason='https://bugs.debian.org/924036',strict=False)
 def test_var_ct_as_exog0():
     test = 'ct_as_exog0'
 
@@ -163,6 +168,7 @@ def test_var_ct_as_exog0():
     # FEVD: TODO
 
 
+@pytest.mark.xfail(condition=bool(warn_kalman),reason='https://bugs.debian.org/924036',strict=False)
 def test_var_ct_as_exog1():
     test = 'ct'
 
@@ -191,6 +197,7 @@ def test_var_ct_as_exog1():
     # FEVD: TODO
 
 
+@pytest.mark.xfail(condition=bool(warn_kalman),reason='https://bugs.debian.org/924036',strict=False)
 def test_var_ctt():
     test = 'ctt_as_exog1'
 
@@ -216,6 +223,7 @@ def test_var_ctt():
     # FEVD: TODO
 
 
+@pytest.mark.xfail(condition=bool(warn_kalman),reason='https://bugs.debian.org/924036',strict=False)
 def test_var_ct_exog():
     test = 'ct_exog'
 
@@ -240,6 +248,7 @@ def test_var_ct_exog():
     # FEVD: TODO
 
 
+@pytest.mark.xfail(condition=bool(warn_kalman),reason='https://bugs.debian.org/924036',strict=False)
 def test_var_c_2exog():
     test = 'c_2exog'
 
index 048ad314a7096b8d3f11d9f2ace6e3c86c91a198..596713f4b3367395a16a6293bdc34113fb3d7043 100644 (file)
@@ -15,6 +15,7 @@ import pytest
 
 from statsmodels.tsa.statespace import varmax, sarimax
 from statsmodels.iolib.summary import forg
+from statsmodels.tsa.statespace.representation import warn_kalman
 
 from .results import results_varmax
 
@@ -27,6 +28,7 @@ varmax_path = os.path.join('results', 'results_varmax_stata.csv')
 varmax_results = pd.read_csv(os.path.join(current_path, varmax_path))
 
 
+@pytest.mark.xfail(condition=bool(warn_kalman),reason='https://bugs.debian.org/924036',strict=False)
 class CheckVARMAX(object):
     """
     Test Vector Autoregression against Stata's `dfactor` code (Stata's
@@ -874,6 +876,7 @@ def test_misspecifications():
     warnings.resetwarnings()
 
 
+@pytest.mark.xfail(condition=bool(warn_kalman),reason='https://bugs.debian.org/924036',strict=False)
 def test_misc_exog():
     # Tests for missing data
     nobs = 20