Skip to content

Commit 4bb8055

Browse files
Added support for non-deterministic BRNG
``` rs = mkl_random.RandomState(brng='NON_DETERMINSTIC') rs.randn(10) ``` The non-deterministic generator is True RNG, based on processor instruction RDRAND, see https://software.intel.com/en-us/mkl-developer-reference-c-basic-generators Also reorgnalized setup to use mkl_random/_version.py, and bumped the version to 1.1.0
1 parent 18846fc commit 4bb8055

File tree

7 files changed

+27
-17
lines changed

7 files changed

+27
-17
lines changed

conda-recipe/meta.yaml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
{% set version = "1.0.2" %}
1+
{% set version = "1.1.0" %}
22
{% set buildnumber = 0 %}
33

44
### If you change the iccver here, you must also set the path correctly in build.sh / bld.bat!!!
@@ -31,12 +31,12 @@ requirements:
3131
host:
3232
- python
3333
- setuptools
34-
- mkl-devel
34+
- mkl-devel >=2019.4
3535
- cython
3636
- numpy
3737
run:
3838
- python
39-
- mkl
39+
- mkl >=2019.4
4040
- {{ pin_compatible('numpy') }}
4141

4242
test:

mkl_random/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
from __future__ import division, absolute_import, print_function
2828

2929
from .mklrand import *
30+
from ._version import __version__
3031

3132
from numpy.testing.nosetester import _numpy_tester
3233
test = _numpy_tester().test

mkl_random/_version.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
__version__ = '1.1.0'
2+

mkl_random/mklrand.pyx

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ cdef extern from "randomkit.h":
7171
MRG32K3A = 6
7272
MCG59 = 7
7373
PHILOX4X32X10 = 8
74+
NONDETERM = 9
7475

7576
void irk_fill(void *buffer, size_t size, irk_state *state) nogil
7677

@@ -867,7 +868,10 @@ _brng_dict = {
867868
'R250' : R250,
868869
'MRG32K3A' : MRG32K3A,
869870
'MCG59' : MCG59,
870-
'PHILOX4X32X10' : PHILOX4X32X10
871+
'PHILOX4X32X10' : PHILOX4X32X10,
872+
'NONDETERM' : NONDETERM,
873+
'NONDETERMINISTIC' : NONDETERM,
874+
'NON_DETERMINISTIC' : NONDETERM,
871875
}
872876

873877
_brng_dict_stream_max = {
@@ -879,7 +883,8 @@ _brng_dict_stream_max = {
879883
R250: 1,
880884
MRG32K3A: 1,
881885
MCG59: 1,
882-
PHILOX4X32X10: 1
886+
PHILOX4X32X10: 1,
887+
NONDETERM: 1,
883888
}
884889

885890
def _default_fallback_brng_token_(brng):
@@ -967,8 +972,8 @@ cdef class RandomState:
967972
If `seed` is ``None``, then `RandomState` will try to read data from
968973
``/dev/urandom`` (or the Windows analogue) if available or seed from
969974
the clock otherwise.
970-
brng : {'MT19937', 'SFMT19937', 'MT2203', 'R250',
971-
'WH', 'MCG31', 'MCG59', 'MRG32K3A', 'PHILOX4X32X10'}, optional
975+
brng : {'MT19937', 'SFMT19937', 'MT2203', 'R250', 'WH', 'MCG31',
976+
'MCG59', 'MRG32K3A', 'PHILOX4X32X10', 'NONDETERM'}, optional
972977
Basic pseudo-random number generation algorithms, provided by
973978
Intel MKL. The default choice is 'MT19937' - the Mersenne Twister.
974979
@@ -1016,8 +1021,8 @@ cdef class RandomState:
10161021
seed : int or array_like, optional
10171022
Seed for `RandomState`.
10181023
Must be convertible to 32 bit unsigned integers.
1019-
brng : {'MT19937', 'SFMT19937', 'MT2203', 'R250',
1020-
'WH', 'MCG31', 'MCG59', 'MRG32K3A', 'PHILOX4X32X10'}, optional
1024+
brng : {'MT19937', 'SFMT19937', 'MT2203', 'R250', 'WH', 'MCG31',
1025+
'MCG59', 'MRG32K3A', 'PHILOX4X32X10', 'NONDETERM'}, optional
10211026
Basic pseudo-random number generation algorithms, provided by
10221027
Intel MKL. The default choice is 'MT19937' - the Mersenne Twister.
10231028

mkl_random/src/randomkit.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,8 @@ const MKL_INT brng_list[BRNG_KINDS] = {
118118
VSL_BRNG_R250,
119119
VSL_BRNG_MRG32K3A,
120120
VSL_BRNG_MCG59,
121-
VSL_BRNG_PHILOX4X32X10
121+
VSL_BRNG_PHILOX4X32X10,
122+
VSL_BRNG_NONDETERM
122123
};
123124

124125
/* Mersenne-Twister 2203 algorithm and Wichmann-Hill algorithm

mkl_random/src/randomkit.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ typedef enum {
4545
} irk_error;
4646

4747
/* if changing this, also adjust brng_list[BRNG_KINDS] in randomkit.c */
48-
#define BRNG_KINDS 9
48+
#define BRNG_KINDS 10
4949

5050
typedef enum {
5151
MT19937 = 0,
@@ -56,7 +56,8 @@ typedef enum {
5656
R250 = 5,
5757
MRG32K3A = 6,
5858
MCG59 = 7,
59-
PHILOX4X32X10 = 8
59+
PHILOX4X32X10 = 8,
60+
NONDETERM = 9
6061
} irk_brng_t;
6162

6263

setup.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,13 +28,13 @@
2828

2929
import os
3030
import sys
31+
import io
32+
import re
3133

32-
MAJOR = 1
33-
MINOR = 0
34-
MICRO = 4
35-
ISRELEASED = True
34+
with io.open('mkl_random/_version.py', 'rt', encoding='utf8') as f:
35+
version = re.search(r'__version__ = \'(.*?)\'', f.read()).group(1)
3636

37-
VERSION = '%d.%d.%d' % (MAJOR, MINOR, MICRO)
37+
VERSION = version
3838

3939
CLASSIFIERS = ""
4040

0 commit comments

Comments
 (0)