8000 ENH: randomgen by mattip · Pull Request #13163 · numpy/numpy · GitHub
[go: up one dir, main page]

Skip to content

ENH: randomgen #13163

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 139 commits into from
May 28, 2019
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
139 commits
Select commit Hold shift + click to select a range
3102fc6
INIT: Initial commit with basic structure
bashtage Feb 20, 2018
fa3bef5
ENH: Add support for xoroshiro128
bashtage Feb 22, 2018
d59494c
ENH: Add entropy initialization to RNGS
bashtage Feb 23, 2018
8942968
ENH: Add seeding to generators
bashtage Feb 23, 2018
aa9060c
CLN: Simplify xoroshiro state
bashtage Feb 24, 2018
b353f87
REF: Add additional state
bashtage Feb 26, 2018
15cab3c
REF: Reactor filler to take a function
bashtage Feb 28, 2018
8367231
ENH: Add extra abstraction
bashtage Feb 28, 2018
d5dc576
ENH: Add float from double and std exponential
bashtage Feb 28, 2018
f4575d9
BUG: Fix bug in xoroshiro
bashtage Mar 1, 2018
c687b84
CLN: Fix warning in entropy
bashtage Mar 1, 2018
0d4eae3
REF: Add types to prng_t 8000
bashtage Mar 1, 2018
27a96bb
ENH: Add Threefry generator
bashtage Mar 2, 2018
a5f17a5
ENH: Use Random123 threefry
bashtage Mar 2, 2018
56fd6e7
CLN: Remove unnecessary code from threefry
bashtage Mar 2, 2018
93b7edf
ENH: Add pickle support
bashtage Mar 3, 2018
d665138
DOC: Add list of TODOs
bashtage Mar 3, 2018
892d43f
BIG: Fix setting state in threee fry
bashtage Mar 3, 2018
ad79fe0
ENH: Add jump and advance to threefry
bashtage Mar 3, 2018
4b2afc2
ENH: Add PCG64
bashtage Mar 4, 2018
6b81fa0
ENH: Add advance and jump to PCG64
bashtage Mar 4, 2018
e150e1a
ENH: Add Philox
bashtage Mar 5, 2018
d6d3ac9
CLN: Remove splitmix64 as a visible PRNG
bashtage Mar 5, 2018
323616c
BUG: Fix bugs which prevented building on Linux
bashtage Mar 5, 2018
626a1a0
REF: Refactor distributions
bashtage Mar 5, 2018
5fe7572
ENH: Add std gamma
bashtage Mar 5, 2018
cecd56d
CLN: Clean random123 generators
bashtage Mar 6, 2018
a071378
CLN: Fix dsfmt import issues
bashtage Mar 7, 2018
eab3390
ENH: Enable Python 2.7 compatability
bashtage Mar 7, 2018
c3155db
ENH: Add jump to mt19937 and dsfmt
bashtage Mar 7, 2018
e9e0a8c
ENH: Add ctypes interface and examples
bashtage Mar 7, 2018
0e5ffae
CLN: Mix skipped nogils
bashtage Mar 7, 2018
5d274af
ENH: Add cffi interface
bashtage Mar 7, 2018
2f9b9c0
ENH: Add example using distributions
bashtage Mar 8, 2018
fcef7ae
ENH: Enable building distributions as a DLL
bashtage Mar 8, 2018
1235545
ENH: Port over external functions
bashtage Mar 8, 2018
7ca6e62
ENH: Add bounded intergers
bashtage Mar 9, 2018
cfe9e95
ENH: Add support for Philon on 32 bit Windows
bashtage Mar 11, 2018
390860a
ENH: Add support for ThreeFry32x4
bashtage Mar 12, 2018
8fa8c2b
BUG: Enable build to run on 32-bit Linux
bashtage Mar 12, 2018
644d883
ENH: Add PCG32
bashtage Mar 12, 2018
e81e93f
BUG: Fix variable declarations in dsfmt
bashtage Mar 12, 2018
76a31a9
ENH: Enable testing on OSX
bashtage Mar 12, 2018
c1f4fa0
REF: Drop Box-Muller
bashtage Mar 13, 2018
ee51dcf
REF: Remove binomial_t from prng
bashtage Mar 13, 2018
fde7742
ENH: Switch to int64
bashtage Mar 13, 2018
fb98ac5
DOC: Start documentation
bashtage Mar 14, 2018
cb24575
REF: Rename from Core PRNG to RandomGen
bashtage Mar 14, 2018
c722f44
DOC: Update docs
bashtage Mar 14, 2018
e69d24c
TST: Improve travis
bashtage Mar 14, 2018
a85ee48
BUG: Fix failing test
bashtage Mar 14, 2018
701326e
DOC: Fix location of tagged docs
bashtage Mar 14, 2018
9e18b77
BLD: Ensure emulated math is used in 32 bit platforms
bashtage Mar 16, 2018
3e69d17
CLN: Remove references to long
bashtage Mar 22, 2018
489015f
ENH: Add Box-Muller gauss
bashtage Mar 21, 2018
8711b32
DOC: Update multithreading doc
bashtage Mar 27, 2018
018faf7
CLN: Remove set/get state for system generator
bashtage Mar 27, 2018
75025d9
TST: Fix tailing test on 32bit platofrms
bashtage Mar 27, 2018
4f37499
CLN: Fix str for RandomGenerator
bashtage Mar 28, 2018
7d37f5f
DOC: Update legacy docs
bashtage Mar 28, 2018
a2e21e6
BUG: Fix pickle for LegacyGenerator
bashtage Mar 28, 2018
d13f398
DOC: Spelling changes
bashtage Apr 2, 2018
df1758d
CLN: Remove redeclared type
bashtage Apr 2, 2018
412e908
BLD: Enable no-sse2 flag
bashtage Apr 3, 2018
87b52f2
SYNC/CLN: Sync with upstream changes
bashtage Apr 16, 2018
db87d7d
BLD: Add lm flag for non-windows platforms
bashtage May 2, 2018
b41949e
ENH: Add dSFMT
bashtage Mar 5, 2018
a9cb58d
ENH: Add out, ziggurat for exponential
bashtage Mar 5, 2018
92a09f3
TST: Add test and benchmark code
bashtage Mar 6, 2018
f029ebb
ENH: Improve benchmark
bashtage Mar 6, 2018
8777c61
CLN: Reformat C files
bashtage Mar 7, 2018
784315e
ENH: Example numba example using external distributions
bashtage Mar 8, 2018
5b262ef
BUG: Precent GC of CorePRNG when using CFFI/CTypes
bashtage Mar 8, 2018
65ceada
TST: Add tests
bashtage Mar 9, 2018
3b7b1e4
DOC: Update readme
bashtage Mar 11, 2018
a8882b2
CLN: Remove small bugs and alter variable size
bashtage Mar 12, 2018
dc0c84b
BUG: Fix returned type
bashtage Mar 13, 2018
f060614
DOC: Update docs and building
bashtage Mar 14, 2018
5d3d955
ENH: Restore filler
bashtage Mar 15, 2018
ce30b74
TST: Improve testing and build
bashtage Mar 17, 2018
447e6b3
DOC: Update change-log and docs
bashtage Mar 17, 2018
50e7242
BUG: Restore nogil for fillers
bashtage Mar 21, 2018
799e20b
TST: Make test more verbose, clean up noise
bashtage Mar 28, 2018
80a3fe1
BUG: Fix absolute_import
bashtage Apr 2, 2018
d780f06
DOC: Fix doc and example error
pdebuyl May 22, 2018
fdd029f
REF: Rename min and max macros
bashtage Jun 14, 2018
3dba22d
MAINT: Sync with NumPy changes
bashtage Jun 19, 2018
f2ace10
ENH: Allow empty choice
bashtage Jul 3, 2018
d0cb154
DOC: Provide a better explanation of bounded int generation
bashtage Sep 22, 2018
8e6b69f
MAINT: Sync with recent upstream changes
bashtage Sep 22, 2018
99bf1a0
DOC: Update docs for 1.15 release [skip ci]
bashtage Sep 22, 2018
8dba0e9
ENH: Added an alternative interval generator using Lemire's algorithm.
bduvenhage Oct 3, 2018
13d8999
DOC: Add license files
bashtage Oct 5, 2018
707371d
REF: Add path using umul
bashtage Oct 5, 2018
15bebed
ENH: Added Lemire algorithms for generating random numbers
bduvenhage Oct 11, 2018
734fbfb
CLN: Add guards to headers
bashtage Oct 21, 2018
c4ed60e
ENH/BUG: Add Xoshiro256starstar generator
bashtage Oct 20, 2018
9dac6a5
MAINT: Sync with upstream changes
bashtage Nov 5, 2018
578889b
BUG: Ensure buffer_loc is reset in DSFMT
bashtage Feb 4, 2019
896f2e4
BUG: Raise on nan probabilities
bashtage Feb 4, 2019
fa8af41
BUILD: move files out of _randomgen
mattip Mar 20, 2019
7e8e19f
BUG: Correct handling of nans
bashtage Apr 8, 2019
c53b2eb
BENCH: convert bencmarks to asv format
mattip Apr 9, 2019
9578dcf
BUG: __dealloc__ can be called without __init__ in some error modes
mattip Apr 12, 2019
0f3dd06
ENH: Extend multinomial and fix zipf
bashtage Apr 11, 2019
8a3c11d
DOC: Add alias docstrings for sample and ranf
bashtage Apr 12, 2019
bb7abf2
ENH: add instance of RandomGenerator(Xoshiro512StarStar) as gen
mattip Apr 12, 2019
f11921d
MAINT: Simplify return types
bashtage Apr 12, 2019
0f931b3
BUG: Fix type in zipf
bashtage Apr 13, 2019
b2f9bea
ENH: Improvce choice without replacement
bashtage Apr 13, 2019
7a41794
DOC: fix doctests, move numpy.random -> numpy.random.gen in generator…
mattip Apr 13, 2019
edfd313
ENH: Finish hypergeometric 0
bashtage Apr 13, 2019
b9b9d70
MAINT: remove legacy, refactor legacy -> mtrand in docs
mattip Apr 14, 2019
2deddc8
MAINT: Remove Cython conditionals
bashtage Apr 14, 2019
d531f92
BUG: Protect gamma generation from 0 input
bashtage Feb 18, 2019
6e386c0
DOC/ENH: Update docstring and enhance logistic
bashtage Feb 19, 2019
8621229
DOC: tighten up documentation, add a table of comparison
mattip Apr 14, 2019
4f06779
ENH: Add fast path for randint broadcasting
bashtage Apr 15, 2019
ca9c542
BUG: Cast high to Python int to avoid overflow
bashtage Apr 15, 2019
dd77ce3
ENH: Add closed generator to randint
bashtage Apr 16, 2019
17e0070
MAINT: Implement API changes for randomgen-derived code
mattip May 13, 2019
b42a5ca
BUG: Ensure integer-type stream on 32bit
bashtage May 18, 2019
720a0a9
BLD: Use numpy detection of SSE
bashtage May 19, 2019
e058ae4
MAINT: remove unused file
mattip May 20, 2019
3d19ae9
MAINT: remove threefry32, xoroshiro128, xorshift1024 BitGenerators
mattip May 20, 2019
060c669
merge master into branch
mattip May 22, 2019
4e6a812
MAINT: remove pre-randomgen _mtrand
mattip May 23, 2019
19b48e2
BUG: test, fix missing return to deprecated function
mattip May 23, 2019
cdb2b0f
MAINT: remove tomaxint, random_sample from generator
mattip May 23, 2019
2c14e47
ENH: Split poisson_lam_max
bashtage May 23, 2019
457c6c5
MAINT: Remove test_against_numpy
bashtage May 23, 2019
9e5ae61
BUG: Change renamed attribute
bashtage May 23, 2019
7c52c28
DOC: Add __all__ and document lock
bashtage May 23, 2019
dabf42b
MAINT: Remove remnants of bit generators
bashtage May 23, 2019
3db5a77
BLD: Improve setup
bashtage May 23, 2019
58c0e72
Revert "MAINT: Implement API changes for randomgen-derived code"
bashtage May 24, 2019
23853d6
STY: Clean up code
bashtage May 24, 2019
9c261e6
PERF: Reorder header for philox (#34)
bashtage May 27, 2019
70d6293
MAINT: fix for dtype specification
mattip May 27, 2019
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
BUG: Ensure integer-type stream on 32bit
Ensure integer type is stream compatible on 32 bit
Fix incorrect clause end
Add integer-generator tests that check long streams
  • Loading branch information
bashtage authored and mattip committed May 20, 2019
commit b42a5ca0a076b40c612014dc540ca5f9bcf10f41
6 changes: 3 additions & 3 deletions numpy/random/common.pxd
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,6 @@ cdef object cont_broadcast_3(void *func, void *state, object size, object lock,
np.ndarray c_arr, object c_name, constraint_type c_constraint)

cdef object discrete_broadcast_iii(void *func, void *state, object size, object lock,
np.ndarray a_arr, object a_name, constraint_type a_constraint,
np.ndarray b_arr, object b_name, constraint_type b_constraint,
np.ndarray c_arr, object c_name, constraint_type c_constraint)
np.ndarray a_arr, object a_name, constraint_type a_constraint,
np.ndarray b_arr, object b_name, constraint_type b_constraint,
np.ndarray c_arr, object c_name, constraint_type c_constraint)
6 changes: 3 additions & 3 deletions numpy/random/common.pyx
Original file line number Diff line number Diff line change
Expand Up @@ -666,9 +666,9 @@ cdef object discrete_broadcast_di(void *func, void *state, object size, object l
return randoms

cdef object discrete_broadcast_iii(void *func, void *state, object size, object lock,
np.ndarray a_arr, object a_name, constraint_type a_constraint,
np.ndarray b_arr, object b_name, constraint_type b_constraint,
np.ndarray c_arr, object c_name, constraint_type c_constraint):
np.ndarray a_arr, object a_name, constraint_type a_constraint,
np.ndarray b_arr, object b_name, constraint_type b_constraint,
np.ndarray c_arr, object c_name, constraint_type c_constraint):
cdef np.ndarray randoms
cdef int64_t *randoms_data
cdef np.broadcast it
Expand Down
8 changes: 7 additions & 1 deletion numpy/random/legacy_distributions.pxd
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ from libc.stdint cimport int64_t
import numpy as np
cimport numpy as np

