@@ -1947,11 +1947,18 @@ def test_fiaparch(setup):
19471947 assert_equal (fiaparch .truncation , trunc_lag )
19481948
19491949
1950+ @pytest .mark .parametrize ("p" , [0 , 1 ])
19501951@pytest .mark .parametrize ("o" , [0 , 1 ])
1952+ @pytest .mark .parametrize ("q" , [0 , 1 ])
19511953@pytest .mark .parametrize ("delta" , [None , 1.5 ])
1952- def test_fiaparch_updater_matches_recursion (setup , o , delta ):
1953- fiaparch = FIAPARCH (truncation = 300 , o = o , delta = delta )
1954- params = [0.1 , 0.2 , 0.4 , 0.2 ]
1954+ def test_fiaparch_updater_matches_recursion (setup , p , o , q , delta ):
1955+ fiaparch = FIAPARCH (p = p , o = o , q = q , truncation = 300 , delta = delta )
1956+ params = [0.1 ]
1957+ if p :
1958+ params .append (0.2 )
1959+ params .append (0.4 )
1960+ if q :
1961+ params .append (0.2 )
19551962 if o :
19561963 params .append (0.8 )
19571964 if delta is None :
@@ -2319,3 +2326,32 @@ def test_fiaparch_str(setup, p, o, q):
23192326 assert f"p: { p } " in s
23202327 assert f"o: { o } " in s
23212328 assert "delta:" not in s
2329+
2330+
2331+ @pytest .mark .parametrize ("delta" , [None , 1.5 ])
2332+ def test_fiaparch_updater_reduce_setstate (setup , delta ):
2333+ fiaparch = FIAPARCH (truncation = 300 , delta = delta )
2334+ params = [0.1 , 0.2 , 0.4 , 0.2 , - 0.3 ]
2335+ if delta is None :
2336+ params .append (1.5 )
2337+ parameters = np .array (params )
2338+ backcast = fiaparch .backcast (setup .resids )
2339+ var_bounds = fiaparch .variance_bounds (setup .resids )
2340+
2341+ sigma2 = np .zeros_like (setup .sigma2 )
2342+ fiaparch .compute_variance (parameters , setup .resids , sigma2 , backcast , var_bounds )
2343+
2344+ updater = fiaparch .volatility_updater
2345+ updater .initialize_update (parameters , backcast , setup .t )
2346+ sigma2_pre = np .zeros_like (setup .sigma2 )
2347+ for t in range (setup .t ):
2348+ updater ._update_tester (t , parameters , setup .resids , sigma2_pre , var_bounds )
2349+
2350+ cls , init_args , state = updater .__reduce__ ()
2351+ restored = cls (* init_args )
2352+ restored .__setstate__ (state )
2353+ sigma2_post = np .zeros_like (setup .sigma2 )
2354+ for t in range (setup .t ):
2355+ restored ._update_tester (t , parameters , setup .resids , sigma2_post , var_bounds )
2356+
2357+ assert_allclose (sigma2_post , sigma2_pre )
0 commit comments