@@ -191,8 +191,7 @@ def test_impulse_response(parameters, varma_mod, idata, rng):
191
191
assert not np .any (np .isnan (irf .irf .values ))
192
192
193
193
194
- def test_create_varmax_with_exogenous (data ):
195
- # Case 1: k_exog as int, exog_state_names is None
194
+ def test_create_varmax_with_exogenous_k_exog_int (data ):
196
195
mod = BayesianVARMAX (
197
196
k_endog = data .shape [1 ],
198
197
order = (1 , 0 ),
@@ -209,7 +208,8 @@ def test_create_varmax_with_exogenous(data):
209
208
assert mod .param_info ["beta_exog" ]["shape" ] == (mod .k_endog , 2 )
210
209
assert mod .param_info ["beta_exog" ]["dims" ] == ("observed_state" , "exogenous" )
211
210
212
- # Case 2: exog_state_names as list, k_exog is None
211
+
212
+ def test_create_varmax_with_exogenous_list_of_names (data ):
213
213
mod = BayesianVARMAX (
214
214
k_endog = data .shape [1 ],
215
215
order = (1 , 0 ),
@@ -226,7 +226,8 @@ def test_create_varmax_with_exogenous(data):
226
226
assert mod .param_info ["beta_exog" ]["shape" ] == (mod .k_endog , 2 )
227
227
assert mod .param_info ["beta_exog" ]["dims" ] == ("observed_state" , "exogenous" )
228
228
229
- # Case 3: k_exog as int, exog_state_names as list (matching)
229
+
230
+ def test_create_varmax_with_exogenous_both_defined_correctly (data ):
230
231
mod = BayesianVARMAX (
231
232
k_endog = data .shape [1 ],
232
233
order = (1 , 0 ),
@@ -244,7 +245,8 @@ def test_create_varmax_with_exogenous(data):
244
245
assert mod .param_info ["beta_exog" ]["shape" ] == (mod .k_endog , 2 )
245
246
assert mod .param_info ["beta_exog" ]["dims" ] == ("observed_state" , "exogenous" )
246
247
247
- # Case 4: k_exog as dict, exog_state_names is None
248
+
249
+ def test_create_varmax_with_exogenous_k_exog_dict (data ):
248
250
k_exog = {"observed_0" : 2 , "observed_1" : 1 , "observed_2" : 0 }
249
251
mod = BayesianVARMAX (
250
252
endog_names = ["observed_0" , "observed_1" , "observed_2" ],
@@ -285,7 +287,8 @@ def test_create_varmax_with_exogenous(data):
285
287
assert mod .param_info ["beta_observed_1" ]["shape" ] == (1 ,)
286
288
assert mod .param_info ["beta_observed_1" ]["dims" ] == ("exogenous_observed_1" ,)
287
289
288
- # Case 5: exog_state_names as dict, k_exog is None
290
+
291
+ def test_create_varmax_with_exogenous_exog_names_dict (data ):
289
292
exog_state_names = {"observed_0" : ["a" , "b" ], "observed_1" : ["c" ], "observed_2" : []}
290
293
mod = BayesianVARMAX (
291
294
endog_names = ["observed_0" , "observed_1" , "observed_2" ],
@@ -319,7 +322,8 @@ def test_create_varmax_with_exogenous(data):
319
322
assert mod .param_info ["beta_observed_1" ]["shape" ] == (1 ,)
320
323
assert mod .param_info ["beta_observed_1" ]["dims" ] == ("exogenous_observed_1" ,)
321
324
322
- # Case 6: k_exog as dict, exog_state_names as dict (matching)
325
+
326
+ def test_create_varmax_with_exogenous_both_dict_correct (data ):
323
327
k_exog = {"observed_0" : 2 , "observed_1" : 1 }
324
328
exog_state_names = {"observed_0" : ["a" , "b" ], "observed_1" : ["c" ]}
325
329
mod = BayesianVARMAX (
@@ -343,7 +347,33 @@ def test_create_varmax_with_exogenous(data):
343
347
assert mod .param_info ["beta_observed_1" ]["shape" ] == (1 ,)
344
348
assert mod .param_info ["beta_observed_1" ]["dims" ] == ("exogenous_observed_1" ,)
345
349
346
- # Error: k_exog as int, exog_state_names as list (length mismatch)
350
+
351
+ def test_create_varmax_with_exogenous_dict_converts_to_list (data ):
352
+ exog_state_names = {
353
+ "observed_0" : ["a" , "b" ],
354
+ "observed_1" : ["a" , "b" ],
355
+ "observed_2" : ["a" , "b" ],
356
+ }
357
+ mod = BayesianVARMAX (
358
+ endog_names = ["observed_0" , "observed_1" , "observed_2" ],
359
+ order = (1 , 0 ),
360
+ exog_state_names = exog_state_names ,
361
+ verbose = False ,
362
+ measurement_error = False ,
363
+ stationary_initialization = False ,
364
+ )
365
+
366
+ assert mod .k_exog == 2
367
+ assert mod .exog_state_names == ["a" , "b" ]
368
+ assert mod .data_names == ["exogenous_data" ]
369
+ assert mod .param_dims ["beta_exog" ] == ("observed_state" , "exogenous" )
370
+ assert mod .coords ["exogenous" ] == ["a" , "b" ]
371
+ assert mod .param_info ["beta_exog" ]["shape" ] == (mod .k_endog , 2 )
372
+ assert mod .param_info ["beta_exog" ]["dims" ] == ("observed_state" , "exogenous" )
373
+
374
+
375
+ def test_create_varmax_with_exogenous_raises_if_args_disagree (data ):
376
+ # List case
347
377
with pytest .raises (
348
378
ValueError , match = "Length of exog_state_names does not match provided k_exog"
349
379
):
@@ -357,8 +387,10 @@ def test_create_varmax_with_exogenous(data):
357
387
stationary_initialization = False ,
358
388
)
359
389
360
- # Error: k_exog as int, exog_state_names as dict
361
- with pytest .raises (ValueError ):
390
+ # Dict case
391
+ with pytest .raises (
392
+ ValueError , match = "If k_exog is an int, exog_state_names must be a list of the same length"
393
+ ):
362
394
BayesianVARMAX (
363
395
k_endog = 2 ,
364
396
order = (1 , 0 ),
@@ -369,8 +401,10 @@ def test_create_varmax_with_exogenous(data):
369
401
stationary_initialization = False ,
370
402
)
371
403
372
- # Error: k_exog as dict, exog_state_names as list
373
- with pytest .raises (ValueError ):
404
+ # dict + list
405
+ with pytest .raises (
406
+ ValueError , match = "If k_exog is a dict, exog_state_names must be a dict as well"
407
+ ):
374
408
BayesianVARMAX (
375
409
endog_names = ["observed_0" , "observed_1" ],
376
410
order = (1 , 0 ),
@@ -381,7 +415,7 @@ def test_create_varmax_with_exogenous(data):
381
415
stationary_initialization = False ,
382
416
)
383
417
384
- # Error: k_exog as dict, exog_state_names as dict (keys mismatch)
418
+ # Dict/ dict, key mismatch
385
419
with pytest .raises (ValueError , match = "Keys of k_exog and exog_state_names dicts must match" ):
386
420
BayesianVARMAX (
387
421
endog_names = ["observed_0" , "observed_1" ],
@@ -393,7 +427,7 @@ def test_create_varmax_with_exogenous(data):
393
427
stationary_initialization = False ,
394
428
)
395
429
396
- # Error: k_exog as dict, exog_state_names as dict ( length mismatch)
430
+ # Dict/ dict, length mismatch
397
431
with pytest .raises (ValueError , match = "lengths of exog_state_names lists must match" ):
398
432
BayesianVARMAX (
399
433
endog_names = ["observed_0" , "observed_1" ],
0 commit comments