from .distributions cimport bitgen_t
from .distributions cimport bitgen_t, binomial_t

cdef extern from "distributions-boxmuller.h":

Expand Down Expand Up @@ -35,6 +35,12 @@ cdef extern from "distributions-boxmuller.h":
double legacy_wald(aug_bitgen_t *aug_state, double mean, double scale) nogil
double legacy_lognormal(aug_bitgen_t *aug_state, double mean, double sigma) nogil
int64_t legacy_negative_binomial(aug_bitgen_t *aug_state, double n, double p) nogil
int64_t legacy_random_hypergeometric(bitgen_t *bitgen_state, int64_t good, int64_t bad, int64_t sample) nogil
int64_t legacy_random_logseries(bitgen_t *bitgen_state, double p) nogil
int64_t legacy_random_poisson(bitgen_t *bitgen_state, double lam) nogil
int64_t legacy_random_zipf(bitgen_t *bitgen_state, double a) nogil
int64_t legacy_random_geometric(bitgen_t *bitgen_state, double p) nogil
void legacy_random_multinomial(bitgen_t *bitgen_state, long n, long *mnix, double *pix, np.npy_intp d, binomial_t *binomial) nogil
double legacy_standard_cauchy(aug_bitgen_t *state) nogil
double legacy_beta(aug_bitgen_t *aug_state, double a, double b) nogil
double legacy_f(aug_bitgen_t *aug_state, double dfnum, double dfden) nogil
Expand Down
12 8000 6 changes: 79 additions & 47 deletions numpy/random/mtrand.pyx
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,19 @@ from .legacy_distributions cimport *

