@@ -127,124 +127,94 @@ def test_random_sample_returns_nd_array(self):
127
127
class ScalarParameterShape (SeededTest ):
128
128
129
129
def check (self , dist , ** kwargs ):
130
- nr .seed (20090425 )
131
130
test_cases = [(None , (1 ,)), (5 , (5 ,)), ((4 , 5 ), (4 , 5 ))]
132
131
check_dist ((dist , kwargs ), test_cases )
133
132
134
133
def test_normal (self ):
135
- nr .seed (20090425 )
136
134
self .check (Normal , mu = 0. , tau = 1. )
137
135
138
136
def test_uniform (self ):
139
- nr .seed (20090425 )
140
137
self .check (Uniform , lower = 0. , upper = 1. )
141
138
142
139
def test_half_normal (self ):
143
- nr .seed (20090425 )
144
140
self .check (HalfNormal , tau = 1. )
145
141
146
142
def test_wald (self ):
147
- nr .seed (20090425 )
148
143
self .check (Wald , mu = 1. , lam = 1. , alpha = 0. )
149
144
150
145
def test_beta (self ):
151
- nr .seed (20090425 )
152
146
self .check (Beta , alpha = 1. , beta = 1. )
153
147
154
148
def test_exponential (self ):
155
- nr .seed (20090425 )
156
149
self .check (Exponential , lam = 1. )
157
150
158
151
def test_laplace (self ):
159
- nr .seed (20090425 )
160
152
self .check (Laplace , mu = 1. , b = 1 )
161
153
162
154
def test_lognormal (self ):
163
- nr .seed (20090425 )
164
155
self .check (Lognormal , mu = 1. , tau = 1. )
165
156
166
157
def test_student_t (self ):
167
- nr .seed (20090425 )
168
158
self .check (StudentT , nu = 5 , mu = 0. , lam = 1. )
169
159
170
160
def test_pareto (self ):
171
- nr .seed (20090425 )
172
161
self .check (Pareto , alpha = 0.5 , m = 1. )
173
162
174
163
def test_cauchy (self ):
175
- nr .seed (20090425 )
176
164
self .check (Cauchy , alpha = 1. , beta = 1. )
177
165
178
166
def test_half_cauchy (self ):
179
- nr .seed (20090425 )
180
167
self .check (HalfCauchy , beta = 1. )
181
168
182
169
def test_gamma (self ):
183
- nr .seed (20090425 )
184
170
self .check (Gamma , alpha = 1. , beta = 1. )
185
171
186
172
def test_inverse_gamma (self ):
187
- nr .seed (20090425 )
188
173
self .check (InverseGamma , alpha = 0.5 , beta = 0.5 )
189
174
190
175
def test_chi_squared (self ):
191
- nr .seed (20090425 )
192
176
self .check (ChiSquared , nu = 2 )
193
177
194
178
def test_weibull (self ):
195
- nr .seed (20090425 )
196
179
self .check (Weibull , alpha = 1. , beta = 1. )
197
180
198
181
def test_ex_gaussian (self ):
199
- nr .seed (20090425 )
200
182
self .check (ExGaussian , mu = 0. , sigma = 1. , nu = 1. )
201
183
202
184
def test_vonmises (self ):
203
- nr .seed (20090425 )
204
185
self .check (VonMises , mu = 0. , kappa = 1. )
205
186
206
187
def test_binomial (self ):
207
- nr .seed (20090425 )
208
188
self .check (Binomial , n = 5 , p = 0.5 )
209
189
210
190
def test_beta_binomial (self ):
211
- nr .seed (20090425 )
212
191
self .check (BetaBinomial , alpha = 1. , beta = 1. , n = 1 )
213
192
214
193
def test_bernoulli (self ):
215
- nr .seed (20090425 )
216
194
self .check (Bernoulli , p = 0.5 )
217
195
218
196
def test_poisson (self ):
219
- nr .seed (20090425 )
220
197
self .check (Poisson , mu = 1. )
221
198
222
199
def test_negative_binomial (self ):
223
- nr .seed (20090425 )
224
200
self .check (NegativeBinomial , mu = 1. , alpha = 1. )
225
201
226
202
def test_constant_dist (self ):
227
- nr .seed (20090425 )
228
203
self .check (ConstantDist , c = 3 )
229
204
230
205
def test_zero_inflated_poisson (self ):
231
- nr .seed (20090425 )
232
206
self .check (ZeroInflatedPoisson , theta = 1 , psi = 0.3 )
233
207
234
208
def test_zero_inflated_negative_binomial (self ):
235
- nr .seed (20090425 )
236
209
self .check (ZeroInflatedNegativeBinomial , mu = 1. , alpha = 1. , psi = 0.3 )
237
210
238
211
def test_discrete_uniform (self ):
239
- nr .seed (20090425 )
240
212
self .check (DiscreteUniform , lower = 0. , upper = 10 )
241
213
242
214
def test_geometric (self ):
243
- nr .seed (20090425 )
244
215
self .check (Geometric , p = 0.5 )
245
216
246
217
def test_categorical (self ):
247
- nr .seed (20090425 )
248
218
self .check (Categorical , p = np .array ([0.2 , 0.3 , 0.5 ]))
249
219
250
220
@@ -404,9 +374,6 @@ def test_gamma(self):
404
374
self .check (Gamma , alpha = self .ones , beta = self .ones )
405
375
406
376
def test_inverse_gamma (self ):
407
- # InverseGamma fails due to calculation of self.mean in __init__
408
- raise SkipTest (
409
- 'InverseGamma fails due to calculation of self.mean in __init__' )
410
377
self .check (InverseGamma , alpha = self .ones / 2 , beta = self .ones / 2 )
411
378
412
379
def test_chi_squared (self ):
@@ -456,9 +423,6 @@ def test_geometric(self):
456
423
self .check (Geometric , p = self .ones / 2 )
457
424
458
425
def test_categorical (self ):
459
- # Categorical cannot be initialised with >1D probabilities
460
- # raise SkipTest(
461
- # 'Categorical cannot be initialised with >1D probabilities')
462
426
self .check (Categorical , p = self .ones / len (self .ones ))
463
427
464
428
@@ -523,9 +487,6 @@ def test_gamma(self):
523
487
self .check (Gamma , alpha = self .ones , beta = self .ones )
524
488
525
489
def test_inverse_gamma (self ):
526
- # InverseGamma fails due to calculation of self.mean in __init__
527
- raise SkipTest (
528
- 'InverseGamma fails due to calculation of self.mean in __init__' )
529
490
self .check (InverseGamma , alpha = self .ones / 2 , beta = self .ones / 2 )
530
491
531
492
def test_chi_squared (self ):
@@ -574,9 +535,6 @@ def test_geometric(self):
574
535
self .check (Geometric , p = self .ones / 2 )
575
536
576
537
def test_categorical (self ):
577
- # Categorical cannot be initialised with >1D probabilities
578
- raise SkipTest (
579
- 'Categorical cannot be initialised with >1D probabilities' )
580
538
self .check (Categorical , p = self .ones / self .n )
581
539
582
540
@@ -635,13 +593,11 @@ def ref_rand(size, lam):
635
593
def test_laplace (self ):
636
594
def ref_rand (size , mu , b ):
637
595
return st .laplace .rvs (mu , b , size = size )
638
-
639
596
pymc3_random (Laplace , {'mu' : R , 'b' : Rplus }, ref_rand = ref_rand )
640
597
641
598
def test_lognormal (self ):
642
599
def ref_rand (size , mu , tau ):
643
600
return np .exp (mu + (tau ** - 0.5 ) * st .norm .rvs (loc = 0. , scale = 1. , size = size ))
644
-
645
601
pymc3_random (Lognormal , {'mu' : R , 'tau' : Rplusbig }, ref_rand = ref_rand )
646
602
647
603
def test_student_t (self ):
@@ -660,16 +616,15 @@ def ref_rand(size, beta):
660
616
return st .halfcauchy .rvs (scale = beta , size = size )
661
617
pymc3_random (HalfCauchy , {'beta' : Rplusbig }, ref_rand = ref_rand )
662
618
663
- def test_gamma (self ):
619
+ def test_gamma_alpha_beta (self ):
664
620
def ref_rand (size , alpha , beta ):
665
621
return st .gamma .rvs (alpha , scale = 1. / beta , size = size )
666
- pymc3_random (Gamma , {'alpha' : Rplusbig ,
667
- 'beta' : Rplusbig }, ref_rand = ref_rand )
622
+ pymc3_random (Gamma , {'alpha' : Rplusbig , 'beta' : Rplusbig }, ref_rand = ref_rand )
668
623
624
+ def test_gamma_mu_sd (self ):
669
625
def ref_rand (size , mu , sd ):
670
626
return st .gamma .rvs (mu ** 2 / sd ** 2 , scale = sd ** 2 / mu , size = size )
671
- pymc3_random (
672
- Gamma , {'mu' : Rplusbig , 'sd' : Rplusbig }, ref_rand = ref_rand )
627
+ pymc3_random (Gamma , {'mu' : Rplusbig , 'sd' : Rplusbig }, ref_rand = ref_rand )
673
628
674
629
def test_inverse_gamma (self ):
675
630
def ref_rand (size , alpha , beta ):
@@ -705,8 +660,7 @@ def test_binomial(self):
705
660
Binomial , {'n' : Nat , 'p' : Unit }, ref_rand = st .binom .rvs )
706
661
707
662
def test_beta_binomial (self ):
708
- pymc3_random_discrete (BetaBinomial ,
709
- {'n' : Nat , 'alpha' : Rplus , 'beta' : Rplus },
663
+ pymc3_random_discrete (BetaBinomial , {'n' : Nat , 'alpha' : Rplus , 'beta' : Rplus },
710
664
ref_rand = self ._beta_bin )
711
665
712
666
def _beta_bin (self , n , alpha , beta , size = None ):
@@ -717,31 +671,16 @@ def test_bernoulli(self):
717
671
ref_rand = lambda size , p = None : st .bernoulli .rvs (p , size = size ))
718
672
719
673
def test_poisson (self ):
720
- pymc3_random_discrete (Poisson , {'mu' : Rplusbig },
721
- # Test always fails with larger sample sizes.
722
- size = 500 ,
723
- ref_rand = st .poisson .rvs )
724
-
725
- def poisson_gamma_random (alpha , mu , size ):
726
- g = st .gamma .rvs (alpha , scale = alpha / mu , size = size )
727
- g [g == 0 ] = np .finfo (float ).eps
728
- return st .poisson .rvs (g )
674
+ pymc3_random_discrete (Poisson , {'mu' : Rplusbig }, size = 500 , ref_rand = st .poisson .rvs )
729
675
730
676
def test_negative_binomial (self ):
731
- # TODO: fix this so test passes
732
- # pymc3_random_discrete(NegativeBinomial, {'mu':Rplusbig, 'alpha':Rplusbig},
733
- # size=1000,
734
- # ref_rand=lambda size, mu=None,
735
- # alpha=None: poisson_gamma_random(alpha, mu, size))
736
- raise SkipTest (
737
- 'NegativeBinomial test always fails for unknown reason.' )
677
+ def ref_rand (size , alpha , mu ):
678
+ return st .nbinom .rvs (alpha , alpha / (mu + alpha ), size = size )
679
+ pymc3_random_discrete (NegativeBinomial , {'mu' : Rplusbig , 'alpha' : Rplusbig },
680
+ size = 100 , fails = 50 , ref_rand = ref_rand )
738
681
739
682
def test_geometric (self ):
740
- pymc3_random_discrete (Geometric , {'p' : Unit },
741
- # Test always fails with larger sample sizes.
742
- size = 500 ,
743
- fails = 50 , # Be a bit more generous.
744
- ref_rand = nr .geometric )
683
+ pymc3_random_discrete (Geometric , {'p' : Unit }, size = 500 , fails = 50 , ref_rand = nr .geometric )
745
684
746
685
def test_discrete_uniform (self ):
747
686
def ref_rand (size , lower , upper ):
@@ -810,5 +749,5 @@ def test_wishart(self):
810
749
# st.wishart(V, df=n, size=size))
811
750
812
751
def test_lkj (self ):
813
- # To do : generate random numbers.
752
+ # TODO : generate random numbers.
814
753
raise SkipTest ('LJK random sampling not implemented yet.' )
0 commit comments