@@ -53,8 +53,7 @@ def test_n_zero(self):
53
53
# This test addresses issue #3480.
54
54
zeros = np .zeros (2 , dtype = 'int' )
55
55
for p in [0 , .5 , 1 ]:
56
- val = random .binomial (0 , p )
57
- assert val == 0
56
+ assert_ (random .binomial (0 , p ) == 0 )
58
57
assert_array_equal (random .binomial (zeros , p ), zeros )
59
58
60
59
def test_p_is_nan (self ):
@@ -96,40 +95,40 @@ def test_invalid_prob(self):
96
95
class TestSetState (object ):
97
96
def setup (self ):
98
97
self .seed = 1234567890
99
- self .brng = RandomGenerator (MT19937 (self .seed ))
100
- self .state = self .brng .state
98
+ self .rg = RandomGenerator (MT19937 (self .seed ))
99
+ self .state = self .rg .state
101
100
self .legacy_state = (self .state ['brng' ],
102
101
self .state ['state' ]['key' ],
103
102
self .state ['state' ]['pos' ])
104
103
105
104
def test_basic (self ):
106
- old = self .brng .tomaxint (16 )
107
- self .brng .state = self .state
108
- new = self .brng .tomaxint (16 )
105
+ old = self .rg .tomaxint (16 )
106
+ self .rg .state = self .state
107
+ new = self .rg .tomaxint (16 )
109
108
assert_ (np .all (old == new ))
110
109
111
110
def test_gaussian_reset (self ):
112
111
# Make sure the cached every-other-Gaussian is reset.
113
- old = self .brng .standard_normal (size = 3 )
114
- self .brng .state = self .state
115
- new = self .brng .standard_normal (size = 3 )
112
+ old = self .rg .standard_normal (size = 3 )
113
+ self .rg .state = self .state
114
+ new = self .rg .standard_normal (size = 3 )
116
115
assert_ (np .all (old == new ))
117
116
118
117
def test_gaussian_reset_in_media_res (self ):
119
118
# When the state is saved with a cached Gaussian, make sure the
120
119
# cached Gaussian is restored.
121
120
122
- self .brng .standard_normal ()
123
- state = self .brng .state
124
- old = self .brng .standard_normal (size = 3 )
125
- self .brng .state = state
126
- new = self .brng .standard_normal (size = 3 )
121
+ self .rg .standard_normal ()
122
+ state = self .rg .state
123
+ old = self .rg .standard_normal (size = 3 )
124
+ self .rg .state = state
125
+ new = self .rg .standard_normal (size = 3 )
127
126
assert_ (np .all (old == new ))
128
127
129
128
def test_negative_binomial (self ):
130
129
# Ensure that the negative binomial results take floating point
131
130
# arguments without truncation.
132
- self .brng .negative_binomial (0.5 , 0.5 )
131
+ self .rg .negative_binomial (0.5 , 0.5 )
133
132
134
133
135
134
class TestRandint (object ):
@@ -554,8 +553,7 @@ def test_choice_uniform_noreplace(self):
554
553
555
554
def test_choice_nonuniform_noreplace (self ):
556
555
random .seed (self .seed )
557
- actual = random .choice (4 , 3 , replace = False ,
558
- p = [0.1 , 0.3 , 0.5 , 0.1 ])
556
+ actual = random .choice (4 , 3 , replace = False , p = [0.1 , 0.3 , 0.5 , 0.1 ])
559
557
desired = np .array ([2 , 3 , 1 ])
560
558
assert_array_equal (actual , desired )
561
559
@@ -614,11 +612,11 @@ def test_choice_return_shape(self):
614
612
# Check multi dimensional array
615
613
s = (2 , 3 )
616
614
p = [0.1 , 0.1 , 0.1 , 0.1 , 0.4 , 0.2 ]
617
- assert_ (random .choice (6 , s , replace = True ).shape , s )
618
- assert_ (random .choice (6 , s , replace = False ).shape , s )
619
- assert_ (random .choice (6 , s , replace = True , p = p ).shape , s )
620
- assert_ (random .choice (6 , s , replace = False , p = p ).shape , s )
621
- assert_ (random .choice (np .arange (6 ), s , replace = True ).shape , s )
615
+ assert_equal (random .choice (6 , s , replace = True ).shape , s )
616
+ assert_equal (random .choice (6 , s , replace = False ).shape , s )
617
+ assert_equal (random .choice (6 , s , replace = True , p = p ).shape , s )
618
+ assert_equal (random .choice (6 , s , replace = False , p = p ).shape , s )
619
+ assert_equal (random .choice (np .arange (6 ), s , replace = True ).shape , s )
622
620
623
621
# Check zero-size
624
622
assert_equal (random .randint (0 , 0 , size = (3 , 0 , 4 )).shape , (3 , 0 , 4 ))
@@ -711,6 +709,11 @@ def test_binomial(self):
711
709
[46 , 45 ]])
712
710
assert_array_equal (actual , desired )
713
711
712
+ random .seed (self .seed )
713
+ actual = random .binomial (100.123 , .456 )
714
+ desired = 37
715
+ assert_array_equal (actual , desired )
716
+
714
717
def test_chisquare (self ):
715
718
random .seed (self .seed )
716
719
actual = random .chisquare (50 , size = (3 , 2 ))
@@ -795,6 +798,16 @@ def test_geometric(self):
795
798
[5 , 12 ]])
796
799
assert_array_equal (actual , desired )
797
800
801
+ def test_geometric_exceptions (self ):
802
+ assert_raises (ValueError , random .geometric , 1.1 )
803
+ assert_raises (ValueError , random .geometric , [1.1 ] * 10 )
804
+ assert_raises (ValueError , random .geometric , - 0.1 )
805
+ assert_raises (ValueError , random .geometric , [- 0.1 ] * 10 )
806
+ with suppress_warnings () as sup :
807
+ sup .record (RuntimeWarning )
808
+ assert_raises (ValueError , random .geometric , np .nan )
809
+ assert_raises (ValueError , random .geometric , [np .nan ] * 10 )
810
+
798
811
def test_gumbel (self ):
799
812
random .seed (self .seed )
800
813
actual = random .gumbel (loc = .123456789 , scale = 2.0 , size = (3 , 2 ))
@@ -873,6 +886,12 @@ def test_logseries(self):
873
886
[3 , 6 ]])
874
887
assert_array_equal (actual , desired )
875
888
889
+ def test_logseries_exceptions (self ):
890
+ with suppress_warnings () as sup :
891
+ sup .record (RuntimeWarning )
892
+ assert_raises (ValueError , random .logseries , np .nan )
893
+ assert_raises (ValueError , random .logseries , [np .nan ] * 10 )
894
+
876
895
def test_multinomial (self ):
877
896
random .seed (self .seed )
878
897
actual = random .multinomial (20 , [1 / 6. ] * 6 , size = (3 , 2 ))
@@ -943,6 +962,13 @@ def test_negative_binomial(self):
943
962
[723 , 751 ]])
944
963
assert_array_equal (actual , desired )
945
964
965
+ def test_negative_binomial_exceptions (self ):
966
+ with suppress_warnings () as sup :
967
+ sup .record (RuntimeWarning )
968
+ assert_raises (ValueError , random .negative_binomial , 100 , np .nan )
969
+ assert_raises (ValueError , random .negative_binomial , 100 ,
970
+ [np .nan ] * 10 )
971
+
946
972
def test_noncentral_chisquare (self ):
947
973
random .seed (self .seed )
948
974
actual = random .noncentral_chisquare (df = 5 , nonc = 5 , size = (3 , 2 ))
@@ -973,6 +999,11 @@ def test_noncentral_f(self):
973
999
[1.16362730891403 , 2.54104276581491 ]])
974
1000
assert_array_almost_equal (actual , desired , decimal = 14 )
975
1001
1002
+ def test_noncentral_f_nan (self ):
1003
+ random .seed (self .seed )
1004
+ actual = random .noncentral_f (dfnum = 5 , dfden = 2 , nonc = np .nan )
1005
+ assert np .isnan (actual )
1006
+
976
1007
def test_normal (self ):
977
1008
random .seed (self .seed )
978
1009
actual = random .normal (loc = .123456789 , scale = 2.0 , size = (3 , 2 ))
@@ -993,7 +1024,7 @@ def test_pareto(self):
993
1024
[1.1281132447159091e+01 , 3.1895968171107006e+08 ]])
994
1025
# For some reason on 32-bit x86 Ubuntu 12.10 the [1, 0] entry in this
995
1026
# matrix differs by 24 nulps. Discussion:
996
- # http ://mail.scipy .org/pipermail/numpy-discussion/2012-September/063801.html
1027
+ # https ://mail.python .org/pipermail/numpy-discussion/2012-September/063801.html
997
1028
# Consensus is that this is probably some gcc quirk that affects
998
1029
# rounding but not in any important way, so we just use a looser
999
1030
# tolerance on this test:
@@ -1014,6 +1045,10 @@ def test_poisson_exceptions(self):
1014
1045
assert_raises (ValueError , random .poisson , [lamneg ] * 10 )
1015
1046
assert_raises (ValueError , random .poisson , lambig )
1016
1047
assert_raises (ValueError , random .poisson , [lambig ] * 10 )
1048
+ with suppress_warnings () as sup :
1049
+ sup .record (RuntimeWarning )
1050
+ assert_raises (ValueError , random .poisson , np .nan )
1051
+ assert_raises (ValueError , random .poisson , [np .nan ] * 10 )
1017
1052
1018
1053
def test_power (self ):
1019
1054
random .seed (self .seed )
@@ -1168,8 +1203,8 @@ def __float__(self):
1168
1203
raise TypeError
1169
1204
1170
1205
throwing_float = np .array (1.0 ).view (ThrowingFloat )
1171
- assert_raises (TypeError , random .uniform ,
1172
- throwing_float , throwing_float )
1206
+ assert_raises (TypeError , random .uniform , throwing_float ,
1207
+ throwing_float )
1173
1208
1174
1209
class ThrowingInteger (np .ndarray ):
1175
1210
def __int__ (self ):
@@ -1189,9 +1224,14 @@ def test_vonmises(self):
1189
1224
def test_vonmises_small (self ):
1190
1225
# check infinite loop, gh-4720
1191
1226
random .seed (self .seed )
1192
- r = random .vonmises (mu = 0. , kappa = 1.1e-8 , size = 10 ** 6 )
1227
+ r = random .vonmises (mu = 0. , kappa = 1.1e-8 , size = 10 ** 6 )
1193
1228
assert_ (np .isfinite (r ).all ())
1194
1229
1230
+ def test_vonmises_nan (self ):
1231
+ random .seed (self .seed )
1232
+ r = random .vonmises (mu = 0. , kappa = np .nan )
1233
+ assert_ (np .isnan (r ))
1234
+
1195
1235
def test_wald (self ):
1196
1236
random .seed (self .seed )
1197
1237
actual = random .wald (mean = 1.23 , scale = 1.54 , size = (3 , 2 ))
@@ -1372,8 +1412,9 @@ def test_noncentral_f(self):
1372
1412
1373
1413
self .set_seed ()
1374
1414
actual = nonc_f (dfnum * 3 , dfden , nonc )
1375
- mt_nonc_f = random .noncentral_f
1376
1415
assert_array_almost_equal (actual , desired , decimal = 14 )
1416
+ assert np .all (np .isnan (nonc_f (dfnum , dfden , [np .nan ] * 3 )))
1417
+
1377
1418
assert_raises (ValueError , nonc_f , bad_dfnum * 3 , dfden , nonc )
1378
1419
assert_raises (ValueError , nonc_f , dfnum * 3 , bad_dfden , nonc )
1379
1420
assert_raises (ValueError , nonc_f , dfnum * 3 , dfden , bad_nonc )
@@ -1391,9 +1432,12 @@ def test_noncentral_f(self):
1391
1432
assert_raises (ValueError , nonc_f , bad_dfnum , dfden , nonc * 3 )
1392
1433
assert_raises (ValueError , nonc_f , dfnum , bad_dfden , nonc * 3 )
1393
1434
assert_raises (ValueError , nonc_f , dfnum , dfden , bad_nonc * 3 )
1394
- assert_raises (ValueError , mt_nonc_f , bad_dfnum , dfden , nonc * 3 )
1395
- assert_raises (ValueError , mt_nonc_f , dfnum , bad_dfden , nonc * 3 )
1396
- assert_raises (ValueError , mt_nonc_f , dfnum , dfden , bad_nonc * 3 )
1435
+
1436
+ def test_noncentral_f_small_df (self ):
1437
+ self .set_seed ()
1438
+ desired = np .array ([21.57878070681719 , 1.17110217503908 ])
1439
+ actual = random .noncentral_f (0.9 , 0.9 , 2 , size = 2 )
1440
+ assert_array_almost_equal (actual , desired , decimal = 14 )
1397
1441
1398
1442
def test_chisquare (self ):
1399
1443
df = [1 ]
@@ -1420,20 +1464,15 @@ def test_noncentral_chisquare(self):
1420
1464
1421
1465
self .set_seed ()
1422
1466
actual = nonc_chi (df * 3 , nonc )
1423
- mt_nonc_chi2 = random .noncentral_chisquare
1424
1467
assert_array_almost_equal (actual , desired , decimal = 14 )
1425
1468
assert_raises (ValueError , nonc_chi , bad_df * 3 , nonc )
1426
1469
assert_raises (ValueError , nonc_chi , df * 3 , bad_nonc )
1427
- assert_raises (ValueError , mt_nonc_chi2 , bad_df * 3 , nonc )
1428
- assert_raises (ValueError , mt_nonc_chi2 , df * 3 , bad_nonc )
1429
1470
1430
1471
self .set_seed ()
1431
1472
actual = nonc_chi (df , nonc * 3 )
1432
1473
assert_array_almost_equal (actual , desired , decimal = 14 )
1433
1474
assert_raises (ValueError , nonc_chi , bad_df , nonc * 3 )
1434
1475
assert_raises (ValueError , nonc_chi , df , bad_nonc * 3 )
1435
- assert_raises (ValueError , mt_nonc_chi2 , bad_df , nonc * 3 )
1436
- assert_raises (ValueError , mt_nonc_chi2 , df , bad_nonc * 3 )
1437
1476
1438
1477
def test_standard_t (self ):
1439
1478
df = [1 ]
@@ -1645,24 +1684,24 @@ def test_triangular(self):
1645
1684
assert_array_almost_equal (actual , desired , decimal = 14 )
1646
1685
assert_raises (ValueError , triangular , bad_left_one * 3 , mode , right )
1647
1686
assert_raises (ValueError , triangular , left * 3 , bad_mode_one , right )
1648
- assert_raises (ValueError , triangular ,
1649
- bad_left_two * 3 , bad_mode_two , right )
1687
+ assert_raises (ValueError , triangular , bad_left_two * 3 , bad_mode_two ,
1688
+ right )
1650
1689
1651
1690
self .set_seed ()
1652
1691
actual = triangular (left , mode * 3 , right )
1653
1692
assert_array_almost_equal (actual , desired , decimal = 14 )
1654
1693
assert_raises (ValueError , triangular , bad_left_one , mode * 3 , right )
1655
1694
assert_raises (ValueError , triangular , left , bad_mode_one * 3 , right )
1656
- assert_raises (ValueError , triangular , bad_left_two ,
1657
- bad_mode_two * 3 , right )
1695
+ assert_raises (ValueError , triangular , bad_left_two , bad_mode_two * 3 ,
1696
+ right )
1658
1697
1659
1698
self .set_seed ()
1660
1699
actual = triangular (left , mode , right * 3 )
1661
1700
assert_array_almost_equal (actual , desired , decimal = 14 )
1662
1701
assert_raises (ValueError , triangular , bad_left_one , mode , right * 3 )
1663
1702
assert_raises (ValueError , triangular , left , bad_mode_one , right * 3 )
1664
- assert_raises (ValueError , triangular , bad_left_two ,
1665
- bad_mode_two , right * 3 )
1703
+ assert_raises (ValueError , triangular , bad_left_two , bad_mode_two ,
1704
+ right * 3 )
1666
1705
1667
1706
assert_raises (ValueError , triangular , 10. , 0. , 20. )
1668
1707
assert_raises (ValueError , triangular , 10. , 25. , 20. )
@@ -1739,6 +1778,9 @@ def test_zipf(self):
1739
1778
actual = zipf (a * 3 )
1740
1779
assert_array_equal (actual , desired )
1741
1780
assert_raises (ValueError , zipf , bad_a * 3 )
1781
+ with np .errstate (invalid = 'ignore' ):
1782
+ assert_raises (ValueError , zipf , np .nan )
1783
+ assert_raises (ValueError , zipf , [0 , 0 , np .nan ])
1742
1784
1743
1785
def test_geometric (self ):
1744
1786
p = [0.5 ]
@@ -1809,7 +1851,6 @@ def test_logseries(self):
1809
1851
1810
1852
class TestThread (object ):
1811
1853
# make sure each state produces the same sequence even in threads
1812
-
1813
1854
def setup (self ):
1814
1855
self .seeds = range (4 )
1815
1856
0 commit comments