np.import_array()

cdef object int64_to_long(object x):
"""
Convert int64 to long for legacy compatibility, which used long for integer
distributions
"""
cdef int64_t x64

if np.isscalar(x):
x64 = x
return <long>x64
return x.astype('l', casting='unsafe')


cdef class RandomState:
"""
RandomState(bit_generator=None)
Expand Down Expand Up @@ -3031,53 +3044,53 @@ cdef class RandomState:

# Uses a custom implementation since self._binomial is required
cdef double _dp = 0
cdef int64_t _in = 0
cdef long _in = 0
cdef bint is_scalar = True
cdef np.npy_intp i, cnt
cdef np.ndarray randoms
cdef np.int64_t *randoms_data
cdef long *randoms_data
cdef np.broadcast it

p_arr = <np.ndarray>np.PyArray_FROM_OTF(p, np.NPY_DOUBLE, np.NPY_ALIGNED)
is_scalar = is_scalar and np.PyArray_NDIM(p_arr) == 0
n_arr = <np.ndarray>np.PyArray_FROM_OTF(n, np.NPY_INT64, np.NPY_ALIGNED)
n_arr = <np.ndarray>np.PyArray_FROM_OTF(n, np.NPY_LONG, np.NPY_ALIGNED)
is_scalar = is_scalar and np.PyArray_NDIM(n_arr) == 0

if not is_scalar:
check_array_constraint(p_arr, 'p', CONS_BOUNDED_0_1)
check_array_constraint(n_arr, 'n', CONS_NON_NEGATIVE)
if size is not None:
randoms = <np.ndarray>np.empty(size, np.int64)
randoms = <np.ndarray>np.empty(size, int)
else:
it = np.PyArray_MultiIterNew2(p_arr, n_arr)
randoms = <np.ndarray>np.empty(it.shape, np.int64)
randoms = <np.ndarray>np.empty(it.shape, int)

randoms_data = <np.int64_t *>np.PyArray_DATA(randoms)
randoms_data = <long *>np.PyArray_DATA(randoms)
cnt = np.PyArray_SIZE(randoms)

it = np.PyArray_MultiIterNew3(randoms, p_arr, n_arr)
with self.lock, nogil:
for i in range(cnt):
_dp = (<double*>np.PyArray_MultiIter_DATA(it, 1))[0]
_in = (<int64_t*>np.PyArray_MultiIter_DATA(it, 2))[0]
(<int64_t*>np.PyArray_MultiIter_DATA(it, 0))[0] = random_binomial(&self._bitgen, _dp, _in, &self._binomial)
_in = (<long*>np.PyArray_MultiIter_DATA(it, 2))[0]
(<long*>np.PyArray_MultiIter_DATA(it, 0))[0] = random_binomial(&self._bitgen, _dp, _in, &self._binomial)

np.PyArray_MultiIter_NEXT(it)

return randoms

_dp = PyFloat_AsDouble(p)
_in = <int64_t>n
_in = <long>n
check_constraint(_dp, 'p', CONS_BOUNDED_0_1)
check_constraint(<double>_in, 'n', CONS_NON_NEGATIVE)

if size is None:
with self.lock:
return random_binomial(&self._bitgen, _dp, _in, &self._binomial)

randoms = <np.ndarray>np.empty(size, np.int64)
randoms = <np.ndarray>np.empty(size, int)
cnt = np.PyArray_SIZE(randoms)
randoms_data = <np.int64_t *>np.PyArray_DATA(randoms)
randoms_data = <long *>np.PyArray_DATA(randoms)

with self.lock, nogil:
for i in range(cnt):
Expand Down Expand Up @@ -3157,10 +3170,12 @@ cdef class RandomState:
... print(i, "wells drilled, probability of one success =", probability)

"""
return disc(&legacy_negative_binomial, &self._aug_state, size, self.lock, 2, 0,
n, 'n', CONS_POSITIVE,
p, 'p', CONS_BOUNDED_0_1,
0.0, '', CONS_NONE)
out = disc(&legacy_negative_binomial, &self._aug_state, size, self.lock, 2, 0,
n, 'n', CONS_POSITIVE,
p, 'p', CONS_BOUNDED_0_1,
0.0, '', CONS_NONE)
# Match historical output type
return int64_to_long(out)

