summaryrefslogtreecommitdiff
path: root/numpy/random/tests
diff options
context:
space:
mode:
authorAntony Lee <anntzer.lee@gmail.com>2015-12-05 20:46:09 -0800
committerAntony Lee <anntzer.lee@gmail.com>2016-01-16 20:24:25 -0800
commit5be93a2580a232705e897984d0f920bc6346990e (patch)
tree2f464cc5e9d461b81c5da6b8bfdc4191ea7f253e /numpy/random/tests
parent865c3e375a598e5a0f7d9e690eda4702de8658af (diff)
downloadnumpy-5be93a2580a232705e897984d0f920bc6346990e.tar.gz
MAINT: memcpy-based ~4x faster, typed shuffle.
Only for 1d-ndarrays exactly, as subtypes (e.g. masked arrays) may not allow direct shuffle of the underlying buffer (in fact, the old implementation destroyed the underlying values of masked arrays while shuffling). Also handles struct-containing-object 1d ndarrays properly. See #6776 for an earlier, less general (but even faster: ~6x) improvement attempt, #5514 for the original issue.
Diffstat (limited to 'numpy/random/tests')
-rw-r--r--numpy/random/tests/test_random.py51
1 files changed, 28 insertions, 23 deletions
diff --git a/numpy/random/tests/test_random.py b/numpy/random/tests/test_random.py
index 37c1876bf..e3391a9a2 100644
--- a/numpy/random/tests/test_random.py
+++ b/numpy/random/tests/test_random.py
@@ -10,6 +10,7 @@ import sys
import warnings
+
class TestSeed(TestCase):
def test_scalar(self):
s = np.random.RandomState(0)
@@ -40,6 +41,7 @@ class TestSeed(TestCase):
assert_raises(ValueError, np.random.RandomState, [1, 2, 4294967296])
assert_raises(ValueError, np.random.RandomState, [1, -2, 4294967296])
+
class TestBinomial(TestCase):
def test_n_zero(self):
# Tests the corner case of n == 0 for the binomial distribution.
@@ -130,6 +132,7 @@ class TestSetState(TestCase):
# arguments without truncation.
self.prng.negative_binomial(0.5, 0.5)
+
class TestRandint(TestCase):
rfunc = np.random.randint
@@ -207,12 +210,13 @@ class TestRandint(TestCase):
assert_(tgt[np.dtype(np.bool).name] == res)
-class TestRandomDist(TestCase):
+class TestRandomDist:
# Make sure the random distribution returns the correct value for a
# given seed
- def setUp(self):
- self.seed = 1234567890
+ @classmethod
+ def setup_class(cls):
+ cls.seed = 1234567890
def test_rand(self):
np.random.seed(self.seed)
@@ -368,40 +372,41 @@ class TestRandomDist(TestCase):
np.testing.assert_equal(actual, desired)
def test_shuffle(self):
- # Test lists, arrays, and multidimensional versions of both:
- for conv in [lambda x: x,
- np.asarray,
+ # Test lists, arrays (of various dtypes), and multidimensional versions
+ # of both, c-contiguous or not:
+ for conv in [lambda x: np.array([]),
+ lambda x: x,
+ lambda x: np.asarray(x).astype(np.int8),
+ lambda x: np.asarray(x).astype(np.float32),
+ lambda x: np.asarray(x).astype(np.complex64),
+ lambda x: np.asarray(x).astype(object),
lambda x: [(i, i) for i in x],
- lambda x: np.asarray([(i, i) for i in x])]:
+ lambda x: np.asarray([[i, i] for i in x]),
+ lambda x: np.vstack([x, x]).T,
+ # gh-4270
+ lambda x: np.asarray([(i, i) for i in x],
+ [("a", object, 1),
+ ("b", np.int32, 1)])]:
np.random.seed(self.seed)
alist = conv([1, 2, 3, 4, 5, 6, 7, 8, 9, 0])
np.random.shuffle(alist)
actual = alist
desired = conv([0, 1, 9, 6, 2, 4, 5, 8, 7, 3])
- np.testing.assert_array_equal(actual, desired)
-
- def test_shuffle_flexible(self):
- # gh-4270
- arr = [(0, 1), (2, 3)]
- dt = np.dtype([('a', np.int32, 1), ('b', np.int32, 1)])
- nparr = np.array(arr, dtype=dt)
- a, b = nparr[0].copy(), nparr[1].copy()
- for i in range(50):
- np.random.shuffle(nparr)
- assert_(a in nparr)
- assert_(b in nparr)
+ yield np.testing.assert_array_equal, actual, desired
def test_shuffle_masked(self):
# gh-3263
a = np.ma.masked_values(np.reshape(range(20), (5,4)) % 3 - 1, -1)
b = np.ma.masked_values(np.arange(20) % 3 - 1, -1)
- ma = np.ma.count_masked(a)
- mb = np.ma.count_masked(b)
+ a_orig = a.copy()
+ b_orig = b.copy()
for i in range(50):
np.random.shuffle(a)
- self.assertEqual(ma, np.ma.count_masked(a))
+ assert_equal(
+ sorted(a.data[~a.mask]), sorted(a_orig.data[~a_orig.mask]))
np.random.shuffle(b)
- self.assertEqual(mb, np.ma.count_masked(b))
+ assert_equal(
+ sorted(b.data[~b.mask]), sorted(b_orig.data[~b_orig.mask]))
def test_beta(self):
np.random.seed(self.seed)