85
85
86
86
"""
87
87
from __future__ import division
88
+ import numbers
88
89
import numpy as np
89
90
from scipy import sparse
90
91
from fractions import gcd
@@ -348,10 +349,18 @@ def simulate(self, ts_length, init=None, num_reps=None, random_state=None):
348
349
random_state = check_random_state (random_state )
349
350
dim = 1 # Dimension of the returned array: 1 or 2
350
351
352
+ msg_out_or_range = 'index {init} is out of the state space'
353
+
351
354
try :
352
355
k = len (init ) # init is an array
353
356
dim = 2
354
357
init_states = np .asarray (init , dtype = int )
358
+ # Check init_states are in the state space
359
+ if (init_states >= self .n ).any () or (init_states < - self .n ).any ():
360
+ idx = np .where (
361
+ (init_states >= self .n ) + (init_states < - self .n )
362
+ )[0 ][0 ]
363
+ raise ValueError (msg_out_or_range .format (init = idx ))
355
364
if num_reps is not None :
356
365
k *= num_reps
357
366
init_states = np .tile (init_states , num_reps )
@@ -362,7 +371,10 @@ def simulate(self, ts_length, init=None, num_reps=None, random_state=None):
362
371
k = num_reps
363
372
if init is None :
364
373
init_states = random_state .randint (self .n , size = k )
365
- elif isinstance (init , int ):
374
+ elif isinstance (init , numbers .Integral ):
375
+ # Check init is in the state space
376
+ if init >= self .n or init < - self .n :
377
+ raise ValueError (msg_out_or_range .format (init = init ))
366
378
init_states = np .ones (k , dtype = int ) * init
367
379
else :
368
380
raise ValueError (
@@ -526,7 +538,7 @@ def mc_sample_path(P, init=0, sample_size=1000, random_state=None):
526
538
"""
527
539
random_state = check_random_state (random_state )
528
540
529
- if isinstance (init , int ):
541
+ if isinstance (init , numbers . Integral ):
530
542
X_0 = init
531
543
else :
532
544
cdf0 = np .cumsum (init )
0 commit comments