def poisson(self, lam=1.0, size=None):
"""
Expand Down Expand Up @@ -3228,10 +3243,12 @@ cdef class RandomState:
>>> s = np.random.poisson(lam=(100., 500.), size=(100, 2))

"""
return disc(&random_poisson, &self._bitgen, size, self.lock, 1, 0,
lam, 'lam', CONS_POISSON,
0.0, '', CONS_NONE,
0.0, '', CONS_NONE)
out = disc(&legacy_random_poisson, &self._bitgen, size, self.lock, 1, 0,
lam, 'lam', CONS_POISSON,
0.0, '', CONS_NONE,
0.0, '', CONS_NONE)
# Match historical output type
return int64_to_long(out)

def zipf(self, a, size=None):
"""
Expand Down Expand Up @@ -3307,10 +3324,12 @@ cdef class RandomState:
>>> plt.show()

"""
return disc(&random_zipf, &self._bitgen, size, self.lock, 1, 0,
a, 'a', CONS_GT_1,
0.0, '', CONS_NONE,
0.0, '', CONS_NONE)
out = disc(&legacy_random_zipf, &self._bitgen, size, self.lock, 1, 0,
a, 'a', CONS_GT_1,
0.0, '', CONS_NONE,
0.0, '', CONS_NONE)
# Match historical output type
return int64_to_long(out)

