diff --git a/arch/tests/univariate/test_base.py b/arch/tests/univariate/test_base.py new file mode 100644 index 0000000000..1acfbeae01 --- /dev/null +++ b/arch/tests/univariate/test_base.py @@ -0,0 +1,10 @@ +from arch.univariate.base import format_float_fixed + + +def test_format_float_fixed(): + out = format_float_fixed(0.0) + assert out == '0.0000' + out = format_float_fixed(1.23e-9) + assert out == '1.2300e-09' + out = format_float_fixed(123456789.0) + assert out == '1.2346e+08' diff --git a/arch/tests/univariate/test_mean.py b/arch/tests/univariate/test_mean.py index 7fcc8cb225..f83b61e95c 100644 --- a/arch/tests/univariate/test_mean.py +++ b/arch/tests/univariate/test_mean.py @@ -364,6 +364,11 @@ def test_ar(self): ar = ARX(self.y, lags=1, volatility=GARCH(), distribution=StudentsT()) res = ar.fit(disp=DISPLAY, update_freq=5, cov_type='mle') res.param_cov + sims = res.forecast(horizon=5, method='simulation') + assert isinstance(sims.simulations.residual_variances, np.ndarray) + assert isinstance(sims.simulations.residuals, np.ndarray) + assert isinstance(sims.simulations.values, np.ndarray) + assert isinstance(sims.simulations.variances, np.ndarray) @pytest.mark.skipif(not HAS_MATPLOTLIB, reason='matplotlib not installed') def test_ar_plot(self): @@ -381,6 +386,7 @@ def test_ar_plot(self): res.hedgehog_plot(start=500, type='mean') res.hedgehog_plot(type='volatility') res.hedgehog_plot(start=500, method='simulation', simulations=100) + res.hedgehog_plot(type='volatility', method='bootstrap') def test_arch_arx(self): self.rng.seed(12345) diff --git a/arch/univariate/base.py b/arch/univariate/base.py index e003e9449c..830cf49e71 100644 --- a/arch/univariate/base.py +++ b/arch/univariate/base.py @@ -692,7 +692,7 @@ def forecast(self, params, horizon=1, start=None, align='origin', method='analyt Returns ------- - forecasts : DataFrame + forecasts : ARCHModelForecast t by h data frame containing the forecasts. The alignment of the forecasts is controlled by `align`. @@ -735,7 +735,7 @@ class _SummaryRepr(object): """Base class for returning summary as repr and str""" def summary(self): - return Summary() + raise NotImplementedError("Subclasses optionally must provide.") def __repr__(self): out = self.__str__() + '\n' @@ -1086,7 +1086,7 @@ def forecast(self, params=None, horizon=1, start=None, align='origin', method='a Returns ------- - forecasts : DataFrame + forecasts : ARCHModelForecast t by h data frame containing the forecasts. The alignment of the forecasts is controlled by `align`.