Loosen tolerances on some tests on i386
authorDebian Science Maintainers <debian-science-maintainers@lists.alioth.debian.org>
Sun, 17 Jan 2021 14:02:15 +0000 (14:02 +0000)
committerDrew Parsons <dparsons@debian.org>
Sun, 17 Jan 2021 14:02:15 +0000 (14:02 +0000)
Failure logs:
test_smoothing
https://buildd.debian.org/status/fetch.php?pkg=statsmodels&arch=i386&ver=0.9.0-3&stamp=1567157609&raw=0
test_multivariate_switch_univariate
https://buildd.debian.org/status/fetch.php?pkg=statsmodels&arch=i386&ver=0.12.0-1&stamp=1599693472&raw=0

As it only fails on i386 and isn't far wrong,
I suspect different rounding due to x87 excess precision

Author: Rebecca N. Palmer <rebecca_palmer@zoho.com>
Bug-Debian: https://bugs.debian.org/938949
Forwarded: no

Gbp-Pq: Name i386_loosen_test_tolerances.patch

statsmodels/tsa/statespace/tests/test_multivariate_switch_univariate.py
statsmodels/tsa/statespace/tests/test_smoothing.py

index 2fd2c3c92f349313f8f63a20c59ff99592ccea43..bb38490617b46db9f80159c82bbfd495d57533ec 100644 (file)
@@ -19,6 +19,9 @@ Princeton, N.J.: Princeton University Press.
 """
 import numpy as np
 import pytest
+import sys
+import glob
+i386_looser_tolerances=len(glob.glob('/usr/lib/i386-*/'))>0 and np.log2(sys.maxsize)<33
 
 from statsmodels.tsa.statespace import (
     mlemodel, sarimax, structural, varmax, dynamic_factor)
@@ -236,7 +239,7 @@ def test_filter_output(univariate, missing, init, periods):
     # Test the output when the multivariate filter switches to the univariate
     # filter
     mod = get_model(univariate, missing, init)
-    check_filter_output(mod, periods)
+    check_filter_output(mod, periods, atol=1e-10 if i386_looser_tolerances else 0)
 
 
 @pytest.mark.parametrize('univariate', [True, False])
@@ -255,7 +258,7 @@ def test_smoother_output(univariate, missing, init, periods, option):
         if init == 'diffuse':
             return
         mod.ssm.timing_init_filtered = True
-    atol = 1e-12
+    atol = 1e-8 if i386_looser_tolerances else 1e-12
     # Tolerance is lower for approximate diffuse for one attribute in this case
     if missing == 'init' and init == 'approximate_diffuse':
         atol = 1e-6
index 8c67dfba279be540fcbecc395d6e156c296186d5..8c5eeb8531209d82a1df9d1979fc67417a1c4618 100644 (file)
@@ -29,8 +29,9 @@ from statsmodels.tsa.statespace.kalman_smoother import (
     SMOOTH_UNIVARIATE)
 
 current_path = os.path.dirname(os.path.abspath(__file__))
-
-
+import sys
+import glob
+i386_looser_tolerances=len(glob.glob('/usr/lib/i386-*/'))>0 and np.log2(sys.maxsize)<=32
 class TestStatesAR3(object):
     @classmethod
     def setup_class(cls, alternate_timing=False, *args, **kwargs):
@@ -834,7 +835,7 @@ class TestMultivariateVARUnivariate(object):
     def test_forecasts_error_cov(self):
         assert_allclose(
             self.results.forecasts_error_cov.diagonal(),
-            self.desired[['F1', 'F2', 'F3']]
+            self.desired[['F1', 'F2', 'F3']],rtol=2e-7 if i386_looser_tolerances else 1e-7
         )
 
     def test_predicted_states(self):
@@ -888,7 +889,7 @@ class TestMultivariateVARUnivariate(object):
     def test_smoothed_measurement_disturbance_cov(self):
         assert_allclose(
             self.results.smoothed_measurement_disturbance_cov.diagonal(),
-            self.desired[['Veps1', 'Veps2', 'Veps3']]
+            self.desired[['Veps1', 'Veps2', 'Veps3']],rtol=2e-7 if i386_looser_tolerances else 1e-7
         )