def geometric(self, p, size=None):
"""
Expand Down Expand Up @@ -3358,10 +3377,12 @@ cdef class RandomState:
0.34889999999999999 #random

"""
return disc(&random_geometric, &self._bitgen, size, self.lock, 1, 0,
p, 'p', CONS_BOUNDED_GT_0_1,
0.0, '', CONS_NONE,
0.0, '', CONS_NONE)
out = disc(&legacy_random_geometric, &self._bitgen, size, self.lock, 1, 0,
p, 'p', CONS_BOUNDED_GT_0_1,
0.0, '', CONS_NONE,
0.0, '', CONS_NONE)
# Match historical output type
return int64_to_long(out)

def hypergeometric(self, ngood, nbad, nsample, size=None):
"""
Expand Down Expand Up @@ -3458,9 +3479,10 @@ cdef class RandomState:
cdef np.ndarray ongood, onbad, onsample
cdef int64_t lngood, lnbad, lnsample

ongood = <np.ndarray>np.PyArray_FROM_OTF(ngood, np.NPY_INT64, np.NPY_ALIGNED)
onbad = <np.ndarray>np.PyArray_FROM_OTF(nbad, np.NPY_INT64, np.NPY_ALIGNED)
onsample = <np.ndarray>np.PyArray_FROM_OTF(nsample, np.NPY_INT64, np.NPY_ALIGNED)
# This cast to long is required to ensure that the values are inbounds
ongood = <np.ndarray>np.PyArray_FROM_OTF(ngood, np.NPY_LONG, np.NPY_ALIGNED)
onbad = <np.ndarray>np.PyArray_FROM_OTF(nbad, np.NPY_LONG, np.NPY_ALIGNED)
onsample = <np.ndarray>np.PyArray_FROM_OTF(nsample, np.NPY_LONG, np.NPY_ALIGNED)

if np.PyArray_NDIM(ongood) == np.PyArray_NDIM(onbad) == np.PyArray_NDIM(onsample) == 0:

Expand All @@ -3470,17 +3492,25 @@ cdef class RandomState:

if lngood + lnbad < lnsample:
raise ValueError("ngood + nbad < nsample")
return disc(&random_hypergeometric, &self._bitgen, size, self.lock, 0, 3,
lngood, 'ngood', CONS_NON_NEGATIVE,
lnbad, 'nbad', CONS_NON_NEGATIVE,
lnsample, 'nsample', CONS_GTE_1)
out = disc(&legacy_random_hypergeometric, &self._bitgen, size, self.lock, 0, 3,
lngood, 'ngood', CONS_NON_NEGATIVE,
lnbad, 'nbad', CONS_NON_NEGATIVE,
lnsample, 'nsample', CONS_GTE_1)
# Match historical output type
return int64_to_long(out)

if np.any(np.less(np.add(ongood, onbad), onsample)):
raise ValueError("ngood + nbad < nsample")
return discrete_broadcast_iii(&random_hypergeometric, &self._bitgen, size, self.lock,
ongood, 'ngood', CONS_NON_NEGATIVE,
onbad, 'nbad', CONS_NON_NEGATIVE,
onsample, 'nsample', CONS_GTE_1)
# Convert to int64, if necessary, to use int64 infrastructure
ongood = ongood.astype(np.int64)
onbad = onbad.astype(np.int64)
onbad = onbad.astype(np.int64)
out = discrete_broadcast_iii(&legacy_random_hypergeometric,&self._bitgen, size, self.lock,
ongood, 'ngood', CONS_NON_NEGATIVE,
onbad, 'nbad', CONS_NON_NEGATIVE,
onsample, 'nsample', CONS_GTE_1)
# Match historical output type
return int64_to_long(out)

def logseries(self, p, size=None):
"""
Expand Down Expand Up @@ -3557,10 +3587,12 @@ cdef class RandomState:
>>> plt.show()

"""
return disc(&random_logseries, &self._bitgen, size, self.lock, 1, 0,
p, 'p', CONS_BOUNDED_0_1,
0.0, '', CONS_NONE,
0.0, '', CONS_NONE)
out = disc(&legacy_random_logseries, &self._bitgen, size, self.lock, 1, 0,
p, 'p', CONS_BOUNDED_0_1,
0.0, '', CONS_NONE,
0.0, '', CONS_NONE)
# Match historical output type
return int64_to_long(out)

# Multivariate distributions:
def multivariate_normal(self, mean, cov, size=None, check_valid='warn',
Expand Down Expand Up @@ -3808,8 +3840,8 @@ cdef class RandomState:
cdef np.npy_intp d, i, sz, offset
cdef np.ndarray parr, mnarr
cdef double *pix
cdef int64_t *mnix
cdef int64_t ni
cdef long *mnix
cdef long ni

d = len(pvals)
parr = <np.ndarray>np.PyArray_FROM_OTF(pvals, np.NPY_DOUBLE, np.NPY_ALIGNED)
Expand All @@ -3826,16 +3858,16 @@ cdef class RandomState:
except:
shape = tuple(size) + (d,)

multin = np.zeros(shape, dtype=np.int64)
multin = np.zeros(shape, dtype=int)
mnarr = <np.ndarray>multin
mnix = <int64_t*>np.PyArray_DATA(mnarr)
mnix = <long*>np.PyArray_DATA(mnarr)
sz = np.PyArray_SIZE(mnarr)
ni = n
check_constraint(ni, 'n', CONS_NON_NEGATIVE)
offset = 0
with self.lock, nogil:
for i in range(sz // d):
random_multinomial(&self._bitgen, ni, &mnix[offset], pix, d, &self._binomial)
legacy_random_multinomial(&self._bitgen, ni, &mnix[offset], pix, d, &self._binomial)
offset += d

return multin
Expand Down
5 changes: 2 additions & 3 deletions numpy/random/setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -84,9 +84,8 @@ def generate_libraries(ext, build_dir):
if DEBUG:
EXTRA_LINK_ARGS += ['-debug']
EXTRA_COMPILE_ARGS += ["-Zi", "/Od"]
if sys.version_info < (3, 0):
EXTRA_INCLUDE_DIRS += [join(MOD_DIR, 'src', 'common')]

LEGACY_DEFS = [('NP_RANDOM_LEGACY', '1')]
DSFMT_DEFS = [('DSFMT_MEXP', '19937')]
if USE_SSE2:
if os.name == 'nt':
Expand Down Expand Up @@ -180,7 +179,7 @@ def generate_libraries(ext, build_dir):
extra_compile_args=EXTRA_COMPILE_ARGS,
extra_link_args=EXTRA_LINK_ARGS,
depends=['mtrand.pyx'],
define_macros=defs + DSFMT_DEFS,
define_macros=defs + DSFMT_DEFS + LEGACY_DEFS,
)
return config

Expand Down
Loading
0