diff options
163 files changed, 11142 insertions, 26369 deletions
diff --git a/LICENSES_bundled.txt b/LICENSES_bundled.txt index 03d22521a..ea349c7ee 100644 --- a/LICENSES_bundled.txt +++ b/LICENSES_bundled.txt @@ -23,5 +23,5 @@ License: BSD derived Name: dragon4 Files: numpy/core/src/multiarray/dragon4.c -License: One of a kind +License: MIT For license text, see numpy/core/src/multiarray/dragon4.c diff --git a/benchmarks/benchmarks/bench_random.py b/benchmarks/benchmarks/bench_random.py index 621b72d3a..d9302a494 100644 --- a/benchmarks/benchmarks/bench_random.py +++ b/benchmarks/benchmarks/bench_random.py @@ -92,8 +92,7 @@ nom_size = 100000 class RNG(Benchmark): param_names = ['rng'] - params = ['DSFMT', 'PCG64', 'PCG32', 'MT19937', 'Xoshiro256', - 'Xoshiro512', 'Philox', 'ThreeFry', 'numpy'] + params = ['PCG64', 'MT19937', 'Philox', 'SFC64', 'numpy'] def setup(self, bitgen): if bitgen == 'numpy': @@ -134,8 +133,7 @@ class Bounded(Benchmark): u32 = np.uint32 u64 = np.uint64 param_names = ['rng', 'dt_max'] - params = [['DSFMT', 'PCG64', 'PCG32', 'MT19937','Xoshiro256', - 'Xoshiro512', 'Philox', 'ThreeFry', 'numpy'], + params = [['PCG64', 'MT19937', 'Philox', 'SFC64', 'numpy'], [[u8, 95], [u8, 64], # Worst case for legacy [u8, 127], # Best case for legacy diff --git a/doc/TESTS.rst.txt b/doc/TESTS.rst.txt index 45ff3ec39..14cb28df8 100644 --- a/doc/TESTS.rst.txt +++ b/doc/TESTS.rst.txt @@ -321,11 +321,10 @@ Known failures & skipping tests Sometimes you might want to skip a test or mark it as a known failure, such as when the test suite is being written before the code it's meant to test, or if a test only fails on a particular architecture. -The decorators from numpy.testing.dec can be used to do this. To skip a test, simply use ``skipif``:: - from numpy.testing import dec + import pytest @pytest.mark.skipif(SkipMyTest, reason="Skipping this test because...") def test_something(foo): @@ -334,22 +333,21 @@ To skip a test, simply use ``skipif``:: The test is marked as skipped if ``SkipMyTest`` evaluates to nonzero, and the message in verbose test output is the second argument given to ``skipif``. Similarly, a test can be marked as a known failure by -using ``knownfailureif``:: +using ``xfail``:: - from numpy.testing import dec + import pytest - @dec.knownfailureif(MyTestFails, "This test is known to fail because...") + @pytest.mark.xfail(MyTestFails, reason="This test is known to fail because...") def test_something_else(foo): ... Of course, a test can be unconditionally skipped or marked as a known -failure by passing ``True`` as the first argument to ``skipif`` or -``knownfailureif``, respectively. +failure by using ``skip`` or ``xfail`` without argument, respectively. A total of the number of skipped and known failing tests is displayed at the end of the test run. Skipped tests are marked as ``'S'`` in the test results (or ``'SKIPPED'`` for ``verbose > 1``), and known -failing tests are marked as ``'K'`` (or ``'KNOWN'`` if ``verbose > +failing tests are marked as ``'x'`` (or ``'XFAIL'`` if ``verbose > 1``). Tests on random data diff --git a/doc/neps/nep-0016-abstract-array.rst b/doc/neps/nep-0016-abstract-array.rst index 86d164d8e..7551b11b9 100644 --- a/doc/neps/nep-0016-abstract-array.rst +++ b/doc/neps/nep-0016-abstract-array.rst @@ -266,7 +266,7 @@ array, then they'll get a segfault. Right now, in the same situation, ``asarray`` will instead invoke the object's ``__array__`` method, or use the buffer interface to make a view, or pass through an array with object dtype, or raise an error, or similar. Probably none of these -outcomes are actually desireable in most cases, so maybe making it a +outcomes are actually desirable in most cases, so maybe making it a segfault instead would be OK? But it's dangerous given that we don't know how common such code is. OTOH, if we were starting from scratch then this would probably be the ideal solution. diff --git a/doc/neps/nep-0018-array-function-protocol.rst b/doc/neps/nep-0018-array-function-protocol.rst index 27a462239..fb9b838b5 100644 --- a/doc/neps/nep-0018-array-function-protocol.rst +++ b/doc/neps/nep-0018-array-function-protocol.rst @@ -642,7 +642,7 @@ layer, separating NumPy's high level API from default implementations on The downsides are that this would require an explicit opt-in from all existing code, e.g., ``import numpy.api as np``, and in the long term -would result in the maintainence of two separate NumPy APIs. Also, many +would result in the maintenance of two separate NumPy APIs. Also, many functions from ``numpy`` itself are already overloaded (but inadequately), so confusion about high vs. low level APIs in NumPy would still persist. diff --git a/doc/neps/nep-0019-rng-policy.rst b/doc/neps/nep-0019-rng-policy.rst index 815f16f8d..aa5fdc653 100644 --- a/doc/neps/nep-0019-rng-policy.rst +++ b/doc/neps/nep-0019-rng-policy.rst @@ -296,7 +296,7 @@ satisfactory subset. At least some projects used a fairly broad selection of the ``RandomState`` methods in unit tests. Downstream project owners would have been forced to modify their code to -accomodate the new PRNG subsystem. Some modifications might be simply +accommodate the new PRNG subsystem. Some modifications might be simply mechanical, but the bulk of the work would have been tedious churn for no positive improvement to the downstream project, just avoiding being broken. diff --git a/doc/neps/nep-0026-missing-data-summary.rst b/doc/neps/nep-0026-missing-data-summary.rst index e99138cdd..78fe999df 100644 --- a/doc/neps/nep-0026-missing-data-summary.rst +++ b/doc/neps/nep-0026-missing-data-summary.rst @@ -669,7 +669,7 @@ NumPy could more easily be overtaken by another project. In the case of the existing NA contribution at issue, how we resolve this disagreement represents a decision about how NumPy's -developers, contributers, and users should interact. If we create +developers, contributors, and users should interact. If we create a document describing a dispute resolution process, how do we design it so that it doesn't introduce a large burden and excessive uncertainty on developers that could prevent them from productively @@ -677,7 +677,7 @@ contributing code? If we go this route of writing up a decision process which includes such a dispute resolution mechanism, I think the meat of it should -be a roadmap that potential contributers and developers can follow +be a roadmap that potential contributors and developers can follow to gain influence over NumPy. NumPy development needs broad support beyond code contributions, and tying influence in the project to contributions seems to me like it would be a good way to encourage diff --git a/doc/neps/nep-0027-zero-rank-arrarys.rst b/doc/neps/nep-0027-zero-rank-arrarys.rst index d932bb609..430397235 100644 --- a/doc/neps/nep-0027-zero-rank-arrarys.rst +++ b/doc/neps/nep-0027-zero-rank-arrarys.rst @@ -51,7 +51,7 @@ However there are some important differences: * Array scalars are immutable * Array scalars have different python type for different data types - + Motivation for Array Scalars ---------------------------- @@ -62,7 +62,7 @@ we will try to explain why it is necessary to have three different ways to represent a number. There were several numpy-discussion threads: - + * `rank-0 arrays`_ in a 2002 mailing list thread. * Thoughts about zero dimensional arrays vs Python scalars in a `2005 mailing list thread`_] @@ -71,7 +71,7 @@ It has been suggested several times that NumPy just use rank-0 arrays to represent scalar quantities in all case. Pros and cons of converting rank-0 arrays to scalars were summarized as follows: -- Pros: +- Pros: - Some cases when Python expects an integer (the most dramatic is when slicing and indexing a sequence: @@ -94,15 +94,15 @@ arrays to scalars were summarized as follows: files (though this could also be done by a special case in the pickling code for arrays) -- Cons: +- Cons: - It is difficult to write generic code because scalars do not have the same methods and attributes as arrays. (such as ``.type`` or ``.shape``). Also Python scalars have - different numeric behavior as well. + different numeric behavior as well. - - This results in a special-case checking that is not - pleasant. Fundamentally it lets the user believe that + - This results in a special-case checking that is not + pleasant. Fundamentally it lets the user believe that somehow multidimensional homoegeneous arrays are something like Python lists (which except for Object arrays they are not). @@ -117,7 +117,7 @@ The Need for Zero-Rank Arrays ----------------------------- Once the idea to use zero-rank arrays to represent scalars was rejected, it was -natural to consider whether zero-rank arrays can be eliminated alltogether. +natural to consider whether zero-rank arrays can be eliminated altogether. However there are some important use cases where zero-rank arrays cannot be replaced by array scalars. See also `A case for rank-0 arrays`_ from February 2006. @@ -164,12 +164,12 @@ Alexander started a `Jan 2006 discussion`_ on scipy-dev with the following proposal: ... it may be reasonable to allow ``a[...]``. This way - ellipsis can be interpereted as any number of ``:`` s including zero. + ellipsis can be interpereted as any number of ``:`` s including zero. Another subscript operation that makes sense for scalars would be - ``a[...,newaxis]`` or even ``a[{newaxis, }* ..., {newaxis,}*]``, where - ``{newaxis,}*`` stands for any number of comma-separated newaxis tokens. + ``a[...,newaxis]`` or even ``a[{newaxis, }* ..., {newaxis,}*]``, where + ``{newaxis,}*`` stands for any number of comma-separated newaxis tokens. This will allow one to use ellipsis in generic code that would work on - any numpy type. + any numpy type. Francesc Altet supported the idea of ``[...]`` on zero-rank arrays and `suggested`_ that ``[()]`` be supported as well. @@ -204,7 +204,7 @@ remains on what should be the type of the result - zero rank ndarray or ``x.dtyp 1 Since most if not all numpy function automatically convert zero-rank arrays to scalars on return, there is no reason for -``[...]`` and ``[()]`` operations to be different. +``[...]`` and ``[()]`` operations to be different. See SVN changeset 1864 (which became git commit `9024ff0`_) for implementation of ``x[...]`` and ``x[()]`` returning numpy scalars. @@ -234,7 +234,7 @@ Currently all indexing on zero-rank arrays is implemented in a special ``if (nd that the changes do not affect any existing usage (except, the usage that relies on exceptions). On the other hand part of motivation for these changes was to make behavior of ndarrays more uniform and this should allow to -eliminate ``if (nd == 0)`` checks alltogether. +eliminate ``if (nd == 0)`` checks altogether. Copyright --------- diff --git a/doc/release/1.14.4-notes.rst b/doc/release/1.14.4-notes.rst index 174094c1c..3fb94383b 100644 --- a/doc/release/1.14.4-notes.rst +++ b/doc/release/1.14.4-notes.rst @@ -19,7 +19,7 @@ values are now correct. Note that NumPy will error on import if it detects incorrect float32 `dot` results. This problem has been seen on the Mac when working in the Anaconda -enviroment and is due to a subtle interaction between MKL and PyQt5. It is not +environment and is due to a subtle interaction between MKL and PyQt5. It is not strictly a NumPy problem, but it is best that users be aware of it. See the gh-8577 NumPy issue for more information. diff --git a/doc/release/1.17.0-notes.rst b/doc/release/1.17.0-notes.rst index 58d38cba9..95de953b5 100644 --- a/doc/release/1.17.0-notes.rst +++ b/doc/release/1.17.0-notes.rst @@ -43,6 +43,13 @@ from python. This deprecation should not affect many users since arrays created in such a manner are very rare in practice and only available through the NumPy C-API. +`numpy.nonzero` should no longer be called on 0d arrays +------------------------------------------------------- +The behavior of nonzero on 0d arrays was surprising, making uses of it almost +always incorrect. If the old behavior was intended, it can be preserved without +a warning by using ``nonzero(atleast_1d(arr))`` instead of ``nonzero(arr)``. +In a future release, it is most likely this will raise a `ValueError`. + Future Changes ============== @@ -134,6 +141,12 @@ input. Note that we generally recommend the scipy implementation over the numpy one: it is a proper ufunc written in C, and more than an order of magnitude faster. +``np.can_cast`` no longer assumes all unsafe casting is allowed +--------------------------------------------------------------- +Previously, ``can_cast`` returned `True` for almost all inputs for +``casting='unsafe'``, even for cases where casting was not possible, such as +from a structured dtype to a regular one. This has been fixed, making it +more consistent with actual casting using, e.g., the ``.astype`` method. C API changes ============= diff --git a/doc/source/dev/development_environment.rst b/doc/source/dev/development_environment.rst index 445ce3204..bc491b711 100644 --- a/doc/source/dev/development_environment.rst +++ b/doc/source/dev/development_environment.rst @@ -147,9 +147,9 @@ That also takes extra arguments, like ``--pdb`` which drops you into the Python debugger when a test fails or an exception is raised. Running tests with `tox`_ is also supported. For example, to build NumPy and -run the test suite with Python 3.4, use:: +run the test suite with Python 3.7, use:: - $ tox -e py34 + $ tox -e py37 For more extensive information, see :ref:`testing-guidelines` diff --git a/doc/source/reference/arrays.dtypes.rst b/doc/source/reference/arrays.dtypes.rst index b55feb247..ab743a8ee 100644 --- a/doc/source/reference/arrays.dtypes.rst +++ b/doc/source/reference/arrays.dtypes.rst @@ -538,6 +538,7 @@ Attributes providing additional information: dtype.isnative dtype.descr dtype.alignment + dtype.base Methods diff --git a/doc/source/reference/c-api.types-and-structures.rst b/doc/source/reference/c-api.types-and-structures.rst index b72d9f902..a716b5a06 100644 --- a/doc/source/reference/c-api.types-and-structures.rst +++ b/doc/source/reference/c-api.types-and-structures.rst @@ -57,8 +57,8 @@ types are place holders that allow the array scalars to fit into a hierarchy of actual Python types. -PyArray_Type ------------- +PyArray_Type and PyArrayObject +------------------------------ .. c:var:: PyArray_Type @@ -74,7 +74,7 @@ PyArray_Type subclasses) will have this structure. For future compatibility, these structure members should normally be accessed using the provided macros. If you need a shorter name, then you can make use - of :c:type:`NPY_AO` which is defined to be equivalent to + of :c:type:`NPY_AO` (deprecated) which is defined to be equivalent to :c:type:`PyArrayObject`. .. code-block:: c @@ -91,7 +91,7 @@ PyArray_Type PyObject *weakreflist; } PyArrayObject; -.. c:macro: PyArrayObject.PyObject_HEAD +.. c:macro:: PyArrayObject.PyObject_HEAD This is needed by all Python objects. It consists of (at least) a reference count member ( ``ob_refcnt`` ) and a pointer to the @@ -130,14 +130,16 @@ PyArray_Type .. c:member:: PyObject *PyArrayObject.base This member is used to hold a pointer to another Python object that - is related to this array. There are two use cases: 1) If this array - does not own its own memory, then base points to the Python object - that owns it (perhaps another array object), 2) If this array has - the (deprecated) :c:data:`NPY_ARRAY_UPDATEIFCOPY` or - :c:data:NPY_ARRAY_WRITEBACKIFCOPY`: flag set, then this array is - a working copy of a "misbehaved" array. When - ``PyArray_ResolveWritebackIfCopy`` is called, the array pointed to by base - will be updated with the contents of this array. + is related to this array. There are two use cases: + + - If this array does not own its own memory, then base points to the + Python object that owns it (perhaps another array object) + - If this array has the (deprecated) :c:data:`NPY_ARRAY_UPDATEIFCOPY` or + :c:data:`NPY_ARRAY_WRITEBACKIFCOPY` flag set, then this array is a working + copy of a "misbehaved" array. + + When ``PyArray_ResolveWritebackIfCopy`` is called, the array pointed to + by base will be updated with the contents of this array. .. c:member:: PyArray_Descr *PyArrayObject.descr @@ -163,8 +165,8 @@ PyArray_Type weakref module). -PyArrayDescr_Type ------------------ +PyArrayDescr_Type and PyArray_Descr +----------------------------------- .. c:var:: PyArrayDescr_Type @@ -253,11 +255,13 @@ PyArrayDescr_Type .. c:var:: NPY_ITEM_REFCOUNT - .. c:var:: NPY_ITEM_HASOBJECT - Indicates that items of this data-type must be reference counted (using :c:func:`Py_INCREF` and :c:func:`Py_DECREF` ). + .. c:var:: NPY_ITEM_HASOBJECT + + Same as :c:data:`NPY_ITEM_REFCOUNT`. + .. c:var:: NPY_LIST_PICKLE Indicates arrays of this data-type must be converted to a list @@ -676,25 +680,28 @@ PyArrayDescr_Type The :c:data:`PyArray_Type` typeobject implements many of the features of -Python objects including the tp_as_number, tp_as_sequence, -tp_as_mapping, and tp_as_buffer interfaces. The rich comparison -(tp_richcompare) is also used along with new-style attribute lookup -for methods (tp_methods) and properties (tp_getset). The -:c:data:`PyArray_Type` can also be sub-typed. +:c:type:`Python objects <PyTypeObject>` including the :c:member:`tp_as_number +<PyTypeObject.tp_as_number>`, :c:member:`tp_as_sequence +<PyTypeObject.tp_as_sequence>`, :c:member:`tp_as_mapping +<PyTypeObject.tp_as_mapping>`, and :c:member:`tp_as_buffer +<PyTypeObject.tp_as_buffer>` interfaces. The :c:type:`rich comparison +<richcmpfunc>`) is also used along with new-style attribute lookup for +member (:c:member:`tp_members <PyTypeObject.tp_members>`) and properties +(:c:member:`tp_getset <PyTypeObject.tp_getset>`). +The :c:data:`PyArray_Type` can also be sub-typed. .. tip:: - The tp_as_number methods use a generic approach to call whatever - function has been registered for handling the operation. The - function PyNumeric_SetOps(..) can be used to register functions to - handle particular mathematical operations (for all arrays). When - the umath module is imported, it sets the numeric operations for - all arrays to the corresponding ufuncs. The tp_str and tp_repr - methods can also be altered using PyString_SetStringFunction(...). + The ``tp_as_number`` methods use a generic approach to call whatever + function has been registered for handling the operation. When the + ``_multiarray_umath module`` is imported, it sets the numeric operations + for all arrays to the corresponding ufuncs. This choice can be changed with + :c:func:`PyUFunc_ReplaceLoopBySignature` The ``tp_str`` and ``tp_repr`` + methods can also be altered using :c:func:`PyArray_SetStringFunction`. -PyUFunc_Type ------------- +PyUFunc_Type and PyUFuncObject +------------------------------ .. c:var:: PyUFunc_Type @@ -786,8 +793,8 @@ PyUFunc_Type the identity for this operation. It is only used for a reduce-like call on an empty array. - .. c:member:: void PyUFuncObject.functions(char** args, npy_intp* dims, - npy_intp* steps, void* extradata) + .. c:member:: void PyUFuncObject.functions( \ + char** args, npy_intp* dims, npy_intp* steps, void* extradata) An array of function pointers --- one for each data type supported by the ufunc. This is the vector loop that is called @@ -932,8 +939,8 @@ PyUFunc_Type - :c:data:`UFUNC_CORE_DIM_SIZE_INFERRED` if the dim size will be determined from the operands and not from a :ref:`frozen <frozen>` signature -PyArrayIter_Type ----------------- +PyArrayIter_Type and PyArrayIterObject +-------------------------------------- .. c:var:: PyArrayIter_Type @@ -1042,8 +1049,8 @@ with it through the use of the macros :c:func:`PyArray_ITER_NEXT` (it), :c:type:`PyArrayIterObject *`. -PyArrayMultiIter_Type ---------------------- +PyArrayMultiIter_Type and PyArrayMultiIterObject +------------------------------------------------ .. c:var:: PyArrayMultiIter_Type @@ -1104,8 +1111,8 @@ PyArrayMultiIter_Type arrays to be broadcast together. On return, the iterators are adjusted for broadcasting. -PyArrayNeighborhoodIter_Type ----------------------------- +PyArrayNeighborhoodIter_Type and PyArrayNeighborhoodIterObject +-------------------------------------------------------------- .. c:var:: PyArrayNeighborhoodIter_Type @@ -1118,8 +1125,33 @@ PyArrayNeighborhoodIter_Type :c:data:`PyArrayNeighborhoodIter_Type` is the :c:type:`PyArrayNeighborhoodIterObject`. -PyArrayFlags_Type ------------------ + .. code-block:: c + + typedef struct { + PyObject_HEAD + int nd_m1; + npy_intp index, size; + npy_intp coordinates[NPY_MAXDIMS] + npy_intp dims_m1[NPY_MAXDIMS]; + npy_intp strides[NPY_MAXDIMS]; + npy_intp backstrides[NPY_MAXDIMS]; + npy_intp factors[NPY_MAXDIMS]; + PyArrayObject *ao; + char *dataptr; + npy_bool contiguous; + npy_intp bounds[NPY_MAXDIMS][2]; + npy_intp limits[NPY_MAXDIMS][2]; + npy_intp limits_sizes[NPY_MAXDIMS]; + npy_iter_get_dataptr_t translate; + npy_intp nd; + npy_intp dimensions[NPY_MAXDIMS]; + PyArrayIterObject* _internal_iter; + char* constant; + int mode; + } PyArrayNeighborhoodIterObject; + +PyArrayFlags_Type and PyArrayFlagsObject +---------------------------------------- .. c:var:: PyArrayFlags_Type @@ -1129,6 +1161,16 @@ PyArrayFlags_Type attributes or by accessing them as if the object were a dictionary with the flag names as entries. +.. c:type:: PyArrayFlagsObject + + .. code-block:: c + + typedef struct PyArrayFlagsObject { + PyObject_HEAD + PyObject *arr; + int flags; + } PyArrayFlagsObject; + ScalarArrayTypes ---------------- diff --git a/doc/source/reference/random/bit_generators/bitgenerators.rst b/doc/source/reference/random/bit_generators/bitgenerators.rst new file mode 100644 index 000000000..1474f7dac --- /dev/null +++ b/doc/source/reference/random/bit_generators/bitgenerators.rst @@ -0,0 +1,11 @@ +:orphan: + +BitGenerator +------------ + +.. currentmodule:: numpy.random.bit_generator + +.. autosummary:: + :toctree: generated/ + + BitGenerator diff --git a/doc/source/reference/random/bit_generators/dsfmt.rst b/doc/source/reference/random/bit_generators/dsfmt.rst deleted file mode 100644 index e7c6dbb31..000000000 --- a/doc/source/reference/random/bit_generators/dsfmt.rst +++ /dev/null @@ -1,36 +0,0 @@ -Double SIMD Mersenne Twister (dSFMT) ------------------------------------- - -.. module:: numpy.random.dsfmt - -.. currentmodule:: numpy.random.dsfmt - - -.. autoclass:: DSFMT - :exclude-members: - -Seeding and State -================= - -.. autosummary:: - :toctree: generated/ - - ~DSFMT.seed - ~DSFMT.state - -Parallel generation -=================== -.. autosummary:: - :toctree: generated/ - - ~DSFMT.jumped - -Extending -========= -.. autosummary:: - :toctree: generated/ - - ~DSFMT.cffi - ~DSFMT.ctypes - - diff --git a/doc/source/reference/random/bit_generators/index.rst b/doc/source/reference/random/bit_generators/index.rst index 3a9294bfb..4540f60d9 100644 --- a/doc/source/reference/random/bit_generators/index.rst +++ b/doc/source/reference/random/bit_generators/index.rst @@ -1,10 +1,10 @@ .. _bit_generator: +.. currentmodule:: numpy.random + Bit Generators -------------- -.. currentmodule:: numpy.random - The random values produced by :class:`~Generator` orignate in a BitGenerator. The BitGenerators do not directly provide random numbers and only contains methods used for seeding, getting or @@ -12,18 +12,60 @@ setting the state, jumping or advancing the state, and for accessing low-level wrappers for consumption by code that can efficiently access the functions provided, e.g., `numba <https://numba.pydata.org>`_. -Stable RNGs -=========== +Supported BitGenerators +======================= + +The included BitGenerators are: + +* MT19937 - The standard Python BitGenerator. Adds a `~mt19937.MT19937.jumped` + function that returns a new generator with state as-if ``2**128`` draws have + been made. +* PCG-64 - Fast generator that support many parallel streams and + can be advanced by an arbitrary amount. See the documentation for + :meth:`~.PCG64.advance`. PCG-64 has a period of + :math:`2^{128}`. See the `PCG author's page`_ for more details about + this class of PRNG. +* Philox - a counter-based generator capable of being advanced an + arbitrary number of steps or generating independent streams. See the + `Random123`_ page for more details about this class of bit generators. + +.. _`PCG author's page`: http://www.pcg-random.org/ +.. _`Random123`: https://www.deshawresearch.com/resources_random123.html + .. toctree:: :maxdepth: 1 - DSFMT <dsfmt> + BitGenerator <bitgenerators> MT19937 <mt19937> - PCG32 <pcg32> PCG64 <pcg64> Philox <philox> - ThreeFry <threefry> - Xoshiro256** <xoshiro256> - Xoshiro512** <xoshiro512> + SFC64 <sfc64> + +Seeding and Entropy +------------------- + +A BitGenerator provides a stream of random values. In order to generate +reproducableis streams, BitGenerators support setting their initial state via a +seed. But how best to seed the BitGenerator? On first impulse one would like to +do something like ``[bg(i) for i in range(12)]`` to obtain 12 non-correlated, +independent BitGenerators. However using a highly correlated set of seeds could +generate BitGenerators that are correlated or overlap within a few samples. + +NumPy uses a `SeedSequence` class to mix the seed in a reproducible way that +introduces the necessary entropy to produce independent and largely non- +overlapping streams. Small seeds are unable to fill the complete range of +initializaiton states, and lead to biases among an ensemble of small-seed +runs. For many cases, that doesn't matter. If you just want to hold things in +place while you debug something, biases aren't a concern. For actual +simulations whose results you care about, let ``SeedSequence(None)`` do its +thing and then log/print the `SeedSequence.entropy` for repeatable +`BitGenerator` streams. + +.. autosummary:: + :toctree: generated/ + bit_generator.ISeedSequence + bit_generator.ISpawnableSeedSequence + SeedSequence + bit_generator.SeedlessSeedSequence diff --git a/doc/source/reference/random/bit_generators/mt19937.rst b/doc/source/reference/random/bit_generators/mt19937.rst index f5843ccf0..25ba1d7b5 100644 --- a/doc/source/reference/random/bit_generators/mt19937.rst +++ b/doc/source/reference/random/bit_generators/mt19937.rst @@ -8,13 +8,12 @@ Mersenne Twister (MT19937) .. autoclass:: MT19937 :exclude-members: -Seeding and State -================= +State +===== .. autosummary:: :toctree: generated/ - ~MT19937.seed ~MT19937.state Parallel generation diff --git a/doc/source/reference/random/bit_generators/pcg32.rst b/doc/source/reference/random/bit_generators/pcg32.rst deleted file mode 100644 index faaccaf9b..000000000 --- a/doc/source/reference/random/bit_generators/pcg32.rst +++ /dev/null @@ -1,34 +0,0 @@ -Parallel Congruent Generator (32-bit, PCG32) --------------------------------------------- - -.. module:: numpy.random.pcg32 - -.. currentmodule:: numpy.random.pcg32 - -.. autoclass:: PCG32 - :exclude-members: - -Seeding and State -================= - -.. autosummary:: - :toctree: generated/ - - ~PCG32.seed - ~PCG32.state - -Parallel generation -=================== -.. autosummary:: - :toctree: generated/ - - ~PCG32.advance - ~PCG32.jumped - -Extending -========= -.. autosummary:: - :toctree: generated/ - - ~PCG32.cffi - ~PCG32.ctypes diff --git a/doc/source/reference/random/bit_generators/pcg64.rst b/doc/source/reference/random/bit_generators/pcg64.rst index fa719cea4..7aef1e0dd 100644 --- a/doc/source/reference/random/bit_generators/pcg64.rst +++ b/doc/source/reference/random/bit_generators/pcg64.rst @@ -8,13 +8,12 @@ Parallel Congruent Generator (64-bit, PCG64) .. autoclass:: PCG64 :exclude-members: -Seeding and State -================= +State +===== .. autosummary:: :toctree: generated/ - ~PCG64.seed ~PCG64.state Parallel generation diff --git a/doc/source/reference/random/bit_generators/philox.rst b/doc/source/reference/random/bit_generators/philox.rst index 7ef451d4b..5e581e094 100644 --- a/doc/source/reference/random/bit_generators/philox.rst +++ b/doc/source/reference/random/bit_generators/philox.rst @@ -8,13 +8,12 @@ Philox Counter-based RNG .. autoclass:: Philox :exclude-members: -Seeding and State -================= +State +===== .. autosummary:: :toctree: generated/ - ~Philox.seed ~Philox.state Parallel generation diff --git a/doc/source/reference/random/bit_generators/sfc64.rst b/doc/source/reference/random/bit_generators/sfc64.rst new file mode 100644 index 000000000..dc03820ae --- /dev/null +++ b/doc/source/reference/random/bit_generators/sfc64.rst @@ -0,0 +1,28 @@ +SFC64 Small Fast Chaotic PRNG +----------------------------- + +.. module:: numpy.random.sfc64 + +.. currentmodule:: numpy.random.sfc64 + +.. autoclass:: SFC64 + :exclude-members: + +State +===== + +.. autosummary:: + :toctree: generated/ + + ~SFC64.state + +Extending +========= +.. autosummary:: + :toctree: generated/ + + ~SFC64.cffi + ~SFC64.ctypes + + + diff --git a/doc/source/reference/random/bit_generators/threefry.rst b/doc/source/reference/random/bit_generators/threefry.rst deleted file mode 100644 index 951108d72..000000000 --- a/doc/source/reference/random/bit_generators/threefry.rst +++ /dev/null @@ -1,36 +0,0 @@ -ThreeFry Counter-based RNG --------------------------- - -.. module:: numpy.random.threefry - -.. currentmodule:: numpy.random.threefry - -.. autoclass:: ThreeFry - :exclude-members: - -Seeding and State -================= - -.. autosummary:: - :toctree: generated/ - - ~ThreeFry.seed - ~ThreeFry.state - -Parallel generation -=================== -.. autosummary:: - :toctree: generated/ - - ~ThreeFry.advance - ~ThreeFry.jumped - -Extending -========= -.. autosummary:: - :toctree: generated/ - - ~ThreeFry.cffi - ~ThreeFry.ctypes - - diff --git a/doc/source/reference/random/bit_generators/xoshiro256.rst b/doc/source/reference/random/bit_generators/xoshiro256.rst deleted file mode 100644 index fedc61b33..000000000 --- a/doc/source/reference/random/bit_generators/xoshiro256.rst +++ /dev/null @@ -1,35 +0,0 @@ -Xoshiro256** ------------- - -.. module:: numpy.random.xoshiro256 - -.. currentmodule:: numpy.random.xoshiro256 - -.. autoclass:: Xoshiro256 - :exclude-members: - -Seeding and State -================= - -.. autosummary:: - :toctree: generated/ - - ~Xoshiro256.seed - ~Xoshiro256.state - -Parallel generation -=================== -.. autosummary:: - :toctree: generated/ - - ~Xoshiro256.jumped - -Extending -========= -.. autosummary:: - :toctree: generated/ - - ~Xoshiro256.cffi - ~Xoshiro256.ctypes - - diff --git a/doc/source/reference/random/bit_generators/xoshiro512.rst b/doc/source/reference/random/bit_generators/xoshiro512.rst deleted file mode 100644 index e39346cd6..000000000 --- a/doc/source/reference/random/bit_generators/xoshiro512.rst +++ /dev/null @@ -1,35 +0,0 @@ -Xoshiro512** ------------- - -.. module:: numpy.random.xoshiro512 - -.. currentmodule:: numpy.random.xoshiro512 - -.. autoclass:: Xoshiro512 - :exclude-members: - -Seeding and State -================= - -.. autosummary:: - :toctree: generated/ - - ~Xoshiro512.seed - ~Xoshiro512.state - -Parallel generation -=================== -.. autosummary:: - :toctree: generated/ - - ~Xoshiro512.jumped - -Extending -========= -.. autosummary:: - :toctree: generated/ - - ~Xoshiro512.cffi - ~Xoshiro512.ctypes - - diff --git a/doc/source/reference/random/extending.rst b/doc/source/reference/random/extending.rst index 28db4021c..22f9cb7e4 100644 --- a/doc/source/reference/random/extending.rst +++ b/doc/source/reference/random/extending.rst @@ -18,11 +18,11 @@ provided by ``ctypes.next_double``. .. code-block:: python - from numpy.random import Xoshiro256 + from numpy.random import PCG64 import numpy as np import numba as nb - x = Xoshiro256() + x = PCG64() f = x.ctypes.next_double s = x.ctypes.state state_addr = x.ctypes.state_address @@ -50,7 +50,7 @@ provided by ``ctypes.next_double``. # Must use state address not state with numba normalsj(1, state_addr) %timeit normalsj(1000000, state_addr) - print('1,000,000 Box-Muller (numba/Xoshiro256) randoms') + print('1,000,000 Box-Muller (numba/PCG64) randoms') %timeit np.random.standard_normal(1000000) print('1,000,000 Box-Muller (NumPy) randoms') @@ -66,7 +66,7 @@ Cython ====== Cython can be used to unpack the ``PyCapsule`` provided by a BitGenerator. -This example uses `~xoshiro256.Xoshiro256` and +This example uses `~pcg64.PCG64` and ``random_gauss_zig``, the Ziggurat-based generator for normals, to fill an array. The usual caveats for writing high-performance code using Cython -- removing bounds checks and wrap around, providing array alignment information @@ -80,7 +80,7 @@ removing bounds checks and wrap around, providing array alignment information from cpython.pycapsule cimport PyCapsule_IsValid, PyCapsule_GetPointer from numpy.random.common cimport * from numpy.random.distributions cimport random_gauss_zig - from numpy.random import Xoshiro256 + from numpy.random import PCG64 @cython.boundscheck(False) @@ -91,7 +91,7 @@ removing bounds checks and wrap around, providing array alignment information cdef const char *capsule_name = "BitGenerator" cdef double[::1] random_values - x = Xoshiro256() + x = PCG64() capsule = x.capsule if not PyCapsule_IsValid(capsule, capsule_name): raise ValueError("Invalid pointer to anon_func_state") @@ -117,7 +117,7 @@ RNG structure. cdef const char *capsule_name = "BitGenerator" cdef double[::1] random_values - x = Xoshiro256() + x = PCG64() capsule = x.capsule # Optional check that the capsule if from a BitGenerator if not PyCapsule_IsValid(capsule, capsule_name): diff --git a/doc/source/reference/random/generator.rst b/doc/source/reference/random/generator.rst index 8b086e901..22bce2e6c 100644 --- a/doc/source/reference/random/generator.rst +++ b/doc/source/reference/random/generator.rst @@ -8,7 +8,7 @@ a wide range of distributions, and served as a replacement for the two is that ``Generator`` relies on an additional BitGenerator to manage state and generate the random bits, which are then transformed into random values from useful distributions. The default BitGenerator used by -``Generator`` is :class:`~xoshiro256.Xoshiro256`. The BitGenerator +``Generator`` is `~PCG64`. The BitGenerator can be changed by passing an instantized BitGenerator to ``Generator``. diff --git a/doc/source/reference/random/index.rst b/doc/source/reference/random/index.rst index 3159f0e1c..f32853e7c 100644 --- a/doc/source/reference/random/index.rst +++ b/doc/source/reference/random/index.rst @@ -9,6 +9,10 @@ Numpy's random number routines produce pseudo random numbers using combinations of a `BitGenerator` to create sequences and a `Generator` to use those sequences to sample from different statistical distributions: +* SeedSequence: Objects that provide entropy for the initial state of a + BitGenerator. A good SeedSequence will provide initializations across the + entire range of possible states for the BitGenerator, otherwise biases may + creep into the generated bit streams. * BitGenerators: Objects that generate random numbers. These are typically unsigned integer words filled with sequences of either 32 or 64 random bits. * Generators: Objects that transform sequences of random bits from a @@ -30,8 +34,8 @@ instance's methods are imported into the numpy.random namespace, see Quick Start ----------- -By default, `Generator` uses normals provided by `xoshiro256.Xoshiro256` -which will be faster than the legacy methods in `RandomState` +By default, `Generator` uses normals provided by `PCG64` which will be +statistically more reliable than the legacy methods in `RandomState` .. code-block:: python @@ -40,7 +44,7 @@ which will be faster than the legacy methods in `RandomState` random.standard_normal() `Generator` can be used as a direct replacement for `~RandomState`, although -the random values are generated by `~xoshiro256.Xoshiro256`. The +the random values are generated by `~PCG64`. The `Generator` holds an instance of a BitGenerator. It is accessible as ``gen.bit_generator``. @@ -52,28 +56,37 @@ the random values are generated by `~xoshiro256.Xoshiro256`. The rg.standard_normal() rg.bit_generator - -Seeds can be passed to any of the BitGenerators. Here `mt19937.MT19937` is used -and is the wrapped with a `~.Generator`. - +Seeds can be passed to any of the BitGenerators. The provided value is mixed +via `~.SeedSequence` to spread a possible sequence of seeds across a wider +range of initialization states for the BitGenerator. Here `~.PCG64` is used and +is wrapped with a `~.Generator`. .. code-block:: python - from numpy.random import Generator, MT19937 - rg = Generator(MT19937(12345)) + from numpy.random import Generator, PCG64 + rg = Generator(PCG64(12345)) rg.standard_normal() - Introduction ------------ RandomGen takes a different approach to producing random numbers from the -`RandomState` object. Random number generation is separated into two -components, a bit generator and a random generator. +`RandomState` object. Random number generation is separated into three +components, a seed sequence, a bit generator and a random generator. -The bit generator has a limited set of responsibilities. It manages state +The `BitGenerator` has a limited set of responsibilities. It manages state and provides functions to produce random doubles and random unsigned 32- and -64-bit values. The bit generator also handles all seeding which varies with -different bit generators. +64-bit values. + +The `SeedSequence` takes a seed and provides the initial state for the +`BitGenerator`. Since consecutive seeds can cause bad effects when comparing +`BitGenerator` streams, the `SeedSequence` uses current best-practice methods +to spread the initial state out. However small seeds may still be unable to +reach all possible initialization states, which can cause biases among an +ensemble of small-seed runs. For many cases, that doesn't matter. If you just +want to hold things in place while you debug something, biases aren't a +concern. For actual simulations whose results you care about, let +``SeedSequence(None)`` do its thing and then log/print the +`SeedSequence.entropy` for repeatable `BitGenerator` streams. The `random generator <Generator>` takes the bit generator-provided stream and transforms them into more useful @@ -86,15 +99,15 @@ The `Generator` is the user-facing object that is nearly identical to the sole argument. Note that the BitGenerator must be instantiated. .. code-block:: python - from numpy.random import Generator, MT19937 - rg = Generator(MT19937()) + from numpy.random import Generator, PCG64 + rg = Generator(PCG64()) rg.random() Seed information is directly passed to the bit generator. .. code-block:: python - rg = Generator(MT19937(12345)) + rg = Generator(PCG64(12345)) rg.random() What's New or Different @@ -120,8 +133,8 @@ What's New or Different source of randomness that is used in cryptographic applications (e.g., ``/dev/urandom`` on Unix). * All BitGenerators can produce doubles, uint64s and uint32s via CTypes - (`~xoshiro256.Xoshiro256.ctypes`) and CFFI - (:meth:`~xoshiro256.Xoshiro256.cffi`). This allows the bit generators to + (`~PCG64.ctypes`) and CFFI + (:meth:`~PCG64.cffi`). This allows the bit generators to be used in numba. * The bit generators can be used in downstream projects via :ref:`Cython <randomgen_cython>`. @@ -146,47 +159,14 @@ one of two ways: * :ref:`independent-streams` * :ref:`jump-and-advance` -Supported BitGenerators ------------------------ -The included BitGenerators are: - -* MT19937 - The standard Python BitGenerator. Produces identical results to - Python using the same seed/state. Adds a `~mt19937.MT19937.jumped` function - that returns a new generator with state as-if ``2**128`` draws have been made. -* dSFMT - SSE2 enabled versions of the MT19937 generator. Theoretically - the same, but with a different state and so it is not possible to produce a - sequence identical to MT19937. Supports ``jumped`` and so can - be used in parallel applications. See the `dSFMT authors' page`_. -* Xorshiro256** and Xorshiro512** - The most recently introduced XOR, - shift, and rotate generator. Supports ``jumped`` and so can be used in - parallel applications. See the documentation for - `~xoshiro256.Xoshirt256.jumped` for details. More information about these bit - generators is available at the `xorshift, xoroshiro and xoshiro authors' - page`_. -* ThreeFry and Philox - counter-based generators capable of being advanced an - arbitrary number of steps or generating independent streams. See the - `Random123`_ page for more details about this class of bit generators. - -.. _`dSFMT authors' page`: http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/SFMT/ -.. _`PCG author's page`: http://www.pcg-random.org/ -.. _`xorshift, xoroshiro and xoshiro authors' page`: http://xoroshiro.di.unimi.it/ -.. _`Random123`: https://www.deshawresearch.com/resources_random123.html - -Generator ---------- +Concepts +-------- .. toctree:: :maxdepth: 1 generator legacy mtrand <legacy> - -BitGenerators -------------- - -.. toctree:: - :maxdepth: 1 - - BitGenerators <bit_generators/index> + BitGenerators, SeedSequences <bit_generators/index> Features -------- diff --git a/doc/source/reference/random/multithreading.rst b/doc/source/reference/random/multithreading.rst index 7ce90af99..849d64d4e 100644 --- a/doc/source/reference/random/multithreading.rst +++ b/doc/source/reference/random/multithreading.rst @@ -10,21 +10,21 @@ these requirements. This example makes use of Python 3 :mod:`concurrent.futures` to fill an array using multiple threads. Threads are long-lived so that repeated calls do not require any additional overheads from thread creation. The underlying -BitGenerator is `Xoshiro256` which is fast, has a long period and supports -using `Xoshiro256.jumped` to return a new generator while advancing the +BitGenerator is `PCG64` which is fast, has a long period and supports +using `PCG64.jumped` to return a new generator while advancing the state. The random numbers generated are reproducible in the sense that the same seed will produce the same outputs. .. code-block:: ipython - from numpy.random import Generator, Xoshiro256 + from numpy.random import Generator, PCG64 import multiprocessing import concurrent.futures import numpy as np class MultithreadedRNG(object): def __init__(self, n, seed=None, threads=None): - rg = Xoshiro256(seed) + rg = PCG64(seed) if threads is None: threads = multiprocessing.cpu_count() self.threads = threads @@ -89,7 +89,7 @@ The single threaded call directly uses the BitGenerator. .. code-block:: ipython In [5]: values = np.empty(10000000) - ...: rg = Generator(Xoshiro256()) + ...: rg = Generator(PCG64()) ...: %timeit rg.standard_normal(out=values) 99.6 ms ± 222 µs per loop (mean ± std. dev. of 7 runs, 10 loops each) @@ -100,7 +100,7 @@ that does not use an existing array due to array creation overhead. .. code-block:: ipython - In [6]: rg = Generator(Xoshiro256()) + In [6]: rg = Generator(PCG64()) ...: %timeit rg.standard_normal(10000000) 125 ms ± 309 µs per loop (mean ± std. dev. of 7 runs, 10 loops each) diff --git a/doc/source/reference/random/new-or-different.rst b/doc/source/reference/random/new-or-different.rst index a6de9c8dc..11638824a 100644 --- a/doc/source/reference/random/new-or-different.rst +++ b/doc/source/reference/random/new-or-different.rst @@ -58,8 +58,7 @@ And in more detail: This replaces both ``randint`` and the deprecated ``random_integers``. * The Box-Muller used to produce NumPy's normals is no longer available. * All bit generators can produce doubles, uint64s and - uint32s via CTypes (`~.xoshiro256.Xoshiro256. - ctypes`) and CFFI (`~.xoshiro256.Xoshiro256.cffi`). + uint32s via CTypes (`~PCG64.ctypes`) and CFFI (`~PCG64.cffi`). This allows these bit generators to be used in numba. * The bit generators can be used in downstream projects via Cython. @@ -67,9 +66,9 @@ And in more detail: .. ipython:: python - from numpy.random import Generator, Xoshiro256 + from numpy.random import Generator, PCG64 import numpy.random - rg = Generator(Xoshiro256()) + rg = Generator(PCG64()) %timeit rg.standard_normal(100000) %timeit numpy.random.standard_normal(100000) @@ -94,9 +93,8 @@ And in more detail: .. ipython:: python - rg.bit_generator.seed(0) + rg = Generator(PCG64(0)) rg.random(3, dtype='d') - rg.bit_generator.seed(0) rg.random(3, dtype='f') * Optional ``out`` argument that allows existing arrays to be filled for diff --git a/doc/source/reference/random/parallel.rst b/doc/source/reference/random/parallel.rst index ffbaea62b..36e173ef2 100644 --- a/doc/source/reference/random/parallel.rst +++ b/doc/source/reference/random/parallel.rst @@ -64,8 +64,6 @@ are listed below. +-----------------+-------------------------+-------------------------+-------------------------+ | BitGenerator | Period | Jump Size | Bits | +=================+=========================+=========================+=========================+ -| DSFMT | :math:`2^{19937}` | :math:`2^{128}` | 53 | -+-----------------+-------------------------+-------------------------+-------------------------+ | MT19937 | :math:`2^{19937}` | :math:`2^{128}` | 32 | +-----------------+-------------------------+-------------------------+-------------------------+ | PCG64 | :math:`2^{128}` | :math:`2^{64}` | 64 | @@ -74,10 +72,6 @@ are listed below. +-----------------+-------------------------+-------------------------+-------------------------+ | ThreeFry | :math:`2^{256}` | :math:`2^{128}` | 64 | +-----------------+-------------------------+-------------------------+-------------------------+ -| Xoshiro256** | :math:`2^{256}` | :math:`2^{128}` | 64 | -+-----------------+-------------------------+-------------------------+-------------------------+ -| Xoshiro512** | :math:`2^{512}` | :math:`2^{256}` | 64 | -+-----------------+-------------------------+-------------------------+-------------------------+ ``jumped`` can be used to produce long blocks which should be long enough to not overlap. @@ -85,13 +79,13 @@ overlap. .. code-block:: python from numpy.random.entropy import random_entropy - from numpy.random import Xoshiro256 + from numpy.random import PCG64 entropy = random_entropy(2).astype(np.uint64) # 64-bit number as a seed seed = entropy[0] * 2**32 + entropy[1] blocked_rng = [] - rng = Xoshiro256(seed) + rng = PCG64(seed) for i in range(10): blocked_rng.append(rng.jumped(i)) diff --git a/doc/source/reference/random/performance.py b/doc/source/reference/random/performance.py index 54165226e..ed8745078 100644 --- a/doc/source/reference/random/performance.py +++ b/doc/source/reference/random/performance.py @@ -4,10 +4,9 @@ from timeit import repeat import pandas as pd import numpy as np -from numpy.random import MT19937, DSFMT, ThreeFry, PCG64, Philox, \ - Xoshiro256, Xoshiro512 +from numpy.random import MT19937, PCG64, Philox, SFC64 -PRNGS = [DSFMT, MT19937, PCG64, Philox, ThreeFry, Xoshiro256, Xoshiro512] +PRNGS = [MT19937, PCG64, Philox, SFC64] funcs = OrderedDict() integers = 'integers(0, 2**{bits},size=1000000, dtype="uint{bits}")' diff --git a/doc/source/reference/random/performance.rst b/doc/source/reference/random/performance.rst index 07867ee07..3e5c20e3a 100644 --- a/doc/source/reference/random/performance.rst +++ b/doc/source/reference/random/performance.rst @@ -7,13 +7,7 @@ Performance Recommendation ************** -The recommended generator for single use is :class:`~.xoshiro256.Xoshiro256`. -The recommended generator for use in large-scale parallel applications is -:class:`~.xoshiro512.Xoshiro512` where the `jumped` method is used to advance -the state. For very large scale applications -- requiring 1,000+ independent -streams -- is the best choice. For very large scale applications -- requiring -1,000+ independent streams, :class:`~pcg64.PCG64` or :class:`~.philox.Philox` -are the best choices. +The recommended generator for single use is :class:`~PCG64`. Timings ******* @@ -23,8 +17,7 @@ specific distribution. The original :class:`~mt19937.MT19937` generator is much slower since it requires 2 32-bit values to equal the output of the faster generators. -Integer performance has a similar ordering although `dSFMT` is slower since -it generates 53-bit floating point values rather than integer values. +Integer performance has a similar ordering. The pattern is similar for other, more complex generators. The normal performance of the legacy :class:`~mtrand.RandomState` generator is much @@ -36,18 +29,18 @@ The column labeled MT19973 is used the same 32-bit generator as :class:`~generator.Generator`. .. csv-table:: - :header: ,Xoshiro256**,Xoshiro512**,DSFMT,PCG64,MT19937,Philox,RandomState,ThreeFry - :widths: 14,14,14,14,14,14,14,14,14 + :header: ,PCG64,MT19937,Philox,RandomState + :widths: 14,14,14,14,14 - 32-bit Unsigned Ints,2.6,2.9,3.5,3.2,3.3,4.8,3.2,7.6 - 64-bit Unsigned Ints,3.3,4.3,5.7,4.8,5.7,6.9,5.7,12.8 - Uniforms,3.4,4.0,3.2,5.0,7.3,8.0,7.3,12.8 - Normals,7.9,9.0,11.8,11.3,13.0,13.7,34.4,18.1 - Exponentials,4.7,5.2,7.4,6.7,7.9,8.6,40.3,14.7 - Gammas,29.1,27.5,28.5,30.6,34.2,35.1,58.1,47.6 - Binomials,22.7,23.1,21.1,25.7,27.7,28.4,25.9,32.1 - Laplaces,38.5,38.1,36.9,41.1,44.5,45.4,46.9,50.2 - Poissons,46.9,50.9,46.4,58.1,68.4,70.2,86.0,88.2 + 32-bit Unsigned Ints,3.2,3.3,4.8,3.2 + 64-bit Unsigned Ints,4.8,5.7,6.9,5.7 + Uniforms,5.0,7.3,8.0,7.3 + Normals,11.3,13.0,13.7,34.4 + Exponentials,6.7,7.9,8.6,40.3 + Gammas,30.6,34.2,35.1,58.1 + Binomials,25.7,27.7,28.4,25.9 + Laplaces,41.1,44.5,45.4,46.9 + Poissons,58.1,68.4,70.2,86.0 The next table presents the performance in percentage relative to values @@ -55,19 +48,19 @@ generated by the legagy generator, `RandomState(MT19937())`. The overall performance was computed using a geometric mean. .. csv-table:: - :header: ,Xoshiro256**,Xoshiro256**,DSFMT,PCG64,MT19937,Philox,ThreeFry - :widths: 14,14,14,14,14,14,14,14 - - 32-bit Unsigned Ints,124,113,93,100,99,67,43 - 64-bit Unsigned Ints,174,133,100,118,100,83,44 - Uniforms,212,181,229,147,100,91,57 - Normals,438,382,291,304,264,252,190 - Exponentials,851,770,547,601,512,467,275 - Gammas,200,212,204,190,170,166,122 - Binomials,114,112,123,101,93,91,81 - Laplaces,122,123,127,114,105,103,93 - Poissons,183,169,185,148,126,123,98 - Overall,212,194,180,167,145,131,93 + :header: ,PCG64,MT19937,Philox + :widths: 14,14,14,14 + + 32-bit Unsigned Ints,100,99,67 + 64-bit Unsigned Ints,118,100,83 + Uniforms,147,100,91 + Normals,304,264,252 + Exponentials,601,512,467 + Gammas,190,170,166 + Binomials,101,93,91 + Laplaces,114,105,103 + Poissons,148,126,123 + Overall,167,145,131 .. note:: @@ -88,16 +81,16 @@ across tables. 64-bit Linux ~~~~~~~~~~~~ -=================== ======= ========= ======= ======== ========== ============ -Distribution DSFMT MT19937 PCG64 Philox ThreeFry Xoshiro256 -=================== ======= ========= ======= ======== ========== ============ -32-bit Unsigned Int 99.3 100 113.9 72.1 48.3 117.1 -64-bit Unsigned Int 105.7 100 143.3 89.7 48.1 161.7 -Uniform 222.1 100 181.5 90.8 59.9 204.7 -Exponential 110.8 100 145.5 92.5 55.0 177.1 -Normal 113.2 100 121.4 98.3 71.9 162.0 -**Overall** 123.9 100 139.3 88.2 56.0 161.9 -=================== ======= ========= ======= ======== ========== ============ +=================== ========= ======= ======== +Distribution MT19937 PCG64 Philox +=================== ========= ======= ======== +32-bit Unsigned Int 100 113.9 72.1 +64-bit Unsigned Int 100 143.3 89.7 +Uniform 100 181.5 90.8 +Exponential 100 145.5 92.5 +Normal 100 121.4 98.3 +**Overall** 100 139.3 88.2 +=================== ========= ======= ======== 64-bit Windows @@ -105,39 +98,38 @@ Normal 113.2 100 121.4 98.3 71.9 1 The performance on 64-bit Linux and 64-bit Windows is broadly similar. -=================== ======= ========= ======= ======== ========== ============ -Distribution DSFMT MT19937 PCG64 Philox ThreeFry Xoshiro256 -=================== ======= ========= ======= ======== ========== ============ -32-bit Unsigned Int 122.8 100 134.9 44.1 72.3 133.1 -64-bit Unsigned Int 130.4 100 162.7 41.0 77.7 142.3 -Uniform 273.2 100 200.0 44.8 84.6 175.8 -Exponential 135.0 100 167.8 47.4 84.5 166.9 -Normal 115.3 100 135.6 60.3 93.6 169.6 -**Overall** 146.7 100 158.4 47.1 82.2 156.5 -=================== ======= ========= ======= ======== ========== ============ +=================== ========= ======= ======== +Distribution MT19937 PCG64 Philox +=================== ========= ======= ======== +32-bit Unsigned Int 100 134.9 44.1 +64-bit Unsigned Int 100 162.7 41.0 +Uniform 100 200.0 44.8 +Exponential 100 167.8 47.4 +Normal 100 135.6 60.3 +**Overall** 100 158.4 47.1 +=================== ========= ======= ======== 32-bit Windows ~~~~~~~~~~~~~~ The performance of 64-bit generators on 32-bit Windows is much lower than on 64-bit -operating systems due to register width. DSFMT uses SSE2 when available, and so is less -affected by the size of the operating system's register. MT19937, the generator that has been -in NumPy since 2005, operates on 32-bit integers and so is close to DSFMT. - -=================== ======= ========= ======= ======== ========== ============ -Distribution DSFMT MT19937 PCG64 Philox ThreeFry Xoshiro256 -=================== ======= ========= ======= ======== ========== ============ -32-bit Unsigned Int 110.9 100 30.6 28.1 29.2 74.4 -64-bit Unsigned Int 104.7 100 24.2 23.7 22.7 72.7 -Uniform 247.0 100 26.7 28.4 27.8 78.8 -Exponential 110.1 100 32.1 32.6 30.5 89.6 -Normal 107.2 100 36.3 37.5 35.2 93.0 -**Overall** 127.6 100 29.7 29.7 28.8 81.3 -=================== ======= ========= ======= ======== ========== ============ +operating systems due to register width. MT19937, the generator that has been +in NumPy since 2005, operates on 32-bit integers. + +=================== ========= ======= ======== +Distribution MT19937 PCG64 Philox +=================== ========= ======= ======== +32-bit Unsigned Int 100 30.6 28.1 +64-bit Unsigned Int 100 24.2 23.7 +Uniform 100 26.7 28.4 +Exponential 100 32.1 32.6 +Normal 100 36.3 37.5 +**Overall** 100 29.7 29.7 +=================== ========= ======= ======== .. note:: - Linux timings used Ubuntu 18.04 and GCC 7.4. Windows timings were made on Windows 10 - using Microsoft C/C++ Optimizing Compiler Version 19 (Visual Studio 2015). All timings - were produced on a i5-3570 processor. + Linux timings used Ubuntu 18.04 and GCC 7.4. Windows timings were made on + Windows 10 using Microsoft C/C++ Optimizing Compiler Version 19 (Visual + Studio 2015). All timings were produced on a i5-3570 processor. diff --git a/doc/source/reference/routines.char.rst b/doc/source/reference/routines.char.rst index 3f4efdfc5..513f975e7 100644 --- a/doc/source/reference/routines.char.rst +++ b/doc/source/reference/routines.char.rst @@ -1,11 +1,13 @@ String operations ***************** -.. currentmodule:: numpy.core.defchararray +.. currentmodule:: numpy.char -This module provides a set of vectorized string operations for arrays -of type `numpy.string_` or `numpy.unicode_`. All of them are based on -the string methods in the Python standard library. +.. module:: numpy.char + +The `numpy.char` module provides a set of vectorized string +operations for arrays of type `numpy.string_` or `numpy.unicode_`. +All of them are based on the string methods in the Python standard library. String operations ----------------- diff --git a/doc/source/reference/ufuncs.rst b/doc/source/reference/ufuncs.rst index c71c8c9a7..d00e88b34 100644 --- a/doc/source/reference/ufuncs.rst +++ b/doc/source/reference/ufuncs.rst @@ -118,7 +118,7 @@ all output arrays will be passed to the :obj:`~class.__array_prepare__` and the highest :obj:`~class.__array_priority__` of any other input to the universal function. The default :obj:`~class.__array_priority__` of the ndarray is 0.0, and the default :obj:`~class.__array_priority__` of a subtype -is 1.0. Matrices have :obj:`~class.__array_priority__` equal to 10.0. +is 0.0. Matrices have :obj:`~class.__array_priority__` equal to 10.0. All ufuncs can also take output arguments. If necessary, output will be cast to the data-type(s) of the provided output array(s). If a class diff --git a/numpy/core/_add_newdocs.py b/numpy/core/_add_newdocs.py index 9f2b67a6b..84339ef23 100644 --- a/numpy/core/_add_newdocs.py +++ b/numpy/core/_add_newdocs.py @@ -936,11 +936,11 @@ add_newdoc('numpy.core.multiarray', 'empty', -------- >>> np.empty([2, 2]) array([[ -9.74499359e+001, 6.69583040e-309], - [ 2.13182611e-314, 3.06959433e-309]]) #random + [ 2.13182611e-314, 3.06959433e-309]]) #uninitialized >>> np.empty([2, 2], dtype=int) array([[-1073741821, -1067949133], - [ 496041986, 19249760]]) #random + [ 496041986, 19249760]]) #uninitialized """) @@ -1041,9 +1041,14 @@ add_newdoc('numpy.core.multiarray', 'fromstring', elements is also ignored. .. deprecated:: 1.14 - If this argument is not provided, `fromstring` falls back on the - behaviour of `frombuffer` after encoding unicode string inputs as - either utf-8 (python 3), or the default encoding (python 2). + Passing ``sep=''``, the default, is deprecated since it will + trigger the deprecated binary mode of this function. This mode + interprets `string` as binary bytes, rather than ASCII text with + decimal numbers, an operation which is better spelt + ``frombuffer(string, dtype, count)``. If `string` contains unicode + text, the binary mode of `fromstring` will first encode it into + bytes using either utf-8 (python 3) or the default encoding + (python 2), neither of which produce sane results. Returns ------- @@ -2699,10 +2704,15 @@ add_newdoc('numpy.core.multiarray', 'ndarray', ('astype', Notes ----- - Starting in NumPy 1.9, astype method now returns an error if the string - dtype to cast to is not long enough in 'safe' casting mode to hold the max - value of integer/float array that is being casted. Previously the casting - was allowed even if the result was truncated. + .. versionchanged:: 1.17.0 + Casting between a simple data type and a structured one is possible only + for "unsafe" casting. Casting to multiple fields is allowed, but + casting from multiple fields is not. + + .. versionchanged:: 1.9.0 + Casting from numeric to string types in 'safe' casting mode requires + that the string dtype length is long enough to store the max + integer/float value converted. Raises ------ @@ -5385,6 +5395,17 @@ add_newdoc('numpy.core.multiarray', 'dtype', ('alignment', More information is available in the C-API section of the manual. + Examples + -------- + + >>> x = np.dtype('i4') + >>> x.alignment + 4 + + >>> x = np.dtype(float) + >>> x.alignment + 8 + """)) add_newdoc('numpy.core.multiarray', 'dtype', ('byteorder', @@ -5431,7 +5452,16 @@ add_newdoc('numpy.core.multiarray', 'dtype', ('byteorder', """)) add_newdoc('numpy.core.multiarray', 'dtype', ('char', - """A unique character code for each of the 21 different built-in types.""")) + """A unique character code for each of the 21 different built-in types. + + Examples + -------- + + >>> x = np.dtype(float) + >>> x.char + 'd' + + """)) add_newdoc('numpy.core.multiarray', 'dtype', ('descr', """ @@ -5442,6 +5472,18 @@ add_newdoc('numpy.core.multiarray', 'dtype', ('descr', Warning: This attribute exists specifically for `__array_interface__`, and is not a datatype description compatible with `np.dtype`. + + Examples + -------- + + >>> x = np.dtype(float) + >>> x.descr + [('', '<f8')] + + >>> dt = np.dtype([('name', np.str_, 16), ('grades', np.float64, (2,))]) + >>> dt.descr + [('name', '<U16'), ('grades', '<f8', (2,))] + """)) add_newdoc('numpy.core.multiarray', 'dtype', ('fields', @@ -5482,6 +5524,18 @@ add_newdoc('numpy.core.multiarray', 'dtype', ('flags', of these flags is in C-API documentation; they are largely useful for user-defined data-types. + The following example demonstrates that operations on this particular + dtype requires Python C-API. + + Examples + -------- + + >>> x = np.dtype([('a', np.int32, 8), ('b', np.float64, 6)]) + >>> x.flags + 16 + >>> np.core.multiarray.NEEDS_PYAPI + 16 + """)) add_newdoc('numpy.core.multiarray', 'dtype', ('hasobject', @@ -5539,6 +5593,7 @@ add_newdoc('numpy.core.multiarray', 'dtype', ('isalignedstruct', field alignment. This flag is sticky, so when combining multiple structs together, it is preserved and produces new dtypes which are also aligned. + """)) add_newdoc('numpy.core.multiarray', 'dtype', ('itemsize', @@ -5548,6 +5603,19 @@ add_newdoc('numpy.core.multiarray', 'dtype', ('itemsize', For 18 of the 21 types this number is fixed by the data-type. For the flexible data-types, this number can be anything. + Examples + -------- + + >>> arr = np.array([[1, 2], [3, 4]]) + >>> arr.dtype + dtype('int64') + >>> arr.itemsize + 8 + + >>> dt = np.dtype([('name', np.str_, 16), ('grades', np.float64, (2,))]) + >>> dt.itemsize + 80 + """)) add_newdoc('numpy.core.multiarray', 'dtype', ('kind', @@ -5568,6 +5636,19 @@ add_newdoc('numpy.core.multiarray', 'dtype', ('kind', V void = ====================== + Examples + -------- + + >>> dt = np.dtype('i4') + >>> dt.kind + 'i' + >>> dt = np.dtype('f8') + >>> dt.kind + 'f' + >>> dt = np.dtype([('field1', 'f8')]) + >>> dt.kind + 'V' + """)) add_newdoc('numpy.core.multiarray', 'dtype', ('name', @@ -5576,6 +5657,16 @@ add_newdoc('numpy.core.multiarray', 'dtype', ('name', Un-sized flexible data-type objects do not have this attribute. + Examples + -------- + + >>> x = np.dtype(float) + >>> x.name + 'float64' + >>> x = np.dtype([('a', np.int32, 8), ('b', np.float64, 6)]) + >>> x.name + 'void640' + """)) add_newdoc('numpy.core.multiarray', 'dtype', ('names', @@ -5599,6 +5690,17 @@ add_newdoc('numpy.core.multiarray', 'dtype', ('num', These are roughly ordered from least-to-most precision. + Examples + -------- + + >>> dt = np.dtype(str) + >>> dt.num + 19 + + >>> dt = np.dtype(float) + >>> dt.num + 12 + """)) add_newdoc('numpy.core.multiarray', 'dtype', ('shape', @@ -5606,6 +5708,17 @@ add_newdoc('numpy.core.multiarray', 'dtype', ('shape', Shape tuple of the sub-array if this data type describes a sub-array, and ``()`` otherwise. + Examples + -------- + + >>> dt = np.dtype(('i4', 4)) + >>> dt.shape + (4,) + + >>> dt = np.dtype(('i4', (2, 3))) + >>> dt.shape + (2, 3) + """)) add_newdoc('numpy.core.multiarray', 'dtype', ('ndim', @@ -5615,6 +5728,20 @@ add_newdoc('numpy.core.multiarray', 'dtype', ('ndim', .. versionadded:: 1.13.0 + Examples + -------- + >>> x = np.dtype(float) + >>> x.ndim + 0 + + >>> x = np.dtype((float, 8)) + >>> x.ndim + 1 + + >>> x = np.dtype(('i4', (3, 4))) + >>> x.ndim + 2 + """)) add_newdoc('numpy.core.multiarray', 'dtype', ('str', diff --git a/numpy/core/_internal.py b/numpy/core/_internal.py index ab5a64a1a..c70718cb6 100644 --- a/numpy/core/_internal.py +++ b/numpy/core/_internal.py @@ -146,7 +146,7 @@ def _reconstruct(subtype, shape, dtype): # format_re was originally from numarray by J. Todd Miller format_re = re.compile(br'(?P<order1>[<>|=]?)' - br'(?P<repeats> *[(]?[ ,0-9L]*[)]? *)' + br'(?P<repeats> *[(]?[ ,0-9]*[)]? *)' br'(?P<order2>[<>|=]?)' br'(?P<dtype>[A-Za-z0-9.?]*(?:\[[a-zA-Z0-9,.]+\])?)') sep_re = re.compile(br'\s*,\s*') diff --git a/numpy/core/code_generators/ufunc_docstrings.py b/numpy/core/code_generators/ufunc_docstrings.py index 2a5646bd7..fb418aadc 100644 --- a/numpy/core/code_generators/ufunc_docstrings.py +++ b/numpy/core/code_generators/ufunc_docstrings.py @@ -2601,8 +2601,8 @@ add_newdoc('numpy.core.umath', 'matmul', For other keyword-only arguments, see the :ref:`ufunc docs <ufuncs.kwargs>`. - ..versionadded:: 1.16 - Now handles ufunc kwargs + .. versionadded:: 1.16 + Now handles ufunc kwargs Returns ------- diff --git a/numpy/core/fromnumeric.py b/numpy/core/fromnumeric.py index f262f8552..08f17aae4 100644 --- a/numpy/core/fromnumeric.py +++ b/numpy/core/fromnumeric.py @@ -1764,17 +1764,17 @@ def nonzero(a): Returns a tuple of arrays, one for each dimension of `a`, containing the indices of the non-zero elements in that dimension. The values in `a` are always tested and returned in - row-major, C-style order. The corresponding non-zero - values can be obtained with:: + row-major, C-style order. - a[nonzero(a)] + To group the indices by element, rather than dimension, use `argwhere`, + which returns a row for each non-zero element. - To group the indices by element, rather than dimension, use:: - - transpose(nonzero(a)) + .. note:: + When called on a zero-d array or scalar, ``nonzero(a)`` is treated + as ``nonzero(atleast1d(a))``. - The result of this is always a 2-D array, with a row for - each non-zero element. + ..deprecated:: 1.17.0 + Use `atleast1d` explicitly if this behavior is deliberate. Parameters ---------- @@ -1795,11 +1795,12 @@ def nonzero(a): Equivalent ndarray method. count_nonzero : Counts the number of non-zero elements in the input array. - + Notes ----- - To obtain the non-zero values, it is recommended to use ``x[x.astype(bool)]`` - which will correctly handle 0-d arrays. + While the nonzero values can be obtained with ``a[nonzero(a)]``, it is + recommended to use ``x[x.astype(bool)]`` or ``x[x != 0]`` instead, which + will correctly handle 0-d arrays. Examples -------- diff --git a/numpy/core/include/numpy/ndarrayobject.h b/numpy/core/include/numpy/ndarrayobject.h index 45f008b1d..2cc7ced35 100644 --- a/numpy/core/include/numpy/ndarrayobject.h +++ b/numpy/core/include/numpy/ndarrayobject.h @@ -233,10 +233,10 @@ static NPY_INLINE int NPY_TITLE_KEY_check(PyObject *key, PyObject *value) { PyObject *title; - if (PyTuple_GET_SIZE(value) != 3) { + if (PyTuple_Size(value) != 3) { return 0; } - title = PyTuple_GET_ITEM(value, 2); + title = PyTuple_GetItem(value, 2); if (key == title) { return 1; } diff --git a/numpy/core/multiarray.py b/numpy/core/multiarray.py index 8006dd9b5..4f2c5b78e 100644 --- a/numpy/core/multiarray.py +++ b/numpy/core/multiarray.py @@ -128,11 +128,11 @@ def empty_like(prototype, dtype=None, order=None, subok=None, shape=None): -------- >>> a = ([1,2,3], [4,5,6]) # a is array-like >>> np.empty_like(a) - array([[-1073741821, -1073741821, 3], # random + array([[-1073741821, -1073741821, 3], # uninitialized [ 0, 0, -1073741821]]) >>> a = np.array([[1., 2., 3.],[4.,5.,6.]]) >>> np.empty_like(a) - array([[ -2.00000715e+000, 1.48219694e-323, -2.00000572e+000], # random + array([[ -2.00000715e+000, 1.48219694e-323, -2.00000572e+000], # uninitialized [ 4.38791518e-305, -2.00000715e+000, 4.17269252e-309]]) """ @@ -496,11 +496,15 @@ def can_cast(from_, to, casting=None): Notes ----- - Starting in NumPy 1.9, can_cast function now returns False in 'safe' - casting mode for integer/float dtype and string dtype if the string dtype - length is not long enough to store the max integer/float value converted - to a string. Previously can_cast in 'safe' mode returned True for - integer/float dtype and a string dtype of any length. + .. versionchanged:: 1.17.0 + Casting between a simple data type and a structured one is possible only + for "unsafe" casting. Casting to multiple fields is allowed, but + casting from multiple fields is not. + + .. versionchanged:: 1.9.0 + Casting from numeric to string types in 'safe' casting mode requires + that the string dtype length is long enough to store the maximum + integer/float value converted. See also -------- diff --git a/numpy/core/src/multiarray/convert_datatype.c b/numpy/core/src/multiarray/convert_datatype.c index c59979e75..025c66013 100644 --- a/numpy/core/src/multiarray/convert_datatype.c +++ b/numpy/core/src/multiarray/convert_datatype.c @@ -679,15 +679,82 @@ NPY_NO_EXPORT npy_bool PyArray_CanCastTypeTo(PyArray_Descr *from, PyArray_Descr *to, NPY_CASTING casting) { - /* Fast path for unsafe casts or basic types */ - if (casting == NPY_UNSAFE_CASTING || - (NPY_LIKELY(from->type_num < NPY_OBJECT) && - NPY_LIKELY(from->type_num == to->type_num) && - NPY_LIKELY(from->byteorder == to->byteorder))) { + /* + * Fast paths for equality and for basic types. + */ + if (from == to || + ((NPY_LIKELY(PyDataType_ISNUMBER(from)) || + PyDataType_ISOBJECT(from)) && + NPY_LIKELY(from->type_num == to->type_num) && + NPY_LIKELY(from->byteorder == to->byteorder))) { return 1; } - /* Equivalent types can be cast with any value of 'casting' */ - else if (PyArray_EquivTypenums(from->type_num, to->type_num)) { + /* + * Cases with subarrays and fields need special treatment. + */ + if (PyDataType_HASFIELDS(from)) { + /* + * If from is a structured data type, then it can be cast to a simple + * non-object one only for unsafe casting *and* if it has a single + * field; recurse just in case the single field is itself structured. + */ + if (!PyDataType_HASFIELDS(to) && !PyDataType_ISOBJECT(to)) { + if (casting == NPY_UNSAFE_CASTING && + PyDict_Size(from->fields) == 1) { + Py_ssize_t ppos = 0; + PyObject *tuple; + PyArray_Descr *field; + PyDict_Next(from->fields, &ppos, NULL, &tuple); + field = (PyArray_Descr *)PyTuple_GET_ITEM(tuple, 0); + /* + * For a subarray, we need to get the underlying type; + * since we already are casting unsafely, we can ignore + * the shape. + */ + if (PyDataType_HASSUBARRAY(field)) { + field = field->subarray->base; + } + return PyArray_CanCastTypeTo(field, to, casting); + } + else { + return 0; + } + } + /* + * Casting from one structured data type to another depends on the fields; + * we pass that case on to the EquivTypenums case below. + * + * TODO: move that part up here? Need to check whether equivalent type + * numbers is an addition constraint that is needed. + * + * TODO/FIXME: For now, always allow structured to structured for unsafe + * casting; this is not correct, but needed since the treatment in can_cast + * below got out of sync with astype; see gh-13667. + */ + if (casting == NPY_UNSAFE_CASTING) { + return 1; + } + } + else if (PyDataType_HASFIELDS(to)) { + /* + * If "from" is a simple data type and "to" has fields, then only + * unsafe casting works (and that works always, even to multiple fields). + */ + return casting == NPY_UNSAFE_CASTING; + } + /* + * Everything else we consider castable for unsafe for now. + * FIXME: ensure what we do here is consistent with "astype", + * i.e., deal more correctly with subarrays and user-defined dtype. + */ + else if (casting == NPY_UNSAFE_CASTING) { + return 1; + } + /* + * Equivalent simple types can be cast with any value of 'casting', but + * we need to be careful about structured to structured. + */ + if (PyArray_EquivTypenums(from->type_num, to->type_num)) { /* For complicated case, use EquivTypes (for now) */ if (PyTypeNum_ISUSERDEF(from->type_num) || from->subarray != NULL) { @@ -1700,46 +1767,22 @@ dtype_kind_to_simplified_ordering(char kind) } } -/*NUMPY_API - * Produces the result type of a bunch of inputs, using the UFunc - * type promotion rules. Use this function when you have a set of - * input arrays, and need to determine an output array dtype. - * - * If all the inputs are scalars (have 0 dimensions) or the maximum "kind" - * of the scalars is greater than the maximum "kind" of the arrays, does - * a regular type promotion. - * - * Otherwise, does a type promotion on the MinScalarType - * of all the inputs. Data types passed directly are treated as array - * types. - * + +/* + * Determine if there is a mix of scalars and arrays/dtypes. + * If this is the case, the scalars should be handled as the minimum type + * capable of holding the value when the maximum "category" of the scalars + * surpasses the maximum "category" of the arrays/dtypes. + * If the scalars are of a lower or same category as the arrays, they may be + * demoted to a lower type within their category (the lowest type they can + * be cast to safely according to scalar casting rules). */ -NPY_NO_EXPORT PyArray_Descr * -PyArray_ResultType(npy_intp narrs, PyArrayObject **arr, - npy_intp ndtypes, PyArray_Descr **dtypes) +NPY_NO_EXPORT int +should_use_min_scalar(npy_intp narrs, PyArrayObject **arr, + npy_intp ndtypes, PyArray_Descr **dtypes) { - npy_intp i; - int use_min_scalar; + int use_min_scalar = 0; - /* If there's just one type, pass it through */ - if (narrs + ndtypes == 1) { - PyArray_Descr *ret = NULL; - if (narrs == 1) { - ret = PyArray_DESCR(arr[0]); - } - else { - ret = dtypes[0]; - } - Py_INCREF(ret); - return ret; - } - - /* - * Determine if there are any scalars, and if so, whether - * the maximum "kind" of the scalars surpasses the maximum - * "kind" of the arrays - */ - use_min_scalar = 0; if (narrs > 0) { int all_scalars; int max_scalar_kind = -1; @@ -1748,7 +1791,7 @@ PyArray_ResultType(npy_intp narrs, PyArrayObject **arr, all_scalars = (ndtypes > 0) ? 0 : 1; /* Compute the maximum "kinds" and whether everything is scalar */ - for (i = 0; i < narrs; ++i) { + for (npy_intp i = 0; i < narrs; ++i) { if (PyArray_NDIM(arr[i]) == 0) { int kind = dtype_kind_to_simplified_ordering( PyArray_DESCR(arr[i])->kind); @@ -1769,7 +1812,7 @@ PyArray_ResultType(npy_intp narrs, PyArrayObject **arr, * If the max scalar kind is bigger than the max array kind, * finish computing the max array kind */ - for (i = 0; i < ndtypes; ++i) { + for (npy_intp i = 0; i < ndtypes; ++i) { int kind = dtype_kind_to_simplified_ordering(dtypes[i]->kind); if (kind > max_array_kind) { max_array_kind = kind; @@ -1781,6 +1824,44 @@ PyArray_ResultType(npy_intp narrs, PyArrayObject **arr, use_min_scalar = 1; } } + return use_min_scalar; +} + + +/*NUMPY_API + * Produces the result type of a bunch of inputs, using the UFunc + * type promotion rules. Use this function when you have a set of + * input arrays, and need to determine an output array dtype. + * + * If all the inputs are scalars (have 0 dimensions) or the maximum "kind" + * of the scalars is greater than the maximum "kind" of the arrays, does + * a regular type promotion. + * + * Otherwise, does a type promotion on the MinScalarType + * of all the inputs. Data types passed directly are treated as array + * types. + * + */ +NPY_NO_EXPORT PyArray_Descr * +PyArray_ResultType(npy_intp narrs, PyArrayObject **arr, + npy_intp ndtypes, PyArray_Descr **dtypes) +{ + npy_intp i; + + /* If there's just one type, pass it through */ + if (narrs + ndtypes == 1) { + PyArray_Descr *ret = NULL; + if (narrs == 1) { + ret = PyArray_DESCR(arr[0]); + } + else { + ret = dtypes[0]; + } + Py_INCREF(ret); + return ret; + } + + int use_min_scalar = should_use_min_scalar(narrs, arr, ndtypes, dtypes); /* Loop through all the types, promoting them */ if (!use_min_scalar) { diff --git a/numpy/core/src/multiarray/convert_datatype.h b/numpy/core/src/multiarray/convert_datatype.h index 653557161..72867ead8 100644 --- a/numpy/core/src/multiarray/convert_datatype.h +++ b/numpy/core/src/multiarray/convert_datatype.h @@ -18,6 +18,10 @@ NPY_NO_EXPORT npy_bool can_cast_scalar_to(PyArray_Descr *scal_type, char *scal_data, PyArray_Descr *to, NPY_CASTING casting); +NPY_NO_EXPORT int +should_use_min_scalar(npy_intp narrs, PyArrayObject **arr, + npy_intp ndtypes, PyArray_Descr **dtypes); + /* * This function calls Py_DECREF on flex_dtype, and replaces it with * a new dtype that has been adapted based on the values in data_dtype diff --git a/numpy/core/src/multiarray/dragon4.c b/numpy/core/src/multiarray/dragon4.c index 8d52672e3..1694596e9 100644 --- a/numpy/core/src/multiarray/dragon4.c +++ b/numpy/core/src/multiarray/dragon4.c @@ -1,31 +1,33 @@ /* * Copyright (c) 2014 Ryan Juckett - * http://www.ryanjuckett.com/ * - * This software is provided 'as-is', without any express or implied - * warranty. In no event will the authors be held liable for any damages - * arising from the use of this software. + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: * - * Permission is granted to anyone to use this software for any purpose, - * including commercial applications, and to alter it and redistribute it - * freely, subject to the following restrictions: + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. * - * 1. The origin of this software must not be misrepresented; you must not - * claim that you wrote the original software. If you use this software - * in a product, an acknowledgment in the product documentation would be - * appreciated but is not required. - * - * 2. Altered source versions must be plainly marked as such, and must not be - * misrepresented as being the original software. - * - * 3. This notice may not be removed or altered from any source - * distribution. + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. */ /* * This file contains a modified version of Ryan Juckett's Dragon4 - * implementation, which has been ported from C++ to C and which has + * implementation, obtained from http://www.ryanjuckett.com, + * which has been ported from C++ to C and which has * modifications specific to printing floats in numpy. + * + * Ryan Juckett's original code was under the Zlib license; he gave numpy + * permission to include it under the MIT license instead. */ #include "dragon4.h" diff --git a/numpy/core/src/multiarray/dragon4.h b/numpy/core/src/multiarray/dragon4.h index 2b8b4cef4..3a99bde6c 100644 --- a/numpy/core/src/multiarray/dragon4.h +++ b/numpy/core/src/multiarray/dragon4.h @@ -1,31 +1,33 @@ /* * Copyright (c) 2014 Ryan Juckett - * http://www.ryanjuckett.com/ * - * This software is provided 'as-is', without any express or implied - * warranty. In no event will the authors be held liable for any damages - * arising from the use of this software. + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: * - * Permission is granted to anyone to use this software for any purpose, - * including commercial applications, and to alter it and redistribute it - * freely, subject to the following restrictions: + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. * - * 1. The origin of this software must not be misrepresented; you must not - * claim that you wrote the original software. If you use this software - * in a product, an acknowledgment in the product documentation would be - * appreciated but is not required. - * - * 2. Altered source versions must be plainly marked as such, and must not be - * misrepresented as being the original software. - * - * 3. This notice may not be removed or altered from any source - * distribution. + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. */ /* * This file contains a modified version of Ryan Juckett's Dragon4 - * implementation, which has been ported from C++ to C and which has + * implementation, obtained from http://www.ryanjuckett.com, + * which has been ported from C++ to C and which has * modifications specific to printing floats in numpy. + * + * Ryan Juckett's original code was under the Zlib license; he gave numpy + * permission to include it under the MIT license instead. */ #ifndef _NPY_DRAGON4_H_ diff --git a/numpy/core/src/multiarray/item_selection.c b/numpy/core/src/multiarray/item_selection.c index a6889ef8f..11c45dce5 100644 --- a/numpy/core/src/multiarray/item_selection.c +++ b/numpy/core/src/multiarray/item_selection.c @@ -2213,8 +2213,26 @@ PyArray_Nonzero(PyArrayObject *self) NpyIter_GetMultiIndexFunc *get_multi_index; char **dataptr; - /* Special case - nonzero(zero_d) is nonzero(atleast1d(zero_d)) */ + /* Special case - nonzero(zero_d) is nonzero(atleast_1d(zero_d)) */ if (ndim == 0) { + char const* msg; + if (PyArray_ISBOOL(self)) { + msg = + "Calling nonzero on 0d arrays is deprecated, as it behaves " + "surprisingly. Use `atleast_1d(cond).nonzero()` if the old " + "behavior was intended. If the context of this warning is of " + "the form `arr[nonzero(cond)]`, just use `arr[cond]`."; + } + else { + msg = + "Calling nonzero on 0d arrays is deprecated, as it behaves " + "surprisingly. Use `atleast_1d(arr).nonzero()` if the old " + "behavior was intended."; + } + if (DEPRECATE(msg) < 0) { + return NULL; + } + static npy_intp const zero_dim_shape[1] = {1}; static npy_intp const zero_dim_strides[1] = {0}; diff --git a/numpy/core/src/npysort/radixsort.c.src b/numpy/core/src/npysort/radixsort.c.src index c1435bd96..c90b06974 100644 --- a/numpy/core/src/npysort/radixsort.c.src +++ b/numpy/core/src/npysort/radixsort.c.src @@ -50,9 +50,10 @@ nth_byte_@suff@(@type@ key, npy_intp l) { radixsort0_@suff@(@type@ *arr, @type@ *aux, npy_intp num) { npy_intp cnt[sizeof(@type@)][1 << 8] = { { 0 } }; - npy_intp i, l; + npy_intp i; + size_t l; @type@ key0 = KEY_OF(arr[0]); - npy_intp ncols = 0; + size_t ncols = 0; npy_ubyte cols[sizeof(@type@)]; for (i = 0; i < num; i++) { @@ -139,9 +140,10 @@ npy_intp* aradixsort0_@suff@(@type@ *arr, npy_intp *aux, npy_intp *tosort, npy_intp num) { npy_intp cnt[sizeof(@type@)][1 << 8] = { { 0 } }; - npy_intp i, l; + npy_intp i; + size_t l; @type@ key0 = KEY_OF(arr[0]); - npy_intp ncols = 0; + size_t ncols = 0; npy_ubyte cols[sizeof(@type@)]; for (i = 0; i < num; i++) { diff --git a/numpy/core/src/umath/ufunc_object.c b/numpy/core/src/umath/ufunc_object.c index 081c06813..cb24f2a70 100644 --- a/numpy/core/src/umath/ufunc_object.c +++ b/numpy/core/src/umath/ufunc_object.c @@ -654,8 +654,8 @@ _parse_signature(PyUFuncObject *ufunc, const char *signature) PyErr_NoMemory(); goto fail; } - for (i = 0; i < len; i++) { - ufunc->core_dim_flags[i] = 0; + for (size_t j = 0; j < len; j++) { + ufunc->core_dim_flags[j] = 0; } i = _next_non_white_space(signature, 0); diff --git a/numpy/core/src/umath/ufunc_type_resolution.c b/numpy/core/src/umath/ufunc_type_resolution.c index 58f915c6e..25dd002ac 100644 --- a/numpy/core/src/umath/ufunc_type_resolution.c +++ b/numpy/core/src/umath/ufunc_type_resolution.c @@ -24,6 +24,7 @@ #include "ufunc_type_resolution.h" #include "ufunc_object.h" #include "common.h" +#include "convert_datatype.h" #include "mem_overlap.h" #if defined(HAVE_CBLAS) @@ -1938,73 +1939,6 @@ type_tuple_userloop_type_resolver(PyUFuncObject *self, return 0; } -/* - * Provides an ordering for the dtype 'kind' character codes, to help - * determine when to use the min_scalar_type function. This groups - * 'kind' into boolean, integer, floating point, and everything else. - */ - -static int -dtype_kind_to_simplified_ordering(char kind) -{ - switch (kind) { - /* Boolean kind */ - case 'b': - return 0; - /* Unsigned int kind */ - case 'u': - /* Signed int kind */ - case 'i': - return 1; - /* Float kind */ - case 'f': - /* Complex kind */ - case 'c': - return 2; - /* Anything else */ - default: - return 3; - } -} - -static int -should_use_min_scalar(PyArrayObject **op, int nop) -{ - int i, use_min_scalar, kind; - int all_scalars = 1, max_scalar_kind = -1, max_array_kind = -1; - - /* - * Determine if there are any scalars, and if so, whether - * the maximum "kind" of the scalars surpasses the maximum - * "kind" of the arrays - */ - use_min_scalar = 0; - if (nop > 1) { - for(i = 0; i < nop; ++i) { - kind = dtype_kind_to_simplified_ordering( - PyArray_DESCR(op[i])->kind); - if (PyArray_NDIM(op[i]) == 0) { - if (kind > max_scalar_kind) { - max_scalar_kind = kind; - } - } - else { - all_scalars = 0; - if (kind > max_array_kind) { - max_array_kind = kind; - } - - } - } - - /* Indicate whether to use the min_scalar_type function */ - if (!all_scalars && max_array_kind >= max_scalar_kind) { - use_min_scalar = 1; - } - } - - return use_min_scalar; -} /* * Does a linear search for the best inner loop of the ufunc. @@ -2030,7 +1964,7 @@ linear_search_type_resolver(PyUFuncObject *self, ufunc_name = ufunc_get_name_cstr(self); - use_min_scalar = should_use_min_scalar(op, nin); + use_min_scalar = should_use_min_scalar(nin, op, 0, NULL); /* If the ufunc has userloops, search for them. */ if (self->userloops) { @@ -2139,7 +2073,7 @@ type_tuple_type_resolver(PyUFuncObject *self, ufunc_name = ufunc_get_name_cstr(self); - use_min_scalar = should_use_min_scalar(op, nin); + use_min_scalar = should_use_min_scalar(nin, op, 0, NULL); /* Fill in specified_types from the tuple or string */ if (PyTuple_Check(type_tup)) { diff --git a/numpy/core/tests/test_api.py b/numpy/core/tests/test_api.py index 9755e7b36..32e2ea537 100644 --- a/numpy/core/tests/test_api.py +++ b/numpy/core/tests/test_api.py @@ -3,8 +3,10 @@ from __future__ import division, absolute_import, print_function import sys import numpy as np +import pytest from numpy.testing import ( - assert_, assert_equal, assert_array_equal, assert_raises, HAS_REFCOUNT + assert_, assert_equal, assert_array_equal, assert_raises, assert_warns, + HAS_REFCOUNT ) # Switch between new behaviour when NPY_RELAXED_STRIDES_CHECKING is set. @@ -289,6 +291,14 @@ def test_array_astype(): a = np.array(1000, dtype='i4') assert_raises(TypeError, a.astype, 'U1', casting='safe') +@pytest.mark.parametrize("t", + np.sctypes['uint'] + np.sctypes['int'] + np.sctypes['float'] +) +def test_array_astype_warning(t): + # test ComplexWarning when casting from complex to float or int + a = np.array(10, dtype=np.complex) + assert_warns(np.ComplexWarning, a.astype, t) + def test_copyto_fromscalar(): a = np.arange(6, dtype='f4').reshape(2, 3) diff --git a/numpy/core/tests/test_deprecations.py b/numpy/core/tests/test_deprecations.py index 346a0038a..6d71fcbd6 100644 --- a/numpy/core/tests/test_deprecations.py +++ b/numpy/core/tests/test_deprecations.py @@ -541,3 +541,10 @@ class TestShape1Fields(_DeprecationTestCase): # 2019-05-20, 1.17.0 def test_shape_1_fields(self): self.assert_deprecated(np.dtype, args=([('a', int, 1)],)) + + +class TestNonZero(_DeprecationTestCase): + # 2019-05-26, 1.17.0 + def test_zerod(self): + self.assert_deprecated(lambda: np.nonzero(np.array(0))) + self.assert_deprecated(lambda: np.nonzero(np.array(1))) diff --git a/numpy/core/tests/test_dtype.py b/numpy/core/tests/test_dtype.py index 8f33a8daf..4031e7362 100644 --- a/numpy/core/tests/test_dtype.py +++ b/numpy/core/tests/test_dtype.py @@ -11,6 +11,7 @@ from numpy.core._rational_tests import rational from numpy.testing import ( assert_, assert_equal, assert_array_equal, assert_raises, HAS_REFCOUNT) from numpy.compat import pickle +from itertools import permutations def assert_dtype_equal(a, b): assert_equal(a, b) @@ -1178,3 +1179,18 @@ class TestFromCTypes(object): self.check(ctypes.c_uint16.__ctype_be__, np.dtype('>u2')) self.check(ctypes.c_uint8.__ctype_le__, np.dtype('u1')) self.check(ctypes.c_uint8.__ctype_be__, np.dtype('u1')) + + all_types = set(np.typecodes['All']) + all_pairs = permutations(all_types, 2) + + @pytest.mark.parametrize("pair", all_pairs) + def test_pairs(self, pair): + """ + Check that np.dtype('x,y') matches [np.dtype('x'), np.dtype('y')] + Example: np.dtype('d,I') -> dtype([('f0', '<f8'), ('f1', '<u4')]) + """ + # gh-5645: check that np.dtype('i,L') can be used + pair_type = np.dtype('{},{}'.format(*pair)) + expected = np.dtype([('f0', pair[0]), ('f1', pair[1])]) + assert_equal(pair_type, expected) + diff --git a/numpy/core/tests/test_nditer.py b/numpy/core/tests/test_nditer.py index 9499bedec..cf66751f8 100644 --- a/numpy/core/tests/test_nditer.py +++ b/numpy/core/tests/test_nditer.py @@ -1864,7 +1864,7 @@ def test_iter_buffered_cast_structured_type(): # make sure multi-field struct type -> simple doesn't work sdt = [('a', 'f4'), ('b', 'i8'), ('d', 'O')] a = np.array([(5.5, 7, 'test'), (8, 10, 11)], dtype=sdt) - assert_raises(ValueError, lambda: ( + assert_raises(TypeError, lambda: ( nditer(a, ['buffered', 'refs_ok'], ['readonly'], casting='unsafe', op_dtypes='i4'))) diff --git a/numpy/core/tests/test_numeric.py b/numpy/core/tests/test_numeric.py index 7b6357fe8..935b84234 100644 --- a/numpy/core/tests/test_numeric.py +++ b/numpy/core/tests/test_numeric.py @@ -899,6 +899,41 @@ class TestTypes(object): # Also test keyword arguments assert_(np.can_cast(from_=np.int32, to=np.int64)) + def test_can_cast_simple_to_structured(self): + # Non-structured can only be cast to structured in 'unsafe' mode. + assert_(not np.can_cast('i4', 'i4,i4')) + assert_(not np.can_cast('i4', 'i4,i2')) + assert_(np.can_cast('i4', 'i4,i4', casting='unsafe')) + assert_(np.can_cast('i4', 'i4,i2', casting='unsafe')) + # Even if there is just a single field which is OK. + assert_(not np.can_cast('i2', [('f1', 'i4')])) + assert_(not np.can_cast('i2', [('f1', 'i4')], casting='same_kind')) + assert_(np.can_cast('i2', [('f1', 'i4')], casting='unsafe')) + # It should be the same for recursive structured or subarrays. + assert_(not np.can_cast('i2', [('f1', 'i4,i4')])) + assert_(np.can_cast('i2', [('f1', 'i4,i4')], casting='unsafe')) + assert_(not np.can_cast('i2', [('f1', '(2,3)i4')])) + assert_(np.can_cast('i2', [('f1', '(2,3)i4')], casting='unsafe')) + + def test_can_cast_structured_to_simple(self): + # Need unsafe casting for structured to simple. + assert_(not np.can_cast([('f1', 'i4')], 'i4')) + assert_(np.can_cast([('f1', 'i4')], 'i4', casting='unsafe')) + assert_(np.can_cast([('f1', 'i4')], 'i2', casting='unsafe')) + # Since it is unclear what is being cast, multiple fields to + # single should not work even for unsafe casting. + assert_(not np.can_cast('i4,i4', 'i4', casting='unsafe')) + # But a single field inside a single field is OK. + assert_(not np.can_cast([('f1', [('x', 'i4')])], 'i4')) + assert_(np.can_cast([('f1', [('x', 'i4')])], 'i4', casting='unsafe')) + # And a subarray is fine too - it will just take the first element + # (arguably not very consistently; might also take the first field). + assert_(not np.can_cast([('f0', '(3,)i4')], 'i4')) + assert_(np.can_cast([('f0', '(3,)i4')], 'i4', casting='unsafe')) + # But a structured subarray with multiple fields should fail. + assert_(not np.can_cast([('f0', ('i4,i4'), (2,))], 'i4', + casting='unsafe')) + def test_can_cast_values(self): # gh-5917 for dt in np.sctypes['int'] + np.sctypes['uint']: @@ -976,12 +1011,24 @@ class TestNonzero(object): assert_equal(np.count_nonzero(np.array([], dtype='?')), 0) assert_equal(np.nonzero(np.array([])), ([],)) + assert_equal(np.count_nonzero(np.array([0])), 0) + assert_equal(np.count_nonzero(np.array([0], dtype='?')), 0) + assert_equal(np.nonzero(np.array([0])), ([],)) + + assert_equal(np.count_nonzero(np.array([1])), 1) + assert_equal(np.count_nonzero(np.array([1], dtype='?')), 1) + assert_equal(np.nonzero(np.array([1])), ([0],)) + + def test_nonzero_zerod(self): assert_equal(np.count_nonzero(np.array(0)), 0) assert_equal(np.count_nonzero(np.array(0, dtype='?')), 0) - assert_equal(np.nonzero(np.array(0)), ([],)) + with assert_warns(DeprecationWarning): + assert_equal(np.nonzero(np.array(0)), ([],)) + assert_equal(np.count_nonzero(np.array(1)), 1) assert_equal(np.count_nonzero(np.array(1, dtype='?')), 1) - assert_equal(np.nonzero(np.array(1)), ([0],)) + with assert_warns(DeprecationWarning): + assert_equal(np.nonzero(np.array(1)), ([0],)) def test_nonzero_onedim(self): x = np.array([1, 0, 2, -1, 0, 0, 8]) @@ -1207,7 +1254,7 @@ class TestNonzero(object): a = np.array([[False], [TrueThenFalse()]]) assert_raises(RuntimeError, np.nonzero, a) - + class TestIndex(object): def test_boolean(self): a = rand(3, 5, 8) diff --git a/numpy/distutils/misc_util.py b/numpy/distutils/misc_util.py index 795d348ef..89171eede 100644 --- a/numpy/distutils/misc_util.py +++ b/numpy/distutils/misc_util.py @@ -472,7 +472,7 @@ def is_sequence(seq): return True def is_glob_pattern(s): - return is_string(s) and ('*' in s or '?' is s) + return is_string(s) and ('*' in s or '?' in s) def as_list(seq): if is_sequence(seq): diff --git a/numpy/doc/structured_arrays.py b/numpy/doc/structured_arrays.py index c0437dc07..1343d2adc 100644 --- a/numpy/doc/structured_arrays.py +++ b/numpy/doc/structured_arrays.py @@ -340,11 +340,8 @@ structured datatype has just a single field:: >>> nostruct = np.zeros(2, dtype='i4') >>> nostruct[:] = twofield Traceback (most recent call last): - File "<stdin>", line 1, in <module> - ValueError: Can't cast from structure to non-structure, except if the structure only has a single field. - >>> nostruct[:] = onefield - >>> nostruct - array([0, 0], dtype=int32) + ... + TypeError: Cannot cast scalar from dtype([('A', '<i4'), ('B', '<i4')]) to dtype('int32') according to the rule 'unsafe' Assignment from other Structured Arrays ``````````````````````````````````````` diff --git a/numpy/lib/function_base.py b/numpy/lib/function_base.py index 9690c305f..1fcb6137c 100644 --- a/numpy/lib/function_base.py +++ b/numpy/lib/function_base.py @@ -3722,7 +3722,8 @@ def quantile(a, q, axis=None, out=None, overwrite_input=False, interpolation='linear', keepdims=False): """ Compute the q-th quantile of the data along the specified axis. - ..versionadded:: 1.15.0 + + .. versionadded:: 1.15.0 Parameters ---------- diff --git a/numpy/lib/histograms.py b/numpy/lib/histograms.py index 5bcedc7f4..8474bd5d3 100644 --- a/numpy/lib/histograms.py +++ b/numpy/lib/histograms.py @@ -3,6 +3,7 @@ Histogram-related functions """ from __future__ import division, absolute_import, print_function +import contextlib import functools import operator import warnings @@ -922,7 +923,13 @@ def histogram(a, bins=10, range=None, normed=None, weights=None, def _histogramdd_dispatcher(sample, bins=None, range=None, normed=None, weights=None, density=None): - return (sample, bins, weights) + if hasattr(sample, 'shape'): # same condition as used in histogramdd + yield sample + else: + yield from sample + with contextlib.suppress(TypeError): + yield from bins + yield weights @array_function_dispatch(_histogramdd_dispatcher) diff --git a/numpy/lib/nanfunctions.py b/numpy/lib/nanfunctions.py index f497aca63..9a03d0b39 100644 --- a/numpy/lib/nanfunctions.py +++ b/numpy/lib/nanfunctions.py @@ -1257,6 +1257,7 @@ def nanquantile(a, q, axis=None, out=None, overwrite_input=False, Compute the qth quantile of the data along the specified axis, while ignoring nan values. Returns the qth quantile(s) of the array elements. + .. versionadded:: 1.15.0 Parameters diff --git a/numpy/lib/tests/test_twodim_base.py b/numpy/lib/tests/test_twodim_base.py index bf93b4adb..bb844e4bd 100644 --- a/numpy/lib/tests/test_twodim_base.py +++ b/numpy/lib/tests/test_twodim_base.py @@ -5,7 +5,7 @@ from __future__ import division, absolute_import, print_function from numpy.testing import ( assert_equal, assert_array_equal, assert_array_max_ulp, - assert_array_almost_equal, assert_raises, + assert_array_almost_equal, assert_raises, assert_ ) from numpy import ( @@ -17,6 +17,9 @@ from numpy import ( import numpy as np +from numpy.core.tests.test_overrides import requires_array_function + + def get_mat(n): data = arange(n) data = add.outer(data, data) @@ -273,6 +276,27 @@ class TestHistogram2d(object): assert_array_equal(H, answer) assert_array_equal(xe, array([0., 0.25, 0.5, 0.75, 1])) + @requires_array_function + def test_dispatch(self): + class ShouldDispatch: + def __array_function__(self, function, types, args, kwargs): + return types, args, kwargs + + xy = [1, 2] + s_d = ShouldDispatch() + r = histogram2d(s_d, xy) + # Cannot use assert_equal since that dispatches... + assert_(r == ((ShouldDispatch,), (s_d, xy), {})) + r = histogram2d(xy, s_d) + assert_(r == ((ShouldDispatch,), (xy, s_d), {})) + r = histogram2d(xy, xy, bins=s_d) + assert_(r, ((ShouldDispatch,), (xy, xy), dict(bins=s_d))) + r = histogram2d(xy, xy, bins=[s_d, 5]) + assert_(r, ((ShouldDispatch,), (xy, xy), dict(bins=[s_d, 5]))) + assert_raises(Exception, histogram2d, xy, xy, bins=[s_d]) + r = histogram2d(xy, xy, weights=s_d) + assert_(r, ((ShouldDispatch,), (xy, xy), dict(weights=s_d))) + class TestTri(object): def test_dtype(self): diff --git a/numpy/lib/twodim_base.py b/numpy/lib/twodim_base.py index e165c9b02..f3dc6c8e1 100644 --- a/numpy/lib/twodim_base.py +++ b/numpy/lib/twodim_base.py @@ -565,7 +565,20 @@ def vander(x, N=None, increasing=False): def _histogram2d_dispatcher(x, y, bins=None, range=None, normed=None, weights=None, density=None): - return (x, y, bins, weights) + yield x + yield y + + # This terrible logic is adapted from the checks in histogram2d + try: + N = len(bins) + except TypeError: + N = 1 + if N == 2: + yield from bins # bins=[x, y] + else: + yield bins + + yield weights @array_function_dispatch(_histogram2d_dispatcher) diff --git a/numpy/linalg/linalg.py b/numpy/linalg/linalg.py index f599f8a58..c90e25686 100644 --- a/numpy/linalg/linalg.py +++ b/numpy/linalg/linalg.py @@ -1509,7 +1509,7 @@ def svd(a, full_matrices=True, compute_uv=True, hermitian=False): enabling a more efficient method for finding singular values. Defaults to False. - ..versionadded:: 1.17.0 + .. versionadded:: 1.17.0 Raises ------ @@ -1913,7 +1913,7 @@ def pinv(a, rcond=1e-15, hermitian=False): enabling a more efficient method for finding singular values. Defaults to False. - ..versionadded:: 1.17.0 + .. versionadded:: 1.17.0 Returns ------- diff --git a/numpy/random/__init__.py b/numpy/random/__init__.py index 21c1adddf..6543161f2 100644 --- a/numpy/random/__init__.py +++ b/numpy/random/__init__.py @@ -16,7 +16,6 @@ integers Uniformly distributed integers, replaces ``randint`` bytes Uniformly distributed random bytes. permutation Randomly permute a sequence / generate a random sequence. shuffle Randomly permute a sequence in place. -seed Seed the random number generator. choice Random sample from 1-D array. ==================== ========================================================= @@ -32,6 +31,7 @@ random_integers Uniformly distributed integers in a given range. (deprecated, use ``integers(..., closed=True)`` instead) random_sample Alias for `random_sample` randint Uniformly distributed integers in a given range +seed Seed the legacy random number generator. ==================== ========================================================= ==================== ========================================================= @@ -98,13 +98,15 @@ set_state Set state of generator. BitGenerator Streams that work with Generator --------------------------------------------- --- MT19937 -DSFMT -PCG32 PCG64 Philox -ThreeFry -Xoshiro256 -Xoshiro512 +SFC64 +============================================= === + +============================================= === +Getting entropy to initialize a BitGenerator +--------------------------------------------- --- +SeedSequence ============================================= === """ @@ -165,19 +167,16 @@ __all__ = [ from . import mtrand from .mtrand import * -from .dsfmt import DSFMT from .generator import Generator +from .bit_generator import SeedSequence from .mt19937 import MT19937 -from .pcg32 import PCG32 from .pcg64 import PCG64 from .philox import Philox -from .threefry import ThreeFry -from .xoshiro256 import Xoshiro256 -from .xoshiro512 import Xoshiro512 +from .sfc64 import SFC64 from .mtrand import RandomState -__all__ += ['Generator', 'DSFMT', 'MT19937', 'Philox', 'PCG64', 'PCG32', - 'ThreeFry', 'Xoshiro256', 'Xoshiro512', 'RandomState'] +__all__ += ['Generator', 'RandomState', 'SeedSequence', 'MT19937', + 'Philox', 'PCG64', 'SFC64'] def __RandomState_ctor(): @@ -185,10 +184,10 @@ def __RandomState_ctor(): This function exists solely to assist (un)pickling. - Note that the state of the RandomState returned here is irrelevant, as this function's - entire purpose is to return a newly allocated RandomState whose state pickle can set. - Consequently the RandomState returned by this function is a freshly allocated copy - with a seed=0. + Note that the state of the RandomState returned here is irrelevant, as this + function's entire purpose is to return a newly allocated RandomState whose + state pickle can set. Consequently the RandomState returned by this function + is a freshly allocated copy with a seed=0. See https://github.com/numpy/numpy/issues/4763 for a detailed discussion diff --git a/numpy/random/_pickle.py b/numpy/random/_pickle.py index 307ffe61e..d20a91ced 100644 --- a/numpy/random/_pickle.py +++ b/numpy/random/_pickle.py @@ -1,23 +1,15 @@ from .mtrand import RandomState from .philox import Philox -from .threefry import ThreeFry -from .pcg32 import PCG32 from .pcg64 import PCG64 -from .xoshiro256 import Xoshiro256 -from .xoshiro512 import Xoshiro512 +from .sfc64 import SFC64 -from .dsfmt import DSFMT from .generator import Generator from .mt19937 import MT19937 BitGenerators = {'MT19937': MT19937, - 'DSFMT': DSFMT, - 'PCG32': PCG32, 'PCG64': PCG64, 'Philox': Philox, - 'ThreeFry': ThreeFry, - 'Xoshiro256': Xoshiro256, - 'Xoshiro512': Xoshiro512 + 'SFC64': SFC64, } diff --git a/numpy/random/bit_generator.pxd b/numpy/random/bit_generator.pxd new file mode 100644 index 000000000..846e3d30a --- /dev/null +++ b/numpy/random/bit_generator.pxd @@ -0,0 +1,27 @@ + +from .common cimport bitgen_t +cimport numpy as np + +cdef class BitGenerator(): + cdef readonly object _seed_seq + cdef readonly object lock + cdef bitgen_t _bitgen + cdef readonly object _ctypes + cdef readonly object _cffi + cdef readonly object capsule + + +cdef class SeedSequence(): + cdef readonly object entropy + cdef readonly object program_entropy + cdef readonly tuple spawn_key + cdef readonly int pool_size + cdef readonly object pool + cdef readonly int n_children_spawned + + cdef mix_entropy(self, np.ndarray[np.npy_uint32, ndim=1] mixer, + np.ndarray[np.npy_uint32, ndim=1] entropy_array) + cdef get_assembled_entropy(self) + +cdef class SeedlessSequence(): + pass diff --git a/numpy/random/bit_generator.pyx b/numpy/random/bit_generator.pyx new file mode 100644 index 000000000..c4f35ca31 --- /dev/null +++ b/numpy/random/bit_generator.pyx @@ -0,0 +1,616 @@ +""" +BitGenerator base class and SeedSequence used to seed the BitGenerators. + +SeedSequence is derived from Melissa E. O'Neill's C++11 `std::seed_seq` +implementation, as it has a lot of nice properties that we want. + +https://gist.github.com/imneme/540829265469e673d045 +http://www.pcg-random.org/posts/developing-a-seed_seq-alternative.html + +The MIT License (MIT) + +Copyright (c) 2015 Melissa E. O'Neill +Copyright (c) 2019 NumPy Developers + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +""" + +import abc +import sys +from itertools import cycle +import re + +try: + from secrets import randbits +except ImportError: + # secrets unavailable on python 3.5 and before + from random import SystemRandom + randbits = SystemRandom().getrandbits + +try: + from threading import Lock +except ImportError: + from dummy_threading import Lock + +from cpython.pycapsule cimport PyCapsule_New + +import numpy as np +cimport numpy as np + +from libc.stdint cimport uint32_t +from .common cimport (random_raw, benchmark, prepare_ctypes, prepare_cffi) +from .distributions cimport bitgen_t + +__all__ = ['SeedSequence', 'BitGenerator'] + +np.import_array() + +DECIMAL_RE = re.compile(r'[0-9]+') + +cdef uint32_t DEFAULT_POOL_SIZE = 4 # Appears also in docstring for pool_size +cdef uint32_t INIT_A = 0x43b0d7e5 +cdef uint32_t MULT_A = 0x931e8875 +cdef uint32_t INIT_B = 0x8b51f9dd +cdef uint32_t MULT_B = 0x58f38ded +cdef uint32_t MIX_MULT_L = 0xca01f9dd +cdef uint32_t MIX_MULT_R = 0x4973f715 +cdef uint32_t XSHIFT = np.dtype(np.uint32).itemsize * 8 // 2 +cdef uint32_t MASK32 = 0xFFFFFFFF + +def _int_to_uint32_array(n): + arr = [] + if n < 0: + raise ValueError("expected non-negative integer") + if n == 0: + arr.append(np.uint32(n)) + if isinstance(n, np.unsignedinteger): + # Cannot do n & MASK32, convert to python int + n = int(n) + while n > 0: + arr.append(np.uint32(n & MASK32)) + n //= (2**32) + return np.array(arr, dtype=np.uint32) + +def _coerce_to_uint32_array(x): + """ Coerce an input to a uint32 array. + + If a `uint32` array, pass it through directly. + If a non-negative integer, then break it up into `uint32` words, lowest + bits first. + If a string starting with "0x", then interpret as a hex integer, as above. + If a string of decimal digits, interpret as a decimal integer, as above. + If a sequence of ints or strings, interpret each element as above and + concatenate. + + Note that the handling of `int64` or `uint64` arrays are not just + straightforward views as `uint32` arrays. If an element is small enough to + fit into a `uint32`, then it will only take up one `uint32` element in the + output. This is to make sure that the interpretation of a sequence of + integers is the same regardless of numpy's default integer type, which + differs on different platforms. + + Parameters + ---------- + x : int, str, sequence of int or str + + Returns + ------- + seed_array : uint32 array + + Examples + -------- + >>> import numpy as np + >>> from seed_seq import _coerce_to_uint32_array + >>> _coerce_to_uint32_array(12345) + array([12345], dtype=uint32) + >>> _coerce_to_uint32_array('12345') + array([12345], dtype=uint32) + >>> _coerce_to_uint32_array('0x12345') + array([74565], dtype=uint32) + >>> _coerce_to_uint32_array([12345, '67890']) + array([12345, 67890], dtype=uint32) + >>> _coerce_to_uint32_array(np.array([12345, 67890], dtype=np.uint32)) + array([12345, 67890], dtype=uint32) + >>> _coerce_to_uint32_array(np.array([12345, 67890], dtype=np.int64)) + array([12345, 67890], dtype=uint32) + >>> _coerce_to_uint32_array([12345, 0x10deadbeef, 67890, 0xdeadbeef]) + array([ 12345, 3735928559, 16, 67890, 3735928559], + dtype=uint32) + >>> _coerce_to_uint32_array(1234567890123456789012345678901234567890) + array([3460238034, 2898026390, 3235640248, 2697535605, 3], + dtype=uint32) + """ + if isinstance(x, np.ndarray) and x.dtype == np.dtype(np.uint32): + return x.copy() + elif isinstance(x, str): + if x.startswith('0x'): + x = int(x, base=16) + elif DECIMAL_RE.match(x): + x = int(x) + else: + raise ValueError("unrecognized seed string") + if isinstance(x, (int, np.integer)): + return _int_to_uint32_array(x) + elif isinstance(x, (float, np.inexact)): + raise TypeError('seed must be integer') + else: + if len(x) == 0: + return np.array([], dtype=np.uint32) + # Should be a sequence of interpretable-as-ints. Convert each one to + # a uint32 array and concatenate. + subseqs = [_coerce_to_uint32_array(v) for v in x] + return np.concatenate(subseqs) + + +cdef uint32_t hashmix(uint32_t value, uint32_t * hash_const): + # We are modifying the multiplier as we go along, so it is input-output + value ^= hash_const[0] + hash_const[0] *= MULT_A + value *= hash_const[0] + value ^= value >> XSHIFT + return value + +cdef uint32_t mix(uint32_t x, uint32_t y): + cdef uint32_t result = (MIX_MULT_L * x - MIX_MULT_R * y) + result ^= result >> XSHIFT + return result + + +class ISeedSequence(abc.ABC): + """ + ISeedSequence() is the abstract base class for SeedSequences. + + See Also + -------- + SeedSequence, SeedlessSeedSequence + """ + + @abc.abstractmethod + def generate_state(self, n_words, dtype=np.uint32): + """ + generate_state(n_words, dtype=np.uint32) + + Return the requested number of words for PRNG seeding. + + A BitGenerator should call this method in its constructor with + an appropriate `n_words` parameter to properly seed itself. + + Parameters + ---------- + n_words : int + dtype : np.uint32 or np.uint64, optional + The size of each word. This should only be either `uint32` or + `uint64`. Strings (`'uint32'`, `'uint64'`) are fine. Note that + requesting `uint64` will draw twice as many bits as `uint32` for + the same `n_words`. This is a convenience for `BitGenerator`s that + express their states as `uint64` arrays. + + Returns + ------- + state : uint32 or uint64 array, shape=(n_words,) + """ + + +class ISpawnableSeedSequence(ISeedSequence): + + @abc.abstractmethod + def spawn(self, n_children): + """ + spawn(n_children) + + Spawn a number of child `SeedSequence` s by extending the + `spawn_key`. + + Parameters + ---------- + n_children : int + + Returns + ------- + seqs : list of `SeedSequence` s + """ + + +cdef class SeedlessSeedSequence(): + """ + SeedlessSeedSequence() is used for BitGenerators with no need for seed state. + + See Also + -------- + SeedSequence, ISeedSequence + """ + + def generate_state(self, n_words, dtype=np.uint32): + raise NotImplementedError('seedless SeedSequences cannot generate state') + + def spawn(self, n_children): + return [self] * n_children + + +# We cannot directly subclass a `cdef class` type from an `ABC` in Cython, so +# we must register it after the fact. +ISpawnableSeedSequence.register(SeedlessSeedSequence) + + +cdef class SeedSequence(): + """ + SeedSequence(entropy=None, *, spawn_key=(), pool_size=4) + + SeedSequence mixes sources of entropy in a reproducible way to set the + initial state for independent and very probably non-overlapping + BitGenerators. + + Once the SeedSequence is instantiated, you can call the `generate_state` + method to get an appropriately sized seed. Calling `spawn(n) <spawn>` will + create ``n`` SeedSequences that can be used to seed independent + BitGenerators, i.e. for different threads. + + Parameters + ---------- + entropy : {None, int, sequence[int]}, optional + The entropy for creating a `SeedSequence`. + spawn_key : {(), sequence[int]}, optional + A third source of entropy, used internally when calling + `SeedSequence.spawn` + pool_size : {int}, optional + Size of the pooled entropy to store. Default is 4 to give a 128-bit + entropy pool. 8 (for 256 bits) is another reasonable choice if working + with larger PRNGs, but there is very little to be gained by selecting + another value. + n_children_spawned : {int}, optional + The number of children already spawned. Only pass this if + reconstructing a `SeedSequence` from a serialized form. + + Notes + ----- + + Best practice for achieving reproducible bit streams is to use + the default ``None`` for the initial entropy, and then use + `SeedSequence.entropy` to log/pickle the `entropy` for reproducibility: + + >>> sq1 = np.random.SeedSequence() + >>> sq1.entropy + 243799254704924441050048792905230269161 # random + >>> sq2 = np.random.SeedSequence(sq1.entropy) + >>> np.all(sq1.generate_state(10) == sq2.generate_state(10)) + True + """ + + def __init__(self, entropy=None, *, spawn_key=(), + pool_size=DEFAULT_POOL_SIZE, n_children_spawned=0): + if pool_size < DEFAULT_POOL_SIZE: + raise ValueError("The size of the entropy pool should be at least " + f"{DEFAULT_POOL_SIZE}") + if entropy is None: + entropy = randbits(pool_size * 32) + elif not isinstance(entropy, (int, np.integer, list, tuple, range, + np.ndarray)): + raise TypeError('SeedSequence expects int or sequence of ints for ' + 'entropy not {}'.format(entropy)) + self.entropy = entropy + self.spawn_key = tuple(spawn_key) + self.pool_size = pool_size + self.n_children_spawned = n_children_spawned + + self.pool = np.zeros(pool_size, dtype=np.uint32) + self.mix_entropy(self.pool, self.get_assembled_entropy()) + + def __repr__(self): + lines = [ + f'{type(self).__name__}(', + f' entropy={self.entropy!r},', + ] + # Omit some entries if they are left as the defaults in order to + # simplify things. + if self.spawn_key: + lines.append(f' spawn_key={self.spawn_key!r},') + if self.pool_size != DEFAULT_POOL_SIZE: + lines.append(f' pool_size={self.pool_size!r},') + if self.n_children_spawned != 0: + lines.append(f' n_children_spawned={self.n_children_spawned!r},') + lines.append(')') + text = '\n'.join(lines) + return text + + @property + def state(self): + return {k:getattr(self, k) for k in + ['entropy', 'spawn_key', 'pool_size', + 'n_children_spawned'] + if getattr(self, k) is not None} + + cdef mix_entropy(self, np.ndarray[np.npy_uint32, ndim=1] mixer, + np.ndarray[np.npy_uint32, ndim=1] entropy_array): + """ Mix in the given entropy to mixer. + + Parameters + ---------- + mixer : 1D uint32 array, modified in-place + entropy_array : 1D uint32 array + """ + cdef uint32_t hash_const[1] + hash_const[0] = INIT_A + + # Add in the entropy up to the pool size. + for i in range(len(mixer)): + if i < len(entropy_array): + mixer[i] = hashmix(entropy_array[i], hash_const) + else: + # Our pool size is bigger than our entropy, so just keep + # running the hash out. + mixer[i] = hashmix(0, hash_const) + + # Mix all bits together so late bits can affect earlier bits. + for i_src in range(len(mixer)): + for i_dst in range(len(mixer)): + if i_src != i_dst: + mixer[i_dst] = mix(mixer[i_dst], + hashmix(mixer[i_src], hash_const)) + + # Add any remaining entropy, mixing each new entropy word with each + # pool word. + for i_src in range(len(mixer), len(entropy_array)): + for i_dst in range(len(mixer)): + mixer[i_dst] = mix(mixer[i_dst], + hashmix(entropy_array[i_src], hash_const)) + + cdef get_assembled_entropy(self): + """ Convert and assemble all entropy sources into a uniform uint32 + array. + + Returns + ------- + entropy_array : 1D uint32 array + """ + # Convert run-entropy, program-entropy, and the spawn key into uint32 + # arrays and concatenate them. + + # We MUST have at least some run-entropy. The others are optional. + assert self.entropy is not None + run_entropy = _coerce_to_uint32_array(self.entropy) + spawn_entropy = _coerce_to_uint32_array(self.spawn_key) + entropy_array = np.concatenate([run_entropy, spawn_entropy]) + return entropy_array + + @np.errstate(over='ignore') + def generate_state(self, n_words, dtype=np.uint32): + """ + generate_state(n_words, dtype=np.uint32) + + Return the requested number of words for PRNG seeding. + + A BitGenerator should call this method in its constructor with + an appropriate `n_words` parameter to properly seed itself. + + Parameters + ---------- + n_words : int + dtype : np.uint32 or np.uint64, optional + The size of each word. This should only be either `uint32` or + `uint64`. Strings (`'uint32'`, `'uint64'`) are fine. Note that + requesting `uint64` will draw twice as many bits as `uint32` for + the same `n_words`. This is a convenience for `BitGenerator`s that + express their states as `uint64` arrays. + + Returns + ------- + state : uint32 or uint64 array, shape=(n_words,) + """ + cdef uint32_t hash_const = INIT_B + cdef uint32_t data_val + + out_dtype = np.dtype(dtype) + if out_dtype == np.dtype(np.uint32): + pass + elif out_dtype == np.dtype(np.uint64): + n_words *= 2 + else: + raise ValueError("only support uint32 or uint64") + state = np.zeros(n_words, dtype=np.uint32) + src_cycle = cycle(self.pool) + for i_dst in range(n_words): + data_val = next(src_cycle) + data_val ^= hash_const + hash_const *= MULT_B + data_val *= hash_const + data_val ^= data_val >> XSHIFT + state[i_dst] = data_val + if out_dtype == np.dtype(np.uint64): + state = state.view(np.uint64) + return state + + def spawn(self, n_children): + """ + spawn(n_children) + + Spawn a number of child `SeedSequence` s by extending the + `spawn_key`. + + Parameters + ---------- + n_children : int + + Returns + ------- + seqs : list of `SeedSequence` s + """ + seqs = [] + for i in range(self.n_children_spawned, + self.n_children_spawned + n_children): + seqs.append(type(self)( + self.entropy, + spawn_key=self.spawn_key + (i,), + pool_size=self.pool_size, + )) + self.n_children_spawned += n_children + return seqs + + +ISpawnableSeedSequence.register(SeedSequence) + + +cdef class BitGenerator(): + """ + BitGenerator(seed_seq=None) + + Base Class for generic BitGenerators, which provide a stream + of random bits based on different algorithms. Must be overridden. + + Parameters + ---------- + seed_seq : {None, ISeedSequence, int, sequence[int]}, optional + A ISeedSequence to initialize the BitGenerator. If None, one will be + created. If an int or a sequence of ints, it will be used as the + entropy for creating a SeedSequence. + + Attributes + ---------- + lock : threading.Lock + Lock instance that is shared so that the same BitGenerator can + be used in multiple Generators without corrupting the state. Code that + generates values from a bit generator should hold the bit generator's + lock. + + See Also + ------- + SeedSequence + """ + + def __init__(self, seed_seq=None): + self.lock = Lock() + self._bitgen.state = <void *>0 + if type(self) is BitGenerator: + raise NotImplementedError('BitGenerator is a base class and cannot be instantized') + + self._ctypes = None + self._cffi = None + + cdef const char *name = "BitGenerator" + self.capsule = PyCapsule_New(<void *>&self._bitgen, name, NULL) + if not isinstance(seed_seq, ISeedSequence): + seed_seq = SeedSequence(seed_seq) + self._seed_seq = seed_seq + + # Pickling support: + def __getstate__(self): + return self.state + + def __setstate__(self, state): + self.state = state + + def __reduce__(self): + from ._pickle import __bit_generator_ctor + return __bit_generator_ctor, (self.state['bit_generator'],), self.state + + @property + def state(self): + """ + Get or set the PRNG state + + The base BitGenerator.state must be overridden by a subclass + + Returns + ------- + state : dict + Dictionary containing the information required to describe the + state of the PRNG + """ + raise NotImplementedError('Not implemented in base BitGenerator') + + @state.setter + def state(self, value): + raise NotImplementedError('Not implemented in base BitGenerator') + + def random_raw(self, size=None, output=True): + """ + random_raw(self, size=None) + + Return randoms as generated by the underlying BitGenerator + + Parameters + ---------- + size : int or tuple of ints, optional + Output shape. If the given shape is, e.g., ``(m, n, k)``, then + ``m * n * k`` samples are drawn. Default is None, in which case a + single value is returned. + output : bool, optional + Output values. Used for performance testing since the generated + values are not returned. + + Returns + ------- + out : uint or ndarray + Drawn samples. + + Notes + ----- + This method directly exposes the the raw underlying pseudo-random + number generator. All values are returned as unsigned 64-bit + values irrespective of the number of bits produced by the PRNG. + + See the class docstring for the number of bits returned. + """ + return random_raw(&self._bitgen, self.lock, size, output) + + def _benchmark(self, Py_ssize_t cnt, method=u'uint64'): + '''Used in tests''' + return benchmark(&self._bitgen, self.lock, cnt, method) + + @property + def ctypes(self): + """ + ctypes interface + + Returns + ------- + interface : namedtuple + Named tuple containing ctypes wrapper + + * state_address - Memory address of the state struct + * state - pointer to the state struct + * next_uint64 - function pointer to produce 64 bit integers + * next_uint32 - function pointer to produce 32 bit integers + * next_double - function pointer to produce doubles + * bitgen - pointer to the bit generator struct + """ + if self._ctypes is None: + self._ctypes = prepare_ctypes(&self._bitgen) + + return self._ctypes + + @property + def cffi(self): + """ + CFFI interface + + Returns + ------- + interface : namedtuple + Named tuple containing CFFI wrapper + + * state_address - Memory address of the state struct + * state - pointer to the state struct + * next_uint64 - function pointer to produce 64 bit integers + * next_uint32 - function pointer to produce 32 bit integers + * next_double - function pointer to produce doubles + * bitgen - pointer to the bit generator struct + """ + if self._cffi is None: + self._cffi = prepare_cffi(&self._bitgen) + return self._cffi diff --git a/numpy/random/common.pxd b/numpy/random/common.pxd index 4508c90be..ac0a94bb0 100644 --- a/numpy/random/common.pxd +++ b/numpy/random/common.pxd @@ -5,7 +5,16 @@ from libc.stdint cimport (uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t) from libc.math cimport sqrt -from .distributions cimport bitgen_t +cdef extern from "src/bitgen.h": + struct bitgen: + void *state + uint64_t (*next_uint64)(void *st) nogil + uint32_t (*next_uint32)(void *st) nogil + double (*next_double)(void *st) nogil + uint64_t (*next_raw)(void *st) nogil + + ctypedef bitgen bitgen_t + import numpy as np cimport numpy as np diff --git a/numpy/random/distributions.pxd b/numpy/random/distributions.pxd index 2f336a17d..75edaee9d 100644 --- a/numpy/random/distributions.pxd +++ b/numpy/random/distributions.pxd @@ -1,7 +1,7 @@ #cython: language_level=3 -from libc.stdint cimport (uint8_t, uint16_t, uint32_t, uint64_t, - int32_t, int64_t) +from .common cimport (uint8_t, uint16_t, uint32_t, uint64_t, + int32_t, int64_t, bitgen_t) import numpy as np cimport numpy as np @@ -28,15 +28,6 @@ cdef extern from "src/distributions/distributions.h": ctypedef s_binomial_t binomial_t - struct bitgen: - void *state - uint64_t (*next_uint64)(void *st) nogil - uint32_t (*next_uint32)(void *st) nogil - double (*next_double)(void *st) nogil - uint64_t (*next_raw)(void *st) nogil - - ctypedef bitgen bitgen_t - double random_double(bitgen_t *bitgen_state) nogil void random_double_fill(bitgen_t* bitgen_state, np.npy_intp cnt, double *out) nogil double random_standard_exponential(bitgen_t *bitgen_state) nogil diff --git a/numpy/random/dsfmt.pyx b/numpy/random/dsfmt.pyx deleted file mode 100644 index bca166507..000000000 --- a/numpy/random/dsfmt.pyx +++ /dev/null @@ -1,416 +0,0 @@ -import operator -from cpython.pycapsule cimport PyCapsule_New - -try: - from threading import Lock -except ImportError: - from dummy_threading import Lock - -import numpy as np -cimport numpy as np - -from .common cimport * -from .distributions cimport bitgen_t -from .entropy import random_entropy - -__all__ = ['DSFMT'] - -np.import_array() - -DEF DSFMT_MEXP = 19937 -DEF DSFMT_N = 191 # ((DSFMT_MEXP - 128) / 104 + 1) -DEF DSFMT_N_PLUS_1 = 192 # DSFMT_N + 1 -DEF DSFMT_N64 = DSFMT_N * 2 - -cdef extern from "src/dsfmt/dSFMT.h": - - union W128_T: - uint64_t u[2] - uint32_t u32[4] - double d[2] - - ctypedef W128_T w128_t - - struct DSFMT_T: - w128_t status[DSFMT_N_PLUS_1] - int idx - - ctypedef DSFMT_T dsfmt_t - - struct s_dsfmt_state: - dsfmt_t *state - int has_uint32 - uint32_t uinteger - - double *buffered_uniforms - int buffer_loc - - ctypedef s_dsfmt_state dsfmt_state - - double dsfmt_next_double(dsfmt_state *state) nogil - uint64_t dsfmt_next64(dsfmt_state *state) nogil - uint32_t dsfmt_next32(dsfmt_state *state) nogil - uint64_t dsfmt_next_raw(dsfmt_state *state) nogil - - void dsfmt_init_gen_rand(dsfmt_t *dsfmt, uint32_t seed) - void dsfmt_init_by_array(dsfmt_t *dsfmt, uint32_t init_key[], int key_length) - void dsfmt_jump(dsfmt_state *state) - -cdef uint64_t dsfmt_uint64(void* st) nogil: - return dsfmt_next64(<dsfmt_state *>st) - -cdef uint32_t dsfmt_uint32(void *st) nogil: - return dsfmt_next32(<dsfmt_state *> st) - -cdef double dsfmt_double(void* st) nogil: - return dsfmt_next_double(<dsfmt_state *>st) - -cdef uint64_t dsfmt_raw(void *st) nogil: - return dsfmt_next_raw(<dsfmt_state *>st) - -cdef class DSFMT: - u""" - DSFMT(seed=None) - - Container for the SIMD-based Mersenne Twister pseudo RNG. - - Parameters - ---------- - seed : {None, int, array_like}, optional - Random seed used to initialize the pseudo-random number generator. Can - be any integer between 0 and 2**32 - 1 inclusive, an array (or other - sequence) of unsigned 32-bit integers, or ``None`` (the default). If - `seed` is ``None``, a 32-bit unsigned integer is read from - ``/dev/urandom`` (or the Windows analog) if available. If unavailable, - a 32-bit hash of the time and process ID is used. - - Attributes - ---------- - lock: threading.Lock - Lock instance that is shared so that the same bit git generator can - be used in multiple Generators without corrupting the state. Code that - generates values from a bit generator should hold the bit generator's - lock. - - Notes - ----- - ``DSFMT`` provides a capsule containing function pointers that produce - doubles, and unsigned 32 and 64- bit integers [1]_ . These are not - directly consumable in Python and must be consumed by a ``Generator`` - or similar object that supports low-level access. - - The Python stdlib module "random" also contains a Mersenne Twister - pseudo-random number generator. - - **State and Seeding** - - The ``DSFMT`` state vector consists of a 384 element array of 64-bit - unsigned integers plus a single integer value between 0 and 382 - indicating the current position within the main array. The implementation - used here augments this with a 382 element array of doubles which are used - to efficiently access the random numbers produced by the dSFMT generator. - - ``DSFMT`` is seeded using either a single 32-bit unsigned integer or a - vector of 32-bit unsigned integers. In either case, the input seed is used - as an input (or inputs) for a hashing function, and the output of the - hashing function is used as the initial state. Using a single 32-bit value - for the seed can only initialize a small range of the possible initial - state values. - - **Parallel Features** - - ``DSFMT`` can be used in parallel applications by calling the method - ``jumped`` which advances the state as-if :math:`2^{128}` random numbers - have been generated [2]_. This allows the original sequence to be split - so that distinct segments can be used in each worker process. All - generators should be chained to ensure that the segments come from the same - sequence. - - >>> from numpy.random.entropy import random_entropy - >>> from numpy.random import Generator, DSFMT - >>> seed = random_entropy() - >>> bit_generator = DSFMT(seed) - >>> rg = [] - >>> for _ in range(10): - ... rg.append(Generator(bit_generator)) - ... # Chain the BitGenerators - ... bit_generator = bit_generator.jumped() - - **Compatibility Guarantee** - - ``DSFMT`` makes a guarantee that a fixed seed and will always produce - the same random integer stream. - - References - ---------- - .. [1] Mutsuo Saito and Makoto Matsumoto, "SIMD-oriented Fast Mersenne - Twister: a 128-bit Pseudorandom Number Generator." Monte Carlo - and Quasi-Monte Carlo Methods 2006, Springer, pp. 607--622, 2008. - .. [2] Hiroshi Haramoto, Makoto Matsumoto, and Pierre L\'Ecuyer, "A Fast - Jump Ahead Algorithm for Linear Recurrences in a Polynomial Space", - Sequences and Their Applications - SETA, 290--298, 2008. - """ - cdef dsfmt_state rng_state - cdef bitgen_t _bitgen - cdef public object capsule - cdef object _cffi - cdef object _ctypes - cdef public object lock - - def __init__(self, seed=None): - self.rng_state.state = <dsfmt_t *>PyArray_malloc_aligned(sizeof(dsfmt_t)) - self.rng_state.buffered_uniforms = <double *>PyArray_calloc_aligned(DSFMT_N64, sizeof(double)) - self.rng_state.buffer_loc = DSFMT_N64 - self.seed(seed) - self.lock = Lock() - - self._bitgen.state = <void *>&self.rng_state - self._bitgen.next_uint64 = &dsfmt_uint64 - self._bitgen.next_uint32 = &dsfmt_uint32 - self._bitgen.next_double = &dsfmt_double - self._bitgen.next_raw = &dsfmt_raw - cdef const char *name = "BitGenerator" - self.capsule = PyCapsule_New(<void *>&self._bitgen, name, NULL) - - self._cffi = None - self._ctypes = None - - # Pickling support: - def __getstate__(self): - return self.state - - def __setstate__(self, state): - self.state = state - - def __reduce__(self): - from ._pickle import __bit_generator_ctor - return __bit_generator_ctor, (self.state['bit_generator'],), self.state - - def __dealloc__(self): - if self.rng_state.state: - PyArray_free_aligned(self.rng_state.state) - if self.rng_state.buffered_uniforms: - PyArray_free_aligned(self.rng_state.buffered_uniforms) - - cdef _reset_state_variables(self): - self.rng_state.buffer_loc = DSFMT_N64 - - def random_raw(self, size=None, output=True): - """ - random_raw(self, size=None) - - Return randoms as generated by the underlying BitGenerator - - Parameters - ---------- - size : int or tuple of ints, optional - Output shape. If the given shape is, e.g., ``(m, n, k)``, then - ``m * n * k`` samples are drawn. Default is None, in which case a - single value is returned. - output : bool, optional - Output values. Used for performance testing since the generated - values are not returned. - - Returns - ------- - out : uint or ndarray - Drawn samples. - - Notes - ----- - This method directly exposes the the raw underlying pseudo-random - number generator. All values are returned as unsigned 64-bit - values irrespective of the number of bits produced by the PRNG. - - See the class docstring for the number of bits returned. - """ - return random_raw(&self._bitgen, self.lock, size, output) - - def _benchmark(self, Py_ssize_t cnt, method=u'uint64'): - return benchmark(&self._bitgen, self.lock, cnt, method) - - def seed(self, seed=None): - """ - seed(seed=None) - - Seed the generator. - - Parameters - ---------- - seed : {None, int, array_like}, optional - Random seed initializing the pseudo-random number generator. - Can be an integer in [0, 2**32-1], array of integers in - [0, 2**32-1] or ``None`` (the default). If `seed` is ``None``, - then ``DSFMT`` will try to read entropy from ``/dev/urandom`` - (or the Windows analog) if available to produce a 32-bit - seed. If unavailable, a 32-bit hash of the time and process - ID is used. - - Raises - ------ - ValueError - If seed values are out of range for the PRNG. - """ - cdef np.ndarray obj - try: - if seed is None: - try: - seed = random_entropy(1) - except RuntimeError: - seed = random_entropy(1, 'fallback') - dsfmt_init_gen_rand(self.rng_state.state, seed) - else: - if hasattr(seed, 'squeeze'): - seed = seed.squeeze() - idx = operator.index(seed) - if idx > int(2**32 - 1) or idx < 0: - raise ValueError("Seed must be between 0 and 2**32 - 1") - dsfmt_init_gen_rand(self.rng_state.state, seed) - except TypeError: - obj = np.asarray(seed).astype(np.int64, casting='safe').ravel() - if ((obj > int(2**32 - 1)) | (obj < 0)).any(): - raise ValueError("Seed must be between 0 and 2**32 - 1") - obj = obj.astype(np.uint32, casting='unsafe', order='C') - dsfmt_init_by_array(self.rng_state.state, - <uint32_t *>obj.data, - np.PyArray_DIM(obj, 0)) - # Clear the buffer - self._reset_state_variables() - - cdef jump_inplace(self, iter): - """ - Jump state in-place - - Not part of public API - - Parameters - ---------- - iter : integer, positive - Number of times to jump the state of the rng. - """ - cdef np.npy_intp i - for i in range(iter): - dsfmt_jump(&self.rng_state) - # Clear the buffer - self._reset_state_variables() - - def jumped(self, np.npy_intp jumps=1): - """ - jumped(jumps=1) - - Returns a new bit generator with the state jumped - - The state of the returned big generator is jumped as-if - 2**(128 * jumps) random numbers have been generated. - - Parameters - ---------- - jumps : integer, positive - Number of times to jump the state of the bit generator returned - - Returns - ------- - bit_generator : DSFMT - New instance of generator jumped iter times - """ - cdef DSFMT bit_generator - - bit_generator = self.__class__() - bit_generator.state = self.state - bit_generator.jump_inplace(jumps) - - return bit_generator - - @property - def state(self): - """ - Get or set the PRNG state - - Returns - ------- - state : dict - Dictionary containing the information required to describe the - state of the PRNG - """ - - cdef Py_ssize_t i, j, loc = 0 - cdef uint64_t[::1] state - cdef double[::1] buffered_uniforms - - state = np.empty(2 *DSFMT_N_PLUS_1, dtype=np.uint64) - for i in range(DSFMT_N_PLUS_1): - for j in range(2): - state[loc] = self.rng_state.state.status[i].u[j] - loc += 1 - buffered_uniforms = np.empty(DSFMT_N64, dtype=np.double) - for i in range(DSFMT_N64): - buffered_uniforms[i] = self.rng_state.buffered_uniforms[i] - return {'bit_generator': self.__class__.__name__, - 'state': {'state': np.asarray(state), - 'idx': self.rng_state.state.idx}, - 'buffer_loc': self.rng_state.buffer_loc, - 'buffered_uniforms': np.asarray(buffered_uniforms)} - - @state.setter - def state(self, value): - cdef Py_ssize_t i, j, loc = 0 - if not isinstance(value, dict): - raise TypeError('state must be a dict') - bitgen = value.get('bit_generator', '') - if bitgen != self.__class__.__name__: - raise ValueError('state must be for a {0} ' - 'PRNG'.format(self.__class__.__name__)) - state = value['state']['state'] - for i in range(DSFMT_N_PLUS_1): - for j in range(2): - self.rng_state.state.status[i].u[j] = state[loc] - loc += 1 - self.rng_state.state.idx = value['state']['idx'] - buffered_uniforms = value['buffered_uniforms'] - for i in range(DSFMT_N64): - self.rng_state.buffered_uniforms[i] = buffered_uniforms[i] - self.rng_state.buffer_loc = value['buffer_loc'] - - @property - def ctypes(self): - """ - ctypes interface - - Returns - ------- - interface : namedtuple - Named tuple containing ctypes wrapper - - * state_address - Memory address of the state struct - * state - pointer to the state struct - * next_uint64 - function pointer to produce 64 bit integers - * next_uint32 - function pointer to produce 32 bit integers - * next_double - function pointer to produce doubles - * bitgen - pointer to the bit generator struct - """ - if self._ctypes is None: - self._ctypes = prepare_ctypes(&self._bitgen) - - return self._ctypes - - @property - def cffi(self): - """ - CFFI interface - - Returns - ------- - interface : namedtuple - Named tuple containing CFFI wrapper - - * state_address - Memory address of the state struct - * state - pointer to the state struct - * next_uint64 - function pointer to produce 64 bit integers - * next_uint32 - function pointer to produce 32 bit integers - * next_double - function pointer to produce doubles - * bitgen - pointer to the bit generator struct - """ - if self._cffi is not None: - return self._cffi - self._cffi = prepare_cffi(&self._bitgen) - return self._cffi diff --git a/numpy/random/entropy.pyx b/numpy/random/entropy.pyx index ecbacd9c8..95bf7c177 100644 --- a/numpy/random/entropy.pyx +++ b/numpy/random/entropy.pyx @@ -58,6 +58,8 @@ def seed_by_array(object seed, Py_ssize_t n): if int_seed < 0 or int_seed > 2**64 - 1: raise ValueError(err_msg) seed_array = np.array([int_seed], dtype=np.uint64) + elif issubclass(arr.dtype.type, np.inexact): + raise TypeError('seed array must be integers') else: err_msg = "Seed values must be integers between 0 and 2**64 - 1" obj = np.asarray(seed).astype(np.object) diff --git a/numpy/random/examples/cython/extending.pyx b/numpy/random/examples/cython/extending.pyx index b2418e93c..a6a4ba4bf 100644 --- a/numpy/random/examples/cython/extending.pyx +++ b/numpy/random/examples/cython/extending.pyx @@ -9,7 +9,7 @@ cimport numpy as np cimport cython from numpy.random.common cimport bitgen_t -from numpy.random import Xoshiro256 +from numpy.random import PCG64 np.import_array() @@ -23,7 +23,7 @@ def uniform_mean(Py_ssize_t n): cdef double[::1] random_values cdef np.ndarray randoms - x = Xoshiro256() + x = PCG64() capsule = x.capsule if not PyCapsule_IsValid(capsule, capsule_name): raise ValueError("Invalid pointer to anon_func_state") @@ -64,7 +64,7 @@ def bounded_uints(uint32_t lb, uint32_t ub, Py_ssize_t n): cdef uint32_t[::1] out cdef const char *capsule_name = "BitGenerator" - x = Xoshiro256() + x = PCG64() out = np.empty(n, dtype=np.uint32) capsule = x.capsule diff --git a/numpy/random/examples/cython/extending_distributions.pyx b/numpy/random/examples/cython/extending_distributions.pyx index 89477eb6d..3cefec97e 100644 --- a/numpy/random/examples/cython/extending_distributions.pyx +++ b/numpy/random/examples/cython/extending_distributions.pyx @@ -10,7 +10,7 @@ cimport cython from cpython.pycapsule cimport PyCapsule_IsValid, PyCapsule_GetPointer from numpy.random.common cimport * from numpy.random.distributions cimport random_gauss_zig -from numpy.random import Xoshiro256 +from numpy.random import PCG64 @cython.boundscheck(False) @@ -21,7 +21,7 @@ def normals_zig(Py_ssize_t n): cdef const char *capsule_name = "BitGenerator" cdef double[::1] random_values - x = Xoshiro256() + x = PCG64() capsule = x.capsule if not PyCapsule_IsValid(capsule, capsule_name): raise ValueError("Invalid pointer to anon_func_state") @@ -43,7 +43,7 @@ def uniforms(Py_ssize_t n): cdef const char *capsule_name = "BitGenerator" cdef double[::1] random_values - x = Xoshiro256() + x = PCG64() capsule = x.capsule # Optional check that the capsule if from a BitGenerator if not PyCapsule_IsValid(capsule, capsule_name): diff --git a/numpy/random/examples/numba/extending.py b/numpy/random/examples/numba/extending.py index a1a2b3d12..d41c2d76f 100644 --- a/numpy/random/examples/numba/extending.py +++ b/numpy/random/examples/numba/extending.py @@ -3,9 +3,9 @@ import datetime as dt import numpy as np import numba as nb -from numpy.random import Xoshiro256 +from numpy.random import PCG64 -x = Xoshiro256() +x = PCG64() f = x.ctypes.next_uint32 s = x.ctypes.state @@ -68,7 +68,7 @@ normalsj(1, state_addr) start = dt.datetime.now() normalsj(1000000, state_addr) ms = 1000 * (dt.datetime.now() - start).total_seconds() -print('1,000,000 Polar-transform (numba/Xoshiro256) randoms in ' +print('1,000,000 Polar-transform (numba/PCG64) randoms in ' '{ms:0.1f}ms'.format(ms=ms)) start = dt.datetime.now() diff --git a/numpy/random/examples/numba/extending_distributions.py b/numpy/random/examples/numba/extending_distributions.py index 1172e51de..9233ccced 100644 --- a/numpy/random/examples/numba/extending_distributions.py +++ b/numpy/random/examples/numba/extending_distributions.py @@ -24,7 +24,7 @@ import numba as nb import numpy as np from cffi import FFI -from numpy.random import Xoshiro256 +from numpy.random import PCG64 ffi = FFI() if os.path.exists('./distributions.dll'): @@ -37,7 +37,7 @@ else: ffi.cdef(""" double random_gauss_zig(void *bitgen_state); """) -x = Xoshiro256() +x = PCG64() xffi = x.cffi bit_generator = xffi.bit_generator diff --git a/numpy/random/generator.pyx b/numpy/random/generator.pyx index 368a03e8f..05323c422 100644 --- a/numpy/random/generator.pyx +++ b/numpy/random/generator.pyx @@ -6,7 +6,7 @@ import warnings import numpy as np from .bounded_integers import _integers_types -from .xoshiro256 import Xoshiro256 +from .pcg64 import PCG64 from cpython.pycapsule cimport PyCapsule_IsValid, PyCapsule_GetPointer from cpython cimport (Py_INCREF, PyFloat_AsDouble) @@ -89,7 +89,7 @@ cdef class Generator: def __init__(self, bit_generator=None): if bit_generator is None: - bit_generator = Xoshiro256() + bit_generator = PCG64() self._bit_generator = bit_generator capsule = bit_generator.capsule @@ -419,7 +419,8 @@ cdef class Generator: References ---------- .. [1] Daniel Lemire., "Fast Random Integer Generation in an Interval", - CoRR, Aug. 13, 2018, http://arxiv.org/abs/1805.10941. + ACM Transactions on Modeling and Computer Simulation 29 (1), 2019, + http://arxiv.org/abs/1805.10941. """ if high is None: @@ -439,7 +440,7 @@ cdef class Generator: # Implementation detail: the old API used a masked method to generate # bounded uniform integers. Lemire's method is preferable since it is # faster. randomgen allows a choice, we will always use the faster one. - cdef bint _masked = True + cdef bint _masked = False if key == 'int32': ret = _rand_int32(low, high, size, _masked, endpoint, &self._bitgen, self.lock) @@ -3094,9 +3095,11 @@ cdef class Generator: Parameters ---------- ngood : int or array_like of ints - Number of ways to make a good selection. Must be nonnegative. + Number of ways to make a good selection. Must be nonnegative and + less than 10**9. nbad : int or array_like of ints - Number of ways to make a bad selection. Must be nonnegative. + Number of ways to make a bad selection. Must be nonnegative and + less than 10**9. nsample : int or array_like of ints Number of items sampled. Must be nonnegative and less than ``ngood + nbad``. @@ -3141,6 +3144,13 @@ cdef class Generator: replacement (or the sample space is infinite). As the sample space becomes large, this distribution approaches the binomial. + The arguments `ngood` and `nbad` each must be less than `10**9`. For + extremely large arguments, the algorithm that is used to compute the + samples [4]_ breaks down because of loss of precision in floating point + calculations. For such large values, if `nsample` is not also large, + the distribution can be approximated with the binomial distribution, + `binomial(n=nsample, p=ngood/(ngood + nbad))`. + References ---------- .. [1] Lentner, Marvin, "Elementary Applied Statistics", Bogden @@ -3150,6 +3160,9 @@ cdef class Generator: http://mathworld.wolfram.com/HypergeometricDistribution.html .. [3] Wikipedia, "Hypergeometric distribution", https://en.wikipedia.org/wiki/Hypergeometric_distribution + .. [4] Stadlober, Ernst, "The ratio of uniforms approach for generating + discrete random variates", Journal of Computational and Applied + Mathematics, 31, pp. 181-189 (1990). Examples -------- @@ -3171,6 +3184,7 @@ cdef class Generator: # answer = 0.003 ... pretty unlikely! """ + DEF HYPERGEOM_MAX = 10**9 cdef bint is_scalar = True cdef np.ndarray ongood, onbad, onsample cdef int64_t lngood, lnbad, lnsample @@ -3185,6 +3199,9 @@ cdef class Generator: lnbad = <int64_t>nbad lnsample = <int64_t>nsample + if lngood >= HYPERGEOM_MAX or lnbad >= HYPERGEOM_MAX: + raise ValueError("both ngood and nbad must be less than %d" % + HYPERGEOM_MAX) if lngood + lnbad < lnsample: raise ValueError("ngood + nbad < nsample") return disc(&random_hypergeometric, &self._bitgen, size, self.lock, 0, 3, @@ -3192,8 +3209,13 @@ cdef class Generator: lnbad, 'nbad', CONS_NON_NEGATIVE, lnsample, 'nsample', CONS_NON_NEGATIVE) + if np.any(ongood >= HYPERGEOM_MAX) or np.any(onbad >= HYPERGEOM_MAX): + raise ValueError("both ngood and nbad must be less than %d" % + HYPERGEOM_MAX) + 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, diff --git a/numpy/random/mt19937.pyx b/numpy/random/mt19937.pyx index bd8a8850c..409ad336e 100644 --- a/numpy/random/mt19937.pyx +++ b/numpy/random/mt19937.pyx @@ -1,17 +1,10 @@ import operator -from cpython.pycapsule cimport PyCapsule_New - -try: - from threading import Lock -except ImportError: - from dummy_threading import Lock - import numpy as np cimport numpy as np from .common cimport * -from .distributions cimport bitgen_t +from .bit_generator cimport BitGenerator, SeedSequence from .entropy import random_entropy __all__ = ['MT19937'] @@ -33,6 +26,9 @@ cdef extern from "src/mt19937/mt19937.h": void mt19937_seed(mt19937_state *state, uint32_t seed) void mt19937_jump(mt19937_state *state) + enum: + RK_STATE_LEN + cdef uint64_t mt19937_uint64(void *st) nogil: return mt19937_next64(<mt19937_state *> st) @@ -45,21 +41,18 @@ cdef double mt19937_double(void *st) nogil: cdef uint64_t mt19937_raw(void *st) nogil: return <uint64_t>mt19937_next32(<mt19937_state *> st) -cdef class MT19937: +cdef class MT19937(BitGenerator): """ - MT19937(seed=None) + MT19937(seed_seq=None) Container for the Mersenne Twister pseudo-random number generator. Parameters ---------- - seed : {None, int, array_like}, optional - Random seed used to initialize the pseudo-random number generator. Can - be any integer between 0 and 2**32 - 1 inclusive, an array (or other - sequence) of unsigned 32-bit integers, or ``None`` (the default). If - `seed` is ``None``, a 32-bit unsigned integer is read from - ``/dev/urandom`` (or the Windows analog) if available. If unavailable, - a 32-bit hash of the time and process ID is used. + seed_seq : {None, SeedSequence, int, array_like[ints]}, optional + A SeedSequence to initialize the BitGenerator. If None, one will be + created. If an int or array_like[ints], it will be used as the entropy + for creating a SeedSequence. Attributes ---------- @@ -94,17 +87,23 @@ cdef class MT19937: **Parallel Features** - ``MT19937`` can be used in parallel applications by - calling the method ``jumped`` which advances the state as-if + The preferred way to use a BitGenerator in parallel applications is to use + the `SeedSequence.spawn` method to obtain entropy values, and to use these + to generate new BitGenerators: + + >>> from numpy.random import Generator, MT19937, SeedSequence + >>> sg = SeedSequence(1234) + >>> rg = [Generator(MT19937(s)) for s in sg.spawn(10)] + + Another method is to use `MT19937.jumped` which advances the state as-if :math:`2^{128}` random numbers have been generated ([1]_, [2]_). This allows the original sequence to be split so that distinct segments can be used in each worker process. All generators should be chained to ensure that the segments come from the same sequence. - >>> from numpy.random.entropy import random_entropy - >>> from numpy.random import Generator, MT19937 - >>> seed = random_entropy() - >>> bit_generator = MT19937(seed) + >>> from numpy.random import Generator, MT19937, SeedSequence + >>> sg = SeedSequence(1234) + >>> bit_generator = MT19937(sg) >>> rg = [] >>> for _ in range(10): ... rg.append(Generator(bit_generator)) @@ -128,15 +127,15 @@ cdef class MT19937: """ cdef mt19937_state rng_state - cdef bitgen_t _bitgen - cdef public object capsule - cdef object _ctypes - cdef object _cffi - cdef public object lock def __init__(self, seed=None): - self.seed(seed) - self.lock = Lock() + BitGenerator.__init__(self, seed) + val = self._seed_seq.generate_state(RK_STATE_LEN, np.uint32) + # MSB is 1; assuring non-zero initial array + self.rng_state.key[0] = 0x80000000UL + for i in range(1, RK_STATE_LEN): + self.rng_state.key[i] = val[i] + self.rng_state.pos = i self._bitgen.state = &self.rng_state self._bitgen.next_uint64 = &mt19937_uint64 @@ -144,73 +143,21 @@ cdef class MT19937: self._bitgen.next_double = &mt19937_double self._bitgen.next_raw = &mt19937_raw - self._ctypes = None - self._cffi = None - - cdef const char *name = "BitGenerator" - self.capsule = PyCapsule_New(<void *>&self._bitgen, name, NULL) - - # Pickling support: - def __getstate__(self): - return self.state - - def __setstate__(self, state): - self.state = state - - def __reduce__(self): - from ._pickle import __bit_generator_ctor - return __bit_generator_ctor, (self.state['bit_generator'],), self.state - - def random_raw(self, size=None, output=True): - """ - random_raw(self, size=None) - - Return randoms as generated by the underlying BitGenerator - - Parameters - ---------- - size : int or tuple of ints, optional - Output shape. If the given shape is, e.g., ``(m, n, k)``, then - ``m * n * k`` samples are drawn. Default is None, in which case a - single value is returned. - output : bool, optional - Output values. Used for performance testing since the generated - values are not returned. - - Returns - ------- - out : uint or ndarray - Drawn samples. - - Notes - ----- - This method directly exposes the the raw underlying pseudo-random - number generator. All values are returned as unsigned 64-bit - values irrespective of the number of bits produced by the PRNG. - - See the class docstring for the number of bits returned. + def _legacy_seeding(self, seed): """ - return random_raw(&self._bitgen, self.lock, size, output) - - def _benchmark(self, Py_ssize_t cnt, method=u'uint64'): - return benchmark(&self._bitgen, self.lock, cnt, method) + _legacy_seeding(seed) - def seed(self, seed=None): - """ - seed(seed=None) - - Seed the generator. + Seed the generator in a backward compatible way. For modern + applications, creating a new instance is preferable. Calling this + overrides self._seed_seq Parameters ---------- - seed : {None, int, array_like}, optional + seed : {None, int, array_like} Random seed initializing the pseudo-random number generator. Can be an integer in [0, 2**32-1], array of integers in - [0, 2**32-1] or ``None`` (the default). If `seed` is ``None``, - then ``MT19937`` will try to read entropy from ``/dev/urandom`` - (or the Windows analog) if available to produce a 32-bit - seed. If unavailable, a 32-bit hash of the time and process - ID is used. + [0, 2**32-1], a `SeedSequence, or ``None``. If `seed` + is ``None``, then sample entropy for a seed. Raises ------ @@ -218,31 +165,33 @@ cdef class MT19937: If seed values are out of range for the PRNG. """ cdef np.ndarray obj - try: - if seed is None: - try: - seed = random_entropy(1) - except RuntimeError: - seed = random_entropy(1, 'fallback') - mt19937_seed(&self.rng_state, seed[0]) - else: - if hasattr(seed, 'squeeze'): - seed = seed.squeeze() - idx = operator.index(seed) - if idx > int(2**32 - 1) or idx < 0: + with self.lock: + try: + if seed is None: + val = random_entropy(RK_STATE_LEN) + # MSB is 1; assuring non-zero initial array + self.rng_state.key[0] = 0x80000000UL + for i in range(1, RK_STATE_LEN): + self.rng_state.key[i] = val[i] + else: + if hasattr(seed, 'squeeze'): + seed = seed.squeeze() + idx = operator.index(seed) + if idx > int(2**32 - 1) or idx < 0: + raise ValueError("Seed must be between 0 and 2**32 - 1") + mt19937_seed(&self.rng_state, seed) + except TypeError: + obj = np.asarray(seed) + if obj.size == 0: + raise ValueError("Seed must be non-empty") + obj = obj.astype(np.int64, casting='safe') + if obj.ndim != 1: + raise ValueError("Seed array must be 1-d") + if ((obj > int(2**32 - 1)) | (obj < 0)).any(): raise ValueError("Seed must be between 0 and 2**32 - 1") - mt19937_seed(&self.rng_state, seed) - except TypeError: - obj = np.asarray(seed) - if obj.size == 0: - raise ValueError("Seed must be non-empty") - obj = obj.astype(np.int64, casting='safe') - if obj.ndim != 1: - raise ValueError("Seed array must be 1-d") - if ((obj > int(2**32 - 1)) | (obj < 0)).any(): - raise ValueError("Seed must be between 0 and 2**32 - 1") - obj = obj.astype(np.uint32, casting='unsafe', order='C') - mt19937_init_by_array(&self.rng_state, <uint32_t*> obj.data, np.PyArray_DIM(obj, 0)) + obj = obj.astype(np.uint32, casting='unsafe', order='C') + mt19937_init_by_array(&self.rng_state, <uint32_t*> obj.data, np.PyArray_DIM(obj, 0)) + self._seed_seq = None cdef jump_inplace(self, iter): """ @@ -323,47 +272,3 @@ cdef class MT19937: for i in range(624): self.rng_state.key[i] = key[i] self.rng_state.pos = value['state']['pos'] - - @property - def ctypes(self): - """ - ctypes interface - - Returns - ------- - interface : namedtuple - Named tuple containing ctypes wrapper - - * state_address - Memory address of the state struct - * state - pointer to the state struct - * next_uint64 - function pointer to produce 64 bit integers - * next_uint32 - function pointer to produce 32 bit integers - * next_double - function pointer to produce doubles - * bitgen - pointer to the bit generator struct - """ - if self._ctypes is None: - self._ctypes = prepare_ctypes(&self._bitgen) - - return self._ctypes - - @property - def cffi(self): - """ - CFFI interface - - Returns - ------- - interface : namedtuple - Named tuple containing CFFI wrapper - - * state_address - Memory address of the state struct - * state - pointer to the state struct - * next_uint64 - function pointer to produce 64 bit integers - * next_uint32 - function pointer to produce 32 bit integers - * next_double - function pointer to produce doubles - * bitgen - pointer to the bit generator struct - """ - if self._cffi is not None: - return self._cffi - self._cffi = prepare_cffi(&self._bitgen) - return self._cffi diff --git a/numpy/random/mtrand.pyx b/numpy/random/mtrand.pyx index 19f7ab86a..5d34368a6 100644 --- a/numpy/random/mtrand.pyx +++ b/numpy/random/mtrand.pyx @@ -98,7 +98,8 @@ cdef class RandomState: if seed is None: bit_generator = _MT19937() elif not hasattr(seed, 'capsule'): - bit_generator = _MT19937(seed) + bit_generator = _MT19937() + bit_generator._legacy_seeding(seed) else: bit_generator = seed @@ -137,32 +138,29 @@ cdef class RandomState: self._aug_state.has_gauss = 0 self._aug_state.gauss = 0.0 - def seed(self, *args, **kwargs): + def seed(self, seed=None): """ - seed(self, *args, **kwargs) + seed(self, seed=None) - Reseed the BitGenerator. + Reseed a legacy MT19937 BitGenerator Notes ----- - Arguments are directly passed to the BitGenerator. This is a convenience - function. + This is a convenience, legacy function. - The best method to access seed is to directly use a BitGenerator - instance. This example demonstrates this best practice. + The best practice is to **not** reseed a BitGenerator, rather to + recreate a new one. This method is here for legacy reasons. + This example demonstrates best practice. >>> from numpy.random import MT19937 - >>> from numpy.random import RandomState - >>> bit_generator = MT19937(123456789) - >>> rs = RandomState(bit_generator) - >>> bit_generator.seed(987654321) - - These best practice examples are equivalent to - - >>> rs = RandomState(MT19937()) - >>> rs.seed(987654321) + >>> from numpy.random import RandomState, SeedSequence + >>> rs = RandomState(MT19937(SeedSequence(123456789))) + # Later, you want to restart the stream + >>> rs = RandomState(MT19937(SeedSequence(987654321))) """ - self._bit_generator.seed(*args, **kwargs) + if not isinstance(self._bit_generator, _MT19937): + raise TypeError('can only re-seed a MT19937 BitGenerator') + self._bit_generator._legacy_seeding(seed) self._reset_gauss() def get_state(self, legacy=True): diff --git a/numpy/random/pcg32.pyx b/numpy/random/pcg32.pyx deleted file mode 100644 index 612a1b58d..000000000 --- a/numpy/random/pcg32.pyx +++ /dev/null @@ -1,402 +0,0 @@ -try: - from threading import Lock -except ImportError: - from dummy_threading import Lock - -from cpython.pycapsule cimport PyCapsule_New - -import numpy as np -cimport numpy as np - -from .common cimport * -from .distributions cimport bitgen_t -from .entropy import random_entropy - -__all__ = ['PCG32'] - -np.import_array() - -cdef extern from "src/pcg32/pcg32.h": - - cdef struct pcg_state_setseq_64: - uint64_t state - uint64_t inc - - ctypedef pcg_state_setseq_64 pcg32_random_t - - struct s_pcg32_state: - pcg32_random_t *pcg_state - - ctypedef s_pcg32_state pcg32_state - - uint64_t pcg32_next64(pcg32_state *state) nogil - uint32_t pcg32_next32(pcg32_state *state) nogil - double pcg32_next_double(pcg32_state *state) nogil - void pcg32_jump(pcg32_state *state) - void pcg32_advance_state(pcg32_state *state, uint64_t step) - void pcg32_set_seed(pcg32_state *state, uint64_t seed, uint64_t inc) - -cdef uint64_t pcg32_uint64(void* st) nogil: - return pcg32_next64(<pcg32_state *>st) - -cdef uint32_t pcg32_uint32(void *st) nogil: - return pcg32_next32(<pcg32_state *> st) - -cdef double pcg32_double(void* st) nogil: - return pcg32_next_double(<pcg32_state *>st) - -cdef uint64_t pcg32_raw(void* st) nogil: - return <uint64_t>pcg32_next32(<pcg32_state *> st) - - -cdef class PCG32: - u""" - PCG32(seed=None, inc=0) - - Container for the PCG-32 pseudo-random number generator. - - Parameters - ---------- - seed : {None, long}, optional - Random seed initializing the pseudo-random number generator. - Can be an integer in [0, 2**64] or ``None`` (the default). - If `seed` is ``None``, then ``PCG32`` will try to read data - from ``/dev/urandom`` (or the Windows analog) if available. If - unavailable, a 64-bit hash of the time and process ID is used. - inc : {None, int}, optional - Stream to return. - Can be an integer in [0, 2**64] or ``None`` (the default). If `inc` is - ``None``, then 0 is used. Can be used with the same seed to - produce multiple streams using other values of inc. - - Attributes - ---------- - lock: threading.Lock - Lock instance that is shared so that the same bit git generator can - be used in multiple Generators without corrupting the state. Code that - generates values from a bit generator should hold the bit generator's - lock. - - Notes - ----- - PCG-32 is a 64-bit implementation of O'Neill's permutation congruential - generator ([1]_, [2]_). PCG-32 has a period of :math:`2^{64}` and supports - advancing an arbitrary number of steps as well as :math:`2^{63}` streams. - - ``PCG32`` provides a capsule containing function pointers that produce - doubles, and unsigned 32 and 64- bit integers. These are not - directly consumable in Python and must be consumed by a ``Generator`` - or similar object that supports low-level access. - - Supports the method advance to advance the RNG an arbitrary number of - steps. The state of the PCG-32 PRNG is represented by 2 64-bit unsigned - integers. - - See ``PCG64`` for a similar implementation with a smaller period. - - **State and Seeding** - - The ``PCG32`` state vector consists of 2 unsigned 64-bit values. - ``PCG32`` is seeded using a single 64-bit unsigned integer. - In addition, a second 64-bit unsigned integer is used to set the stream. - - **Parallel Features** - - ``PCG32`` can be used in parallel applications in one of two ways. - The preferable method is to use sub-streams, which are generated by using the - same value of ``seed`` and incrementing the second value, ``inc``. - - >>> from numpy.random import Generator, PCG32 - >>> rg = [Generator(PCG32(1234, i + 1)) for i in range(10)] - - The alternative method is to call ``advance`` with a different value on - each instance to produce non-overlapping sequences. - - >>> rg = [Generator(PCG32(1234, i + 1)) for i in range(10)] - >>> for i in range(10): - ... rg[i].bit_generator.advance(i * 2**32) - - **Compatibility Guarantee** - - ``PCG32`` makes a guarantee that a fixed seed and will always produce - the same random integer stream. - - References - ---------- - .. [1] "PCG, A Family of Better Random Number Generators", - http://www.pcg-random.org/ - .. [2] O'Neill, Melissa E. "PCG: A Family of Simple Fast Space-Efficient - Statistically Good Algorithms for Random Number Generation" - """ - cdef pcg32_state rng_state - cdef pcg32_random_t pcg32_random_state - cdef bitgen_t _bitgen - cdef public object capsule - cdef object _ctypes - cdef object _cffi - cdef public object lock - - def __init__(self, seed=None, inc=0): - self.rng_state.pcg_state = &self.pcg32_random_state - self.seed(seed, inc) - self.lock = Lock() - - self._bitgen.state = <void *>&self.rng_state - self._bitgen.next_uint64 = &pcg32_uint64 - self._bitgen.next_uint32 = &pcg32_uint32 - self._bitgen.next_double = &pcg32_double - self._bitgen.next_raw = &pcg32_raw - - self._ctypes = None - self._cffi = None - - cdef const char *name = "BitGenerator" - self.capsule = PyCapsule_New(<void *>&self._bitgen, name, NULL) - - # Pickling support: - def __getstate__(self): - return self.state - - def __setstate__(self, state): - self.state = state - - def __reduce__(self): - from ._pickle import __bit_generator_ctor - return __bit_generator_ctor, (self.state['bit_generator'],), self.state - - def random_raw(self, size=None, output=True): - """ - random_raw(self, size=None) - - Return randoms as generated by the underlying BitGenerator - - Parameters - ---------- - size : int or tuple of ints, optional - Output shape. If the given shape is, e.g., ``(m, n, k)``, then - ``m * n * k`` samples are drawn. Default is None, in which case a - single value is returned. - output : bool, optional - Output values. Used for performance testing since the generated - values are not returned. - - Returns - ------- - out : uint or ndarray - Drawn samples. - - Notes - ----- - This method directly exposes the the raw underlying pseudo-random - number generator. All values are returned as unsigned 64-bit - values irrespective of the number of bits produced by the PRNG. - - See the class docstring for the number of bits returned. - """ - return random_raw(&self._bitgen, self.lock, size, output) - - def _benchmark(self, Py_ssize_t cnt, method=u'uint64'): - return benchmark(&self._bitgen, self.lock, cnt, method) - - def seed(self, seed=None, inc=0): - """ - seed(seed=None, inc=0) - - Seed the generator. - - This method is called at initialization. It can be called again to - re-seed the generator. - - Parameters - ---------- - seed : int, optional - Seed for ``PCG64``. Integer between 0 and 2**64-1. - inc : int, optional - Increment to use for PCG stream. Integer between 0 and 2**64-1. - - Raises - ------ - ValueError - If seed values are out of range for the PRNG. - """ - ub = 2 ** 64 - if seed is None: - try: - seed = <np.ndarray>random_entropy(2) - except RuntimeError: - seed = <np.ndarray>random_entropy(2, 'fallback') - seed = seed.view(np.uint64).squeeze() - else: - err_msg = 'seed must be a scalar integer between 0 and ' \ - '{ub}'.format(ub=ub) - if not np.isscalar(seed): - raise TypeError(err_msg) - if int(seed) != seed: - raise TypeError(err_msg) - if seed < 0 or seed > ub: - raise ValueError(err_msg) - - if not np.isscalar(inc): - raise TypeError('inc must be a scalar integer between 0 ' - 'and {ub}'.format(ub=ub)) - if inc < 0 or inc > ub or int(inc) != inc: - raise ValueError('inc must be a scalar integer between 0 ' - 'and {ub}'.format(ub=ub)) - - pcg32_set_seed(&self.rng_state, <uint64_t>seed, <uint64_t>inc) - - cdef jump_inplace(self, iter): - """ - Jump state in-place - - Not part of public API - - Parameters - ---------- - iter : integer, positive - Number of times to jump the state of the rng. - - Notes - ----- - The step size is phi when divided by the period 2**64 - """ - step = int(0x9e3779b97f4a7c16) - self.advance(iter * step) - - def jumped(self, jumps=1): - """ - jumped(jumps=1) - - Returns a new bit generator with the state jumped - - Jumps the state as-if 11400714819323198486 * jumps random numbers - have been generated. - - Parameters - ---------- - jumps : integer, positive - Number of times to jump the state of the bit generator returned - - Returns - ------- - bit_generator : PCG32 - New instance of generator jumped iter times - - Notes - ----- - The jump size is phi-1 when divided by the period 2**64 - """ - cdef PCG32 bit_generator - - bit_generator = self.__class__() - bit_generator.state = self.state - bit_generator.jump_inplace(jumps) - - return bit_generator - - @property - def state(self): - """ - Get or set the PRNG state - - Returns - ------- - state : dict - Dictionary containing the information required to describe the - state of the PRNG - """ - return {'bit_generator': self.__class__.__name__, - 'state': {'state': self.rng_state.pcg_state.state, - 'inc': self.rng_state.pcg_state.inc}} - - @state.setter - def state(self, value): - if not isinstance(value, dict): - raise TypeError('state must be a dict') - bitgen = value.get('bit_generator', '') - if bitgen != self.__class__.__name__: - raise ValueError('state must be for a {0} ' - 'PRNG'.format(self.__class__.__name__)) - self.rng_state.pcg_state.state = value['state']['state'] - self.rng_state.pcg_state.inc = value['state']['inc'] - - def advance(self, delta): - """ - advance(delta) - - Advance the underlying RNG as-if delta draws have occurred. - - Parameters - ---------- - delta : integer, positive - Number of draws to advance the RNG. Must be less than the - size state variable in the underlying RNG. - - Returns - ------- - self : PCG32 - RNG advanced delta steps - - Notes - ----- - Advancing a RNG updates the underlying RNG state as-if a given - number of calls to the underlying RNG have been made. In general - there is not a one-to-one relationship between the number output - random values from a particular distribution and the number of - draws from the core RNG. This occurs for two reasons: - - * The random values are simulated using a rejection-based method - and so, on average, more than one value from the underlying - RNG is required to generate an single draw. - * The number of bits required to generate a simulated value - differs from the number of bits generated by the underlying - RNG. For example, two 16-bit integer values can be simulated - from a single draw of a 32-bit RNG. - """ - delta = wrap_int(delta, 64) - pcg32_advance_state(&self.rng_state, <uint64_t>delta) - return self - - @property - def ctypes(self): - """ - ctypes interface - - Returns - ------- - interface : namedtuple - Named tuple containing ctypes wrapper - - * state_address - Memory address of the state struct - * state - pointer to the state struct - * next_uint64 - function pointer to produce 64 bit integers - * next_uint32 - function pointer to produce 32 bit integers - * next_double - function pointer to produce doubles - * bitgen - pointer to the bit generator struct - """ - if self._ctypes is None: - self._ctypes = prepare_ctypes(&self._bitgen) - - return self._ctypes - - @property - def cffi(self): - """ - CFFI interface - - Returns - ------- - interface : namedtuple - Named tuple containing CFFI wrapper - - * state_address - Memory address of the state struct - * state - pointer to the state struct - * next_uint64 - function pointer to produce 64 bit integers - * next_uint32 - function pointer to produce 32 bit integers - * next_double - function pointer to produce doubles - * bitgen - pointer to the bit generator struct - """ - if self._cffi is not None: - return self._cffi - self._cffi = prepare_cffi(&self._bitgen) - return self._cffi diff --git a/numpy/random/pcg64.pyx b/numpy/random/pcg64.pyx index 7ff9ba6bf..891045230 100644 --- a/numpy/random/pcg64.pyx +++ b/numpy/random/pcg64.pyx @@ -1,21 +1,11 @@ -try: - from threading import Lock -except ImportError: - from dummy_threading import Lock - -from cpython.pycapsule cimport PyCapsule_New - import numpy as np cimport numpy as np from .common cimport * -from .distributions cimport bitgen_t -from .entropy import random_entropy +from .bit_generator cimport BitGenerator __all__ = ['PCG64'] -np.import_array() - cdef extern from "src/pcg64/pcg64.h": # Use int as generic type, actual type read from pcg64.h and is platform dependent ctypedef int pcg64_random_t @@ -45,33 +35,18 @@ cdef double pcg64_double(void* st) nogil: return uint64_to_double(pcg64_next64(<pcg64_state *>st)) -cdef class PCG64: - u""" - PCG64(seed=None, inc=0) +cdef class PCG64(BitGenerator): + """ + PCG64(seed_seq=None) - Container for the PCG-64 pseudo-random number generator. + BitGenerator for the PCG-64 pseudo-random number generator. Parameters ---------- - seed : {None, long}, optional - Random seed initializing the pseudo-random number generator. - Can be an integer in [0, 2**128] or ``None`` (the default). - If `seed` is ``None``, then ``PCG64`` will try to read data - from ``/dev/urandom`` (or the Windows analog) if available. If - unavailable, a 64-bit hash of the time and process ID is used. - inc : {None, int}, optional - Stream to return. - Can be an integer in [0, 2**128] or ``None`` (the default). If `inc` is - ``None``, then 0 is used. Can be used with the same seed to - produce multiple streams using other values of inc. - - Attributes - ---------- - lock: threading.Lock - Lock instance that is shared so that the same bit git generator can - be used in multiple Generators without corrupting the state. Code that - generates values from a bit generator should hold the bit generator's - lock. + seed_seq : {None, SeedSequence, int, array_like[ints]}, optional + A SeedSequence to initialize the BitGenerator. If None, one will be + created. If an int or array_like[ints], it will be used as the entropy + for creating a SeedSequence. Notes ----- @@ -99,19 +74,13 @@ cdef class PCG64: **Parallel Features** - ``PCG64`` can be used in parallel applications in one of two ways. - The preferable method is to use sub-streams, which are generated by using the - same value of ``seed`` and incrementing the second value, ``inc``. - - >>> from numpy.random import Generator, PCG64 - >>> rg = [Generator(PCG64(1234, i + 1)) for i in range(10)] + The preferred way to use a BitGenerator in parallel applications is to use + the `SeedSequence.spawn` method to obtain entropy values, and to use these + to generate new BitGenerators: - The alternative method is to call ``advance`` with a different value on - each instance to produce non-overlapping sequences. - - >>> rg = [Generator(PCG64(1234, i + 1)) for i in range(10)] - >>> for i in range(10): - ... rg[i].bit_generator.advance(i * 2**64) + >>> from numpy.random import Generator, PCG64, SeedSequence + >>> sg = SeedSequence(1234) + >>> rg = [Generator(PCG64(s)) for s in sg.spawn(10)] **Compatibility Guarantee** @@ -125,139 +94,33 @@ cdef class PCG64: .. [2] O'Neill, Melissa E. "PCG: A Family of Simple Fast Space-Efficient Statistically Good Algorithms for Random Number Generation" """ + cdef pcg64_state rng_state cdef pcg64_random_t pcg64_random_state - cdef bitgen_t _bitgen - cdef public object capsule - cdef object _ctypes - cdef object _cffi - cdef public object lock - def __init__(self, seed=None, inc=0): + def __init__(self, seed_seq=None): + BitGenerator.__init__(self, seed_seq) self.rng_state.pcg_state = &self.pcg64_random_state - self.seed(seed, inc) - self.lock = Lock() self._bitgen.state = <void *>&self.rng_state self._bitgen.next_uint64 = &pcg64_uint64 self._bitgen.next_uint32 = &pcg64_uint32 self._bitgen.next_double = &pcg64_double self._bitgen.next_raw = &pcg64_uint64 - - self._ctypes = None - self._cffi = None - - cdef const char *name = "BitGenerator" - self.capsule = PyCapsule_New(<void *>&self._bitgen, name, NULL) - - # Pickling support: - def __getstate__(self): - return self.state - - def __setstate__(self, state): - self.state = state - - def __reduce__(self): - from ._pickle import __bit_generator_ctor - return __bit_generator_ctor, (self.state['bit_generator'],), self.state + # Seed the _bitgen + val = self._seed_seq.generate_state(4, np.uint64) + pcg64_set_seed(&self.rng_state, + <uint64_t *>np.PyArray_DATA(val), + (<uint64_t *>np.PyArray_DATA(val) + 2)) + self._reset_state_variables() cdef _reset_state_variables(self): self.rng_state.has_uint32 = 0 self.rng_state.uinteger = 0 - def random_raw(self, size=None, output=True): - """ - random_raw(self, size=None) - - Return randoms as generated by the underlying BitGenerator - - Parameters - ---------- - size : int or tuple of ints, optional - Output shape. If the given shape is, e.g., ``(m, n, k)``, then - ``m * n * k`` samples are drawn. Default is None, in which case a - single value is returned. - output : bool, optional - Output values. Used for performance testing since the generated - values are not returned. - - Returns - ------- - out : uint or ndarray - Drawn samples. - - Notes - ----- - This method directly exposes the the raw underlying pseudo-random - number generator. All values are returned as unsigned 64-bit - values irrespective of the number of bits produced by the PRNG. - - See the class docstring for the number of bits returned. - """ - return random_raw(&self._bitgen, self.lock, size, output) - - def _benchmark(self, Py_ssize_t cnt, method=u'uint64'): - return benchmark(&self._bitgen, self.lock, cnt, method) - - def seed(self, seed=None, inc=0): - """ - seed(seed=None, inc=0) - - Seed the generator. - - This method is called at initialization. It can be called again to - re-seed the generator. - - Parameters - ---------- - seed : int, optional - Seed for ``PCG64``. Integer between 0 and 2**128-1. - inc : int, optional - Increment to use for PCG stream. Integer between 0 and 2**128-1. - - Raises - ------ - ValueError - If seed values are out of range for the PRNG. - """ - cdef np.ndarray _seed, _inc - ub = 2 ** 128 - if seed is None: - try: - _seed = <np.ndarray>random_entropy(4) - except RuntimeError: - _seed = <np.ndarray>random_entropy(4, 'fallback') - _seed = <np.ndarray>_seed.view(np.uint64) - else: - err_msg = 'seed must be a scalar integer between 0 and ' \ - '{ub}'.format(ub=ub) - if not np.isscalar(seed): - raise TypeError(err_msg) - if int(seed) != seed: - raise TypeError(err_msg) - if seed < 0 or seed > ub: - raise ValueError(err_msg) - _seed = <np.ndarray>np.empty(2, np.uint64) - _seed[0] = int(seed) // 2**64 - _seed[1] = int(seed) % 2**64 - - if not np.isscalar(inc): - raise TypeError('inc must be a scalar integer between 0 and {ub}'.format(ub=ub)) - if inc < 0 or inc > ub or int(inc) != inc: - raise ValueError('inc must be a scalar integer between 0 and {ub}'.format(ub=ub)) - _inc = <np.ndarray>np.empty(2, np.uint64) - _inc[0] = int(inc) // 2**64 - _inc[1] = int(inc) % 2**64 - - pcg64_set_seed(&self.rng_state, - <uint64_t *>np.PyArray_DATA(_seed), - <uint64_t *>np.PyArray_DATA(_inc)) - self._reset_state_variables() - cdef jump_inplace(self, jumps): """ Jump state in-place - Not part of public API Parameters @@ -276,9 +139,7 @@ cdef class PCG64: def jumped(self, jumps=1): """ jumped(jumps=1) - Returns a new bit generator with the state jumped - Jumps the state as-if jumps * 210306068529402873165736369884012333108 random numbers have been generated. @@ -398,47 +259,3 @@ cdef class PCG64: pcg64_advance(&self.rng_state, <uint64_t *>np.PyArray_DATA(d)) self._reset_state_variables() return self - - @property - def ctypes(self): - """ - ctypes interface - - Returns - ------- - interface : namedtuple - Named tuple containing ctypes wrapper - - * state_address - Memory address of the state struct - * state - pointer to the state struct - * next_uint64 - function pointer to produce 64 bit integers - * next_uint32 - function pointer to produce 32 bit integers - * next_double - function pointer to produce doubles - * bitgen - pointer to the bit generator struct - """ - if self._ctypes is None: - self._ctypes = prepare_ctypes(&self._bitgen) - - return self._ctypes - - @property - def cffi(self): - """ - CFFI interface - - Returns - ------- - interface : namedtuple - Named tuple containing CFFI wrapper - - * state_address - Memory address of the state struct - * state - pointer to the state struct - * next_uint64 - function pointer to produce 64 bit integers - * next_uint32 - function pointer to produce 32 bit integers - * next_double - function pointer to produce doubles - * bitgen - pointer to the bit generator struct - """ - if self._cffi is not None: - return self._cffi - self._cffi = prepare_cffi(&self._bitgen) - return self._cffi diff --git a/numpy/random/philox.pyx b/numpy/random/philox.pyx index 91dd3e7dd..1224bf89e 100644 --- a/numpy/random/philox.pyx +++ b/numpy/random/philox.pyx @@ -8,8 +8,7 @@ except ImportError: import numpy as np from .common cimport * -from .distributions cimport bitgen_t -from .entropy import random_entropy, seed_by_array +from .bit_generator cimport BitGenerator __all__ = ['Philox'] @@ -55,7 +54,7 @@ cdef uint32_t philox_uint32(void *st) nogil: cdef double philox_double(void*st) nogil: return uint64_to_double(philox_next64(<philox_state *> st)) -cdef class Philox: +cdef class Philox(BitGenerator): """ Philox(seed=None, counter=None, key=None) @@ -63,22 +62,18 @@ cdef class Philox: Parameters ---------- - seed : {None, int, array_like}, optional - Random seed initializing the pseudo-random number generator. - Can be an integer in [0, 2**64-1], array of integers in - [0, 2**64-1] or ``None`` (the default). If `seed` is ``None``, - data will be read from ``/dev/urandom`` (or the Windows analog) - if available. If unavailable, a hash of the time and process ID is - used. + seed_seq : {None, SeedSequence, int, array_like[ints]}, optional + A SeedSequence to initialize the BitGenerator. If None, one will be + created. If an int or array_like[ints], it will be used as the entropy + for creating a SeedSequence. counter : {None, int, array_like}, optional Counter to use in the Philox state. Can be either a Python int (long in 2.x) in [0, 2**256) or a 4-element uint64 array. If not provided, the RNG is initialized at 0. key : {None, int, array_like}, optional - Key to use in the Philox state. Unlike seed, which is run through - another RNG before use, the value in key is directly set. Can be either - a Python int (long in 2.x) in [0, 2**128) or a 2-element uint64 array. - key and seed cannot both be used. + Key to use in the Philox state. Unlike seed, the value in key is + directly set. Can be either a Python int (long in 2.x) in [0, 2**128) + or a 2-element uint64 array. `key` and `seed` cannot both be used. Attributes ---------- @@ -102,8 +97,6 @@ cdef class Philox: directly consumable in Python and must be consumed by a ``Generator`` or similar object that supports low-level access. - See ``ThreeFry`` for a closely related PRNG. - **State and Seeding** The ``Philox`` state vector consists of a 2 256-bit values encoded as @@ -163,17 +156,27 @@ cdef class Philox: cdef philox_state rng_state cdef philox4x64_key_t philox_key cdef philox4x64_ctr_t philox_ctr - cdef bitgen_t _bitgen - cdef public object capsule - cdef object _ctypes - cdef object _cffi - cdef public object lock - def __init__(self, seed=None, counter=None, key=None): + def __init__(self, seed_seq=None, counter=None, key=None): + if seed_seq is not None and key is not None: + raise ValueError('seed and key cannot be both used') + BitGenerator.__init__(self, seed_seq) self.rng_state.ctr = &self.philox_ctr self.rng_state.key = &self.philox_key - self.seed(seed, counter, key) - self.lock = Lock() + if key is not None: + key = int_to_array(key, 'key', 128, 64) + for i in range(2): + self.rng_state.key.v[i] = key[i] + else: + key = self._seed_seq.generate_state(2, np.uint64) + for i in range(2): + self.rng_state.key.v[i] = key[i] + counter = 0 if counter is None else counter + counter = int_to_array(counter, 'counter', 256, 64) + for i in range(4): + self.rng_state.ctr.v[i] = counter[i] + + self._reset_state_variables() self._bitgen.state = <void *>&self.rng_state self._bitgen.next_uint64 = &philox_uint64 @@ -181,23 +184,6 @@ cdef class Philox: self._bitgen.next_double = &philox_double self._bitgen.next_raw = &philox_uint64 - self._ctypes = None - self._cffi = None - - cdef const char *name = 'BitGenerator' - self.capsule = PyCapsule_New(<void *>&self._bitgen, name, NULL) - - # Pickling support: - def __getstate__(self): - return self.state - - def __setstate__(self, state): - self.state = state - - def __reduce__(self): - from ._pickle import __bit_generator_ctor - return __bit_generator_ctor, (self.state['bit_generator'],), self.state - cdef _reset_state_variables(self): self.rng_state.has_uint32 = 0 self.rng_state.uinteger = 0 @@ -205,96 +191,6 @@ cdef class Philox: for i in range(PHILOX_BUFFER_SIZE): self.rng_state.buffer[i] = 0 - def random_raw(self, size=None, output=True): - """ - random_raw(self, size=None) - - Return randoms as generated by the underlying BitGenerator - - Parameters - ---------- - size : int or tuple of ints, optional - Output shape. If the given shape is, e.g., ``(m, n, k)``, then - ``m * n * k`` samples are drawn. Default is None, in which case a - single value is returned. - output : bool, optional - Output values. Used for performance testing since the generated - values are not returned. - - Returns - ------- - out : uint or ndarray - Drawn samples. - - Notes - ----- - This method directly exposes the the raw underlying pseudo-random - number generator. All values are returned as unsigned 64-bit - values irrespective of the number of bits produced by the PRNG. - - See the class docstring for the number of bits returned. - """ - return random_raw(&self._bitgen, self.lock, size, output) - - def _benchmark(self, Py_ssize_t cnt, method=u'uint64'): - return benchmark(&self._bitgen, self.lock, cnt, method) - - def seed(self, seed=None, counter=None, key=None): - """ - seed(seed=None, counter=None, key=None) - - Seed the generator. - - This method is called when ``Philox`` is initialized. It can be - called again to re-seed the generator. For details, see - ``Philox``. - - Parameters - ---------- - seed : int, optional - Seed for ``Philox``. - counter : {int array}, optional - Positive integer less than 2**256 containing the counter position - or a 4 element array of uint64 containing the counter - key : {int, array}, options - Positive integer less than 2**128 containing the key - or a 2 element array of uint64 containing the key - - Raises - ------ - ValueError - If values are out of range for the PRNG. - - Notes - ----- - The two representation of the counter and key are related through - array[i] = (value // 2**(64*i)) % 2**64. - """ - if seed is not None and key is not None: - raise ValueError('seed and key cannot be both used') - ub = 2 ** 64 - if key is None: - if seed is None: - try: - state = random_entropy(4) - except RuntimeError: - state = random_entropy(4, 'fallback') - state = state.view(np.uint64) - else: - state = seed_by_array(seed, 2) - for i in range(2): - self.rng_state.key.v[i] = state[i] - else: - key = int_to_array(key, 'key', 128, 64) - for i in range(2): - self.rng_state.key.v[i] = key[i] - counter = 0 if counter is None else counter - counter = int_to_array(counter, 'counter', 256, 64) - for i in range(4): - self.rng_state.ctr.v[i] = counter[i] - - self._reset_state_variables() - @property def state(self): """ @@ -426,47 +322,3 @@ cdef class Philox: philox_advance(<uint64_t *> delta_a.data, &self.rng_state) self._reset_state_variables() return self - - @property - def ctypes(self): - """ - ctypes interface - - Returns - ------- - interface : namedtuple - Named tuple containing ctypes wrapper - - * state_address - Memory address of the state struct - * state - pointer to the state struct - * next_uint64 - function pointer to produce 64 bit integers - * next_uint32 - function pointer to produce 32 bit integers - * next_double - function pointer to produce doubles - * bitgen - pointer to the BitGenerator struct - """ - if self._ctypes is None: - self._ctypes = prepare_ctypes(&self._bitgen) - - return self._ctypes - - @property - def cffi(self): - """ - CFFI interface - - Returns - ------- - interface : namedtuple - Named tuple containing CFFI wrapper - - * state_address - Memory address of the state struct - * state - pointer to the state struct - * next_uint64 - function pointer to produce 64 bit integers - * next_uint32 - function pointer to produce 32 bit integers - * next_double - function pointer to produce doubles - * bitgen - pointer to the BitGenerator struct - """ - if self._cffi is not None: - return self._cffi - self._cffi = prepare_cffi(&self._bitgen) - return self._cffi diff --git a/numpy/random/setup.py b/numpy/random/setup.py index 5f467a2f5..3bfeeaca1 100644 --- a/numpy/random/setup.py +++ b/numpy/random/setup.py @@ -34,6 +34,9 @@ def configuration(parent_package='', top_path=None): defs.append(('NPY_NO_DEPRECATED_API', 0)) config.add_data_dir('tests') + config.add_data_files('common.pxd') + config.add_data_files('bit_generator.pxd') + config.add_data_files('src/bitgen.h') EXTRA_LINK_ARGS = [] # Math lib @@ -55,9 +58,6 @@ def configuration(parent_package='', top_path=None): # Use legacy integer variable sizes LEGACY_DEFS = [('NP_RANDOM_LEGACY', '1')] - # Required defined for DSFMT size and to allow it to detect SSE2 using - # config file information - DSFMT_DEFS = [('DSFMT_MEXP', '19937'), ("HAVE_NPY_CONFIG_H", "1")] PCG64_DEFS = [] if 1 or sys.maxsize < 2 ** 32 or os.name == 'nt': # Force emulated mode here @@ -75,19 +75,6 @@ def configuration(parent_package='', top_path=None): ], define_macros=defs, ) - config.add_extension('dsfmt', - sources=['dsfmt.c', 'src/dsfmt/dSFMT.c', - 'src/dsfmt/dSFMT-jump.c', - 'src/aligned_malloc/aligned_malloc.c'], - include_dirs=['.', 'src', join('src', 'dsfmt')], - libraries=EXTRA_LIBRARIES, - extra_compile_args=EXTRA_COMPILE_ARGS, - extra_link_args=EXTRA_LINK_ARGS, - depends=[join('src', 'dsfmt', 'dsfmt.h'), - 'dsfmt.pyx', - ], - define_macros=defs + DSFMT_DEFS, - ) for gen in ['mt19937']: # gen.pyx, src/gen/gen.c, src/gen/gen-jump.c config.add_extension(gen, @@ -101,8 +88,7 @@ def configuration(parent_package='', top_path=None): depends=['%s.pyx' % gen], define_macros=defs, ) - for gen in ['philox', 'threefry', 'xoshiro256', 'xoshiro512', - 'pcg64', 'pcg32']: + for gen in ['philox', 'pcg64', 'sfc64']: # gen.pyx, src/gen/gen.c _defs = defs + PCG64_DEFS if gen == 'pcg64' else defs config.add_extension(gen, @@ -112,10 +98,11 @@ def configuration(parent_package='', top_path=None): libraries=EXTRA_LIBRARIES, extra_compile_args=EXTRA_COMPILE_ARGS, extra_link_args=EXTRA_LINK_ARGS, - depends=['%s.pyx' % gen], + depends=['%s.pyx' % gen, 'bit_generator.pyx', + 'bit_generator.pxd'], define_macros=_defs, ) - for gen in ['common']: + for gen in ['common', 'bit_generator']: # gen.pyx config.add_extension(gen, sources=['{0}.c'.format(gen)], @@ -123,15 +110,18 @@ def configuration(parent_package='', top_path=None): extra_compile_args=EXTRA_COMPILE_ARGS, extra_link_args=EXTRA_LINK_ARGS, include_dirs=['.', 'src'], - depends=['%s.pyx' % gen], + depends=['%s.pyx' % gen, '%s.pxd' % gen,], define_macros=defs, ) + other_srcs = [ + 'src/distributions/logfactorial.c', + 'src/distributions/distributions.c', + 'src/distributions/random_hypergeometric.c', + ] for gen in ['generator', 'bounded_integers']: # gen.pyx, src/distributions/distributions.c config.add_extension(gen, - sources=['{0}.c'.format(gen), - join('src', 'distributions', - 'distributions.c')], + sources=['{0}.c'.format(gen)] + other_srcs, libraries=EXTRA_LIBRARIES, extra_compile_args=EXTRA_COMPILE_ARGS, include_dirs=['.', 'src'], @@ -140,15 +130,17 @@ def configuration(parent_package='', top_path=None): define_macros=defs, ) config.add_extension('mtrand', + # mtrand does not depend on random_hypergeometric.c. sources=['mtrand.c', 'src/legacy/legacy-distributions.c', + 'src/distributions/logfactorial.c', 'src/distributions/distributions.c'], include_dirs=['.', 'src', 'src/legacy'], libraries=EXTRA_LIBRARIES, extra_compile_args=EXTRA_COMPILE_ARGS, extra_link_args=EXTRA_LINK_ARGS, depends=['mtrand.pyx'], - define_macros=defs + DSFMT_DEFS + LEGACY_DEFS, + define_macros=defs + LEGACY_DEFS, ) return config diff --git a/numpy/random/sfc64.pyx b/numpy/random/sfc64.pyx new file mode 100644 index 000000000..2c3ec4767 --- /dev/null +++ b/numpy/random/sfc64.pyx @@ -0,0 +1,132 @@ +import numpy as np +cimport numpy as np + +from .common cimport * +from .bit_generator cimport BitGenerator + +__all__ = ['SFC64'] + +cdef extern from "src/sfc64/sfc64.h": + struct s_sfc64_state: + uint64_t s[4] + int has_uint32 + uint32_t uinteger + + ctypedef s_sfc64_state sfc64_state + uint64_t sfc64_next64(sfc64_state *state) nogil + uint32_t sfc64_next32(sfc64_state *state) nogil + void sfc64_set_seed(sfc64_state *state, uint64_t *seed) + void sfc64_get_state(sfc64_state *state, uint64_t *state_arr, int *has_uint32, uint32_t *uinteger) + void sfc64_set_state(sfc64_state *state, uint64_t *state_arr, int has_uint32, uint32_t uinteger) + + +cdef uint64_t sfc64_uint64(void* st) nogil: + return sfc64_next64(<sfc64_state *>st) + +cdef uint32_t sfc64_uint32(void *st) nogil: + return sfc64_next32(<sfc64_state *> st) + +cdef double sfc64_double(void* st) nogil: + return uint64_to_double(sfc64_next64(<sfc64_state *>st)) + + +cdef class SFC64(BitGenerator): + """ + SFC64(seed_seq=None) + + BitGenerator for Chris Doty-Humphrey's Small Fast Chaotic PRNG. + + Parameters + ---------- + seed_seq : {None, ISeedSequence, int, array_like[ints]}, optional + A SeedSequence to initialize the BitGenerator. If None, one will be + created. If an int or array_like[ints], it will be used as the entropy + for creating a SeedSequence. + + Notes + ----- + ``SFC64`` is a 256-bit implementation of Chris Doty-Humphrey's Small Fast + Chaotic PRNG ([1]_). ``SFC64`` has a few different cycles that one might be + on, depending on the seed; the expected period will be about + :math:`2^{255}` ([2]_). ``SFC64`` incorporates a 64-bit counter which means + that the absolute minimum cycle length is :math:`2^{64}` and that distinct + seeds will not run into each other for at least :math:`2**{64}` iterations. + + ``SFC64`` provides a capsule containing function pointers that produce + doubles, and unsigned 32 and 64- bit integers. These are not + directly consumable in Python and must be consumed by a ``Generator`` + or similar object that supports low-level access. + + **Compatibility Guarantee** + + ``SFC64`` makes a guarantee that a fixed seed will always produce the same + random integer stream. + + References + ---------- + .. [1] "PractRand" + http://pracrand.sourceforge.net/RNG_engines.txt + .. [2] "Random Invertible Mapping Statistics", + http://www.pcg-random.org/posts/random-invertible-mapping-statistics.html + """ + + cdef sfc64_state rng_state + + def __init__(self, seed_seq=None): + BitGenerator.__init__(self, seed_seq) + self._bitgen.state = <void *>&self.rng_state + self._bitgen.next_uint64 = &sfc64_uint64 + self._bitgen.next_uint32 = &sfc64_uint32 + self._bitgen.next_double = &sfc64_double + self._bitgen.next_raw = &sfc64_uint64 + # Seed the _bitgen + val = self._seed_seq.generate_state(3, np.uint64) + sfc64_set_seed(&self.rng_state, <uint64_t*>np.PyArray_DATA(val)) + self._reset_state_variables() + + cdef _reset_state_variables(self): + self.rng_state.has_uint32 = 0 + self.rng_state.uinteger = 0 + + @property + def state(self): + """ + Get or set the PRNG state + + Returns + ------- + state : dict + Dictionary containing the information required to describe the + state of the PRNG + """ + cdef np.ndarray state_vec + cdef int has_uint32 + cdef uint32_t uinteger + + state_vec = <np.ndarray>np.empty(4, dtype=np.uint64) + sfc64_get_state(&self.rng_state, + <uint64_t *>np.PyArray_DATA(state_vec), + &has_uint32, &uinteger) + return {'bit_generator': self.__class__.__name__, + 'state': {'state': state_vec}, + 'has_uint32': has_uint32, + 'uinteger': uinteger} + + @state.setter + def state(self, value): + cdef np.ndarray state_vec + cdef int has_uint32 + cdef uint32_t uinteger + if not isinstance(value, dict): + raise TypeError('state must be a dict') + bitgen = value.get('bit_generator', '') + if bitgen != self.__class__.__name__: + raise ValueError('state must be for a {0} ' + 'RNG'.format(self.__class__.__name__)) + state_vec = <np.ndarray>np.empty(4, dtype=np.uint64) + state_vec[:] = value['state']['state'] + has_uint32 = value['has_uint32'] + uinteger = value['uinteger'] + sfc64_set_state(&self.rng_state, + <uint64_t *>np.PyArray_DATA(state_vec), + has_uint32, uinteger) diff --git a/numpy/random/src/bitgen.h b/numpy/random/src/bitgen.h new file mode 100644 index 000000000..9ebc15346 --- /dev/null +++ b/numpy/random/src/bitgen.h @@ -0,0 +1,18 @@ +#ifndef _RANDOM_BITGEN_H +#define _RANDOM_BITGEN_H + +#pragma once +#include <stddef.h> +#include <stdbool.h> +#include <stdint.h> + +typedef struct bitgen { + void *state; + uint64_t (*next_uint64)(void *st); + uint32_t (*next_uint32)(void *st); + double (*next_double)(void *st); + uint64_t (*next_raw)(void *st); +} bitgen_t; + + +#endif diff --git a/numpy/random/src/distributions/distributions.c b/numpy/random/src/distributions/distributions.c index 1272a37e3..65257ecbf 100644 --- a/numpy/random/src/distributions/distributions.c +++ b/numpy/random/src/distributions/distributions.c @@ -1,6 +1,6 @@ #include "distributions.h" -#include "ziggurat.h" #include "ziggurat_constants.h" +#include "logfactorial.h" #if defined(_MSC_VER) && defined(_WIN64) #include <intrin.h> @@ -170,7 +170,7 @@ float random_standard_exponential_zig_f(bitgen_t *bitgen_state) { static NPY_INLINE double next_gauss_zig(bitgen_t *bitgen_state) { uint64_t r; int sign; - int64_t rabs; + uint64_t rabs; int idx; double x, xx, yy; for (;;) { @@ -179,7 +179,7 @@ static NPY_INLINE double next_gauss_zig(bitgen_t *bitgen_state) { idx = r & 0xff; r >>= 8; sign = r & 0x1; - rabs = (int64_t)((r >> 1) & 0x000fffffffffffff); + rabs = (r >> 1) & 0x000fffffffffffff; x = rabs * wi_double[idx]; if (sign & 0x1) x = -x; @@ -216,7 +216,7 @@ void random_gauss_zig_fill(bitgen_t *bitgen_state, npy_intp cnt, double *out) { float random_gauss_zig_f(bitgen_t *bitgen_state) { uint32_t r; int sign; - int32_t rabs; + uint32_t rabs; int idx; float x, xx, yy; for (;;) { @@ -224,7 +224,7 @@ float random_gauss_zig_f(bitgen_t *bitgen_state) { r = next_uint32(bitgen_state); idx = r & 0xff; sign = (r >> 8) & 0x1; - rabs = (int32_t)((r >> 9) & 0x0007fffff); + rabs = (r >> 9) & 0x0007fffff; x = rabs * wi_float[idx]; if (sign & 0x1) x = -x; @@ -469,8 +469,11 @@ uint64_t random_uint(bitgen_t *bitgen_state) { * log-gamma function to support some of these distributions. The * algorithm comes from SPECFUN by Shanjie Zhang and Jianming Jin and their * book "Computation of Special Functions", 1996, John Wiley & Sons, Inc. + * + * If loggam(k+1) is being used to compute log(k!) for an integer k, consider + * using logfactorial(k) instead. */ -static double loggam(double x) { +double loggam(double x) { double x0, x2, xp, gl, gl0; RAND_INT_TYPE k, n; @@ -1128,105 +1131,6 @@ double random_triangular(bitgen_t *bitgen_state, double left, double mode, } } -RAND_INT_TYPE random_hypergeometric_hyp(bitgen_t *bitgen_state, - RAND_INT_TYPE good, RAND_INT_TYPE bad, - RAND_INT_TYPE sample) { - RAND_INT_TYPE d1, k, z; - double d2, u, y; - - d1 = bad + good - sample; - d2 = (double)MIN(bad, good); - - y = d2; - k = sample; - while (y > 0.0) { - u = next_double(bitgen_state); - y -= (RAND_INT_TYPE)floor(u + y / (d1 + k)); - k--; - if (k == 0) - break; - } - z = (RAND_INT_TYPE)(d2 - y); - if (good > bad) - z = sample - z; - return z; -} - -/* D1 = 2*sqrt(2/e) */ -/* D2 = 3 - 2*sqrt(3/e) */ -#define D1 1.7155277699214135 -#define D2 0.8989161620588988 -RAND_INT_TYPE random_hypergeometric_hrua(bitgen_t *bitgen_state, - RAND_INT_TYPE good, RAND_INT_TYPE bad, - RAND_INT_TYPE sample) { - RAND_INT_TYPE mingoodbad, maxgoodbad, popsize, m, d9; - double d4, d5, d6, d7, d8, d10, d11; - RAND_INT_TYPE Z; - double T, W, X, Y; - - mingoodbad = MIN(good, bad); - popsize = good + bad; - maxgoodbad = MAX(good, bad); - m = MIN(sample, popsize - sample); - d4 = ((double)mingoodbad) / popsize; - d5 = 1.0 - d4; - d6 = m * d4 + 0.5; - d7 = sqrt((double)(popsize - m) * sample * d4 * d5 / (popsize - 1) + 0.5); - d8 = D1 * d7 + D2; - d9 = (RAND_INT_TYPE)floor((double)(m + 1) * (mingoodbad + 1) / (popsize + 2)); - d10 = (loggam(d9 + 1) + loggam(mingoodbad - d9 + 1) + loggam(m - d9 + 1) + - loggam(maxgoodbad - m + d9 + 1)); - d11 = MIN(MIN(m, mingoodbad) + 1.0, floor(d6 + 16 * d7)); - /* 16 for 16-decimal-digit precision in D1 and D2 */ - - while (1) { - X = next_double(bitgen_state); - Y = next_double(bitgen_state); - W = d6 + d8 * (Y - 0.5) / X; - - /* fast rejection: */ - if ((W < 0.0) || (W >= d11)) - continue; - - Z = (RAND_INT_TYPE)floor(W); - T = d10 - (loggam(Z + 1) + loggam(mingoodbad - Z + 1) + loggam(m - Z + 1) + - loggam(maxgoodbad - m + Z + 1)); - - /* fast acceptance: */ - if ((X * (4.0 - X) - 3.0) <= T) - break; - - /* fast rejection: */ - if (X * (X - T) >= 1) - continue; - /* log(0.0) is ok here, since always accept */ - if (2.0 * log(X) <= T) - break; /* acceptance */ - } - - /* this is a correction to HRUA* by Ivan Frohne in rv.py */ - if (good > bad) - Z = m - Z; - - /* another fix from rv.py to allow sample to exceed popsize/2 */ - if (m < sample) - Z = good - Z; - - return Z; -} -#undef D1 -#undef D2 - -RAND_INT_TYPE random_hypergeometric(bitgen_t *bitgen_state, RAND_INT_TYPE good, - RAND_INT_TYPE bad, RAND_INT_TYPE sample) { - if (sample > 10) { - return random_hypergeometric_hrua(bitgen_state, good, bad, sample); - } else if (sample > 0) { - return random_hypergeometric_hyp(bitgen_state, good, bad, sample); - } else { - return 0; - } -} uint64_t random_interval(bitgen_t *bitgen_state, uint64_t max) { uint64_t mask, value; diff --git a/numpy/random/src/distributions/distributions.h b/numpy/random/src/distributions/distributions.h index e43a5279c..03b8ec371 100644 --- a/numpy/random/src/distributions/distributions.h +++ b/numpy/random/src/distributions/distributions.h @@ -9,6 +9,7 @@ #include "Python.h" #include "numpy/npy_common.h" #include "numpy/npy_math.h" +#include "src/bitgen.h" /* * RAND_INT_TYPE is used to share integer generators with RandomState which @@ -59,14 +60,6 @@ typedef struct s_binomial_t { double p4; } binomial_t; -typedef struct bitgen { - void *state; - uint64_t (*next_uint64)(void *st); - uint32_t (*next_uint32)(void *st); - double (*next_double)(void *st); - uint64_t (*next_raw)(void *st); -} bitgen_t; - /* Inline generators for internal use */ static NPY_INLINE uint32_t next_uint32(bitgen_t *bitgen_state) { return bitgen_state->next_uint32(bitgen_state->state); @@ -84,6 +77,8 @@ static NPY_INLINE double next_double(bitgen_t *bitgen_state) { return bitgen_state->next_double(bitgen_state->state); } +DECLDIR double loggam(double x); + DECLDIR float random_float(bitgen_t *bitgen_state); DECLDIR double random_double(bitgen_t *bitgen_state); DECLDIR void random_double_fill(bitgen_t *bitgen_state, npy_intp cnt, double *out); @@ -160,8 +155,8 @@ DECLDIR RAND_INT_TYPE random_geometric_search(bitgen_t *bitgen_state, double p); DECLDIR RAND_INT_TYPE random_geometric_inversion(bitgen_t *bitgen_state, double p); DECLDIR RAND_INT_TYPE random_geometric(bitgen_t *bitgen_state, double p); DECLDIR RAND_INT_TYPE random_zipf(bitgen_t *bitgen_state, double a); -DECLDIR RAND_INT_TYPE random_hypergeometric(bitgen_t *bitgen_state, RAND_INT_TYPE good, - RAND_INT_TYPE bad, RAND_INT_TYPE sample); +DECLDIR int64_t random_hypergeometric(bitgen_t *bitgen_state, + int64_t good, int64_t bad, int64_t sample); DECLDIR uint64_t random_interval(bitgen_t *bitgen_state, uint64_t max); diff --git a/numpy/random/src/distributions/logfactorial.c b/numpy/random/src/distributions/logfactorial.c new file mode 100644 index 000000000..130516469 --- /dev/null +++ b/numpy/random/src/distributions/logfactorial.c @@ -0,0 +1,158 @@ + +#include <math.h> +#include <stdint.h> + +/* + * logfact[k] holds log(k!) for k = 0, 1, 2, ..., 125. + */ + +static const double logfact[] = { + 0, + 0, + 0.69314718055994529, + 1.791759469228055, + 3.1780538303479458, + 4.7874917427820458, + 6.5792512120101012, + 8.5251613610654147, + 10.604602902745251, + 12.801827480081469, + 15.104412573075516, + 17.502307845873887, + 19.987214495661885, + 22.552163853123425, + 25.19122118273868, + 27.89927138384089, + 30.671860106080672, + 33.505073450136891, + 36.395445208033053, + 39.339884187199495, + 42.335616460753485, + 45.380138898476908, + 48.471181351835227, + 51.606675567764377, + 54.784729398112319, + 58.003605222980518, + 61.261701761002001, + 64.557538627006338, + 67.88974313718154, + 71.257038967168015, + 74.658236348830158, + 78.092223553315307, + 81.557959456115043, + 85.054467017581516, + 88.580827542197682, + 92.136175603687093, + 95.719694542143202, + 99.330612454787428, + 102.96819861451381, + 106.63176026064346, + 110.32063971475739, + 114.03421178146171, + 117.77188139974507, + 121.53308151543864, + 125.3172711493569, + 129.12393363912722, + 132.95257503561632, + 136.80272263732635, + 140.67392364823425, + 144.5657439463449, + 148.47776695177302, + 152.40959258449735, + 156.3608363030788, + 160.3311282166309, + 164.32011226319517, + 168.32744544842765, + 172.35279713916279, + 176.39584840699735, + 180.45629141754378, + 184.53382886144948, + 188.6281734236716, + 192.7390472878449, + 196.86618167289001, + 201.00931639928152, + 205.1681994826412, + 209.34258675253685, + 213.53224149456327, + 217.73693411395422, + 221.95644181913033, + 226.1905483237276, + 230.43904356577696, + 234.70172344281826, + 238.97838956183432, + 243.26884900298271, + 247.57291409618688, + 251.89040220972319, + 256.22113555000954, + 260.56494097186322, + 264.92164979855278, + 269.29109765101981, + 273.67312428569369, + 278.06757344036612, + 282.4742926876304, + 286.89313329542699, + 291.32395009427029, + 295.76660135076065, + 300.22094864701415, + 304.68685676566872, + 309.1641935801469, + 313.65282994987905, + 318.1526396202093, + 322.66349912672615, + 327.1852877037752, + 331.71788719692847, + 336.26118197919845, + 340.81505887079902, + 345.37940706226686, + 349.95411804077025, + 354.53908551944079, + 359.1342053695754, + 363.73937555556347, + 368.35449607240474, + 372.97946888568902, + 377.61419787391867, + 382.25858877306001, + 386.91254912321756, + 391.57598821732961, + 396.24881705179155, + 400.93094827891576, + 405.6222961611449, + 410.32277652693733, + 415.03230672824964, + 419.75080559954472, + 424.47819341825709, + 429.21439186665157, + 433.95932399501481, + 438.71291418612117, + 443.47508812091894, + 448.24577274538461, + 453.02489623849613, + 457.81238798127816, + 462.60817852687489, + 467.4121995716082, + 472.22438392698058, + 477.04466549258564, + 481.87297922988796 +}; + +/* + * Compute log(k!) + */ + +double logfactorial(int64_t k) +{ + const double halfln2pi = 0.9189385332046728; + + if (k < (int64_t) (sizeof(logfact)/sizeof(logfact[0]))) { + /* Use the lookup table. */ + return logfact[k]; + } + + /* + * Use the Stirling series, truncated at the 1/k**3 term. + * (In a Python implementation of this approximation, the result + * was within 2 ULP of the best 64 bit floating point value for + * k up to 10000000.) + */ + return (k + 0.5)*log(k) - k + (halfln2pi + (1.0/k)*(1/12.0 - 1/(360.0*k*k))); +} diff --git a/numpy/random/src/distributions/logfactorial.h b/numpy/random/src/distributions/logfactorial.h new file mode 100644 index 000000000..1fedef3f6 --- /dev/null +++ b/numpy/random/src/distributions/logfactorial.h @@ -0,0 +1,9 @@ + +#ifndef LOGFACTORIAL_H +#define LOGFACTORIAL_H + +#include <stdint.h> + +double logfactorial(int64_t k); + +#endif diff --git a/numpy/random/src/distributions/random_hypergeometric.c b/numpy/random/src/distributions/random_hypergeometric.c new file mode 100644 index 000000000..59a3a4b9b --- /dev/null +++ b/numpy/random/src/distributions/random_hypergeometric.c @@ -0,0 +1,260 @@ +#include <stdint.h> +#include "distributions.h" +#include "logfactorial.h" + +/* + * Generate a sample from the hypergeometric distribution. + * + * Assume sample is not greater than half the total. See below + * for how the opposite case is handled. + * + * We initialize the following: + * computed_sample = sample + * remaining_good = good + * remaining_total = good + bad + * + * In the loop: + * * computed_sample counts down to 0; + * * remaining_good is the number of good choices not selected yet; + * * remaining_total is the total number of choices not selected yet. + * + * In the loop, we select items by choosing a random integer in + * the interval [0, remaining_total), and if the value is less + * than remaining_good, it means we have selected a good one, + * so remaining_good is decremented. Then, regardless of that + * result, computed_sample is decremented. The loop continues + * until either computed_sample is 0, remaining_good is 0, or + * remaining_total == remaining_good. In the latter case, it + * means there are only good choices left, so we can stop the + * loop early and select what is left of computed_sample from + * the good choices (i.e. decrease remaining_good by computed_sample). + * + * When the loop exits, the actual number of good choices is + * good - remaining_good. + * + * If sample is more than half the total, then initially we set + * computed_sample = total - sample + * and at the end we return remaining_good (i.e. the loop in effect + * selects the complement of the result). + * + * It is assumed that when this function is called: + * * good, bad and sample are nonnegative; + * * the sum good+bad will not result in overflow; + * * sample <= good+bad. + */ + +static int64_t hypergeometric_sample(bitgen_t *bitgen_state, + int64_t good, int64_t bad, int64_t sample) +{ + int64_t remaining_total, remaining_good, result, computed_sample; + int64_t total = good + bad; + + if (sample > total/2) { + computed_sample = total - sample; + } + else { + computed_sample = sample; + } + + remaining_total = total; + remaining_good = good; + + while ((computed_sample > 0) && (remaining_good > 0) && + (remaining_total > remaining_good)) { + // random_interval(bitgen_state, max) returns an integer in + // [0, max] *inclusive*, so we decrement remaining_total before + // passing it to random_interval(). + --remaining_total; + if ((int64_t) random_interval(bitgen_state, + remaining_total) < remaining_good) { + // Selected a "good" one, so decrement remaining_good. + --remaining_good; + } + --computed_sample; + } + + if (remaining_total == remaining_good) { + // Only "good" choices are left. + remaining_good -= computed_sample; + } + + if (sample > total/2) { + result = remaining_good; + } + else { + result = good - remaining_good; + } + + return result; +} + + +// D1 = 2*sqrt(2/e) +// D2 = 3 - 2*sqrt(3/e) +#define D1 1.7155277699214135 +#define D2 0.8989161620588988 + +/* + * Generate variates from the hypergeometric distribution + * using the ratio-of-uniforms method. + * + * In the code, the variable names a, b, c, g, h, m, p, q, K, T, + * U and X match the names used in "Algorithm HRUA" beginning on + * page 82 of Stadlober's 1989 thesis. + * + * It is assumed that when this function is called: + * * good, bad and sample are nonnegative; + * * the sum good+bad will not result in overflow; + * * sample <= good+bad. + * + * References: + * - Ernst Stadlober's thesis "Sampling from Poisson, Binomial and + * Hypergeometric Distributions: Ratio of Uniforms as a Simple and + * Fast Alternative" (1989) + * - Ernst Stadlober, "The ratio of uniforms approach for generating + * discrete random variates", Journal of Computational and Applied + * Mathematics, 31, pp. 181-189 (1990). + */ + +static int64_t hypergeometric_hrua(bitgen_t *bitgen_state, + int64_t good, int64_t bad, int64_t sample) +{ + int64_t mingoodbad, maxgoodbad, popsize; + int64_t computed_sample; + double p, q; + double mu, var; + double a, c, b, h, g; + int64_t m, K; + + popsize = good + bad; + computed_sample = MIN(sample, popsize - sample); + mingoodbad = MIN(good, bad); + maxgoodbad = MAX(good, bad); + + /* + * Variables that do not match Stadlober (1989) + * Here Stadlober + * ---------------- --------- + * mingoodbad M + * popsize N + * computed_sample n + */ + + p = ((double) mingoodbad) / popsize; + q = ((double) maxgoodbad) / popsize; + + // mu is the mean of the distribution. + mu = computed_sample * p; + + a = mu + 0.5; + + // var is the variance of the distribution. + var = ((double)(popsize - computed_sample) * + computed_sample * p * q / (popsize - 1)); + + c = sqrt(var + 0.5); + + /* + * h is 2*s_hat (See Stadlober's theses (1989), Eq. (5.17); or + * Stadlober (1990), Eq. 8). s_hat is the scale of the "table mountain" + * function that dominates the scaled hypergeometric PMF ("scaled" means + * normalized to have a maximum value of 1). + */ + h = D1*c + D2; + + m = (int64_t) floor((double)(computed_sample + 1) * (mingoodbad + 1) / + (popsize + 2)); + + g = (logfactorial(m) + + logfactorial(mingoodbad - m) + + logfactorial(computed_sample - m) + + logfactorial(maxgoodbad - computed_sample + m)); + + /* + * b is the upper bound for random samples: + * ... min(computed_sample, mingoodbad) + 1 is the length of the support. + * ... floor(a + 16*c) is 16 standard deviations beyond the mean. + * + * The idea behind the second upper bound is that values that far out in + * the tail have negligible probabilities. + * + * There is a comment in a previous version of this algorithm that says + * "16 for 16-decimal-digit precision in D1 and D2", + * but there is no documented justification for this value. A lower value + * might work just as well, but I've kept the value 16 here. + */ + b = MIN(MIN(computed_sample, mingoodbad) + 1, floor(a + 16*c)); + + while (1) { + double U, V, X, T; + double gp; + U = random_double(bitgen_state); + V = random_double(bitgen_state); // "U star" in Stadlober (1989) + X = a + h*(V - 0.5) / U; + + // fast rejection: + if ((X < 0.0) || (X >= b)) { + continue; + } + + K = (int64_t) floor(X); + + gp = (logfactorial(K) + + logfactorial(mingoodbad - K) + + logfactorial(computed_sample - K) + + logfactorial(maxgoodbad - computed_sample + K)); + + T = g - gp; + + // fast acceptance: + if ((U*(4.0 - U) - 3.0) <= T) { + break; + } + + // fast rejection: + if (U*(U - T) >= 1) { + continue; + } + + if (2.0*log(U) <= T) { + // acceptance + break; + } + } + + if (good > bad) { + K = computed_sample - K; + } + + if (computed_sample < sample) { + K = good - K; + } + + return K; +} + + +/* + * Draw a sample from the hypergeometric distribution. + * + * It is assumed that when this function is called: + * * good, bad and sample are nonnegative; + * * the sum good+bad will not result in overflow; + * * sample <= good+bad. + */ + +int64_t random_hypergeometric(bitgen_t *bitgen_state, + int64_t good, int64_t bad, int64_t sample) +{ + int64_t r; + + if ((sample >= 10) && (sample <= good + bad - 10)) { + // This will use the ratio-of-uniforms method. + r = hypergeometric_hrua(bitgen_state, good, bad, sample); + } + else { + // The simpler implementation is faster for small samples. + r = hypergeometric_sample(bitgen_state, good, bad, sample); + } + return r; +} diff --git a/numpy/random/src/distributions/ziggurat.h b/numpy/random/src/distributions/ziggurat.h deleted file mode 100644 index 7808c0e68..000000000 --- a/numpy/random/src/distributions/ziggurat.h +++ /dev/null @@ -1,276 +0,0 @@ -/* - * Constants from Julia's Ziggurat implementation - */ - -static const uint64_t ki[] = { - 0x0007799ec012f7b2, 0x0000000000000000, 0x0006045f4c7de363, - 0x0006d1aa7d5ec0a5, 0x000728fb3f60f777, 0x0007592af4e9fbc0, - 0x000777a5c0bf655d, 0x00078ca3857d2256, 0x00079bf6b0ffe58b, - 0x0007a7a34ab092ad, 0x0007b0d2f20dd1cb, 0x0007b83d3aa9cb52, - 0x0007be597614224d, 0x0007c3788631abe9, 0x0007c7d32bc192ee, - 0x0007cb9263a6e86d, 0x0007ced483edfa84, 0x0007d1b07ac0fd39, - 0x0007d437ef2da5fc, 0x0007d678b069aa6e, 0x0007d87db38c5c87, - 0x0007da4fc6a9ba62, 0x0007dbf611b37f3b, 0x0007dd7674d0f286, - 0x0007ded5ce8205f6, 0x0007e018307fb62b, 0x0007e141081bd124, - 0x0007e2533d712de8, 0x0007e3514bbd7718, 0x0007e43d54944b52, - 0x0007e5192f25ef42, 0x0007e5e67481118d, 0x0007e6a6897c1ce2, - 0x0007e75aa6c7f64c, 0x0007e803df8ee498, 0x0007e8a326eb6272, - 0x0007e93954717a28, 0x0007e9c727f8648f, 0x0007ea4d4cc85a3c, - 0x0007eacc5c4907a9, 0x0007eb44e0474cf6, 0x0007ebb754e47419, - 0x0007ec242a3d8474, 0x0007ec8bc5d69645, 0x0007ecee83d3d6e9, - 0x0007ed4cb8082f45, 0x0007eda6aee0170f, 0x0007edfcae2dfe68, - 0x0007ee4ef5dccd3e, 0x0007ee9dc08c394e, 0x0007eee9441a17c7, - 0x0007ef31b21b4fb1, 0x0007ef773846a8a7, 0x0007efba00d35a17, - 0x0007effa32ccf69f, 0x0007f037f25e1278, 0x0007f0736112d12c, - 0x0007f0ac9e145c25, 0x0007f0e3c65e1fcc, 0x0007f118f4ed8e54, - 0x0007f14c42ed0dc8, 0x0007f17dc7daa0c3, 0x0007f1ad99aac6a5, - 0x0007f1dbcce80015, 0x0007f20874cf56bf, 0x0007f233a36a3b9a, - 0x0007f25d69a604ad, 0x0007f285d7694a92, 0x0007f2acfba75e3b, - 0x0007f2d2e4720909, 0x0007f2f79f09c344, 0x0007f31b37ec883b, - 0x0007f33dbae36abc, 0x0007f35f330f08d5, 0x0007f37faaf2fa79, - 0x0007f39f2c805380, 0x0007f3bdc11f4f1c, 0x0007f3db71b83850, - 0x0007f3f846bba121, 0x0007f4144829f846, 0x0007f42f7d9a8b9d, - 0x0007f449ee420432, 0x0007f463a0f8675e, 0x0007f47c9c3ea77b, - 0x0007f494e643cd8e, 0x0007f4ac84e9c475, 0x0007f4c37dc9cd50, - 0x0007f4d9d638a432, 0x0007f4ef934a5b6a, 0x0007f504b9d5f33d, - 0x0007f5194e78b352, 0x0007f52d55994a96, 0x0007f540d36aba0c, - 0x0007f553cbef0e77, 0x0007f56642f9ec8f, 0x0007f5783c32f31e, - 0x0007f589bb17f609, 0x0007f59ac2ff1525, 0x0007f5ab5718b15a, - 0x0007f5bb7a71427c, 0x0007f5cb2ff31009, 0x0007f5da7a67cebe, - 0x0007f5e95c7a24e7, 0x0007f5f7d8b7171e, 0x0007f605f18f5ef4, - 0x0007f613a958ad0a, 0x0007f621024ed7e9, 0x0007f62dfe94f8cb, - 0x0007f63aa036777a, 0x0007f646e928065a, 0x0007f652db488f88, - 0x0007f65e786213ff, 0x0007f669c22a7d8a, 0x0007f674ba446459, - 0x0007f67f623fc8db, 0x0007f689bb9ac294, 0x0007f693c7c22481, - 0x0007f69d881217a6, 0x0007f6a6fdd6ac36, 0x0007f6b02a4c61ee, - 0x0007f6b90ea0a7f4, 0x0007f6c1abf254c0, 0x0007f6ca03521664, - 0x0007f6d215c2db82, 0x0007f6d9e43a3559, 0x0007f6e16fa0b329, - 0x0007f6e8b8d23729, 0x0007f6efc09e4569, 0x0007f6f687c84cbf, - 0x0007f6fd0f07ea09, 0x0007f703570925e2, 0x0007f709606cad03, - 0x0007f70f2bc8036f, 0x0007f714b9a5b292, 0x0007f71a0a85725d, - 0x0007f71f1edc4d9e, 0x0007f723f714c179, 0x0007f728938ed843, - 0x0007f72cf4a03fa0, 0x0007f7311a945a16, 0x0007f73505ac4bf8, - 0x0007f738b61f03bd, 0x0007f73c2c193dc0, 0x0007f73f67bd835c, - 0x0007f74269242559, 0x0007f745305b31a1, 0x0007f747bd666428, - 0x0007f74a103f12ed, 0x0007f74c28d414f5, 0x0007f74e0709a42d, - 0x0007f74faab939f9, 0x0007f75113b16657, 0x0007f75241b5a155, - 0x0007f753347e16b8, 0x0007f753ebb76b7c, 0x0007f75467027d05, - 0x0007f754a5f4199d, 0x0007f754a814b207, 0x0007f7546ce003ae, - 0x0007f753f3c4bb29, 0x0007f7533c240e92, 0x0007f75245514f41, - 0x0007f7510e91726c, 0x0007f74f971a9012, 0x0007f74dde135797, - 0x0007f74be2927971, 0x0007f749a39e051c, 0x0007f747202aba8a, - 0x0007f744571b4e3c, 0x0007f741473f9efe, 0x0007f73def53dc43, - 0x0007f73a4dff9bff, 0x0007f73661d4deaf, 0x0007f732294f003f, - 0x0007f72da2d19444, 0x0007f728cca72bda, 0x0007f723a5000367, - 0x0007f71e29f09627, 0x0007f7185970156b, 0x0007f7123156c102, - 0x0007f70baf5c1e2c, 0x0007f704d1150a23, 0x0007f6fd93f1a4e5, - 0x0007f6f5f53b10b6, 0x0007f6edf211023e, 0x0007f6e587671ce9, - 0x0007f6dcb2021679, 0x0007f6d36e749c64, 0x0007f6c9b91bf4c6, - 0x0007f6bf8e1c541b, 0x0007f6b4e95ce015, 0x0007f6a9c68356ff, - 0x0007f69e20ef5211, 0x0007f691f3b517eb, 0x0007f6853997f321, - 0x0007f677ed03ff19, 0x0007f66a08075bdc, 0x0007f65b844ab75a, - 0x0007f64c5b091860, 0x0007f63c8506d4bc, 0x0007f62bfa8798fe, - 0x0007f61ab34364b0, 0x0007f608a65a599a, 0x0007f5f5ca4737e8, - 0x0007f5e214d05b48, 0x0007f5cd7af7066e, 0x0007f5b7f0e4c2a1, - 0x0007f5a169d68fcf, 0x0007f589d80596a5, 0x0007f5712c8d0174, - 0x0007f557574c912b, 0x0007f53c46c77193, 0x0007f51fe7feb9f2, - 0x0007f5022646ecfb, 0x0007f4e2eb17ab1d, 0x0007f4c21dd4a3d1, - 0x0007f49fa38ea394, 0x0007f47b5ebb62eb, 0x0007f4552ee27473, - 0x0007f42cf03d58f5, 0x0007f4027b48549f, 0x0007f3d5a44119df, - 0x0007f3a63a8fb552, 0x0007f37408155100, 0x0007f33ed05b55ec, - 0x0007f3064f9c183e, 0x0007f2ca399c7ba1, 0x0007f28a384bb940, - 0x0007f245ea1b7a2b, 0x0007f1fcdffe8f1b, 0x0007f1ae9af758cd, - 0x0007f15a8917f27e, 0x0007f10001ccaaab, 0x0007f09e413c418a, - 0x0007f034627733d7, 0x0007efc15815b8d5, 0x0007ef43e2bf7f55, - 0x0007eeba84e31dfe, 0x0007ee237294df89, 0x0007ed7c7c170141, - 0x0007ecc2f0d95d3a, 0x0007ebf377a46782, 0x0007eb09d6deb285, - 0x0007ea00a4f17808, 0x0007e8d0d3da63d6, 0x0007e771023b0fcf, - 0x0007e5d46c2f08d8, 0x0007e3e937669691, 0x0007e195978f1176, - 0x0007deb2c0e05c1c, 0x0007db0362002a19, 0x0007d6202c151439, - 0x0007cf4b8f00a2cb, 0x0007c4fd24520efd, 0x0007b362fbf81816, - 0x00078d2d25998e24}; - -static const double wi[] = { - 1.7367254121602630e-15, 9.5586603514556339e-17, 1.2708704834810623e-16, - 1.4909740962495474e-16, 1.6658733631586268e-16, 1.8136120810119029e-16, - 1.9429720153135588e-16, 2.0589500628482093e-16, 2.1646860576895422e-16, - 2.2622940392218116e-16, 2.3532718914045892e-16, 2.4387234557428771e-16, - 2.5194879829274225e-16, 2.5962199772528103e-16, 2.6694407473648285e-16, - 2.7395729685142446e-16, 2.8069646002484804e-16, 2.8719058904113930e-16, - 2.9346417484728883e-16, 2.9953809336782113e-16, 3.0543030007192440e-16, - 3.1115636338921572e-16, 3.1672988018581815e-16, 3.2216280350549905e-16, - 3.2746570407939751e-16, 3.3264798116841710e-16, 3.3771803417353232e-16, - 3.4268340353119356e-16, 3.4755088731729758e-16, 3.5232663846002031e-16, - 3.5701624633953494e-16, 3.6162480571598339e-16, 3.6615697529653540e-16, - 3.7061702777236077e-16, 3.7500889278747798e-16, 3.7933619401549554e-16, - 3.8360228129677279e-16, 3.8781025861250247e-16, 3.9196300853257678e-16, - 3.9606321366256378e-16, 4.0011337552546690e-16, 4.0411583124143332e-16, - 4.0807276830960448e-16, 4.1198623774807442e-16, 4.1585816580828064e-16, - 4.1969036444740733e-16, 4.2348454071520708e-16, 4.2724230518899761e-16, - 4.3096517957162941e-16, 4.3465460355128760e-16, 4.3831194100854571e-16, - 4.4193848564470665e-16, 4.4553546609579137e-16, 4.4910405058828750e-16, - 4.5264535118571397e-16, 4.5616042766900381e-16, 4.5965029108849407e-16, - 4.6311590702081647e-16, 4.6655819856008752e-16, 4.6997804906941950e-16, - 4.7337630471583237e-16, 4.7675377680908526e-16, 4.8011124396270155e-16, - 4.8344945409350080e-16, 4.8676912627422087e-16, 4.9007095245229938e-16, - 4.9335559904654139e-16, 4.9662370843221783e-16, 4.9987590032409088e-16, - 5.0311277306593187e-16, 5.0633490483427195e-16, 5.0954285476338923e-16, - 5.1273716399787966e-16, 5.1591835667857364e-16, 5.1908694086703434e-16, - 5.2224340941340417e-16, 5.2538824077194543e-16, 5.2852189976823820e-16, - 5.3164483832166176e-16, 5.3475749612647295e-16, 5.3786030129452348e-16, - 5.4095367096239933e-16, 5.4403801186554671e-16, 5.4711372088173611e-16, - 5.5018118554603362e-16, 5.5324078453927836e-16, 5.5629288815190902e-16, - 5.5933785872484621e-16, 5.6237605106900435e-16, 5.6540781286489604e-16, - 5.6843348504368141e-16, 5.7145340215092040e-16, 5.7446789269419609e-16, - 5.7747727947569648e-16, 5.8048187991076857e-16, 5.8348200633338921e-16, - 5.8647796628943653e-16, 5.8947006281858718e-16, 5.9245859472561339e-16, - 5.9544385684180598e-16, 5.9842614027720281e-16, 6.0140573266426640e-16, - 6.0438291839361250e-16, 6.0735797884236057e-16, 6.1033119259564394e-16, - 6.1330283566179110e-16, 6.1627318168165963e-16, 6.1924250213258470e-16, - 6.2221106652737879e-16, 6.2517914260879998e-16, 6.2814699653988953e-16, - 6.3111489309056042e-16, 6.3408309582080600e-16, 6.3705186726088149e-16, - 6.4002146908880247e-16, 6.4299216230548961e-16, 6.4596420740788321e-16, - 6.4893786456033965e-16, 6.5191339376461587e-16, 6.5489105502874154e-16, - 6.5787110853507413e-16, 6.6085381480782587e-16, 6.6383943488035057e-16, - 6.6682823046247459e-16, 6.6982046410815579e-16, 6.7281639938375311e-16, - 6.7581630103719006e-16, 6.7882043516829803e-16, 6.8182906940062540e-16, - 6.8484247305500383e-16, 6.8786091732516637e-16, 6.9088467545571690e-16, - 6.9391402292275690e-16, 6.9694923761748294e-16, 6.9999060003307640e-16, - 7.0303839345521508e-16, 7.0609290415654822e-16, 7.0915442159548734e-16, - 7.1222323861967788e-16, 7.1529965167453030e-16, 7.1838396101720629e-16, - 7.2147647093647067e-16, 7.2457748997883870e-16, 7.2768733118146927e-16, - 7.3080631231227429e-16, 7.3393475611774048e-16, 7.3707299057898310e-16, - 7.4022134917657997e-16, 7.4338017116476479e-16, 7.4654980185558890e-16, - 7.4973059291369793e-16, 7.5292290266240584e-16, 7.5612709640179217e-16, - 7.5934354673958895e-16, 7.6257263393567558e-16, 7.6581474626104873e-16, - 7.6907028037219191e-16, 7.7233964170182985e-16, 7.7562324486711744e-16, - 7.7892151409638524e-16, 7.8223488367564108e-16, 7.8556379841610841e-16, - 7.8890871414417552e-16, 7.9227009821522709e-16, 7.9564843005293662e-16, - 7.9904420171571300e-16, 8.0245791849212591e-16, 8.0589009952726568e-16, - 8.0934127848215009e-16, 8.1281200422845008e-16, 8.1630284158098775e-16, - 8.1981437207065329e-16, 8.2334719476060504e-16, 8.2690192710884700e-16, - 8.3047920588053737e-16, 8.3407968811366288e-16, 8.3770405214202216e-16, - 8.4135299867980282e-16, 8.4502725197240968e-16, 8.4872756101861549e-16, - 8.5245470086955962e-16, 8.5620947401062333e-16, 8.5999271183276646e-16, - 8.6380527620052589e-16, 8.6764806112455816e-16, 8.7152199454736980e-16, - 8.7542804025171749e-16, 8.7936719990210427e-16, 8.8334051523084080e-16, - 8.8734907038131345e-16, 8.9139399442240861e-16, 8.9547646404950677e-16, - 8.9959770648910994e-16, 9.0375900262601175e-16, 9.0796169037400680e-16, - 9.1220716831348461e-16, 9.1649689962191353e-16, 9.2083241632623076e-16, - 9.2521532390956933e-16, 9.2964730630864167e-16, 9.3413013134252651e-16, - 9.3866565661866598e-16, 9.4325583596767065e-16, 9.4790272646517382e-16, - 9.5260849610662787e-16, 9.5737543220974496e-16, 9.6220595062948384e-16, - 9.6710260588230542e-16, 9.7206810229016259e-16, 9.7710530627072088e-16, - 9.8221725991905411e-16, 9.8740719604806711e-16, 9.9267855488079765e-16, - 9.9803500261836449e-16, 1.0034804521436181e-15, 1.0090190861637457e-15, - 1.0146553831467086e-15, 1.0203941464683124e-15, 1.0262405372613567e-15, - 1.0322001115486456e-15, 1.0382788623515399e-15, 1.0444832676000471e-15, - 1.0508203448355195e-15, 1.0572977139009890e-15, 1.0639236690676801e-15, - 1.0707072623632994e-15, 1.0776584002668106e-15, 1.0847879564403425e-15, - 1.0921079038149563e-15, 1.0996314701785628e-15, 1.1073733224935752e-15, - 1.1153497865853155e-15, 1.1235791107110833e-15, 1.1320817840164846e-15, - 1.1408809242582780e-15, 1.1500027537839792e-15, 1.1594771891449189e-15, - 1.1693385786910960e-15, 1.1796266352955801e-15, 1.1903876299282890e-15, - 1.2016759392543819e-15, 1.2135560818666897e-15, 1.2261054417450561e-15, - 1.2394179789163251e-15, 1.2536093926602567e-15, 1.2688244814255010e-15, - 1.2852479319096109e-15, 1.3031206634689985e-15, 1.3227655770195326e-15, - 1.3446300925011171e-15, 1.3693606835128518e-15, 1.3979436672775240e-15, - 1.4319989869661328e-15, 1.4744848603597596e-15, 1.5317872741611144e-15, - 1.6227698675312968e-15}; - -static const double fi[] = { - 1.0000000000000000e+00, 9.7710170126767082e-01, 9.5987909180010600e-01, - 9.4519895344229909e-01, 9.3206007595922991e-01, 9.1999150503934646e-01, - 9.0872644005213032e-01, 8.9809592189834297e-01, 8.8798466075583282e-01, - 8.7830965580891684e-01, 8.6900868803685649e-01, 8.6003362119633109e-01, - 8.5134625845867751e-01, 8.4291565311220373e-01, 8.3471629298688299e-01, - 8.2672683394622093e-01, 8.1892919160370192e-01, 8.1130787431265572e-01, - 8.0384948317096383e-01, 7.9654233042295841e-01, 7.8937614356602404e-01, - 7.8234183265480195e-01, 7.7543130498118662e-01, 7.6863731579848571e-01, - 7.6195334683679483e-01, 7.5537350650709567e-01, 7.4889244721915638e-01, - 7.4250529634015061e-01, 7.3620759812686210e-01, 7.2999526456147568e-01, - 7.2386453346862967e-01, 7.1781193263072152e-01, 7.1183424887824798e-01, - 7.0592850133275376e-01, 7.0009191813651117e-01, 6.9432191612611627e-01, - 6.8861608300467136e-01, 6.8297216164499430e-01, 6.7738803621877308e-01, - 6.7186171989708166e-01, 6.6639134390874977e-01, 6.6097514777666277e-01, - 6.5561147057969693e-01, 6.5029874311081637e-01, 6.4503548082082196e-01, - 6.3982027745305614e-01, 6.3465179928762327e-01, 6.2952877992483625e-01, - 6.2445001554702606e-01, 6.1941436060583399e-01, 6.1442072388891344e-01, - 6.0946806492577310e-01, 6.0455539069746733e-01, 5.9968175261912482e-01, - 5.9484624376798689e-01, 5.9004799633282545e-01, 5.8528617926337090e-01, - 5.8055999610079034e-01, 5.7586868297235316e-01, 5.7121150673525267e-01, - 5.6658776325616389e-01, 5.6199677581452390e-01, 5.5743789361876550e-01, - 5.5291049042583185e-01, 5.4841396325526537e-01, 5.4394773119002582e-01, - 5.3951123425695158e-01, 5.3510393238045717e-01, 5.3072530440366150e-01, - 5.2637484717168403e-01, 5.2205207467232140e-01, 5.1775651722975591e-01, - 5.1348772074732651e-01, 5.0924524599574761e-01, 5.0502866794346790e-01, - 5.0083757512614835e-01, 4.9667156905248933e-01, 4.9253026364386815e-01, - 4.8841328470545758e-01, 4.8432026942668288e-01, 4.8025086590904642e-01, - 4.7620473271950547e-01, 4.7218153846772976e-01, 4.6818096140569321e-01, - 4.6420268904817391e-01, 4.6024641781284248e-01, 4.5631185267871610e-01, - 4.5239870686184824e-01, 4.4850670150720273e-01, 4.4463556539573912e-01, - 4.4078503466580377e-01, 4.3695485254798533e-01, 4.3314476911265209e-01, - 4.2935454102944126e-01, 4.2558393133802180e-01, 4.2183270922949573e-01, - 4.1810064983784795e-01, 4.1438753404089090e-01, 4.1069314827018799e-01, - 4.0701728432947315e-01, 4.0335973922111429e-01, 3.9972031498019700e-01, - 3.9609881851583223e-01, 3.9249506145931540e-01, 3.8890886001878855e-01, - 3.8534003484007706e-01, 3.8178841087339344e-01, 3.7825381724561896e-01, - 3.7473608713789086e-01, 3.7123505766823922e-01, 3.6775056977903225e-01, - 3.6428246812900372e-01, 3.6083060098964775e-01, 3.5739482014578022e-01, - 3.5397498080007656e-01, 3.5057094148140588e-01, 3.4718256395679348e-01, - 3.4380971314685055e-01, 3.4045225704452164e-01, 3.3711006663700588e-01, - 3.3378301583071823e-01, 3.3047098137916342e-01, 3.2717384281360129e-01, - 3.2389148237639104e-01, 3.2062378495690530e-01, 3.1737063802991350e-01, - 3.1413193159633707e-01, 3.1090755812628634e-01, 3.0769741250429189e-01, - 3.0450139197664983e-01, 3.0131939610080288e-01, 2.9815132669668531e-01, - 2.9499708779996164e-01, 2.9185658561709499e-01, 2.8872972848218270e-01, - 2.8561642681550159e-01, 2.8251659308370741e-01, 2.7943014176163772e-01, - 2.7635698929566810e-01, 2.7329705406857691e-01, 2.7025025636587519e-01, - 2.6721651834356114e-01, 2.6419576399726080e-01, 2.6118791913272082e-01, - 2.5819291133761890e-01, 2.5521066995466168e-01, 2.5224112605594190e-01, - 2.4928421241852824e-01, 2.4633986350126363e-01, 2.4340801542275012e-01, - 2.4048860594050039e-01, 2.3758157443123795e-01, 2.3468686187232990e-01, - 2.3180441082433859e-01, 2.2893416541468023e-01, 2.2607607132238020e-01, - 2.2323007576391746e-01, 2.2039612748015194e-01, 2.1757417672433113e-01, - 2.1476417525117358e-01, 2.1196607630703015e-01, 2.0917983462112499e-01, - 2.0640540639788071e-01, 2.0364274931033485e-01, 2.0089182249465656e-01, - 1.9815258654577511e-01, 1.9542500351413428e-01, 1.9270903690358912e-01, - 1.9000465167046496e-01, 1.8731181422380025e-01, 1.8463049242679927e-01, - 1.8196065559952254e-01, 1.7930227452284767e-01, 1.7665532144373500e-01, - 1.7401977008183875e-01, 1.7139559563750595e-01, 1.6878277480121151e-01, - 1.6618128576448205e-01, 1.6359110823236570e-01, 1.6101222343751107e-01, - 1.5844461415592431e-01, 1.5588826472447920e-01, 1.5334316106026283e-01, - 1.5080929068184568e-01, 1.4828664273257453e-01, 1.4577520800599403e-01, - 1.4327497897351341e-01, 1.4078594981444470e-01, 1.3830811644855071e-01, - 1.3584147657125373e-01, 1.3338602969166913e-01, 1.3094177717364430e-01, - 1.2850872227999952e-01, 1.2608687022018586e-01, 1.2367622820159654e-01, - 1.2127680548479021e-01, 1.1888861344290998e-01, 1.1651166562561080e-01, - 1.1414597782783835e-01, 1.1179156816383801e-01, 1.0944845714681163e-01, - 1.0711666777468364e-01, 1.0479622562248690e-01, 1.0248715894193508e-01, - 1.0018949876880981e-01, 9.7903279038862284e-02, 9.5628536713008819e-02, - 9.3365311912690860e-02, 9.1113648066373634e-02, 8.8873592068275789e-02, - 8.6645194450557961e-02, 8.4428509570353374e-02, 8.2223595813202863e-02, - 8.0030515814663056e-02, 7.7849336702096039e-02, 7.5680130358927067e-02, - 7.3522973713981268e-02, 7.1377949058890375e-02, 6.9245144397006769e-02, - 6.7124653827788497e-02, 6.5016577971242842e-02, 6.2921024437758113e-02, - 6.0838108349539864e-02, 5.8767952920933758e-02, 5.6710690106202902e-02, - 5.4666461324888914e-02, 5.2635418276792176e-02, 5.0617723860947761e-02, - 4.8613553215868521e-02, 4.6623094901930368e-02, 4.4646552251294443e-02, - 4.2684144916474431e-02, 4.0736110655940933e-02, 3.8802707404526113e-02, - 3.6884215688567284e-02, 3.4980941461716084e-02, 3.3093219458578522e-02, - 3.1221417191920245e-02, 2.9365939758133314e-02, 2.7527235669603082e-02, - 2.5705804008548896e-02, 2.3902203305795882e-02, 2.2117062707308864e-02, - 2.0351096230044517e-02, 1.8605121275724643e-02, 1.6880083152543166e-02, - 1.5177088307935325e-02, 1.3497450601739880e-02, 1.1842757857907888e-02, - 1.0214971439701471e-02, 8.6165827693987316e-03, 7.0508754713732268e-03, - 5.5224032992509968e-03, 4.0379725933630305e-03, 2.6090727461021627e-03, - 1.2602859304985975e-03}; - -static const double ziggurat_nor_r = 3.6541528853610087963519472518; -static const double ziggurat_nor_inv_r = - 0.27366123732975827203338247596; // 1.0 / ziggurat_nor_r; -static const double ziggurat_exp_r = 7.6971174701310497140446280481; - -static const float ziggurat_nor_r_f = 3.6541528853610087963519472518f; -static const float ziggurat_nor_inv_r_f = 0.27366123732975827203338247596f; -static const float ziggurat_exp_r_f = 7.6971174701310497140446280481f; diff --git a/numpy/random/src/distributions/ziggurat_constants.h b/numpy/random/src/distributions/ziggurat_constants.h index 17eccec0f..c254466de 100644 --- a/numpy/random/src/distributions/ziggurat_constants.h +++ b/numpy/random/src/distributions/ziggurat_constants.h @@ -1194,3 +1194,13 @@ static const float fe_float[] = { 4.87765598e-03F, 4.15729512e-03F, 3.46026478e-03F, 2.78879879e-03F, 2.14596774e-03F, 1.53629978e-03F, 9.67269282e-04F, 4.54134354e-04F, }; + + +static const double ziggurat_nor_r = 3.6541528853610087963519472518; +static const double ziggurat_nor_inv_r = + 0.27366123732975827203338247596; // 1.0 / ziggurat_nor_r; +static const double ziggurat_exp_r = 7.6971174701310497140446280481; + +static const float ziggurat_nor_r_f = 3.6541528853610087963519472518f; +static const float ziggurat_nor_inv_r_f = 0.27366123732975827203338247596f; +static const float ziggurat_exp_r_f = 7.6971174701310497140446280481f; diff --git a/numpy/random/src/dsfmt/128-bit-jump.poly.txt b/numpy/random/src/dsfmt/128-bit-jump.poly.txt deleted file mode 100644 index fea1318fb..000000000 --- a/numpy/random/src/dsfmt/128-bit-jump.poly.txt +++ /dev/null @@ -1,2 +0,0 @@ -jump polynomial: -f4dfa6c62049d0776e0bf6f1e953f3aa38abb113df86be024eab3773ad5f2b82ead936022e656dff7e562691c59dd5f7d2566b78d9669002503c4ddb1888a49f32333f515e6c60c4ecd221078ec6f26f0a90f4875067ca1f399a99775037adf905566e2c7e6b42131420f8f04f112c92621c9b1502f2a8aefad6c667904af62f0d55e02d396902d3b89450103c5ce5fe0408d97cbb864861b49e4e42048ff3310b48faac55095a7f422eea4aade752f947f947c6be0a0c665bdea099246ab9eff658ea8ca468bf49d0227748367878de06d7bd86ea6708fcac6e252f5f00f04309b2aac3036b64afb39d990427c6c9f03477cc7e935c43c0e61bc161db8eb15516eee8cb377ecbc1849207990fb6778721b29bfe0d89bfda1b3772fa5b0b1f7ec3daf36052032285898c6f6396f55010c31f8201b7e2e51d94f920bfe57684c5415cc342cb39a0045d9793d13cf8646096daeb8bb9bfc20a90de8f2426da8733267a9b9674f32154e8f84a9932223a2ca3c787d0b66df6675febbdfcba2f9cef09c621c57e11098b3289c77397aaae8b104642ffe0c4b75598efbc53745984d68b4d6656cae299ae2be55217a9a02b009ca7be32f47fbe434bce4914a34d0c9b0085bede9b8a99319c34660d66f0124b5a7714c4bf3cbfec3ee43ed817087168bad80133bebaeeb68cf7929a24d1bb3de831a8340d220906ab04159cf94b21d5ee813bd7c80f10f01b43052af530917513b169254c25d6fcfe6cb420d6ce92f54886ef6eaf9a5ba35e893ff593834d05ddf28899e42d729c7df3d21ef036020789739366f0c11ec52ff92a0bfd8ba69508e27b20fabb8217bd36b90e5aa918159ac87913bc7b46c04e366c23c92807fbe9c6a407e6a4db0b4fc23c3b6c706b5ca058fe8c190f849f18d16d6b48b5ed760eb202fd566291a799420b9654e08b8118bcbfead8e9dd2fdb9b053e9bdfb665285c78718f726d0b3d6c37e116428ec9ac9db2637259e4e8d6402bbada46c6bdb03985e19a82e9b4e57de1b025a3cb1f850beae7e8da9941655825bce0e89d536b6ee9064865b1a85c185e9fc9cb7f435de13d44773c00eed442a286e4ab807e3cab4dc3441d1b7d2af693812ae8b39652bb8c835fc895d13d6da93541afeadeee450475c29f3b2dfa8ef1c1e2547463b2cc2f0ff7a42ac4dd35e25c4fa030d2d2766fbe9f2d04c1304671747bace2f7dd55142bfa60f8cbc968bfc3d7a342152dc684a0fb5a32c0962a62b5220ac0f72add9d8b84d6cc76b97d03245e01fc8da3414a49bb4075d3488f29b56dc42ba69e3b58529448c943ecfd98b3784a39d0b8609a8fb945e757f4569f53bd2cf80f7f638acf5b67fe9c560a3b7b0cf7e0398f31aa8b03cf9c62b24296b6d8596b694469a02686c38daa16a1ef86e012d61a2f7de1693a5c00b3685175caec3c67146477eba54830f1d546cb18a553779aa46adb4f2010e33f3def847c7d89b51a8462b227605f6c920fd558a6daf64bc98682e508ae960c0c571870e603ba1fce0c13d53176f353fd319959e13db93eae1359f06e3dd4767c04f824cf34ec7bf8f60161ba1a615db82852eca9e3869afa711ab9a090660b0dc6cfbea310dda77e02310fbaeacd2636f975838c2dbcdbe9ac2cd85cee28f5e3f0c73abf62f9fa02cd79a7606b7ba855db68a07848b057c3aaf38f1a70086e14616f6f88305a1f9ce6b41378a620d4db3e0e7e1d421590dccaeff86212e232eeb5eb8a8d33a8c9b25ae88f3a7bd5032b4efa68f8af3186a02ffcbf5456f12beccace94c81c360cc4a0dcc642b59f991eec68c59af78139ca60b96d6a18e9535f8995e89bd2cf6a0aef3acffd33d1c0c1b79b66414a91d9f65b2b4ec65844b96f725d2b4b0c309f3eb9d714e9dd939bbdfd85ce8fb43679aeab13f6c29549949503c9466dbd337c4cdde46d6eacd15f21f4d8fdeaa627a47884c88a9c85f0b731d271a8ea7cb9e04a4a149c23c10f56b3a0476dc77a999d6e4f813e4b0f805e2a693e2ae4ae0ecc423c9ba5d17b42e691abf83784a582f2b1fd85d1e0a27ba38a500963568b2450363d2c5e3f7b8ba3e5b56e4e9f745a3a710bf2ae233c303068c532ce78ff031e6ab28b705dd94d7db4500909edb5626b8c9bd5ff4f0b4741388f0b91563ee516934c013e901572cba005ac5c535f4f107903be9af7b2793dfb61b5070facbe71eefe1b5600f975c8c38c3a2350d78beadfecb78e981164ae8bc866e732972d3ceef4aac68e15861f9b881d9b51b4edece150bc124b07645defb4202ef5d0e0962db98cae6ed459561c93c74c20bd64362e4f4fffc389a6cd80514604ff22eecc10c9cbc7981d19a8102b24146354c463107c9dc070e29e70df3578022acf72289ef071ab9f9402a544d0399f1b1e5f206b6d46d445f6d612a490e72918e00c853eda8493bef511149e80c9ab56e8b4b8cba3987249f77d060e61760e5792ac321c987c03c2606e9393a7970212992cdbd16448078d5039d4c2c3199714f53278f4f7b1d2e514cf95bdfc078b8bb0db659cb2c3f5cc02890ea84f05d414c88d2db9e9f8455659b9fa6254405317245fa070d6970cafb4dadb2522b490a5c8e02fe973a8cdbfbfbdbfb01535099ffba3d3896bc4d1189fc570c3e6fdc6469265b8da912772e75dd62ab71be507f700d56cac5e68fd6b57ec166168ab5258a69625c142a5b1b3519f94be1bde5e51d3bd8ea0c12d5af2fe4615b1b7bd4a96628a4fabc65925ff09718f63bbebaad98f89bd9543a27b3ff3b5d8bfa89f941a5eb8cc005ccd4a705190e1c9dc6a9f4264e5ee658520a4438e92de854bffc39f8dc7dfbb5de4f14ba63ea16a37d14a7b4610f95b6cffd55e4679b29cedbdf20e7bd16da822fad910c359ee3a68e48aae6e769b0e291d5d3aa3e2ca9d8d23abe8a1d5349f4991e9300852cc0befb20c2fc0d169306b260763344024f8092cbcc24c6807363e9fc548a30d5faab3a94b2af0782a2942be80c45d8b0587efd587394ef33c33022436e285806ddffdd32fe36345c3c38ed8d680abeb7a028b44ee6f94d060a14c7019bb6af1f1b5f0a562957d19826d8cc216f9b908c989ccd5415e3525dfe9422ffb5b50b7cc3083dc325544751e5683535d7439d3da2b0bb73bea551dd99e04e0e793804f4774eb6b1daf781d9caa5128274e599e847862fe309027813d3e4eda0bbeb7201856a5c5d8370e44dabff0bb229c723ba0a6bcf29c44536147de11b7835991018100105bd4329217f7386903fe8e7363cd7b3e893244e245e0a187467664c05b0be1fd429722b9b9a5e3198147fad72776e8a63aab9054fa9d259af0198d088d71d132e6068676a8e9ebb0f616b51ee34aac39c2c2221c71124017270d75ff4a048363c389e04e9b440ad2032a381ac2cfc54f409caa791e65ee4f5d6cd035008f219b88a803a7382ae447bf65a3df2176b25b3b7b67dabe34decd9a1384dc7a003916ca8fbcb29b3ad6fd8eac5bbbaa3bdfa6c6a3ad9427c4f3ed79fea26e14c8ce5fa3b4f82c5f7b6d2125916753a7b92ce9b46d45 diff --git a/numpy/random/src/dsfmt/96-bit-jump.poly.txt b/numpy/random/src/dsfmt/96-bit-jump.poly.txt deleted file mode 100644 index 15c68d155..000000000 --- a/numpy/random/src/dsfmt/96-bit-jump.poly.txt +++ /dev/null @@ -1,2 +0,0 @@ -jump polynomial: -288da521f7244e5f62bf26692bdd1fcdfd38a850addb02d98bd358367cb78c71348f3e163522e0e30e4feb90aa210dd793c94d151fa89aa319911aa42b511ea568a503d595c6d9bcd37317a37ef5679700a5b67f29df72451770fc1eb8c97427cdd9825c23f32dcd5c4fb117a4f5982a3bee8f16595d021165cd9688db342e360e222c9855c8306fd7b5fc82e62e3b1765e7f3319da9da66c325b030bd6175876efc70636306cd2de31a299ca20e9eb1d5063bcbff0ba282aff4737a5b1585cd940ae9cd45fda222308341e0d5588e81b42c4e0574deeb2d80b84c00cb3f8a7ae6278462e1994b83a25b33aa0dc74d5d3d057dabfd6a8a82d7dfb6bb66a223bc46dca2b5fb1885e6ab80fddcd6578b32c21c4a9d761cb9798800c921d56ee356c491454e15956e68ef566c1706fcdfb6a6828ec1fb93db455525828e8741a371c14959658b99bbd358a162230ee451a8432df279e4ba0d3a493954359a5390b16475540578270b168054fefb1e20948d4d20c88005ed09e671b6a94b8ea929f72e7b2f85af4098a92d742b64964ea6b7773b2c20b22a0ff35bd9367c3160b549411230e15a987f361e04daac49d2fe4c7c9371d84bf270d8f33a62680b2ee014bf5be691aa0d82e66e885eaa832a241aff8a09c435ac2b0698bc3865c5125d498a4ffadd31d5f2c6aee6496fdc6c13055b53e7f65a683ef539b6e8ea6e21429a11ff74ccef09ee83eac1b5ddaf1b77fed786fd20e8cbb3e8877b7f80a24fef31a9f8d8108099c50abc886f7ab20c4396bf51af1b806003185eaf2061f55036e26f498b92aabadfb6b5bed2d116b32ae387a692058e6160a9508dc44c971454d9a357ba115278861be0aeaa0926d773c5d4563e37dffcfed8bbf44b79e384650b7eff30aae73154a2ef130cee1eaf32d944e5472ae217789c03276deb8290c73dd5cde0b6dce9b28cbb73776e3e52260768f37a38db3d1c26c3c065b641c7a825edc155d947118d8b6ff8c8818440088724261ca83fa866aa4159fbffac8c28c8a7ca5f1e2fde74b4908c8215cbde20190bdf0de1d5a05a2c116a66eeadcafd643098e74ec3e82b3658c0c4fd7c7797d567b8db3d6b67ca262d713dbf45cc80b89f279be0991f276a4501d2ea6222026caa7e6fbcf4d02fdf65d8f439f88cfb1121d1b0f4dd670d146b93e099a32869448d837e347229745e5c30f1521b0c477b2062c9c8f631dcd29664eec7f28bdcac2a1ca2deabbbc89b21824ba92a61eeb4c5dd62b20c346134d842bcfc189f0e2244bfb8596c38c88d5bd4447fcd30890a4acf71801a6bcf5d806073b9ca730db53e160a79516333748708dd5e5be37d75e90e64d14ddf5ccc9390ae67cbba39916ce9b3b6b1d19378e4bd36ef0c9e62570394051cc273122e0790e381b20e083beca6e88bc2fa8bde22c89689b4b710c775cd9065158b48bf855fc3a3e80693908046ea1da9c558f024ea5ea69d65f40317fc3c8bab7606bf7edf17fcaeb706756c4de38319a51fc24c80a2baccef40f4354f5147fb91c9b1b91011d146da7eeb426d25de17d7e39ee53735ef28b64d5e6e5444676f679a8e4e91314377c7606531b90dc1cd8cf2d929ed9137fdc0d6b6db62e764ef200a439d742b51425b818231ed799a53768119466cc42296ce36f52507411709cd9d622c1f899291db27104589a5e4509d9818cef983d6a13ce1247184c4551c38bd319aa068cd9c0b96f9e08b4a7bd7852c129d4126676cbcb30ae029b0e2cec3c58c110fecae7967fca0752874e2fcc077084dd4d87b4dee632b621f35cb9f22639ab4de86089c56cabb1aa8a4fedbc5d8673cca12b4479dca5dc6f3048bb654fd59c464b033960177a4d6c2ee38b124d193cd5da3cbc5aa5ebdf7197f5d3f3008f01effb599b6d238044f2ee204bf372685256813278ca7a7d145445f5d5eb5490d99ee89d587fe446e1600d7daf9553b7d709bd796c59757e2f7c26cb71990a51ffc49120f358ef4927729b7e8c2cf9ad35a8017667625a39e2d12c8b0dd5de3d3797d9167ac9302a122e0f066a2552a7278a632b043089a1f5a127ce0bc8e688c545f20bca467fd58d9f9b8234f2be7a28152ab4d39ba8d6c4471d574571aa1a4a3aca16f46ac74e664899cf24502334aec637a9c392ba1618340080bfaed493abaa2f684ffb2bc1da86d804305772e30893f67235d5ce8180ef60490e46f131465d249a39df1aaed30621169c0f7db0b6a6adcab975ec00ca68b2fc06f443cfb8933b326f106670e0e528f22ff96d06b2a6d917258d29a87cf637f37c3661b42462c11c73c1cd0a6774e4e10157b02c0cfd9148ad8a23775653db3dec41fd6d1d5eb54a3e5e144a489a18412f21eb96a72b6751482882d636a1cd0057ea48d1a985472b0c301c4a5b24b0152bdc50a47126a01a1d0665270cdbf2ed852e0f61515bad6e58973329d269bf057ffa52331dde4700b926f635cdf49234f4aaabbabca5386526568fc3a80b1d8a9e1566e21bf889546379289263d978e95de390c4bbdb5a813535b7186f661f5c283400adb3bcf9365d45abb6088b729a98789265f1e8e684e2b2c15b4ce53230abc5e5bf6895827c95842e0849fc7fe56b7c65f075baded0f2e172c8e1088219615b8697ff4a3c6f5f708e498e6c7312680f214a877061511d3b85087545fc26708d039e977a0157b95ceba40497cc2dd1b1b1394eb98f651d701dfbc3583c159da8bae76a25db213211d6191d83c5d7a3d4b2320b8a305b5d90e04d6e3de161fff5dae7e3d4f6c9e1cf55cb5ac1677d9cfd560db2209be2b9566a267aad9cf4b9e03c221ba5b0f02cabb50cef19180ba329691d114da670d7b85e36c0b6b7d81613bd31350dfe225050861e90043ac2334478f52584a1a8809f76d40af36da02549c54da164487f0b7f823cff797db1c90f2f1c431eca97fc8bcdfb44c30cd1643c893d5e33aa56cbc0a0c38f5c8f6bb37483d13b85b659ac51ce05311bba19c97772e81c2315a009e80f591c82445d493dc3b5fb12c52e8c50c6260200b0d77092bf19aabce491b2c511fca2a4ebd99b446e55f453314297723894f0b223868ef80f5964468afa3a5e6aa41f2128e6de893bba2cbde9bea91ba97bda18a01905ce8d2e85e6011cc0550f5ae9121361fdec1ec97a6e6892a68732a69147476d54babaa564b883baad7100eb1092a1aa28a29f67e6b53deab511e53eada87cfe1bb6e3c6a215fd8d729840a5b5ac452cfd8acb9be7818d2c806c3e0cedd0847ddf9a5906bf1a0fa4da44ccea829a1a5350d5db0241a221b97e5cd5ba15e58b402529317c854fbcda86a562d4ee44a34193513647af0a3bc9f90ababc1dbbfd9aba8d3dcc39463473ca6bc0e1dc736ba712eef42dee80e31e7d8abe23f98e91ab875d0553bc24be9cb1d9484812c0b038cb177ad52064328e17f8ca7c8737902d964017e3aaae66161270dac21de42a6f60d10d89c1556916a249a130752bb7c7783b93a59d9f5456745ecc512f497b5a31be2678b9587628cb45dae2f5f6bde7ea4500c1ba961e2 diff --git a/numpy/random/src/dsfmt/LICENSE.md b/numpy/random/src/dsfmt/LICENSE.md deleted file mode 100644 index d59568f6b..000000000 --- a/numpy/random/src/dsfmt/LICENSE.md +++ /dev/null @@ -1,34 +0,0 @@ -# DSFMT - -Copyright (c) 2007, 2008, 2009 Mutsuo Saito, Makoto Matsumoto -and Hiroshima University. -Copyright (c) 2011, 2002 Mutsuo Saito, Makoto Matsumoto, Hiroshima -University and The University of Tokyo. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - -* Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. -* Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. -* Neither the name of the Hiroshima University nor the names of - its contributors may be used to endorse or promote products - derived from this software without specific prior written - permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/numpy/random/src/dsfmt/calc-jump.cpp b/numpy/random/src/dsfmt/calc-jump.cpp deleted file mode 100644 index 495b2797c..000000000 --- a/numpy/random/src/dsfmt/calc-jump.cpp +++ /dev/null @@ -1,81 +0,0 @@ -/** - * @file calc-jump.cpp - * - * @brief calc jump function. - * - * @author Mutsuo Saito (Hiroshima University) - * @author Makoto Matsumoto (The University of Tokyo) - * - * Copyright (C) 2012 Mutsuo Saito, Makoto Matsumoto, - * Hiroshima University and The University of Tokyo. - * All rights reserved. - * - * The 3-clause BSD License is applied to this software, see - * LICENSE.txt - * - * Compile: - * g++ calc-jump.cpp -o calc-jump -lntl - * - * Compute polynomial for 2^128 steps: - * ./calc-jump 340282366920938463463374607431768211456 poly.19937.txt - * - */ -#include <iostream> -#include <fstream> -#include <iomanip> -#include <sstream> -#include <string> -#include <inttypes.h> -#include <stdint.h> -#include <time.h> -#include <NTL/GF2X.h> -#include <NTL/vec_GF2.h> -#include <NTL/ZZ.h> -#include "dSFMT-calc-jump.hpp" - -using namespace NTL; -using namespace std; -using namespace dsfmt; - -static void read_file(GF2X& lcmpoly, long line_no, const string& file); - -int main(int argc, char * argv[]) { - if (argc <= 2) { - cout << argv[0] << " jump-step poly-file" << endl; - cout << " jump-step: a number between zero and 2^{DSFMT_MEXP}-1.\n" - << " large decimal number is allowed." << endl; - cout << " poly-file: one of poly.{MEXP}.txt " - << "file" << endl; - return -1; - } - string step_string = argv[1]; - string filename = argv[2]; - long no = 0; - GF2X lcmpoly; - read_file(lcmpoly, no, filename); - ZZ step; - stringstream ss(step_string); - ss >> step; - string jump_str; - calc_jump(jump_str, step, lcmpoly); - cout << "jump polynomial:" << endl; - cout << jump_str << endl; - return 0; -} - - -static void read_file(GF2X& lcmpoly, long line_no, const string& file) -{ - ifstream ifs(file.c_str()); - string line; - for (int i = 0; i < line_no; i++) { - ifs >> line; - ifs >> line; - } - if (ifs) { - ifs >> line; - line = ""; - ifs >> line; - } - stringtopoly(lcmpoly, line); -} diff --git a/numpy/random/src/dsfmt/dSFMT-benchmark.c b/numpy/random/src/dsfmt/dSFMT-benchmark.c deleted file mode 100644 index af29d0e1f..000000000 --- a/numpy/random/src/dsfmt/dSFMT-benchmark.c +++ /dev/null @@ -1,43 +0,0 @@ -/* - * - * cl dsfmt-benchmark.c dSFMT.c /Ox -DHAVE_SSE2 - * - * gcc dSFMT-benchmark.c dSFMT.c -O3 -DHAVE_SSE2 -DDSFMT_MEXP=19937 -o - * dSFMT-benchmark - */ -#include <inttypes.h> -#include <time.h> - -#include "dSFMT.h" - - -#define N 1000000000 - -int main() { - int i, j; - uint32_t seed = 0xDEADBEAF; - uint64_t count = 0, sum = 0; - dsfmt_t state; - double buffer[DSFMT_N64]; - - uint64_t out; - uint64_t *tmp; - dsfmt_init_gen_rand(&state, seed); - clock_t begin = clock(); - for (i = 0; i < N / (DSFMT_N64 / 2); i++) { - dsfmt_fill_array_close_open(&state, &buffer[0], DSFMT_N64); - for (j = 0; j < DSFMT_N64; j += 2) { - tmp = (uint64_t *)&buffer[j]; - out = (*tmp >> 16) << 32; - tmp = (uint64_t *)&buffer[j + 1]; - out |= (*tmp >> 16) & 0xffffffff; - sum += out; - count++; - } - } - clock_t end = clock(); - double time_spent = (double)(end - begin) / CLOCKS_PER_SEC; - printf("0x%" PRIx64 "\ncount: %" PRIu64 "\n", sum, count); - printf("%" PRIu64 " randoms per second\n", - (uint64_t)(N / time_spent) / 1000000 * 1000000); -} diff --git a/numpy/random/src/dsfmt/dSFMT-calc-jump.hpp b/numpy/random/src/dsfmt/dSFMT-calc-jump.hpp deleted file mode 100644 index b960826be..000000000 --- a/numpy/random/src/dsfmt/dSFMT-calc-jump.hpp +++ /dev/null @@ -1,106 +0,0 @@ -#pragma once -#ifndef DSFMT_CALC_JUMP_HPP -#define DSFMT_CALC_JUMP_HPP -/** - * @file dSFMT-calc-jump.hpp - * - * @brief functions for calculating jump polynomial. - * - * @author Mutsuo Saito (Hiroshima University) - * @author Makoto Matsumoto (The University of Tokyo) - * - * Copyright (C) 2012 Mutsuo Saito, Makoto Matsumoto, - * Hiroshima University and The University of Tokyo. - * All rights reserved. - * - * The 3-clause BSD License is applied to this software, see - * LICENSE.txt - */ -#include <iostream> -#include <iomanip> -#include <sstream> -#include <NTL/GF2X.h> - -namespace dsfmt { -/** - * converts polynomial to string for convenient use in C language. - * @param x output string - * @param polynomial input polynomial - */ - static inline void polytostring(std::string& x, NTL::GF2X& polynomial) - { - using namespace NTL; - using namespace std; - - long degree = deg(polynomial); - int buff; - stringstream ss; - for (int i = 0; i <= degree; i+=4) { - buff = 0; - for (int j = 0; j < 4; j++) { - if (IsOne(coeff(polynomial, i + j))) { - buff |= 1 << j; - } else { - buff &= (0x0f ^ (1 << j)); - } - } - ss << hex << buff; - } - ss << flush; - x = ss.str(); - } - -/** - * converts string to polynomial - * @param str string - * @param poly output polynomial - */ - static inline void stringtopoly(NTL::GF2X& poly, std::string& str) - { - using namespace NTL; - using namespace std; - - stringstream ss(str); - char c; - long p = 0; - clear(poly); - while(ss) { - ss >> c; - if (!ss) { - break; - } - if (c >= 'a') { - c = c - 'a' + 10; - } else { - c = c - '0'; - } - for (int j = 0; j < 4; j++) { - if (c & (1 << j)) { - SetCoeff(poly, p, 1); - } else { - SetCoeff(poly, p, 0); - } - p++; - } - } - } - -/** - * calculate the jump polynomial. - * SFMT generates 4 32-bit integers from one internal state. - * @param jump_str output string which represents jump polynomial. - * @param step jump step of internal state - * @param characteristic polynomial - */ - static inline void calc_jump(std::string& jump_str, - NTL::ZZ& step, - NTL::GF2X& characteristic) - { - using namespace NTL; - using namespace std; - GF2X jump; - PowerXMod(jump, step, characteristic); - polytostring(jump_str, jump); - } -} -#endif diff --git a/numpy/random/src/dsfmt/dSFMT-common.h b/numpy/random/src/dsfmt/dSFMT-common.h deleted file mode 100644 index 30c26c08b..000000000 --- a/numpy/random/src/dsfmt/dSFMT-common.h +++ /dev/null @@ -1,115 +0,0 @@ -#pragma once -/** - * @file dSFMT-common.h - * - * @brief SIMD oriented Fast Mersenne Twister(SFMT) pseudorandom - * number generator with jump function. This file includes common functions - * used in random number generation and jump. - * - * @author Mutsuo Saito (Hiroshima University) - * @author Makoto Matsumoto (The University of Tokyo) - * - * Copyright (C) 2006, 2007 Mutsuo Saito, Makoto Matsumoto and Hiroshima - * University. - * Copyright (C) 2012 Mutsuo Saito, Makoto Matsumoto, Hiroshima - * University and The University of Tokyo. - * All rights reserved. - * - * The 3-clause BSD License is applied to this software, see - * LICENSE.txt - */ -#ifndef DSFMT_COMMON_H -#define DSFMT_COMMON_H - -#include "dSFMT.h" - -#if defined(HAVE_SSE2) -# include <emmintrin.h> -union X128I_T { - uint64_t u[2]; - __m128i i128; -}; -union X128D_T { - double d[2]; - __m128d d128; -}; -/** mask data for sse2 */ -static const union X128I_T sse2_param_mask = {{DSFMT_MSK1, DSFMT_MSK2}}; -#endif - -#if defined(HAVE_ALTIVEC) -inline static void do_recursion(w128_t *r, w128_t *a, w128_t * b, - w128_t *lung) { - const vector unsigned char sl1 = ALTI_SL1; - const vector unsigned char sl1_perm = ALTI_SL1_PERM; - const vector unsigned int sl1_msk = ALTI_SL1_MSK; - const vector unsigned char sr1 = ALTI_SR; - const vector unsigned char sr1_perm = ALTI_SR_PERM; - const vector unsigned int sr1_msk = ALTI_SR_MSK; - const vector unsigned char perm = ALTI_PERM; - const vector unsigned int msk1 = ALTI_MSK; - vector unsigned int w, x, y, z; - - z = a->s; - w = lung->s; - x = vec_perm(w, (vector unsigned int)perm, perm); - y = vec_perm(z, (vector unsigned int)sl1_perm, sl1_perm); - y = vec_sll(y, sl1); - y = vec_and(y, sl1_msk); - w = vec_xor(x, b->s); - w = vec_xor(w, y); - x = vec_perm(w, (vector unsigned int)sr1_perm, sr1_perm); - x = vec_srl(x, sr1); - x = vec_and(x, sr1_msk); - y = vec_and(w, msk1); - z = vec_xor(z, y); - r->s = vec_xor(z, x); - lung->s = w; -} -#elif defined(HAVE_SSE2) -/** - * This function represents the recursion formula. - * @param r output 128-bit - * @param a a 128-bit part of the internal state array - * @param b a 128-bit part of the internal state array - * @param d a 128-bit part of the internal state array (I/O) - */ -inline static void do_recursion(w128_t *r, w128_t *a, w128_t *b, w128_t *u) { - __m128i v, w, x, y, z; - - x = a->si; - z = _mm_slli_epi64(x, DSFMT_SL1); - y = _mm_shuffle_epi32(u->si, SSE2_SHUFF); - z = _mm_xor_si128(z, b->si); - y = _mm_xor_si128(y, z); - - v = _mm_srli_epi64(y, DSFMT_SR); - w = _mm_and_si128(y, sse2_param_mask.i128); - v = _mm_xor_si128(v, x); - v = _mm_xor_si128(v, w); - r->si = v; - u->si = y; -} -#else -/** - * This function represents the recursion formula. - * @param r output 128-bit - * @param a a 128-bit part of the internal state array - * @param b a 128-bit part of the internal state array - * @param lung a 128-bit part of the internal state array (I/O) - */ -inline static void do_recursion(w128_t *r, w128_t *a, w128_t * b, - w128_t *lung) { - uint64_t t0, t1, L0, L1; - - t0 = a->u[0]; - t1 = a->u[1]; - L0 = lung->u[0]; - L1 = lung->u[1]; - lung->u[0] = (t0 << DSFMT_SL1) ^ (L1 >> 32) ^ (L1 << 32) ^ b->u[0]; - lung->u[1] = (t1 << DSFMT_SL1) ^ (L0 >> 32) ^ (L0 << 32) ^ b->u[1]; - r->u[0] = (lung->u[0] >> DSFMT_SR) ^ (lung->u[0] & DSFMT_MSK1) ^ t0; - r->u[1] = (lung->u[1] >> DSFMT_SR) ^ (lung->u[1] & DSFMT_MSK2) ^ t1; -} -#endif -#endif diff --git a/numpy/random/src/dsfmt/dSFMT-jump.c b/numpy/random/src/dsfmt/dSFMT-jump.c deleted file mode 100644 index 1832bb885..000000000 --- a/numpy/random/src/dsfmt/dSFMT-jump.c +++ /dev/null @@ -1,184 +0,0 @@ -/** - * @file dSFMT-jump.c - * - * @brief do jump using jump polynomial. - * - * @author Mutsuo Saito (Hiroshima University) - * @author Makoto Matsumoto (The University of Tokyo) - * - * Copyright (C) 2012 Mutsuo Saito, Makoto Matsumoto, - * Hiroshima University and The University of Tokyo. - * All rights reserved. - * - * The 3-clause BSD License is applied to this software, see - * LICENSE.txt - */ - -#include <assert.h> -#include <stdlib.h> -#include <ctype.h> -#include <string.h> -#include "dSFMT-params.h" -#include "dSFMT.h" -#include "dSFMT-jump.h" -#include "dSFMT-common.h" - -#if defined(__cplusplus) -extern "C" { -#endif - - struct FIX_T { - int mexp; - uint64_t fix[4]; - }; - - struct FIX_T fix_table[] = { - {521, {UINT64_C(0x3fff56977f035125), - UINT64_C(0x3ff553857b015035), - UINT64_C(0x4034434434434434), - UINT64_C(0x0140151151351371)}}, - {1279, {UINT64_C(0x3ff87befce70e89f), - UINT64_C(0x3ff5f6afa3c60868), - UINT64_C(0xa4ca4caccaccacdb), - UINT64_C(0x40444444444c44c4)}}, - {4253, {UINT64_C(0x3ff85a66da51a81a), - UINT64_C(0x3ff4f4aeab9688eb), - UINT64_C(0x20524524534d34d3), - UINT64_C(0xc9cc9cc9cc9ccdcf)}}, - {216091, {UINT64_C(0x3ff096d54a871071), - UINT64_C(0x3ffafa9bfbd5d55d), - UINT64_C(0x0470470470573573), - UINT64_C(0x0250250251259259)}}, - {0} - }; - - inline static void next_state(dsfmt_t * dsfmt); - -#if defined(HAVE_SSE2) -/** - * add internal state of src to dest as F2-vector. - * @param dest destination state - * @param src source state - */ - inline static void add(dsfmt_t *dest, dsfmt_t *src) { - int dp = dest->idx / 2; - int sp = src->idx / 2; - int diff = (sp - dp + DSFMT_N) % DSFMT_N; - int p; - int i; - for (i = 0; i < DSFMT_N - diff; i++) { - p = i + diff; - dest->status[i].si - = _mm_xor_si128(dest->status[i].si, src->status[p].si); - } - for (i = DSFMT_N - diff; i < DSFMT_N; i++) { - p = i + diff - DSFMT_N; - dest->status[i].si - = _mm_xor_si128(dest->status[i].si, src->status[p].si); - } - dest->status[DSFMT_N].si - = _mm_xor_si128(dest->status[DSFMT_N].si, - src->status[DSFMT_N].si); - } -#else - inline static void add(dsfmt_t *dest, dsfmt_t *src) { - int dp = dest->idx / 2; - int sp = src->idx / 2; - int diff = (sp - dp + DSFMT_N) % DSFMT_N; - int p; - int i; - for (i = 0; i < DSFMT_N - diff; i++) { - p = i + diff; - dest->status[i].u[0] ^= src->status[p].u[0]; - dest->status[i].u[1] ^= src->status[p].u[1]; - } - for (; i < DSFMT_N; i++) { - p = i + diff - DSFMT_N; - dest->status[i].u[0] ^= src->status[p].u[0]; - dest->status[i].u[1] ^= src->status[p].u[1]; - } - dest->status[DSFMT_N].u[0] ^= src->status[DSFMT_N].u[0]; - dest->status[DSFMT_N].u[1] ^= src->status[DSFMT_N].u[1]; - } -#endif - -/** - * calculate next state - * @param dsfmt dSFMT internal state - */ - inline static void next_state(dsfmt_t * dsfmt) { - int idx = (dsfmt->idx / 2) % DSFMT_N; - w128_t * lung; - w128_t * pstate = &dsfmt->status[0]; - - lung = &pstate[DSFMT_N]; - do_recursion(&pstate[idx], - &pstate[idx], - &pstate[(idx + DSFMT_POS1) % DSFMT_N], - lung); - dsfmt->idx = (dsfmt->idx + 2) % DSFMT_N64; - } - - inline static void add_fix(dsfmt_t * dsfmt) { - int i; - int index = -1; - for (i = 0; fix_table[i].mexp != 0; i++) { - if (fix_table[i].mexp == DSFMT_MEXP) { - index = i; - } - if (fix_table[i].mexp > DSFMT_MEXP) { - break; - } - } - if (index < 0) { - return; - } - for (i = 0; i < DSFMT_N; i++) { - dsfmt->status[i].u[0] ^= fix_table[index].fix[0]; - dsfmt->status[i].u[1] ^= fix_table[index].fix[1]; - } - dsfmt->status[DSFMT_N].u[0] ^= fix_table[index].fix[2]; - dsfmt->status[DSFMT_N].u[1] ^= fix_table[index].fix[3]; - } - -/** - * jump ahead using jump_string - * @param dsfmt dSFMT internal state input and output. - * @param jump_string string which represents jump polynomial. - */ - void dSFMT_jump(dsfmt_t * dsfmt, const char * jump_string) { - dsfmt_t work; - int index = dsfmt->idx; - int bits; - int i; - int j; - memset(&work, 0, sizeof(dsfmt_t)); - add_fix(dsfmt); - dsfmt->idx = DSFMT_N64; - - for (i = 0; jump_string[i] != '\0'; i++) { - bits = jump_string[i]; - assert(isxdigit(bits)); - bits = tolower(bits); - if (bits >= 'a' && bits <= 'f') { - bits = bits - 'a' + 10; - } else { - bits = bits - '0'; - } - bits = bits & 0x0f; - for (j = 0; j < 4; j++) { - if ((bits & 1) != 0) { - add(&work, dsfmt); - } - next_state(dsfmt); - bits = bits >> 1; - } - } - *dsfmt = work; - add_fix(dsfmt); - dsfmt->idx = index; - } - -#if defined(__cplusplus) -} -#endif diff --git a/numpy/random/src/dsfmt/dSFMT-jump.h b/numpy/random/src/dsfmt/dSFMT-jump.h deleted file mode 100644 index 689f9499a..000000000 --- a/numpy/random/src/dsfmt/dSFMT-jump.h +++ /dev/null @@ -1,29 +0,0 @@ -#pragma once -#ifndef DSFMT_JUMP_H -#define DSFMT_JUMP_H -/** - * @file SFMT-jump.h - * - * @brief jump header file. - * - * @author Mutsuo Saito (Hiroshima University) - * @author Makoto Matsumoto (The University of Tokyo) - * - * Copyright (C) 2012 Mutsuo Saito, Makoto Matsumoto, - * Hiroshima University and The University of Tokyo. - * All rights reserved. - * - * The 3-clause BSD License is applied to this software, see - * LICENSE.txt - */ -#if defined(__cplusplus) -extern "C" { -#endif - -#include "dSFMT.h" -void dSFMT_jump(dsfmt_t *dsfmt, const char *jump_str); - -#if defined(__cplusplus) -} -#endif -#endif diff --git a/numpy/random/src/dsfmt/dSFMT-params.h b/numpy/random/src/dsfmt/dSFMT-params.h deleted file mode 100644 index aa0247800..000000000 --- a/numpy/random/src/dsfmt/dSFMT-params.h +++ /dev/null @@ -1,87 +0,0 @@ -#ifndef DSFMT_PARAMS_H -#define DSFMT_PARAMS_H - -#include "dSFMT.h" - -/*---------------------- - the parameters of DSFMT - following definitions are in dSFMT-paramsXXXX.h file. - ----------------------*/ -/** the pick up position of the array. -#define DSFMT_POS1 122 -*/ - -/** the parameter of shift left as four 32-bit registers. -#define DSFMT_SL1 18 - */ - -/** the parameter of shift right as four 32-bit registers. -#define DSFMT_SR1 12 -*/ - -/** A bitmask, used in the recursion. These parameters are introduced - * to break symmetry of SIMD. -#define DSFMT_MSK1 (uint64_t)0xdfffffefULL -#define DSFMT_MSK2 (uint64_t)0xddfecb7fULL -*/ - -/** These definitions are part of a 128-bit period certification vector. -#define DSFMT_PCV1 UINT64_C(0x00000001) -#define DSFMT_PCV2 UINT64_C(0x00000000) -*/ - -#define DSFMT_LOW_MASK UINT64_C(0x000FFFFFFFFFFFFF) -#define DSFMT_HIGH_CONST UINT64_C(0x3FF0000000000000) -#define DSFMT_SR 12 - -/* for sse2 */ -#if defined(HAVE_SSE2) - #define SSE2_SHUFF 0x1b -#elif defined(HAVE_ALTIVEC) - #if defined(__APPLE__) /* For OSX */ - #define ALTI_SR (vector unsigned char)(4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4) - #define ALTI_SR_PERM \ - (vector unsigned char)(15,0,1,2,3,4,5,6,15,8,9,10,11,12,13,14) - #define ALTI_SR_MSK \ - (vector unsigned int)(0x000fffffU,0xffffffffU,0x000fffffU,0xffffffffU) - #define ALTI_PERM \ - (vector unsigned char)(12,13,14,15,8,9,10,11,4,5,6,7,0,1,2,3) - #else - #define ALTI_SR {4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4} - #define ALTI_SR_PERM {15,0,1,2,3,4,5,6,15,8,9,10,11,12,13,14} - #define ALTI_SR_MSK {0x000fffffU,0xffffffffU,0x000fffffU,0xffffffffU} - #define ALTI_PERM {12,13,14,15,8,9,10,11,4,5,6,7,0,1,2,3} - #endif -#endif - -#if DSFMT_MEXP == 521 - #include "dSFMT-params521.h" -#elif DSFMT_MEXP == 1279 - #include "dSFMT-params1279.h" -#elif DSFMT_MEXP == 2203 - #include "dSFMT-params2203.h" -#elif DSFMT_MEXP == 4253 - #include "dSFMT-params4253.h" -#elif DSFMT_MEXP == 11213 - #include "dSFMT-params11213.h" -#elif DSFMT_MEXP == 19937 - #include "dSFMT-params19937.h" -#elif DSFMT_MEXP == 44497 - #include "dSFMT-params44497.h" -#elif DSFMT_MEXP == 86243 - #include "dSFMT-params86243.h" -#elif DSFMT_MEXP == 132049 - #include "dSFMT-params132049.h" -#elif DSFMT_MEXP == 216091 - #include "dSFMT-params216091.h" -#else -#ifdef __GNUC__ - #error "DSFMT_MEXP is not valid." - #undef DSFMT_MEXP -#else - #undef DSFMT_MEXP -#endif - -#endif - -#endif /* DSFMT_PARAMS_H */ diff --git a/numpy/random/src/dsfmt/dSFMT-params19937.h b/numpy/random/src/dsfmt/dSFMT-params19937.h deleted file mode 100644 index a600b0dbc..000000000 --- a/numpy/random/src/dsfmt/dSFMT-params19937.h +++ /dev/null @@ -1,40 +0,0 @@ -#ifndef DSFMT_PARAMS19937_H -#define DSFMT_PARAMS19937_H - -/* #define DSFMT_N 191 */ -/* #define DSFMT_MAXDEGREE 19992 */ -#define DSFMT_POS1 117 -#define DSFMT_SL1 19 -#define DSFMT_MSK1 UINT64_C(0x000ffafffffffb3f) -#define DSFMT_MSK2 UINT64_C(0x000ffdfffc90fffd) -#define DSFMT_MSK32_1 0x000ffaffU -#define DSFMT_MSK32_2 0xfffffb3fU -#define DSFMT_MSK32_3 0x000ffdffU -#define DSFMT_MSK32_4 0xfc90fffdU -#define DSFMT_FIX1 UINT64_C(0x90014964b32f4329) -#define DSFMT_FIX2 UINT64_C(0x3b8d12ac548a7c7a) -#define DSFMT_PCV1 UINT64_C(0x3d84e1ac0dc82880) -#define DSFMT_PCV2 UINT64_C(0x0000000000000001) -#define DSFMT_IDSTR "dSFMT2-19937:117-19:ffafffffffb3f-ffdfffc90fffd" - - -/* PARAMETERS FOR ALTIVEC */ -#if defined(__APPLE__) /* For OSX */ - #define ALTI_SL1 (vector unsigned char)(3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3) - #define ALTI_SL1_PERM \ - (vector unsigned char)(2,3,4,5,6,7,30,30,10,11,12,13,14,15,0,1) - #define ALTI_SL1_MSK \ - (vector unsigned int)(0xffffffffU,0xfff80000U,0xffffffffU,0xfff80000U) - #define ALTI_MSK (vector unsigned int)(DSFMT_MSK32_1, \ - DSFMT_MSK32_2, DSFMT_MSK32_3, DSFMT_MSK32_4) -#else /* For OTHER OSs(Linux?) */ - #define ALTI_SL1 {3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3} - #define ALTI_SL1_PERM \ - {2,3,4,5,6,7,30,30,10,11,12,13,14,15,0,1} - #define ALTI_SL1_MSK \ - {0xffffffffU,0xfff80000U,0xffffffffU,0xfff80000U} - #define ALTI_MSK \ - {DSFMT_MSK32_1, DSFMT_MSK32_2, DSFMT_MSK32_3, DSFMT_MSK32_4} -#endif - -#endif /* DSFMT_PARAMS19937_H */ diff --git a/numpy/random/src/dsfmt/dSFMT-poly.h b/numpy/random/src/dsfmt/dSFMT-poly.h deleted file mode 100644 index f8e15c3eb..000000000 --- a/numpy/random/src/dsfmt/dSFMT-poly.h +++ /dev/null @@ -1,53 +0,0 @@ -static const char * poly_128 = -"f4dfa6c62049d0776e0bf6f1e953f3aa38abb113df86be024eab3773ad5f2b82ead936022e656dff7e562691c59dd5f7d2" -"566b78d9669002503c4ddb1888a49f32333f515e6c60c4ecd221078ec6f26f0a90f4875067ca1f399a99775037adf90556" -"6e2c7e6b42131420f8f04f112c92621c9b1502f2a8aefad6c667904af62f0d55e02d396902d3b89450103c5ce5fe0408d9" -"7cbb864861b49e4e42048ff3310b48faac55095a7f422eea4aade752f947f947c6be0a0c665bdea099246ab9eff658ea8c" -"a468bf49d0227748367878de06d7bd86ea6708fcac6e252f5f00f04309b2aac3036b64afb39d990427c6c9f03477cc7e93" -"5c43c0e61bc161db8eb15516eee8cb377ecbc1849207990fb6778721b29bfe0d89bfda1b3772fa5b0b1f7ec3daf3605203" -"2285898c6f6396f55010c31f8201b7e2e51d94f920bfe57684c5415cc342cb39a0045d9793d13cf8646096daeb8bb9bfc2" -"0a90de8f2426da8733267a9b9674f32154e8f84a9932223a2ca3c787d0b66df6675febbdfcba2f9cef09c621c57e11098b" -"3289c77397aaae8b104642ffe0c4b75598efbc53745984d68b4d6656cae299ae2be55217a9a02b009ca7be32f47fbe434b" -"ce4914a34d0c9b0085bede9b8a99319c34660d66f0124b5a7714c4bf3cbfec3ee43ed817087168bad80133bebaeeb68cf7" -"929a24d1bb3de831a8340d220906ab04159cf94b21d5ee813bd7c80f10f01b43052af530917513b169254c25d6fcfe6cb4" -"20d6ce92f54886ef6eaf9a5ba35e893ff593834d05ddf28899e42d729c7df3d21ef036020789739366f0c11ec52ff92a0b" -"fd8ba69508e27b20fabb8217bd36b90e5aa918159ac87913bc7b46c04e366c23c92807fbe9c6a407e6a4db0b4fc23c3b6c" -"706b5ca058fe8c190f849f18d16d6b48b5ed760eb202fd566291a799420b9654e08b8118bcbfead8e9dd2fdb9b053e9bdf" -"b665285c78718f726d0b3d6c37e116428ec9ac9db2637259e4e8d6402bbada46c6bdb03985e19a82e9b4e57de1b025a3cb" -"1f850beae7e8da9941655825bce0e89d536b6ee9064865b1a85c185e9fc9cb7f435de13d44773c00eed442a286e4ab807e" -"3cab4dc3441d1b7d2af693812ae8b39652bb8c835fc895d13d6da93541afeadeee450475c29f3b2dfa8ef1c1e2547463b2" -"cc2f0ff7a42ac4dd35e25c4fa030d2d2766fbe9f2d04c1304671747bace2f7dd55142bfa60f8cbc968bfc3d7a342152dc6" -"84a0fb5a32c0962a62b5220ac0f72add9d8b84d6cc76b97d03245e01fc8da3414a49bb4075d3488f29b56dc42ba69e3b58" -"529448c943ecfd98b3784a39d0b8609a8fb945e757f4569f53bd2cf80f7f638acf5b67fe9c560a3b7b0cf7e0398f31aa8b" -"03cf9c62b24296b6d8596b694469a02686c38daa16a1ef86e012d61a2f7de1693a5c00b3685175caec3c67146477eba548" -"30f1d546cb18a553779aa46adb4f2010e33f3def847c7d89b51a8462b227605f6c920fd558a6daf64bc98682e508ae960c" -"0c571870e603ba1fce0c13d53176f353fd319959e13db93eae1359f06e3dd4767c04f824cf34ec7bf8f60161ba1a615db8" -"2852eca9e3869afa711ab9a090660b0dc6cfbea310dda77e02310fbaeacd2636f975838c2dbcdbe9ac2cd85cee28f5e3f0" -"c73abf62f9fa02cd79a7606b7ba855db68a07848b057c3aaf38f1a70086e14616f6f88305a1f9ce6b41378a620d4db3e0e" -"7e1d421590dccaeff86212e232eeb5eb8a8d33a8c9b25ae88f3a7bd5032b4efa68f8af3186a02ffcbf5456f12beccace94" -"c81c360cc4a0dcc642b59f991eec68c59af78139ca60b96d6a18e9535f8995e89bd2cf6a0aef3acffd33d1c0c1b79b6641" -"4a91d9f65b2b4ec65844b96f725d2b4b0c309f3eb9d714e9dd939bbdfd85ce8fb43679aeab13f6c29549949503c9466dbd" -"337c4cdde46d6eacd15f21f4d8fdeaa627a47884c88a9c85f0b731d271a8ea7cb9e04a4a149c23c10f56b3a0476dc77a99" -"9d6e4f813e4b0f805e2a693e2ae4ae0ecc423c9ba5d17b42e691abf83784a582f2b1fd85d1e0a27ba38a500963568b2450" -"363d2c5e3f7b8ba3e5b56e4e9f745a3a710bf2ae233c303068c532ce78ff031e6ab28b705dd94d7db4500909edb5626b8c" -"9bd5ff4f0b4741388f0b91563ee516934c013e901572cba005ac5c535f4f107903be9af7b2793dfb61b5070facbe71eefe" -"1b5600f975c8c38c3a2350d78beadfecb78e981164ae8bc866e732972d3ceef4aac68e15861f9b881d9b51b4edece150bc" -"124b07645defb4202ef5d0e0962db98cae6ed459561c93c74c20bd64362e4f4fffc389a6cd80514604ff22eecc10c9cbc7" -"981d19a8102b24146354c463107c9dc070e29e70df3578022acf72289ef071ab9f9402a544d0399f1b1e5f206b6d46d445" -"f6d612a490e72918e00c853eda8493bef511149e80c9ab56e8b4b8cba3987249f77d060e61760e5792ac321c987c03c260" -"6e9393a7970212992cdbd16448078d5039d4c2c3199714f53278f4f7b1d2e514cf95bdfc078b8bb0db659cb2c3f5cc0289" -"0ea84f05d414c88d2db9e9f8455659b9fa6254405317245fa070d6970cafb4dadb2522b490a5c8e02fe973a8cdbfbfbdbf" -"b01535099ffba3d3896bc4d1189fc570c3e6fdc6469265b8da912772e75dd62ab71be507f700d56cac5e68fd6b57ec1661" -"68ab5258a69625c142a5b1b3519f94be1bde5e51d3bd8ea0c12d5af2fe4615b1b7bd4a96628a4fabc65925ff09718f63bb" -"ebaad98f89bd9543a27b3ff3b5d8bfa89f941a5eb8cc005ccd4a705190e1c9dc6a9f4264e5ee658520a4438e92de854bff" -"c39f8dc7dfbb5de4f14ba63ea16a37d14a7b4610f95b6cffd55e4679b29cedbdf20e7bd16da822fad910c359ee3a68e48a" -"ae6e769b0e291d5d3aa3e2ca9d8d23abe8a1d5349f4991e9300852cc0befb20c2fc0d169306b260763344024f8092cbcc2" -"4c6807363e9fc548a30d5faab3a94b2af0782a2942be80c45d8b0587efd587394ef33c33022436e285806ddffdd32fe363" -"45c3c38ed8d680abeb7a028b44ee6f94d060a14c7019bb6af1f1b5f0a562957d19826d8cc216f9b908c989ccd5415e3525" -"dfe9422ffb5b50b7cc3083dc325544751e5683535d7439d3da2b0bb73bea551dd99e04e0e793804f4774eb6b1daf781d9c" -"aa5128274e599e847862fe309027813d3e4eda0bbeb7201856a5c5d8370e44dabff0bb229c723ba0a6bcf29c44536147de" -"11b7835991018100105bd4329217f7386903fe8e7363cd7b3e893244e245e0a187467664c05b0be1fd429722b9b9a5e319" -"8147fad72776e8a63aab9054fa9d259af0198d088d71d132e6068676a8e9ebb0f616b51ee34aac39c2c2221c7112401727" -"0d75ff4a048363c389e04e9b440ad2032a381ac2cfc54f409caa791e65ee4f5d6cd035008f219b88a803a7382ae447bf65" -"a3df2176b25b3b7b67dabe34decd9a1384dc7a003916ca8fbcb29b3ad6fd8eac5bbbaa3bdfa6c6a3ad9427c4f3ed79fea2" -"6e14c8ce5fa3b4f82c5f7b6d2125916753a7b92ce9b46d45";
\ No newline at end of file diff --git a/numpy/random/src/dsfmt/dSFMT-test-gen.c b/numpy/random/src/dsfmt/dSFMT-test-gen.c deleted file mode 100644 index 697a3010a..000000000 --- a/numpy/random/src/dsfmt/dSFMT-test-gen.c +++ /dev/null @@ -1,58 +0,0 @@ -/* - * cl dSFMT-test-gen.c dSFMT.c -DHAVE_SSE2 -DDSFMT_MEXP=19937 /Ox - * - * gcc dSFMT-test-gen.c dSFMT.c -DHAVE_SSE2 -DDSFMT_MEXP=19937 -o dSFMT - */ - -#include <inttypes.h> -#include <stdio.h> - -#include "dSFMT.h" - - -int main(void) { - int i; - double d; - uint64_t *temp; - uint32_t seed = 1UL; - dsfmt_t state; - dsfmt_init_gen_rand(&state, seed); - double out[1000]; - dsfmt_fill_array_close1_open2(&state, out, 1000); - - FILE *fp; - fp = fopen("dSFMT-testset-1.csv", "w"); - if (fp == NULL) { - printf("Couldn't open file\n"); - return -1; - } - fprintf(fp, "seed, %" PRIu32 "\n", seed); - for (i = 0; i < 1000; i++) { - d = out[i]; - temp = (uint64_t *)&d; - fprintf(fp, "%d, %" PRIu64 "\n", i, *temp); - if (i==999) { - printf("%d, %" PRIu64 "\n", i, *temp); - } - } - fclose(fp); - - seed = 123456789UL; - dsfmt_init_gen_rand(&state, seed); - dsfmt_fill_array_close1_open2(&state, out, 1000); - fp = fopen("dSFMT-testset-2.csv", "w"); - if (fp == NULL) { - printf("Couldn't open file\n"); - return -1; - } - fprintf(fp, "seed, %" PRIu32 "\n", seed); - for (i = 0; i < 1000; i++) { - d = out[i]; - temp = (uint64_t *)&d; - fprintf(fp, "%d, %" PRIu64 "\n", i, *temp); - if (i==999) { - printf("%d, %" PRIu64 "\n", i, *temp); - } - } - fclose(fp); -} diff --git a/numpy/random/src/dsfmt/dSFMT.c b/numpy/random/src/dsfmt/dSFMT.c deleted file mode 100644 index 0f122c26c..000000000 --- a/numpy/random/src/dsfmt/dSFMT.c +++ /dev/null @@ -1,626 +0,0 @@ -/** - * @file dSFMT.c - * @brief double precision SIMD-oriented Fast Mersenne Twister (dSFMT) - * based on IEEE 754 format. - * - * @author Mutsuo Saito (Hiroshima University) - * @author Makoto Matsumoto (Hiroshima University) - * - * Copyright (C) 2007,2008 Mutsuo Saito, Makoto Matsumoto and Hiroshima - * University. All rights reserved. - * - * The new BSD License is applied to this software, see LICENSE.txt - */ -#include <stdio.h> -#include <stdlib.h> -#include <string.h> - -#include "dSFMT-params.h" - -#include "dSFMT-common.h" -#include "dSFMT-jump.h" -#include "dSFMT-poly.h" - -#if defined(__cplusplus) -extern "C" { -#endif - -/** dsfmt internal state vector */ -dsfmt_t dsfmt_global_data; -/** dsfmt mexp for check */ -static const int dsfmt_mexp = DSFMT_MEXP; - -/*---------------- - STATIC FUNCTIONS - ----------------*/ -inline static uint32_t ini_func1(uint32_t x); -inline static uint32_t ini_func2(uint32_t x); -inline static void gen_rand_array_c1o2(dsfmt_t *dsfmt, w128_t *array, int size); -inline static void gen_rand_array_c0o1(dsfmt_t *dsfmt, w128_t *array, int size); -inline static void gen_rand_array_o0c1(dsfmt_t *dsfmt, w128_t *array, int size); -inline static void gen_rand_array_o0o1(dsfmt_t *dsfmt, w128_t *array, int size); -inline static int idxof(int i); -static void initial_mask(dsfmt_t *dsfmt); -static void period_certification(dsfmt_t *dsfmt); - -#if defined(HAVE_SSE2) -/** 1 in 64bit for sse2 */ -static const union X128I_T sse2_int_one = {{1, 1}}; -/** 2.0 double for sse2 */ -static const union X128D_T sse2_double_two = {{2.0, 2.0}}; -/** -1.0 double for sse2 */ -static const union X128D_T sse2_double_m_one = {{-1.0, -1.0}}; -#endif - -/** - * This function simulate a 32-bit array index overlapped to 64-bit - * array of LITTLE ENDIAN in BIG ENDIAN machine. - */ -#if defined(DSFMT_BIG_ENDIAN) -inline static int idxof(int i) { return i ^ 1; } -#else -inline static int idxof(int i) { return i; } -#endif - -#if defined(HAVE_SSE2) -/** - * This function converts the double precision floating point numbers which - * distribute uniformly in the range [1, 2) to those which distribute uniformly - * in the range [0, 1). - * @param w 128bit stracture of double precision floating point numbers (I/O) - */ -inline static void convert_c0o1(w128_t *w) { - w->sd = _mm_add_pd(w->sd, sse2_double_m_one.d128); -} - -/** - * This function converts the double precision floating point numbers which - * distribute uniformly in the range [1, 2) to those which distribute uniformly - * in the range (0, 1]. - * @param w 128bit stracture of double precision floating point numbers (I/O) - */ -inline static void convert_o0c1(w128_t *w) { - w->sd = _mm_sub_pd(sse2_double_two.d128, w->sd); -} - -/** - * This function converts the double precision floating point numbers which - * distribute uniformly in the range [1, 2) to those which distribute uniformly - * in the range (0, 1). - * @param w 128bit stracture of double precision floating point numbers (I/O) - */ -inline static void convert_o0o1(w128_t *w) { - w->si = _mm_or_si128(w->si, sse2_int_one.i128); - w->sd = _mm_add_pd(w->sd, sse2_double_m_one.d128); -} -#else /* standard C and altivec */ -/** - * This function converts the double precision floating point numbers which - * distribute uniformly in the range [1, 2) to those which distribute uniformly - * in the range [0, 1). - * @param w 128bit stracture of double precision floating point numbers (I/O) - */ -inline static void convert_c0o1(w128_t *w) { - w->d[0] -= 1.0; - w->d[1] -= 1.0; -} - -/** - * This function converts the double precision floating point numbers which - * distribute uniformly in the range [1, 2) to those which distribute uniformly - * in the range (0, 1]. - * @param w 128bit stracture of double precision floating point numbers (I/O) - */ -inline static void convert_o0c1(w128_t *w) { - w->d[0] = 2.0 - w->d[0]; - w->d[1] = 2.0 - w->d[1]; -} - -/** - * This function converts the double precision floating point numbers which - * distribute uniformly in the range [1, 2) to those which distribute uniformly - * in the range (0, 1). - * @param w 128bit stracture of double precision floating point numbers (I/O) - */ -inline static void convert_o0o1(w128_t *w) { - w->u[0] |= 1; - w->u[1] |= 1; - w->d[0] -= 1.0; - w->d[1] -= 1.0; -} -#endif - -/** - * This function fills the user-specified array with double precision - * floating point pseudorandom numbers of the IEEE 754 format. - * @param dsfmt dsfmt state vector. - * @param array an 128-bit array to be filled by pseudorandom numbers. - * @param size number of 128-bit pseudorandom numbers to be generated. - */ -inline static void gen_rand_array_c1o2(dsfmt_t *dsfmt, w128_t *array, - int size) { - int i, j; - w128_t lung; - - lung = dsfmt->status[DSFMT_N]; - do_recursion(&array[0], &dsfmt->status[0], &dsfmt->status[DSFMT_POS1], &lung); - for (i = 1; i < DSFMT_N - DSFMT_POS1; i++) { - do_recursion(&array[i], &dsfmt->status[i], &dsfmt->status[i + DSFMT_POS1], - &lung); - } - for (; i < DSFMT_N; i++) { - do_recursion(&array[i], &dsfmt->status[i], &array[i + DSFMT_POS1 - DSFMT_N], - &lung); - } - for (; i < size - DSFMT_N; i++) { - do_recursion(&array[i], &array[i - DSFMT_N], - &array[i + DSFMT_POS1 - DSFMT_N], &lung); - } - for (j = 0; j < 2 * DSFMT_N - size; j++) { - dsfmt->status[j] = array[j + size - DSFMT_N]; - } - for (; i < size; i++, j++) { - do_recursion(&array[i], &array[i - DSFMT_N], - &array[i + DSFMT_POS1 - DSFMT_N], &lung); - dsfmt->status[j] = array[i]; - } - dsfmt->status[DSFMT_N] = lung; -} - -/** - * This function fills the user-specified array with double precision - * floating point pseudorandom numbers of the IEEE 754 format. - * @param dsfmt dsfmt state vector. - * @param array an 128-bit array to be filled by pseudorandom numbers. - * @param size number of 128-bit pseudorandom numbers to be generated. - */ -inline static void gen_rand_array_c0o1(dsfmt_t *dsfmt, w128_t *array, - int size) { - int i, j; - w128_t lung; - - lung = dsfmt->status[DSFMT_N]; - do_recursion(&array[0], &dsfmt->status[0], &dsfmt->status[DSFMT_POS1], &lung); - for (i = 1; i < DSFMT_N - DSFMT_POS1; i++) { - do_recursion(&array[i], &dsfmt->status[i], &dsfmt->status[i + DSFMT_POS1], - &lung); - } - for (; i < DSFMT_N; i++) { - do_recursion(&array[i], &dsfmt->status[i], &array[i + DSFMT_POS1 - DSFMT_N], - &lung); - } - for (; i < size - DSFMT_N; i++) { - do_recursion(&array[i], &array[i - DSFMT_N], - &array[i + DSFMT_POS1 - DSFMT_N], &lung); - convert_c0o1(&array[i - DSFMT_N]); - } - for (j = 0; j < 2 * DSFMT_N - size; j++) { - dsfmt->status[j] = array[j + size - DSFMT_N]; - } - for (; i < size; i++, j++) { - do_recursion(&array[i], &array[i - DSFMT_N], - &array[i + DSFMT_POS1 - DSFMT_N], &lung); - dsfmt->status[j] = array[i]; - convert_c0o1(&array[i - DSFMT_N]); - } - for (i = size - DSFMT_N; i < size; i++) { - convert_c0o1(&array[i]); - } - dsfmt->status[DSFMT_N] = lung; -} - -/** - * This function fills the user-specified array with double precision - * floating point pseudorandom numbers of the IEEE 754 format. - * @param dsfmt dsfmt state vector. - * @param array an 128-bit array to be filled by pseudorandom numbers. - * @param size number of 128-bit pseudorandom numbers to be generated. - */ -inline static void gen_rand_array_o0o1(dsfmt_t *dsfmt, w128_t *array, - int size) { - int i, j; - w128_t lung; - - lung = dsfmt->status[DSFMT_N]; - do_recursion(&array[0], &dsfmt->status[0], &dsfmt->status[DSFMT_POS1], &lung); - for (i = 1; i < DSFMT_N - DSFMT_POS1; i++) { - do_recursion(&array[i], &dsfmt->status[i], &dsfmt->status[i + DSFMT_POS1], - &lung); - } - for (; i < DSFMT_N; i++) { - do_recursion(&array[i], &dsfmt->status[i], &array[i + DSFMT_POS1 - DSFMT_N], - &lung); - } - for (; i < size - DSFMT_N; i++) { - do_recursion(&array[i], &array[i - DSFMT_N], - &array[i + DSFMT_POS1 - DSFMT_N], &lung); - convert_o0o1(&array[i - DSFMT_N]); - } - for (j = 0; j < 2 * DSFMT_N - size; j++) { - dsfmt->status[j] = array[j + size - DSFMT_N]; - } - for (; i < size; i++, j++) { - do_recursion(&array[i], &array[i - DSFMT_N], - &array[i + DSFMT_POS1 - DSFMT_N], &lung); - dsfmt->status[j] = array[i]; - convert_o0o1(&array[i - DSFMT_N]); - } - for (i = size - DSFMT_N; i < size; i++) { - convert_o0o1(&array[i]); - } - dsfmt->status[DSFMT_N] = lung; -} - -/** - * This function fills the user-specified array with double precision - * floating point pseudorandom numbers of the IEEE 754 format. - * @param dsfmt dsfmt state vector. - * @param array an 128-bit array to be filled by pseudorandom numbers. - * @param size number of 128-bit pseudorandom numbers to be generated. - */ -inline static void gen_rand_array_o0c1(dsfmt_t *dsfmt, w128_t *array, - int size) { - int i, j; - w128_t lung; - - lung = dsfmt->status[DSFMT_N]; - do_recursion(&array[0], &dsfmt->status[0], &dsfmt->status[DSFMT_POS1], &lung); - for (i = 1; i < DSFMT_N - DSFMT_POS1; i++) { - do_recursion(&array[i], &dsfmt->status[i], &dsfmt->status[i + DSFMT_POS1], - &lung); - } - for (; i < DSFMT_N; i++) { - do_recursion(&array[i], &dsfmt->status[i], &array[i + DSFMT_POS1 - DSFMT_N], - &lung); - } - for (; i < size - DSFMT_N; i++) { - do_recursion(&array[i], &array[i - DSFMT_N], - &array[i + DSFMT_POS1 - DSFMT_N], &lung); - convert_o0c1(&array[i - DSFMT_N]); - } - for (j = 0; j < 2 * DSFMT_N - size; j++) { - dsfmt->status[j] = array[j + size - DSFMT_N]; - } - for (; i < size; i++, j++) { - do_recursion(&array[i], &array[i - DSFMT_N], - &array[i + DSFMT_POS1 - DSFMT_N], &lung); - dsfmt->status[j] = array[i]; - convert_o0c1(&array[i - DSFMT_N]); - } - for (i = size - DSFMT_N; i < size; i++) { - convert_o0c1(&array[i]); - } - dsfmt->status[DSFMT_N] = lung; -} - -/** - * This function represents a function used in the initialization - * by init_by_array - * @param x 32-bit integer - * @return 32-bit integer - */ -static uint32_t ini_func1(uint32_t x) { - return (x ^ (x >> 27)) * (uint32_t)1664525UL; -} - -/** - * This function represents a function used in the initialization - * by init_by_array - * @param x 32-bit integer - * @return 32-bit integer - */ -static uint32_t ini_func2(uint32_t x) { - return (x ^ (x >> 27)) * (uint32_t)1566083941UL; -} - -/** - * This function initializes the internal state array to fit the IEEE - * 754 format. - * @param dsfmt dsfmt state vector. - */ -static void initial_mask(dsfmt_t *dsfmt) { - int i; - uint64_t *psfmt; - - psfmt = &dsfmt->status[0].u[0]; - for (i = 0; i < DSFMT_N * 2; i++) { - psfmt[i] = (psfmt[i] & DSFMT_LOW_MASK) | DSFMT_HIGH_CONST; - } -} - -/** - * This function certificate the period of 2^{SFMT_MEXP}-1. - * @param dsfmt dsfmt state vector. - */ -static void period_certification(dsfmt_t *dsfmt) { - uint64_t pcv[2] = {DSFMT_PCV1, DSFMT_PCV2}; - uint64_t tmp[2]; - uint64_t inner; - int i; -#if (DSFMT_PCV2 & 1) != 1 - int j; - uint64_t work; -#endif - - tmp[0] = (dsfmt->status[DSFMT_N].u[0] ^ DSFMT_FIX1); - tmp[1] = (dsfmt->status[DSFMT_N].u[1] ^ DSFMT_FIX2); - - inner = tmp[0] & pcv[0]; - inner ^= tmp[1] & pcv[1]; - for (i = 32; i > 0; i >>= 1) { - inner ^= inner >> i; - } - inner &= 1; - /* check OK */ - if (inner == 1) { - return; - } - /* check NG, and modification */ -#if (DSFMT_PCV2 & 1) == 1 - dsfmt->status[DSFMT_N].u[1] ^= 1; -#else - for (i = 1; i >= 0; i--) { - work = 1; - for (j = 0; j < 64; j++) { - if ((work & pcv[i]) != 0) { - dsfmt->status[DSFMT_N].u[i] ^= work; - return; - } - work = work << 1; - } - } -#endif - return; -} - -/*---------------- - PUBLIC FUNCTIONS - ----------------*/ -/** - * This function returns the identification string. The string shows - * the Mersenne exponent, and all parameters of this generator. - * @return id string. - */ -const char *dsfmt_get_idstring(void) { return DSFMT_IDSTR; } - -/** - * This function returns the minimum size of array used for \b - * fill_array functions. - * @return minimum size of array used for fill_array functions. - */ -int dsfmt_get_min_array_size(void) { return DSFMT_N64; } - -/** - * This function fills the internal state array with double precision - * floating point pseudorandom numbers of the IEEE 754 format. - * @param dsfmt dsfmt state vector. - */ -void dsfmt_gen_rand_all(dsfmt_t *dsfmt) { - int i; - w128_t lung; - - lung = dsfmt->status[DSFMT_N]; - do_recursion(&dsfmt->status[0], &dsfmt->status[0], &dsfmt->status[DSFMT_POS1], - &lung); - for (i = 1; i < DSFMT_N - DSFMT_POS1; i++) { - do_recursion(&dsfmt->status[i], &dsfmt->status[i], - &dsfmt->status[i + DSFMT_POS1], &lung); - } - for (; i < DSFMT_N; i++) { - do_recursion(&dsfmt->status[i], &dsfmt->status[i], - &dsfmt->status[i + DSFMT_POS1 - DSFMT_N], &lung); - } - dsfmt->status[DSFMT_N] = lung; -} - -/** - * This function generates double precision floating point - * pseudorandom numbers which distribute in the range [1, 2) to the - * specified array[] by one call. The number of pseudorandom numbers - * is specified by the argument \b size, which must be at least (SFMT_MEXP - * / 128) * 2 and a multiple of two. The function - * get_min_array_size() returns this minimum size. The generation by - * this function is much faster than the following fill_array_xxx functions. - * - * For initialization, init_gen_rand() or init_by_array() must be called - * before the first call of this function. This function can not be - * used after calling genrand_xxx functions, without initialization. - * - * @param dsfmt dsfmt state vector. - * @param array an array where pseudorandom numbers are filled - * by this function. The pointer to the array must be "aligned" - * (namely, must be a multiple of 16) in the SIMD version, since it - * refers to the address of a 128-bit integer. In the standard C - * version, the pointer is arbitrary. - * - * @param size the number of 64-bit pseudorandom integers to be - * generated. size must be a multiple of 2, and greater than or equal - * to (SFMT_MEXP / 128) * 2. - * - * @note \b memalign or \b posix_memalign is available to get aligned - * memory. Mac OSX doesn't have these functions, but \b malloc of OSX - * returns the pointer to the aligned memory block. - */ -void dsfmt_fill_array_close1_open2(dsfmt_t *dsfmt, double array[], int size) { - assert(size % 2 == 0); - assert(size >= DSFMT_N64); - gen_rand_array_c1o2(dsfmt, (w128_t *)array, size / 2); -} - -/** - * This function generates double precision floating point - * pseudorandom numbers which distribute in the range (0, 1] to the - * specified array[] by one call. This function is the same as - * fill_array_close1_open2() except the distribution range. - * - * @param dsfmt dsfmt state vector. - * @param array an array where pseudorandom numbers are filled - * by this function. - * @param size the number of pseudorandom numbers to be generated. - * see also \sa fill_array_close1_open2() - */ -void dsfmt_fill_array_open_close(dsfmt_t *dsfmt, double array[], int size) { - assert(size % 2 == 0); - assert(size >= DSFMT_N64); - gen_rand_array_o0c1(dsfmt, (w128_t *)array, size / 2); -} - -/** - * This function generates double precision floating point - * pseudorandom numbers which distribute in the range [0, 1) to the - * specified array[] by one call. This function is the same as - * fill_array_close1_open2() except the distribution range. - * - * @param array an array where pseudorandom numbers are filled - * by this function. - * @param dsfmt dsfmt state vector. - * @param size the number of pseudorandom numbers to be generated. - * see also \sa fill_array_close1_open2() - */ -void dsfmt_fill_array_close_open(dsfmt_t *dsfmt, double array[], int size) { - assert(size % 2 == 0); - assert(size >= DSFMT_N64); - gen_rand_array_c0o1(dsfmt, (w128_t *)array, size / 2); -} - -/** - * This function generates double precision floating point - * pseudorandom numbers which distribute in the range (0, 1) to the - * specified array[] by one call. This function is the same as - * fill_array_close1_open2() except the distribution range. - * - * @param dsfmt dsfmt state vector. - * @param array an array where pseudorandom numbers are filled - * by this function. - * @param size the number of pseudorandom numbers to be generated. - * see also \sa fill_array_close1_open2() - */ -void dsfmt_fill_array_open_open(dsfmt_t *dsfmt, double array[], int size) { - assert(size % 2 == 0); - assert(size >= DSFMT_N64); - gen_rand_array_o0o1(dsfmt, (w128_t *)array, size / 2); -} - -#if defined(__INTEL_COMPILER) -#pragma warning(disable : 981) -#endif -/** - * This function initializes the internal state array with a 32-bit - * integer seed. - * @param dsfmt dsfmt state vector. - * @param seed a 32-bit integer used as the seed. - * @param mexp caller's mersenne expornent - */ -void dsfmt_chk_init_gen_rand(dsfmt_t *dsfmt, uint32_t seed, int mexp) { - int i; - uint32_t *psfmt; - - /* make sure caller program is compiled with the same MEXP */ - if (mexp != dsfmt_mexp) { - fprintf(stderr, "DSFMT_MEXP doesn't match with dSFMT.c\n"); - exit(1); - } - psfmt = &dsfmt->status[0].u32[0]; - psfmt[idxof(0)] = seed; - for (i = 1; i < (DSFMT_N + 1) * 4; i++) { - psfmt[idxof(i)] = - 1812433253UL * (psfmt[idxof(i - 1)] ^ (psfmt[idxof(i - 1)] >> 30)) + i; - } - initial_mask(dsfmt); - period_certification(dsfmt); - dsfmt->idx = DSFMT_N64; -} - -/** - * This function initializes the internal state array, - * with an array of 32-bit integers used as the seeds - * @param dsfmt dsfmt state vector. - * @param init_key the array of 32-bit integers, used as a seed. - * @param key_length the length of init_key. - * @param mexp caller's mersenne expornent - */ -void dsfmt_chk_init_by_array(dsfmt_t *dsfmt, uint32_t init_key[], - int key_length, int mexp) { - int i, j, count; - uint32_t r; - uint32_t *psfmt32; - int lag; - int mid; - int size = (DSFMT_N + 1) * 4; /* pulmonary */ - - /* make sure caller program is compiled with the same MEXP */ - if (mexp != dsfmt_mexp) { - fprintf(stderr, "DSFMT_MEXP doesn't match with dSFMT.c\n"); - exit(1); - } - if (size >= 623) { - lag = 11; - } else if (size >= 68) { - lag = 7; - } else if (size >= 39) { - lag = 5; - } else { - lag = 3; - } - mid = (size - lag) / 2; - - psfmt32 = &dsfmt->status[0].u32[0]; - memset(dsfmt->status, 0x8b, sizeof(dsfmt->status)); - if (key_length + 1 > size) { - count = key_length + 1; - } else { - count = size; - } - r = ini_func1(psfmt32[idxof(0)] ^ psfmt32[idxof(mid % size)] ^ - psfmt32[idxof((size - 1) % size)]); - psfmt32[idxof(mid % size)] += r; - r += key_length; - psfmt32[idxof((mid + lag) % size)] += r; - psfmt32[idxof(0)] = r; - count--; - for (i = 1, j = 0; (j < count) && (j < key_length); j++) { - r = ini_func1(psfmt32[idxof(i)] ^ psfmt32[idxof((i + mid) % size)] ^ - psfmt32[idxof((i + size - 1) % size)]); - psfmt32[idxof((i + mid) % size)] += r; - r += init_key[j] + i; - psfmt32[idxof((i + mid + lag) % size)] += r; - psfmt32[idxof(i)] = r; - i = (i + 1) % size; - } - for (; j < count; j++) { - r = ini_func1(psfmt32[idxof(i)] ^ psfmt32[idxof((i + mid) % size)] ^ - psfmt32[idxof((i + size - 1) % size)]); - psfmt32[idxof((i + mid) % size)] += r; - r += i; - psfmt32[idxof((i + mid + lag) % size)] += r; - psfmt32[idxof(i)] = r; - i = (i + 1) % size; - } - for (j = 0; j < size; j++) { - r = ini_func2(psfmt32[idxof(i)] + psfmt32[idxof((i + mid) % size)] + - psfmt32[idxof((i + size - 1) % size)]); - psfmt32[idxof((i + mid) % size)] ^= r; - r -= i; - psfmt32[idxof((i + mid + lag) % size)] ^= r; - psfmt32[idxof(i)] = r; - i = (i + 1) % size; - } - initial_mask(dsfmt); - period_certification(dsfmt); - dsfmt->idx = DSFMT_N64; -} -#if defined(__INTEL_COMPILER) -#pragma warning(default : 981) -#endif - -#if defined(__cplusplus) -} -#endif - -extern inline double dsfmt_next_double(dsfmt_state *state); - -extern inline uint64_t dsfmt_next64(dsfmt_state *state); - -extern inline uint32_t dsfmt_next32(dsfmt_state *state); - -void dsfmt_jump(dsfmt_state *state) { dSFMT_jump(state->state, poly_128); };
\ No newline at end of file diff --git a/numpy/random/src/dsfmt/dSFMT.h b/numpy/random/src/dsfmt/dSFMT.h deleted file mode 100644 index 75ef5746f..000000000 --- a/numpy/random/src/dsfmt/dSFMT.h +++ /dev/null @@ -1,697 +0,0 @@ -#pragma once -/** - * @file dSFMT.h - * - * @brief double precision SIMD oriented Fast Mersenne Twister(dSFMT) - * pseudorandom number generator based on IEEE 754 format. - * - * @author Mutsuo Saito (Hiroshima University) - * @author Makoto Matsumoto (Hiroshima University) - * - * Copyright (C) 2007, 2008 Mutsuo Saito, Makoto Matsumoto and - * Hiroshima University. All rights reserved. - * Copyright (C) 2012 Mutsuo Saito, Makoto Matsumoto, - * Hiroshima University and The University of Tokyo. - * All rights reserved. - * - * The new BSD License is applied to this software. - * see LICENSE.txt - * - * @note We assume that your system has inttypes.h. If your system - * doesn't have inttypes.h, you have to typedef uint32_t and uint64_t, - * and you have to define PRIu64 and PRIx64 in this file as follows: - * @verbatim - typedef unsigned int uint32_t - typedef unsigned long long uint64_t - #define PRIu64 "llu" - #define PRIx64 "llx" -@endverbatim - * uint32_t must be exactly 32-bit unsigned integer type (no more, no - * less), and uint64_t must be exactly 64-bit unsigned integer type. - * PRIu64 and PRIx64 are used for printf function to print 64-bit - * unsigned int and 64-bit unsigned int in hexadecimal format. - */ - -#ifndef DSFMT_H -#define DSFMT_H -#if defined(__cplusplus) -extern "C" { -#endif - -#include <assert.h> -#include <stdio.h> - -/* Use NumPy config to determine if SSE2 is present */ -#include "numpy/npy_common.h" -#if defined NPY_HAVE_SSE2_INTRINSICS -#define HAVE_SSE2 1 -#endif - -#if !defined(DSFMT_MEXP) -#ifdef __GNUC__ -#warning "DSFMT_MEXP is not defined. I assume DSFMT_MEXP is 19937." -#endif -#define DSFMT_MEXP 19937 -#endif -/*----------------- - BASIC DEFINITIONS - -----------------*/ -/* Mersenne Exponent. The period of the sequence - * is a multiple of 2^DSFMT_MEXP-1. - * #define DSFMT_MEXP 19937 */ -/** DSFMT generator has an internal state array of 128-bit integers, - * and N is its size. */ -#define DSFMT_N ((DSFMT_MEXP - 128) / 104 + 1) -/** N32 is the size of internal state array when regarded as an array - * of 32-bit integers.*/ -#define DSFMT_N32 (DSFMT_N * 4) -/** N64 is the size of internal state array when regarded as an array - * of 64-bit integers.*/ -#define DSFMT_N64 (DSFMT_N * 2) - -#if !defined(DSFMT_BIG_ENDIAN) -#if defined(__BYTE_ORDER) && defined(__BIG_ENDIAN) -#if __BYTE_ORDER == __BIG_ENDIAN -#define DSFMT_BIG_ENDIAN 1 -#endif -#elif defined(_BYTE_ORDER) && defined(_BIG_ENDIAN) -#if _BYTE_ORDER == _BIG_ENDIAN -#define DSFMT_BIG_ENDIAN 1 -#endif -#elif defined(__BYTE_ORDER__) && defined(__BIG_ENDIAN__) -#if __BYTE_ORDER__ == __BIG_ENDIAN__ -#define DSFMT_BIG_ENDIAN 1 -#endif -#elif defined(BYTE_ORDER) && defined(BIG_ENDIAN) -#if BYTE_ORDER == BIG_ENDIAN -#define DSFMT_BIG_ENDIAN 1 -#endif -#elif defined(__BIG_ENDIAN) || defined(_BIG_ENDIAN) || \ - defined(__BIG_ENDIAN__) || defined(BIG_ENDIAN) -#define DSFMT_BIG_ENDIAN 1 -#endif -#endif - -#if defined(DSFMT_BIG_ENDIAN) && defined(__amd64) -#undef DSFMT_BIG_ENDIAN -#endif - -#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) -#include <inttypes.h> -#elif defined(_MSC_VER) || defined(__BORLANDC__) -#if !defined(DSFMT_UINT32_DEFINED) && !defined(SFMT_UINT32_DEFINED) -typedef unsigned int uint32_t; -typedef unsigned __int64 uint64_t; -#ifndef UINT64_C -#define UINT64_C(v) (v##ui64) -#endif -#define DSFMT_UINT32_DEFINED -#if !defined(inline) && !defined(__cplusplus) -#define inline __forceinline -#endif -#endif -#else -#include <inttypes.h> -#if !defined(inline) && !defined(__cplusplus) -#if defined(__GNUC__) -#define inline __forceinline__ -#else -#define inline -#endif -#endif -#endif - -#ifndef PRIu64 -#if defined(_MSC_VER) || defined(__BORLANDC__) -#define PRIu64 "I64u" -#define PRIx64 "I64x" -#else -#define PRIu64 "llu" -#define PRIx64 "llx" -#endif -#endif - -#ifndef UINT64_C -#define UINT64_C(v) (v##ULL) -#endif - -/*------------------------------------------ - 128-bit SIMD like data type for standard C - ------------------------------------------*/ -#if defined(HAVE_ALTIVEC) -#if !defined(__APPLE__) -#include <altivec.h> -#endif -/** 128-bit data structure */ -union W128_T { - vector unsigned int s; - uint64_t u[2]; - uint32_t u32[4]; - double d[2]; -}; - -#elif defined(HAVE_SSE2) -#include <emmintrin.h> - -/** 128-bit data structure */ -union W128_T { - __m128i si; - __m128d sd; - uint64_t u[2]; - uint32_t u32[4]; - double d[2]; -}; -#else /* standard C */ -/** 128-bit data structure */ -union W128_T { - uint64_t u[2]; - uint32_t u32[4]; - double d[2]; -}; -#endif - -/** 128-bit data type */ -typedef union W128_T w128_t; - -/** the 128-bit internal state array */ -struct DSFMT_T { - w128_t status[DSFMT_N + 1]; - int idx; -}; -typedef struct DSFMT_T dsfmt_t; - -/** dsfmt internal state vector */ -extern dsfmt_t dsfmt_global_data; -/** dsfmt mexp for check */ -extern const int dsfmt_global_mexp; - -void dsfmt_gen_rand_all(dsfmt_t *dsfmt); -void dsfmt_fill_array_open_close(dsfmt_t *dsfmt, double array[], int size); -void dsfmt_fill_array_close_open(dsfmt_t *dsfmt, double array[], int size); -void dsfmt_fill_array_open_open(dsfmt_t *dsfmt, double array[], int size); -void dsfmt_fill_array_close1_open2(dsfmt_t *dsfmt, double array[], int size); -void dsfmt_chk_init_gen_rand(dsfmt_t *dsfmt, uint32_t seed, int mexp); -void dsfmt_chk_init_by_array(dsfmt_t *dsfmt, uint32_t init_key[], - int key_length, int mexp); -const char *dsfmt_get_idstring(void); -int dsfmt_get_min_array_size(void); - -#if defined(__GNUC__) -#define DSFMT_PRE_INLINE inline static -#define DSFMT_PST_INLINE __attribute__((always_inline)) -#elif defined(_MSC_VER) && _MSC_VER >= 1200 -#define DSFMT_PRE_INLINE __forceinline static -#define DSFMT_PST_INLINE -#else -#define DSFMT_PRE_INLINE inline static -#define DSFMT_PST_INLINE -#endif -DSFMT_PRE_INLINE uint32_t dsfmt_genrand_uint32(dsfmt_t *dsfmt) DSFMT_PST_INLINE; -DSFMT_PRE_INLINE double -dsfmt_genrand_close1_open2(dsfmt_t *dsfmt) DSFMT_PST_INLINE; -DSFMT_PRE_INLINE double -dsfmt_genrand_close_open(dsfmt_t *dsfmt) DSFMT_PST_INLINE; -DSFMT_PRE_INLINE double -dsfmt_genrand_open_close(dsfmt_t *dsfmt) DSFMT_PST_INLINE; -DSFMT_PRE_INLINE double -dsfmt_genrand_open_open(dsfmt_t *dsfmt) DSFMT_PST_INLINE; -DSFMT_PRE_INLINE uint32_t dsfmt_gv_genrand_uint32(void) DSFMT_PST_INLINE; -DSFMT_PRE_INLINE double dsfmt_gv_genrand_close1_open2(void) DSFMT_PST_INLINE; -DSFMT_PRE_INLINE double dsfmt_gv_genrand_close_open(void) DSFMT_PST_INLINE; -DSFMT_PRE_INLINE double dsfmt_gv_genrand_open_close(void) DSFMT_PST_INLINE; -DSFMT_PRE_INLINE double dsfmt_gv_genrand_open_open(void) DSFMT_PST_INLINE; -DSFMT_PRE_INLINE void dsfmt_gv_fill_array_open_close(double array[], - int size) DSFMT_PST_INLINE; -DSFMT_PRE_INLINE void dsfmt_gv_fill_array_close_open(double array[], - int size) DSFMT_PST_INLINE; -DSFMT_PRE_INLINE void dsfmt_gv_fill_array_open_open(double array[], - int size) DSFMT_PST_INLINE; -DSFMT_PRE_INLINE void -dsfmt_gv_fill_array_close1_open2(double array[], int size) DSFMT_PST_INLINE; -DSFMT_PRE_INLINE void dsfmt_gv_init_gen_rand(uint32_t seed) DSFMT_PST_INLINE; -DSFMT_PRE_INLINE void dsfmt_gv_init_by_array(uint32_t init_key[], - int key_length) DSFMT_PST_INLINE; -DSFMT_PRE_INLINE void dsfmt_init_gen_rand(dsfmt_t *dsfmt, - uint32_t seed) DSFMT_PST_INLINE; -DSFMT_PRE_INLINE void dsfmt_init_by_array(dsfmt_t *dsfmt, uint32_t init_key[], - int key_length) DSFMT_PST_INLINE; - -/** - * This function generates and returns unsigned 32-bit integer. - * This is slower than SFMT, only for convenience usage. - * dsfmt_init_gen_rand() or dsfmt_init_by_array() must be called - * before this function. - * @param dsfmt dsfmt internal state date - * @return double precision floating point pseudorandom number - */ -inline static uint32_t dsfmt_genrand_uint32(dsfmt_t *dsfmt) { - uint32_t r; - uint64_t *psfmt64 = &dsfmt->status[0].u[0]; - - if (dsfmt->idx >= DSFMT_N64) { - dsfmt_gen_rand_all(dsfmt); - dsfmt->idx = 0; - } - r = psfmt64[dsfmt->idx++] & 0xffffffffU; - return r; -} - -/** - * This function generates and returns double precision pseudorandom - * number which distributes uniformly in the range [1, 2). This is - * the primitive and faster than generating numbers in other ranges. - * dsfmt_init_gen_rand() or dsfmt_init_by_array() must be called - * before this function. - * @param dsfmt dsfmt internal state date - * @return double precision floating point pseudorandom number - */ -inline static double dsfmt_genrand_close1_open2(dsfmt_t *dsfmt) { - double r; - double *psfmt64 = &dsfmt->status[0].d[0]; - - if (dsfmt->idx >= DSFMT_N64) { - dsfmt_gen_rand_all(dsfmt); - dsfmt->idx = 0; - } - r = psfmt64[dsfmt->idx++]; - return r; -} - -/** - * This function generates and returns unsigned 32-bit integer. - * This is slower than SFMT, only for convenience usage. - * dsfmt_gv_init_gen_rand() or dsfmt_gv_init_by_array() must be called - * before this function. This function uses \b global variables. - * @return double precision floating point pseudorandom number - */ -inline static uint32_t dsfmt_gv_genrand_uint32(void) { - return dsfmt_genrand_uint32(&dsfmt_global_data); -} - -/** - * This function generates and returns double precision pseudorandom - * number which distributes uniformly in the range [1, 2). - * dsfmt_gv_init_gen_rand() or dsfmt_gv_init_by_array() must be called - * before this function. This function uses \b global variables. - * @return double precision floating point pseudorandom number - */ -inline static double dsfmt_gv_genrand_close1_open2(void) { - return dsfmt_genrand_close1_open2(&dsfmt_global_data); -} - -/** - * This function generates and returns double precision pseudorandom - * number which distributes uniformly in the range [0, 1). - * dsfmt_init_gen_rand() or dsfmt_init_by_array() must be called - * before this function. - * @param dsfmt dsfmt internal state date - * @return double precision floating point pseudorandom number - */ -inline static double dsfmt_genrand_close_open(dsfmt_t *dsfmt) { - return dsfmt_genrand_close1_open2(dsfmt) - 1.0; -} - -/** - * This function generates and returns double precision pseudorandom - * number which distributes uniformly in the range [0, 1). - * dsfmt_gv_init_gen_rand() or dsfmt_gv_init_by_array() must be called - * before this function. This function uses \b global variables. - * @return double precision floating point pseudorandom number - */ -inline static double dsfmt_gv_genrand_close_open(void) { - return dsfmt_gv_genrand_close1_open2() - 1.0; -} - -/** - * This function generates and returns double precision pseudorandom - * number which distributes uniformly in the range (0, 1]. - * dsfmt_init_gen_rand() or dsfmt_init_by_array() must be called - * before this function. - * @param dsfmt dsfmt internal state date - * @return double precision floating point pseudorandom number - */ -inline static double dsfmt_genrand_open_close(dsfmt_t *dsfmt) { - return 2.0 - dsfmt_genrand_close1_open2(dsfmt); -} - -/** - * This function generates and returns double precision pseudorandom - * number which distributes uniformly in the range (0, 1]. - * dsfmt_gv_init_gen_rand() or dsfmt_gv_init_by_array() must be called - * before this function. This function uses \b global variables. - * @return double precision floating point pseudorandom number - */ -inline static double dsfmt_gv_genrand_open_close(void) { - return 2.0 - dsfmt_gv_genrand_close1_open2(); -} - -/** - * This function generates and returns double precision pseudorandom - * number which distributes uniformly in the range (0, 1). - * dsfmt_init_gen_rand() or dsfmt_init_by_array() must be called - * before this function. - * @param dsfmt dsfmt internal state date - * @return double precision floating point pseudorandom number - */ -inline static double dsfmt_genrand_open_open(dsfmt_t *dsfmt) { - double *dsfmt64 = &dsfmt->status[0].d[0]; - union { - double d; - uint64_t u; - } r; - - if (dsfmt->idx >= DSFMT_N64) { - dsfmt_gen_rand_all(dsfmt); - dsfmt->idx = 0; - } - r.d = dsfmt64[dsfmt->idx++]; - r.u |= 1; - return r.d - 1.0; -} - -/** - * This function generates and returns double precision pseudorandom - * number which distributes uniformly in the range (0, 1). - * dsfmt_gv_init_gen_rand() or dsfmt_gv_init_by_array() must be called - * before this function. This function uses \b global variables. - * @return double precision floating point pseudorandom number - */ -inline static double dsfmt_gv_genrand_open_open(void) { - return dsfmt_genrand_open_open(&dsfmt_global_data); -} - -/** - * This function generates double precision floating point - * pseudorandom numbers which distribute in the range [1, 2) to the - * specified array[] by one call. This function is the same as - * dsfmt_fill_array_close1_open2() except that this function uses - * \b global variables. - * @param array an array where pseudorandom numbers are filled - * by this function. - * @param size the number of pseudorandom numbers to be generated. - * see also \sa dsfmt_fill_array_close1_open2() - */ -inline static void dsfmt_gv_fill_array_close1_open2(double array[], int size) { - dsfmt_fill_array_close1_open2(&dsfmt_global_data, array, size); -} - -/** - * This function generates double precision floating point - * pseudorandom numbers which distribute in the range (0, 1] to the - * specified array[] by one call. This function is the same as - * dsfmt_gv_fill_array_close1_open2() except the distribution range. - * This function uses \b global variables. - * @param array an array where pseudorandom numbers are filled - * by this function. - * @param size the number of pseudorandom numbers to be generated. - * see also \sa dsfmt_fill_array_close1_open2() and \sa - * dsfmt_gv_fill_array_close1_open2() - */ -inline static void dsfmt_gv_fill_array_open_close(double array[], int size) { - dsfmt_fill_array_open_close(&dsfmt_global_data, array, size); -} - -/** - * This function generates double precision floating point - * pseudorandom numbers which distribute in the range [0, 1) to the - * specified array[] by one call. This function is the same as - * dsfmt_gv_fill_array_close1_open2() except the distribution range. - * This function uses \b global variables. - * @param array an array where pseudorandom numbers are filled - * by this function. - * @param size the number of pseudorandom numbers to be generated. - * see also \sa dsfmt_fill_array_close1_open2() \sa - * dsfmt_gv_fill_array_close1_open2() - */ -inline static void dsfmt_gv_fill_array_close_open(double array[], int size) { - dsfmt_fill_array_close_open(&dsfmt_global_data, array, size); -} - -/** - * This function generates double precision floating point - * pseudorandom numbers which distribute in the range (0, 1) to the - * specified array[] by one call. This function is the same as - * dsfmt_gv_fill_array_close1_open2() except the distribution range. - * This function uses \b global variables. - * @param array an array where pseudorandom numbers are filled - * by this function. - * @param size the number of pseudorandom numbers to be generated. - * see also \sa dsfmt_fill_array_close1_open2() \sa - * dsfmt_gv_fill_array_close1_open2() - */ -inline static void dsfmt_gv_fill_array_open_open(double array[], int size) { - dsfmt_fill_array_open_open(&dsfmt_global_data, array, size); -} - -/** - * This function initializes the internal state array with a 32-bit - * integer seed. - * @param dsfmt dsfmt state vector. - * @param seed a 32-bit integer used as the seed. - */ -inline static void dsfmt_init_gen_rand(dsfmt_t *dsfmt, uint32_t seed) { - dsfmt_chk_init_gen_rand(dsfmt, seed, DSFMT_MEXP); -} - -/** - * This function initializes the internal state array with a 32-bit - * integer seed. This function uses \b global variables. - * @param seed a 32-bit integer used as the seed. - * see also \sa dsfmt_init_gen_rand() - */ -inline static void dsfmt_gv_init_gen_rand(uint32_t seed) { - dsfmt_init_gen_rand(&dsfmt_global_data, seed); -} - -/** - * This function initializes the internal state array, - * with an array of 32-bit integers used as the seeds. - * @param dsfmt dsfmt state vector - * @param init_key the array of 32-bit integers, used as a seed. - * @param key_length the length of init_key. - */ -inline static void dsfmt_init_by_array(dsfmt_t *dsfmt, uint32_t init_key[], - int key_length) { - dsfmt_chk_init_by_array(dsfmt, init_key, key_length, DSFMT_MEXP); -} - -/** - * This function initializes the internal state array, - * with an array of 32-bit integers used as the seeds. - * This function uses \b global variables. - * @param init_key the array of 32-bit integers, used as a seed. - * @param key_length the length of init_key. - * see also \sa dsfmt_init_by_array() - */ -inline static void dsfmt_gv_init_by_array(uint32_t init_key[], int key_length) { - dsfmt_init_by_array(&dsfmt_global_data, init_key, key_length); -} - -#if !defined(DSFMT_DO_NOT_USE_OLD_NAMES) -DSFMT_PRE_INLINE const char *get_idstring(void) DSFMT_PST_INLINE; -DSFMT_PRE_INLINE int get_min_array_size(void) DSFMT_PST_INLINE; -DSFMT_PRE_INLINE void init_gen_rand(uint32_t seed) DSFMT_PST_INLINE; -DSFMT_PRE_INLINE void init_by_array(uint32_t init_key[], - int key_length) DSFMT_PST_INLINE; -DSFMT_PRE_INLINE double genrand_close1_open2(void) DSFMT_PST_INLINE; -DSFMT_PRE_INLINE double genrand_close_open(void) DSFMT_PST_INLINE; -DSFMT_PRE_INLINE double genrand_open_close(void) DSFMT_PST_INLINE; -DSFMT_PRE_INLINE double genrand_open_open(void) DSFMT_PST_INLINE; -DSFMT_PRE_INLINE void fill_array_open_close(double array[], - int size) DSFMT_PST_INLINE; -DSFMT_PRE_INLINE void fill_array_close_open(double array[], - int size) DSFMT_PST_INLINE; -DSFMT_PRE_INLINE void fill_array_open_open(double array[], - int size) DSFMT_PST_INLINE; -DSFMT_PRE_INLINE void fill_array_close1_open2(double array[], - int size) DSFMT_PST_INLINE; - -/** - * This function is just the same as dsfmt_get_idstring(). - * @return id string. - * see also \sa dsfmt_get_idstring() - */ -inline static const char *get_idstring(void) { return dsfmt_get_idstring(); } - -/** - * This function is just the same as dsfmt_get_min_array_size(). - * @return minimum size of array used for fill_array functions. - * see also \sa dsfmt_get_min_array_size() - */ -inline static int get_min_array_size(void) { - return dsfmt_get_min_array_size(); -} - -/** - * This function is just the same as dsfmt_gv_init_gen_rand(). - * @param seed a 32-bit integer used as the seed. - * see also \sa dsfmt_gv_init_gen_rand(), \sa dsfmt_init_gen_rand(). - */ -inline static void init_gen_rand(uint32_t seed) { - dsfmt_gv_init_gen_rand(seed); -} - -/** - * This function is just the same as dsfmt_gv_init_by_array(). - * @param init_key the array of 32-bit integers, used as a seed. - * @param key_length the length of init_key. - * see also \sa dsfmt_gv_init_by_array(), \sa dsfmt_init_by_array(). - */ -inline static void init_by_array(uint32_t init_key[], int key_length) { - dsfmt_gv_init_by_array(init_key, key_length); -} - -/** - * This function is just the same as dsfmt_gv_genrand_close1_open2(). - * @return double precision floating point number. - * see also \sa dsfmt_genrand_close1_open2() \sa - * dsfmt_gv_genrand_close1_open2() - */ -inline static double genrand_close1_open2(void) { - return dsfmt_gv_genrand_close1_open2(); -} - -/** - * This function is just the same as dsfmt_gv_genrand_close_open(). - * @return double precision floating point number. - * see also \sa dsfmt_genrand_close_open() \sa - * dsfmt_gv_genrand_close_open() - */ -inline static double genrand_close_open(void) { - return dsfmt_gv_genrand_close_open(); -} - -/** - * This function is just the same as dsfmt_gv_genrand_open_close(). - * @return double precision floating point number. - * see also \sa dsfmt_genrand_open_close() \sa - * dsfmt_gv_genrand_open_close() - */ -inline static double genrand_open_close(void) { - return dsfmt_gv_genrand_open_close(); -} - -/** - * This function is just the same as dsfmt_gv_genrand_open_open(). - * @return double precision floating point number. - * see also \sa dsfmt_genrand_open_open() \sa - * dsfmt_gv_genrand_open_open() - */ -inline static double genrand_open_open(void) { - return dsfmt_gv_genrand_open_open(); -} - -/** - * This function is juset the same as dsfmt_gv_fill_array_open_close(). - * @param array an array where pseudorandom numbers are filled - * by this function. - * @param size the number of pseudorandom numbers to be generated. - * see also \sa dsfmt_gv_fill_array_open_close(), \sa - * dsfmt_fill_array_close1_open2(), \sa - * dsfmt_gv_fill_array_close1_open2() - */ -inline static void fill_array_open_close(double array[], int size) { - dsfmt_gv_fill_array_open_close(array, size); -} - -/** - * This function is juset the same as dsfmt_gv_fill_array_close_open(). - * @param array an array where pseudorandom numbers are filled - * by this function. - * @param size the number of pseudorandom numbers to be generated. - * see also \sa dsfmt_gv_fill_array_close_open(), \sa - * dsfmt_fill_array_close1_open2(), \sa - * dsfmt_gv_fill_array_close1_open2() - */ -inline static void fill_array_close_open(double array[], int size) { - dsfmt_gv_fill_array_close_open(array, size); -} - -/** - * This function is juset the same as dsfmt_gv_fill_array_open_open(). - * @param array an array where pseudorandom numbers are filled - * by this function. - * @param size the number of pseudorandom numbers to be generated. - * see also \sa dsfmt_gv_fill_array_open_open(), \sa - * dsfmt_fill_array_close1_open2(), \sa - * dsfmt_gv_fill_array_close1_open2() - */ -inline static void fill_array_open_open(double array[], int size) { - dsfmt_gv_fill_array_open_open(array, size); -} - -/** - * This function is juset the same as dsfmt_gv_fill_array_close1_open2(). - * @param array an array where pseudorandom numbers are filled - * by this function. - * @param size the number of pseudorandom numbers to be generated. - * see also \sa dsfmt_fill_array_close1_open2(), \sa - * dsfmt_gv_fill_array_close1_open2() - */ -inline static void fill_array_close1_open2(double array[], int size) { - dsfmt_gv_fill_array_close1_open2(array, size); -} -#endif /* DSFMT_DO_NOT_USE_OLD_NAMES */ - -#if defined(__cplusplus) -} -#endif - -#endif /* DSFMT_H */ - -union random_val_t { - double d; - uint64_t u64; -}; - -typedef struct s_dsfmt_state { - dsfmt_t *state; - int has_uint32; - uint32_t uinteger; - - double *buffered_uniforms; - int buffer_loc; -} dsfmt_state; - -static inline double dsfmt_next_buffer(dsfmt_state *state) { - if (state->buffer_loc < DSFMT_N64) { - double out = state->buffered_uniforms[state->buffer_loc]; - state->buffer_loc++; - return out; - } - dsfmt_fill_array_close1_open2(state->state, state->buffered_uniforms, - DSFMT_N64); - state->buffer_loc = 1; - return state->buffered_uniforms[0]; -} - -static inline double dsfmt_next_double(dsfmt_state *state) { - return dsfmt_next_buffer(state) - 1.0; -} - -static inline uint64_t dsfmt_next64(dsfmt_state *state) { - /* Discard bottom 16 bits */ - uint64_t out; - union random_val_t rv; - rv.d = dsfmt_next_buffer(state); - out = (rv.u64 >> 16) << 32; - rv.d = dsfmt_next_buffer(state); - out |= (rv.u64 >> 16) & 0xffffffff; - return out; -} - -static inline uint32_t dsfmt_next32(dsfmt_state *state) { - /* Discard bottom 16 bits */ - union random_val_t rv; - rv.d = dsfmt_next_buffer(state); - // uint64_t *out = (uint64_t *)&d; - return (uint32_t)((rv.u64 >> 16) & 0xffffffff); -} - -static inline uint64_t dsfmt_next_raw(dsfmt_state *state) { - union random_val_t rv; - rv.d = dsfmt_next_buffer(state); - return rv.u64; -} - -void dsfmt_jump(dsfmt_state *state);
\ No newline at end of file diff --git a/numpy/random/src/legacy/legacy-distributions.c b/numpy/random/src/legacy/legacy-distributions.c index 99665b370..4741a0352 100644 --- a/numpy/random/src/legacy/legacy-distributions.c +++ b/numpy/random/src/legacy/legacy-distributions.c @@ -1,5 +1,6 @@ #include "legacy-distributions.h" + static NPY_INLINE double legacy_double(aug_bitgen_t *aug_state) { return aug_state->bit_generator->next_double(aug_state->bit_generator->state); } @@ -213,6 +214,113 @@ double legacy_exponential(aug_bitgen_t *aug_state, double scale) { return scale * legacy_standard_exponential(aug_state); } + +static RAND_INT_TYPE random_hypergeometric_hyp(bitgen_t *bitgen_state, + RAND_INT_TYPE good, + RAND_INT_TYPE bad, + RAND_INT_TYPE sample) { + RAND_INT_TYPE d1, k, z; + double d2, u, y; + + d1 = bad + good - sample; + d2 = (double)MIN(bad, good); + + y = d2; + k = sample; + while (y > 0.0) { + u = next_double(bitgen_state); + y -= (RAND_INT_TYPE)floor(u + y / (d1 + k)); + k--; + if (k == 0) + break; + } + z = (RAND_INT_TYPE)(d2 - y); + if (good > bad) + z = sample - z; + return z; +} + +/* D1 = 2*sqrt(2/e) */ +/* D2 = 3 - 2*sqrt(3/e) */ +#define D1 1.7155277699214135 +#define D2 0.8989161620588988 +static RAND_INT_TYPE random_hypergeometric_hrua(bitgen_t *bitgen_state, + RAND_INT_TYPE good, + RAND_INT_TYPE bad, + RAND_INT_TYPE sample) { + RAND_INT_TYPE mingoodbad, maxgoodbad, popsize, m, d9; + double d4, d5, d6, d7, d8, d10, d11; + RAND_INT_TYPE Z; + double T, W, X, Y; + + mingoodbad = MIN(good, bad); + popsize = good + bad; + maxgoodbad = MAX(good, bad); + m = MIN(sample, popsize - sample); + d4 = ((double)mingoodbad) / popsize; + d5 = 1.0 - d4; + d6 = m * d4 + 0.5; + d7 = sqrt((double)(popsize - m) * sample * d4 * d5 / (popsize - 1) + 0.5); + d8 = D1 * d7 + D2; + d9 = (RAND_INT_TYPE)floor((double)(m + 1) * (mingoodbad + 1) / (popsize + 2)); + d10 = (loggam(d9 + 1) + loggam(mingoodbad - d9 + 1) + loggam(m - d9 + 1) + + loggam(maxgoodbad - m + d9 + 1)); + d11 = MIN(MIN(m, mingoodbad) + 1.0, floor(d6 + 16 * d7)); + /* 16 for 16-decimal-digit precision in D1 and D2 */ + + while (1) { + X = next_double(bitgen_state); + Y = next_double(bitgen_state); + W = d6 + d8 * (Y - 0.5) / X; + + /* fast rejection: */ + if ((W < 0.0) || (W >= d11)) + continue; + + Z = (RAND_INT_TYPE)floor(W); + T = d10 - (loggam(Z + 1) + loggam(mingoodbad - Z + 1) + loggam(m - Z + 1) + + loggam(maxgoodbad - m + Z + 1)); + + /* fast acceptance: */ + if ((X * (4.0 - X) - 3.0) <= T) + break; + + /* fast rejection: */ + if (X * (X - T) >= 1) + continue; + /* log(0.0) is ok here, since always accept */ + if (2.0 * log(X) <= T) + break; /* acceptance */ + } + + /* this is a correction to HRUA* by Ivan Frohne in rv.py */ + if (good > bad) + Z = m - Z; + + /* another fix from rv.py to allow sample to exceed popsize/2 */ + if (m < sample) + Z = good - Z; + + return Z; +} +#undef D1 +#undef D2 + +static RAND_INT_TYPE random_hypergeometric_original(bitgen_t *bitgen_state, + RAND_INT_TYPE good, + RAND_INT_TYPE bad, + RAND_INT_TYPE sample) +{ + if (sample > 10) { + return random_hypergeometric_hrua(bitgen_state, good, bad, sample); + } else if (sample > 0) { + return random_hypergeometric_hyp(bitgen_state, good, bad, sample); + } else { + return 0; + } +} + + /* * This is a wrapper function that matches the expected template. In the legacy * generator, all int types are long, so this accepts int64 and then converts @@ -223,12 +331,14 @@ double legacy_exponential(aug_bitgen_t *aug_state, double scale) { */ int64_t legacy_random_hypergeometric(bitgen_t *bitgen_state, int64_t good, int64_t bad, int64_t sample) { - return (int64_t)random_hypergeometric(bitgen_state, (RAND_INT_TYPE)good, - (RAND_INT_TYPE)bad, - (RAND_INT_TYPE)sample); + return (int64_t)random_hypergeometric_original(bitgen_state, + (RAND_INT_TYPE)good, + (RAND_INT_TYPE)bad, + (RAND_INT_TYPE)sample); } - int64_t legacy_random_logseries(bitgen_t *bitgen_state, double p) { + +int64_t legacy_random_logseries(bitgen_t *bitgen_state, double p) { return (int64_t)random_logseries(bitgen_state, p); } diff --git a/numpy/random/src/pcg32/LICENSE.md b/numpy/random/src/pcg32/LICENSE.md deleted file mode 100644 index e28ef1a8b..000000000 --- a/numpy/random/src/pcg32/LICENSE.md +++ /dev/null @@ -1,22 +0,0 @@ -# PCG32 - -## The MIT License - -PCG Random Number Generation for C. - -Copyright 2014 Melissa O'Neill <oneill@pcg-random.org> - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the "Software"), -to deal in the Software without restriction, including without limitation -the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/numpy/random/src/pcg32/pcg-advance-64.c b/numpy/random/src/pcg32/pcg-advance-64.c deleted file mode 100644 index 8210e7565..000000000 --- a/numpy/random/src/pcg32/pcg-advance-64.c +++ /dev/null @@ -1,62 +0,0 @@ -/* - * PCG Random Number Generation for C. - * - * Copyright 2014 Melissa O'Neill <oneill@pcg-random.org> - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * For additional information about the PCG random number generation scheme, - * including its license and other licensing options, visit - * - * http://www.pcg-random.org - */ - -/* - * This code is derived from the canonical C++ PCG implementation, which - * has many additional features and is preferable if you can use C++ in - * your project. - * - * Repetative C code is derived using C preprocessor metaprogramming - * techniques. - */ - -#include "pcg_variants.h" - -/* Multi-step advance functions (jump-ahead, jump-back) - * - * The method used here is based on Brown, "Random Number Generation - * with Arbitrary Stride,", Transactions of the American Nuclear - * Society (Nov. 1994). The algorithm is very similar to fast - * exponentiation. - * - * Even though delta is an unsigned integer, we can pass a - * signed integer to go backwards, it just goes "the long way round". - */ - -uint64_t pcg_advance_lcg_64(uint64_t state, uint64_t delta, uint64_t cur_mult, - uint64_t cur_plus) -{ - uint64_t acc_mult = 1u; - uint64_t acc_plus = 0u; - while (delta > 0) { - if (delta & 1) { - acc_mult *= cur_mult; - acc_plus = acc_plus * cur_mult + cur_plus; - } - cur_plus = (cur_mult + 1) * cur_plus; - cur_mult *= cur_mult; - delta /= 2; - } - return acc_mult * state + acc_plus; -} - diff --git a/numpy/random/src/pcg32/pcg32-test-data-gen.c b/numpy/random/src/pcg32/pcg32-test-data-gen.c deleted file mode 100644 index cccaf84b9..000000000 --- a/numpy/random/src/pcg32/pcg32-test-data-gen.c +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Generate testing csv files - * - * - * gcc pcg32-test-data-gen.c pcg32.orig.c ../splitmix64/splitmix64.c -o - * pgc64-test-data-gen - */ - -#include "pcg_variants.h" -#include <inttypes.h> -#include <stdio.h> - -#define N 1000 - -int main() { - pcg32_random_t rng; - uint64_t inc, seed = 0xDEADBEAF; - inc = 0; - int i; - uint64_t store[N]; - pcg32_srandom_r(&rng, seed, inc); - for (i = 0; i < N; i++) { - store[i] = pcg32_random_r(&rng); - } - - FILE *fp; - fp = fopen("pcg32-testset-1.csv", "w"); - if (fp == NULL) { - printf("Couldn't open file\n"); - return -1; - } - fprintf(fp, "seed, 0x%" PRIx64 "\n", seed); - for (i = 0; i < N; i++) { - fprintf(fp, "%d, 0x%" PRIx64 "\n", i, store[i]); - if (i == 999) { - printf("%d, 0x%" PRIx64 "\n", i, store[i]); - } - } - fclose(fp); - - seed = 0; - pcg32_srandom_r(&rng, seed, inc); - for (i = 0; i < N; i++) { - store[i] = pcg32_random_r(&rng); - } - fp = fopen("pcg32-testset-2.csv", "w"); - if (fp == NULL) { - printf("Couldn't open file\n"); - return -1; - } - fprintf(fp, "seed, 0x%" PRIx64 "\n", seed); - for (i = 0; i < N; i++) { - fprintf(fp, "%d, 0x%" PRIx64 "\n", i, store[i]); - if (i == 999) { - printf("%d, 0x%" PRIx64 "\n", i, store[i]); - } - } - fclose(fp); -} diff --git a/numpy/random/src/pcg32/pcg32.c b/numpy/random/src/pcg32/pcg32.c deleted file mode 100644 index 5fbf6759f..000000000 --- a/numpy/random/src/pcg32/pcg32.c +++ /dev/null @@ -1,30 +0,0 @@ -#include "pcg32.h" - -extern inline uint64_t pcg32_next64(pcg32_state *state); -extern inline uint32_t pcg32_next32(pcg32_state *state); -extern inline double pcg32_next_double(pcg32_state *state); - -uint64_t pcg_advance_lcg_64(uint64_t state, uint64_t delta, uint64_t cur_mult, - uint64_t cur_plus) { - uint64_t acc_mult, acc_plus; - acc_mult = 1u; - acc_plus = 0u; - while (delta > 0) { - if (delta & 1) { - acc_mult *= cur_mult; - acc_plus = acc_plus * cur_mult + cur_plus; - } - cur_plus = (cur_mult + 1) * cur_plus; - cur_mult *= cur_mult; - delta /= 2; - } - return acc_mult * state + acc_plus; -} - -extern void pcg32_advance_state(pcg32_state *state, uint64_t step) { - pcg32_advance_r(state->pcg_state, step); -} - -extern void pcg32_set_seed(pcg32_state *state, uint64_t seed, uint64_t inc) { - pcg32_srandom_r(state->pcg_state, seed, inc); -} diff --git a/numpy/random/src/pcg32/pcg32.h b/numpy/random/src/pcg32/pcg32.h deleted file mode 100644 index 32c6b693d..000000000 --- a/numpy/random/src/pcg32/pcg32.h +++ /dev/null @@ -1,86 +0,0 @@ -#ifndef _RANDOMDGEN__PCG32_H_ -#define _RANDOMDGEN__PCG32_H_ - -#include <inttypes.h> - -#ifdef _WIN32 -#define inline __forceinline -#endif - -#define PCG_DEFAULT_MULTIPLIER_64 6364136223846793005ULL - -struct pcg_state_setseq_64 { - uint64_t state; - uint64_t inc; -}; - -static inline uint32_t pcg_rotr_32(uint32_t value, unsigned int rot) { -#if PCG_USE_INLINE_ASM && __clang__ && (__x86_64__ || __i386__) - asm("rorl %%cl, %0" : "=r"(value) : "0"(value), "c"(rot)); - return value; -#else - return (value >> rot) | (value << ((-rot) & 31)); -#endif -} - -static inline void pcg_setseq_64_step_r(struct pcg_state_setseq_64 *rng) { - rng->state = rng->state * PCG_DEFAULT_MULTIPLIER_64 + rng->inc; -} - -static inline uint32_t pcg_output_xsh_rr_64_32(uint64_t state) { - return pcg_rotr_32(((state >> 18u) ^ state) >> 27u, state >> 59u); -} - -static inline uint32_t -pcg_setseq_64_xsh_rr_32_random_r(struct pcg_state_setseq_64 *rng) { - uint64_t oldstate; - oldstate = rng->state; - pcg_setseq_64_step_r(rng); - return pcg_output_xsh_rr_64_32(oldstate); -} - -static inline void pcg_setseq_64_srandom_r(struct pcg_state_setseq_64 *rng, - uint64_t initstate, - uint64_t initseq) { - rng->state = 0U; - rng->inc = (initseq << 1u) | 1u; - pcg_setseq_64_step_r(rng); - rng->state += initstate; - pcg_setseq_64_step_r(rng); -} - -extern uint64_t pcg_advance_lcg_64(uint64_t state, uint64_t delta, - uint64_t cur_mult, uint64_t cur_plus); - -static inline void pcg_setseq_64_advance_r(struct pcg_state_setseq_64 *rng, - uint64_t delta) { - rng->state = pcg_advance_lcg_64(rng->state, delta, PCG_DEFAULT_MULTIPLIER_64, - rng->inc); -} - -typedef struct pcg_state_setseq_64 pcg32_random_t; -#define pcg32_random_r pcg_setseq_64_xsh_rr_32_random_r -#define pcg32_srandom_r pcg_setseq_64_srandom_r -#define pcg32_advance_r pcg_setseq_64_advance_r - -typedef struct s_pcg32_state { pcg32_random_t *pcg_state; } pcg32_state; - -static inline uint64_t pcg32_next64(pcg32_state *state) { - return (uint64_t)(pcg32_random_r(state->pcg_state)) << 32 | - pcg32_random_r(state->pcg_state); -} - -static inline uint32_t pcg32_next32(pcg32_state *state) { - return pcg32_random_r(state->pcg_state); -} - -static inline double pcg32_next_double(pcg32_state *state) { - int32_t a = pcg32_random_r(state->pcg_state) >> 5, - b = pcg32_random_r(state->pcg_state) >> 6; - return (a * 67108864.0 + b) / 9007199254740992.0; -} - -void pcg32_advance_state(pcg32_state *state, uint64_t step); -void pcg32_set_seed(pcg32_state *state, uint64_t seed, uint64_t inc); - -#endif diff --git a/numpy/random/src/pcg32/pcg_variants.h b/numpy/random/src/pcg32/pcg_variants.h deleted file mode 100644 index 32daac1ce..000000000 --- a/numpy/random/src/pcg32/pcg_variants.h +++ /dev/null @@ -1,2210 +0,0 @@ -/* - * PCG Random Number Generation for C. - * - * Copyright 2014 Melissa O'Neill <oneill@pcg-random.org> - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * For additional information about the PCG random number generation scheme, - * including its license and other licensing options, visit - * - * http://www.pcg-random.org - */ - -/* - * This code is derived from the canonical C++ PCG implementation, which - * has many additional features and is preferable if you can use C++ in - * your project. - * - * Much of the derivation was performed mechanically. In particular, the - * output functions were generated by compiling the C++ output functions - * into LLVM bitcode and then transforming that using the LLVM C backend - * (from https://github.com/draperlaboratory/llvm-cbe), and then - * postprocessing and hand editing the output. - * - * Much of the remaining code was generated by C-preprocessor metaprogramming. - */ - -#ifndef PCG_VARIANTS_H_INCLUDED -#define PCG_VARIANTS_H_INCLUDED 1 - -#include <inttypes.h> - -#if __SIZEOF_INT128__ - typedef __uint128_t pcg128_t; - #define PCG_128BIT_CONSTANT(high,low) \ - ((((pcg128_t)high) << 64) + low) - #define PCG_HAS_128BIT_OPS 1 -#endif - -#if __GNUC_GNU_INLINE__ && !defined(__cplusplus) - #error Nonstandard GNU inlining semantics. Compile with -std=c99 or better. - // We could instead use macros PCG_INLINE and PCG_EXTERN_INLINE - // but better to just reject ancient C code. -#endif - -#if __cplusplus -extern "C" { -#endif - -/* - * Rotate helper functions. - */ - -inline uint8_t pcg_rotr_8(uint8_t value, unsigned int rot) -{ -/* Unfortunately, clang is kinda pathetic when it comes to properly - * recognizing idiomatic rotate code, so for clang we actually provide - * assembler directives (enabled with PCG_USE_INLINE_ASM). Boo, hiss. - */ -#if PCG_USE_INLINE_ASM && __clang__ && (__x86_64__ || __i386__) - asm ("rorb %%cl, %0" : "=r" (value) : "0" (value), "c" (rot)); - return value; -#else - return (value >> rot) | (value << ((- rot) & 7)); -#endif -} - -inline uint16_t pcg_rotr_16(uint16_t value, unsigned int rot) -{ -#if PCG_USE_INLINE_ASM && __clang__ && (__x86_64__ || __i386__) - asm ("rorw %%cl, %0" : "=r" (value) : "0" (value), "c" (rot)); - return value; -#else - return (value >> rot) | (value << ((- rot) & 15)); -#endif -} - -inline uint32_t pcg_rotr_32(uint32_t value, unsigned int rot) -{ -#if PCG_USE_INLINE_ASM && __clang__ && (__x86_64__ || __i386__) - asm ("rorl %%cl, %0" : "=r" (value) : "0" (value), "c" (rot)); - return value; -#else - return (value >> rot) | (value << ((- rot) & 31)); -#endif -} - -inline uint64_t pcg_rotr_64(uint64_t value, unsigned int rot) -{ -#if 0 && PCG_USE_INLINE_ASM && __clang__ && __x86_64__ - // For whatever reason, clang actually *does* generate rotq by - // itself, so we don't need this code. - asm ("rorq %%cl, %0" : "=r" (value) : "0" (value), "c" (rot)); - return value; -#else - return (value >> rot) | (value << ((- rot) & 63)); -#endif -} - -#if PCG_HAS_128BIT_OPS -inline pcg128_t pcg_rotr_128(pcg128_t value, unsigned int rot) -{ - return (value >> rot) | (value << ((- rot) & 127)); -} -#endif - -/* - * Output functions. These are the core of the PCG generation scheme. - */ - -// XSH RS - -inline uint8_t pcg_output_xsh_rs_16_8(uint16_t state) -{ - return (uint8_t)(((state >> 7u) ^ state) >> ((state >> 14u) + 3u)); -} - -inline uint16_t pcg_output_xsh_rs_32_16(uint32_t state) -{ - return (uint16_t)(((state >> 11u) ^ state) >> ((state >> 30u) + 11u)); -} - -inline uint32_t pcg_output_xsh_rs_64_32(uint64_t state) -{ - - return (uint32_t)(((state >> 22u) ^ state) >> ((state >> 61u) + 22u)); -} - -#if PCG_HAS_128BIT_OPS -inline uint64_t pcg_output_xsh_rs_128_64(pcg128_t state) -{ - return (uint64_t)(((state >> 43u) ^ state) >> ((state >> 124u) + 45u)); -} -#endif - -// XSH RR - -inline uint8_t pcg_output_xsh_rr_16_8(uint16_t state) -{ - return pcg_rotr_8(((state >> 5u) ^ state) >> 5u, state >> 13u); -} - -inline uint16_t pcg_output_xsh_rr_32_16(uint32_t state) -{ - return pcg_rotr_16(((state >> 10u) ^ state) >> 12u, state >> 28u); -} - -inline uint32_t pcg_output_xsh_rr_64_32(uint64_t state) -{ - return pcg_rotr_32(((state >> 18u) ^ state) >> 27u, state >> 59u); -} - -#if PCG_HAS_128BIT_OPS -inline uint64_t pcg_output_xsh_rr_128_64(pcg128_t state) -{ - return pcg_rotr_64(((state >> 29u) ^ state) >> 58u, state >> 122u); -} -#endif - -// RXS M XS - -inline uint8_t pcg_output_rxs_m_xs_8_8(uint8_t state) -{ - uint8_t word = ((state >> ((state >> 6u) + 2u)) ^ state) * 217u; - return (word >> 6u) ^ word; -} - -inline uint16_t pcg_output_rxs_m_xs_16_16(uint16_t state) -{ - uint16_t word = ((state >> ((state >> 13u) + 3u)) ^ state) * 62169u; - return (word >> 11u) ^ word; -} - -inline uint32_t pcg_output_rxs_m_xs_32_32(uint32_t state) -{ - uint32_t word = ((state >> ((state >> 28u) + 4u)) ^ state) * 277803737u; - return (word >> 22u) ^ word; -} - -inline uint64_t pcg_output_rxs_m_xs_64_64(uint64_t state) -{ - uint64_t word = ((state >> ((state >> 59u) + 5u)) ^ state) - * 12605985483714917081ull; - return (word >> 43u) ^ word; -} - -#if PCG_HAS_128BIT_OPS -inline pcg128_t pcg_output_rxs_m_xs_128_128(pcg128_t state) -{ - pcg128_t word = ((state >> ((state >> 122u) + 6u)) ^ state) - * (PCG_128BIT_CONSTANT(17766728186571221404ULL, - 12605985483714917081ULL)); - // 327738287884841127335028083622016905945 - return (word >> 86u) ^ word; -} -#endif - -// XSL RR (only defined for >= 64 bits) - -inline uint32_t pcg_output_xsl_rr_64_32(uint64_t state) -{ - return pcg_rotr_32(((uint32_t)(state >> 32u)) ^ (uint32_t)state, - state >> 59u); -} - -#if PCG_HAS_128BIT_OPS -inline uint64_t pcg_output_xsl_rr_128_64(pcg128_t state) -{ - return pcg_rotr_64(((uint64_t)(state >> 64u)) ^ (uint64_t)state, - state >> 122u); -} -#endif - -// XSL RR RR (only defined for >= 64 bits) - -inline uint64_t pcg_output_xsl_rr_rr_64_64(uint64_t state) -{ - uint32_t rot1 = (uint32_t)(state >> 59u); - uint32_t high = (uint32_t)(state >> 32u); - uint32_t low = (uint32_t)state; - uint32_t xored = high ^ low; - uint32_t newlow = pcg_rotr_32(xored, rot1); - uint32_t newhigh = pcg_rotr_32(high, newlow & 31u); - return (((uint64_t)newhigh) << 32u) | newlow; -} - -#if PCG_HAS_128BIT_OPS -inline pcg128_t pcg_output_xsl_rr_rr_128_128(pcg128_t state) -{ - uint32_t rot1 = (uint32_t)(state >> 122u); - uint64_t high = (uint64_t)(state >> 64u); - uint64_t low = (uint64_t)state; - uint64_t xored = high ^ low; - uint64_t newlow = pcg_rotr_64(xored, rot1); - uint64_t newhigh = pcg_rotr_64(high, newlow & 63u); - return (((pcg128_t)newhigh) << 64u) | newlow; -} -#endif - -#define PCG_DEFAULT_MULTIPLIER_8 141U -#define PCG_DEFAULT_MULTIPLIER_16 12829U -#define PCG_DEFAULT_MULTIPLIER_32 747796405U -#define PCG_DEFAULT_MULTIPLIER_64 6364136223846793005ULL - -#define PCG_DEFAULT_INCREMENT_8 77U -#define PCG_DEFAULT_INCREMENT_16 47989U -#define PCG_DEFAULT_INCREMENT_32 2891336453U -#define PCG_DEFAULT_INCREMENT_64 1442695040888963407ULL - -#if PCG_HAS_128BIT_OPS -#define PCG_DEFAULT_MULTIPLIER_128 \ - PCG_128BIT_CONSTANT(2549297995355413924ULL,4865540595714422341ULL) -#define PCG_DEFAULT_INCREMENT_128 \ - PCG_128BIT_CONSTANT(6364136223846793005ULL,1442695040888963407ULL) -#endif - -/* - * Static initialization constants (if you can't call srandom for some - * bizarre reason). - */ - -#define PCG_STATE_ONESEQ_8_INITIALIZER { 0xd7U } -#define PCG_STATE_ONESEQ_16_INITIALIZER { 0x20dfU } -#define PCG_STATE_ONESEQ_32_INITIALIZER { 0x46b56677U } -#define PCG_STATE_ONESEQ_64_INITIALIZER { 0x4d595df4d0f33173ULL } -#if PCG_HAS_128BIT_OPS -#define PCG_STATE_ONESEQ_128_INITIALIZER \ - { PCG_128BIT_CONSTANT(0xb8dc10e158a92392ULL, 0x98046df007ec0a53ULL) } -#endif - -#define PCG_STATE_UNIQUE_8_INITIALIZER PCG_STATE_ONESEQ_8_INITIALIZER -#define PCG_STATE_UNIQUE_16_INITIALIZER PCG_STATE_ONESEQ_16_INITIALIZER -#define PCG_STATE_UNIQUE_32_INITIALIZER PCG_STATE_ONESEQ_32_INITIALIZER -#define PCG_STATE_UNIQUE_64_INITIALIZER PCG_STATE_ONESEQ_64_INITIALIZER -#if PCG_HAS_128BIT_OPS -#define PCG_STATE_UNIQUE_128_INITIALIZER PCG_STATE_ONESEQ_128_INITIALIZER -#endif - -#define PCG_STATE_MCG_8_INITIALIZER { 0xe5U } -#define PCG_STATE_MCG_16_INITIALIZER { 0xa5e5U } -#define PCG_STATE_MCG_32_INITIALIZER { 0xd15ea5e5U } -#define PCG_STATE_MCG_64_INITIALIZER { 0xcafef00dd15ea5e5ULL } -#if PCG_HAS_128BIT_OPS -#define PCG_STATE_MCG_128_INITIALIZER \ - { PCG_128BIT_CONSTANT(0x0000000000000000ULL, 0xcafef00dd15ea5e5ULL) } -#endif - -#define PCG_STATE_SETSEQ_8_INITIALIZER { 0x9bU, 0xdbU } -#define PCG_STATE_SETSEQ_16_INITIALIZER { 0xe39bU, 0x5bdbU } -#define PCG_STATE_SETSEQ_32_INITIALIZER { 0xec02d89bU, 0x94b95bdbU } -#define PCG_STATE_SETSEQ_64_INITIALIZER \ - { 0x853c49e6748fea9bULL, 0xda3e39cb94b95bdbULL } -#if PCG_HAS_128BIT_OPS -#define PCG_STATE_SETSEQ_128_INITIALIZER \ - { PCG_128BIT_CONSTANT(0x979c9a98d8462005ULL, 0x7d3e9cb6cfe0549bULL), \ - PCG_128BIT_CONSTANT(0x0000000000000001ULL, 0xda3e39cb94b95bdbULL) } -#endif - -/* Representations for the oneseq, mcg, and unique variants */ - -struct pcg_state_8 { - uint8_t state; -}; - -struct pcg_state_16 { - uint16_t state; -}; - -struct pcg_state_32 { - uint32_t state; -}; - -struct pcg_state_64 { - uint64_t state; -}; - -#if PCG_HAS_128BIT_OPS -struct pcg_state_128 { - pcg128_t state; -}; -#endif - -/* Representations setseq variants */ - -struct pcg_state_setseq_8 { - uint8_t state; - uint8_t inc; -}; - -struct pcg_state_setseq_16 { - uint16_t state; - uint16_t inc; -}; - -struct pcg_state_setseq_32 { - uint32_t state; - uint32_t inc; -}; - -struct pcg_state_setseq_64 { - uint64_t state; - uint64_t inc; -}; - -#if PCG_HAS_128BIT_OPS -struct pcg_state_setseq_128 { - pcg128_t state; - pcg128_t inc; -}; -#endif - -/* Multi-step advance functions (jump-ahead, jump-back) */ - -extern uint8_t pcg_advance_lcg_8(uint8_t state, uint8_t delta, uint8_t cur_mult, - uint8_t cur_plus); -extern uint16_t pcg_advance_lcg_16(uint16_t state, uint16_t delta, - uint16_t cur_mult, uint16_t cur_plus); -extern uint32_t pcg_advance_lcg_32(uint32_t state, uint32_t delta, - uint32_t cur_mult, uint32_t cur_plus); -extern uint64_t pcg_advance_lcg_64(uint64_t state, uint64_t delta, - uint64_t cur_mult, uint64_t cur_plus); - -#if PCG_HAS_128BIT_OPS -extern pcg128_t pcg_advance_lcg_128(pcg128_t state, pcg128_t delta, - pcg128_t cur_mult, pcg128_t cur_plus); -#endif - -/* Functions to advance the underlying LCG, one version for each size and - * each style. These functions are considered semi-private. There is rarely - * a good reason to call them directly. - */ - -inline void pcg_oneseq_8_step_r(struct pcg_state_8* rng) -{ - rng->state = rng->state * PCG_DEFAULT_MULTIPLIER_8 - + PCG_DEFAULT_INCREMENT_8; -} - -inline void pcg_oneseq_8_advance_r(struct pcg_state_8* rng, uint8_t delta) -{ - rng->state = pcg_advance_lcg_8(rng->state, delta, PCG_DEFAULT_MULTIPLIER_8, - PCG_DEFAULT_INCREMENT_8); -} - -inline void pcg_mcg_8_step_r(struct pcg_state_8* rng) -{ - rng->state = rng->state * PCG_DEFAULT_MULTIPLIER_8; -} - -inline void pcg_mcg_8_advance_r(struct pcg_state_8* rng, uint8_t delta) -{ - rng->state - = pcg_advance_lcg_8(rng->state, delta, PCG_DEFAULT_MULTIPLIER_8, 0u); -} - -inline void pcg_unique_8_step_r(struct pcg_state_8* rng) -{ - rng->state = rng->state * PCG_DEFAULT_MULTIPLIER_8 - + (uint8_t)(((intptr_t)rng) | 1u); -} - -inline void pcg_unique_8_advance_r(struct pcg_state_8* rng, uint8_t delta) -{ - rng->state = pcg_advance_lcg_8(rng->state, delta, PCG_DEFAULT_MULTIPLIER_8, - (uint8_t)(((intptr_t)rng) | 1u)); -} - -inline void pcg_setseq_8_step_r(struct pcg_state_setseq_8* rng) -{ - rng->state = rng->state * PCG_DEFAULT_MULTIPLIER_8 + rng->inc; -} - -inline void pcg_setseq_8_advance_r(struct pcg_state_setseq_8* rng, - uint8_t delta) -{ - rng->state = pcg_advance_lcg_8(rng->state, delta, PCG_DEFAULT_MULTIPLIER_8, - rng->inc); -} - -inline void pcg_oneseq_16_step_r(struct pcg_state_16* rng) -{ - rng->state = rng->state * PCG_DEFAULT_MULTIPLIER_16 - + PCG_DEFAULT_INCREMENT_16; -} - -inline void pcg_oneseq_16_advance_r(struct pcg_state_16* rng, uint16_t delta) -{ - rng->state = pcg_advance_lcg_16( - rng->state, delta, PCG_DEFAULT_MULTIPLIER_16, PCG_DEFAULT_INCREMENT_16); -} - -inline void pcg_mcg_16_step_r(struct pcg_state_16* rng) -{ - rng->state = rng->state * PCG_DEFAULT_MULTIPLIER_16; -} - -inline void pcg_mcg_16_advance_r(struct pcg_state_16* rng, uint16_t delta) -{ - rng->state - = pcg_advance_lcg_16(rng->state, delta, PCG_DEFAULT_MULTIPLIER_16, 0u); -} - -inline void pcg_unique_16_step_r(struct pcg_state_16* rng) -{ - rng->state = rng->state * PCG_DEFAULT_MULTIPLIER_16 - + (uint16_t)(((intptr_t)rng) | 1u); -} - -inline void pcg_unique_16_advance_r(struct pcg_state_16* rng, uint16_t delta) -{ - rng->state - = pcg_advance_lcg_16(rng->state, delta, PCG_DEFAULT_MULTIPLIER_16, - (uint16_t)(((intptr_t)rng) | 1u)); -} - -inline void pcg_setseq_16_step_r(struct pcg_state_setseq_16* rng) -{ - rng->state = rng->state * PCG_DEFAULT_MULTIPLIER_16 + rng->inc; -} - -inline void pcg_setseq_16_advance_r(struct pcg_state_setseq_16* rng, - uint16_t delta) -{ - rng->state = pcg_advance_lcg_16(rng->state, delta, - PCG_DEFAULT_MULTIPLIER_16, rng->inc); -} - -inline void pcg_oneseq_32_step_r(struct pcg_state_32* rng) -{ - rng->state = rng->state * PCG_DEFAULT_MULTIPLIER_32 - + PCG_DEFAULT_INCREMENT_32; -} - -inline void pcg_oneseq_32_advance_r(struct pcg_state_32* rng, uint32_t delta) -{ - rng->state = pcg_advance_lcg_32( - rng->state, delta, PCG_DEFAULT_MULTIPLIER_32, PCG_DEFAULT_INCREMENT_32); -} - -inline void pcg_mcg_32_step_r(struct pcg_state_32* rng) -{ - rng->state = rng->state * PCG_DEFAULT_MULTIPLIER_32; -} - -inline void pcg_mcg_32_advance_r(struct pcg_state_32* rng, uint32_t delta) -{ - rng->state - = pcg_advance_lcg_32(rng->state, delta, PCG_DEFAULT_MULTIPLIER_32, 0u); -} - -inline void pcg_unique_32_step_r(struct pcg_state_32* rng) -{ - rng->state = rng->state * PCG_DEFAULT_MULTIPLIER_32 - + (uint32_t)(((intptr_t)rng) | 1u); -} - -inline void pcg_unique_32_advance_r(struct pcg_state_32* rng, uint32_t delta) -{ - rng->state - = pcg_advance_lcg_32(rng->state, delta, PCG_DEFAULT_MULTIPLIER_32, - (uint32_t)(((intptr_t)rng) | 1u)); -} - -inline void pcg_setseq_32_step_r(struct pcg_state_setseq_32* rng) -{ - rng->state = rng->state * PCG_DEFAULT_MULTIPLIER_32 + rng->inc; -} - -inline void pcg_setseq_32_advance_r(struct pcg_state_setseq_32* rng, - uint32_t delta) -{ - rng->state = pcg_advance_lcg_32(rng->state, delta, - PCG_DEFAULT_MULTIPLIER_32, rng->inc); -} - -inline void pcg_oneseq_64_step_r(struct pcg_state_64* rng) -{ - rng->state = rng->state * PCG_DEFAULT_MULTIPLIER_64 - + PCG_DEFAULT_INCREMENT_64; -} - -inline void pcg_oneseq_64_advance_r(struct pcg_state_64* rng, uint64_t delta) -{ - rng->state = pcg_advance_lcg_64( - rng->state, delta, PCG_DEFAULT_MULTIPLIER_64, PCG_DEFAULT_INCREMENT_64); -} - -inline void pcg_mcg_64_step_r(struct pcg_state_64* rng) -{ - rng->state = rng->state * PCG_DEFAULT_MULTIPLIER_64; -} - -inline void pcg_mcg_64_advance_r(struct pcg_state_64* rng, uint64_t delta) -{ - rng->state - = pcg_advance_lcg_64(rng->state, delta, PCG_DEFAULT_MULTIPLIER_64, 0u); -} - -inline void pcg_unique_64_step_r(struct pcg_state_64* rng) -{ - rng->state = rng->state * PCG_DEFAULT_MULTIPLIER_64 - + (uint64_t)(((intptr_t)rng) | 1u); -} - -inline void pcg_unique_64_advance_r(struct pcg_state_64* rng, uint64_t delta) -{ - rng->state - = pcg_advance_lcg_64(rng->state, delta, PCG_DEFAULT_MULTIPLIER_64, - (uint64_t)(((intptr_t)rng) | 1u)); -} - -inline void pcg_setseq_64_step_r(struct pcg_state_setseq_64* rng) -{ - rng->state = rng->state * PCG_DEFAULT_MULTIPLIER_64 + rng->inc; -} - -inline void pcg_setseq_64_advance_r(struct pcg_state_setseq_64* rng, - uint64_t delta) -{ - rng->state = pcg_advance_lcg_64(rng->state, delta, - PCG_DEFAULT_MULTIPLIER_64, rng->inc); -} - -#if PCG_HAS_128BIT_OPS -inline void pcg_oneseq_128_step_r(struct pcg_state_128* rng) -{ - rng->state = rng->state * PCG_DEFAULT_MULTIPLIER_128 - + PCG_DEFAULT_INCREMENT_128; -} -#endif - -#if PCG_HAS_128BIT_OPS -inline void pcg_oneseq_128_advance_r(struct pcg_state_128* rng, pcg128_t delta) -{ - rng->state - = pcg_advance_lcg_128(rng->state, delta, PCG_DEFAULT_MULTIPLIER_128, - PCG_DEFAULT_INCREMENT_128); -} -#endif - -#if PCG_HAS_128BIT_OPS -inline void pcg_mcg_128_step_r(struct pcg_state_128* rng) -{ - rng->state = rng->state * PCG_DEFAULT_MULTIPLIER_128; -} -#endif - -#if PCG_HAS_128BIT_OPS -inline void pcg_mcg_128_advance_r(struct pcg_state_128* rng, pcg128_t delta) -{ - rng->state = pcg_advance_lcg_128(rng->state, delta, - PCG_DEFAULT_MULTIPLIER_128, 0u); -} -#endif - -#if PCG_HAS_128BIT_OPS -inline void pcg_unique_128_step_r(struct pcg_state_128* rng) -{ - rng->state = rng->state * PCG_DEFAULT_MULTIPLIER_128 - + (pcg128_t)(((intptr_t)rng) | 1u); -} -#endif - -#if PCG_HAS_128BIT_OPS -inline void pcg_unique_128_advance_r(struct pcg_state_128* rng, pcg128_t delta) -{ - rng->state - = pcg_advance_lcg_128(rng->state, delta, PCG_DEFAULT_MULTIPLIER_128, - (pcg128_t)(((intptr_t)rng) | 1u)); -} -#endif - -#if PCG_HAS_128BIT_OPS -inline void pcg_setseq_128_step_r(struct pcg_state_setseq_128* rng) -{ - rng->state = rng->state * PCG_DEFAULT_MULTIPLIER_128 + rng->inc; -} -#endif - -#if PCG_HAS_128BIT_OPS -inline void pcg_setseq_128_advance_r(struct pcg_state_setseq_128* rng, - pcg128_t delta) -{ - rng->state = pcg_advance_lcg_128(rng->state, delta, - PCG_DEFAULT_MULTIPLIER_128, rng->inc); -} -#endif - -/* Functions to seed the RNG state, one version for each size and each - * style. Unlike the step functions, regular users can and should call - * these functions. - */ - -inline void pcg_oneseq_8_srandom_r(struct pcg_state_8* rng, uint8_t initstate) -{ - rng->state = 0U; - pcg_oneseq_8_step_r(rng); - rng->state += initstate; - pcg_oneseq_8_step_r(rng); -} - -inline void pcg_mcg_8_srandom_r(struct pcg_state_8* rng, uint8_t initstate) -{ - rng->state = initstate | 1u; -} - -inline void pcg_unique_8_srandom_r(struct pcg_state_8* rng, uint8_t initstate) -{ - rng->state = 0U; - pcg_unique_8_step_r(rng); - rng->state += initstate; - pcg_unique_8_step_r(rng); -} - -inline void pcg_setseq_8_srandom_r(struct pcg_state_setseq_8* rng, - uint8_t initstate, uint8_t initseq) -{ - rng->state = 0U; - rng->inc = (initseq << 1u) | 1u; - pcg_setseq_8_step_r(rng); - rng->state += initstate; - pcg_setseq_8_step_r(rng); -} - -inline void pcg_oneseq_16_srandom_r(struct pcg_state_16* rng, - uint16_t initstate) -{ - rng->state = 0U; - pcg_oneseq_16_step_r(rng); - rng->state += initstate; - pcg_oneseq_16_step_r(rng); -} - -inline void pcg_mcg_16_srandom_r(struct pcg_state_16* rng, uint16_t initstate) -{ - rng->state = initstate | 1u; -} - -inline void pcg_unique_16_srandom_r(struct pcg_state_16* rng, - uint16_t initstate) -{ - rng->state = 0U; - pcg_unique_16_step_r(rng); - rng->state += initstate; - pcg_unique_16_step_r(rng); -} - -inline void pcg_setseq_16_srandom_r(struct pcg_state_setseq_16* rng, - uint16_t initstate, uint16_t initseq) -{ - rng->state = 0U; - rng->inc = (initseq << 1u) | 1u; - pcg_setseq_16_step_r(rng); - rng->state += initstate; - pcg_setseq_16_step_r(rng); -} - -inline void pcg_oneseq_32_srandom_r(struct pcg_state_32* rng, - uint32_t initstate) -{ - rng->state = 0U; - pcg_oneseq_32_step_r(rng); - rng->state += initstate; - pcg_oneseq_32_step_r(rng); -} - -inline void pcg_mcg_32_srandom_r(struct pcg_state_32* rng, uint32_t initstate) -{ - rng->state = initstate | 1u; -} - -inline void pcg_unique_32_srandom_r(struct pcg_state_32* rng, - uint32_t initstate) -{ - rng->state = 0U; - pcg_unique_32_step_r(rng); - rng->state += initstate; - pcg_unique_32_step_r(rng); -} - -inline void pcg_setseq_32_srandom_r(struct pcg_state_setseq_32* rng, - uint32_t initstate, uint32_t initseq) -{ - rng->state = 0U; - rng->inc = (initseq << 1u) | 1u; - pcg_setseq_32_step_r(rng); - rng->state += initstate; - pcg_setseq_32_step_r(rng); -} - -inline void pcg_oneseq_64_srandom_r(struct pcg_state_64* rng, - uint64_t initstate) -{ - rng->state = 0U; - pcg_oneseq_64_step_r(rng); - rng->state += initstate; - pcg_oneseq_64_step_r(rng); -} - -inline void pcg_mcg_64_srandom_r(struct pcg_state_64* rng, uint64_t initstate) -{ - rng->state = initstate | 1u; -} - -inline void pcg_unique_64_srandom_r(struct pcg_state_64* rng, - uint64_t initstate) -{ - rng->state = 0U; - pcg_unique_64_step_r(rng); - rng->state += initstate; - pcg_unique_64_step_r(rng); -} - -inline void pcg_setseq_64_srandom_r(struct pcg_state_setseq_64* rng, - uint64_t initstate, uint64_t initseq) -{ - rng->state = 0U; - rng->inc = (initseq << 1u) | 1u; - pcg_setseq_64_step_r(rng); - rng->state += initstate; - pcg_setseq_64_step_r(rng); -} - -#if PCG_HAS_128BIT_OPS -inline void pcg_oneseq_128_srandom_r(struct pcg_state_128* rng, - pcg128_t initstate) -{ - rng->state = 0U; - pcg_oneseq_128_step_r(rng); - rng->state += initstate; - pcg_oneseq_128_step_r(rng); -} -#endif - -#if PCG_HAS_128BIT_OPS -inline void pcg_mcg_128_srandom_r(struct pcg_state_128* rng, pcg128_t initstate) -{ - rng->state = initstate | 1u; -} -#endif - -#if PCG_HAS_128BIT_OPS -inline void pcg_unique_128_srandom_r(struct pcg_state_128* rng, - pcg128_t initstate) -{ - rng->state = 0U; - pcg_unique_128_step_r(rng); - rng->state += initstate; - pcg_unique_128_step_r(rng); -} -#endif - -#if PCG_HAS_128BIT_OPS -inline void pcg_setseq_128_srandom_r(struct pcg_state_setseq_128* rng, - pcg128_t initstate, pcg128_t initseq) -{ - rng->state = 0U; - rng->inc = (initseq << 1u) | 1u; - pcg_setseq_128_step_r(rng); - rng->state += initstate; - pcg_setseq_128_step_r(rng); -} -#endif - -/* Now, finally we create each of the individual generators. We provide - * a random_r function that provides a random number of the appropriate - * type (using the full range of the type) and a boundedrand_r version - * that provides - * - * Implementation notes for boundedrand_r: - * - * To avoid bias, we need to make the range of the RNG a multiple of - * bound, which we do by dropping output less than a threshold. - * Let's consider a 32-bit case... A naive scheme to calculate the - * threshold would be to do - * - * uint32_t threshold = 0x100000000ull % bound; - * - * but 64-bit div/mod is slower than 32-bit div/mod (especially on - * 32-bit platforms). In essence, we do - * - * uint32_t threshold = (0x100000000ull-bound) % bound; - * - * because this version will calculate the same modulus, but the LHS - * value is less than 2^32. - * - * (Note that using modulo is only wise for good RNGs, poorer RNGs - * such as raw LCGs do better using a technique based on division.) - * Empricical tests show that division is preferable to modulus for - * reducting the range of an RNG. It's faster, and sometimes it can - * even be statistically prefereable. - */ - -/* Generation functions for XSH RS */ - -inline uint8_t pcg_oneseq_16_xsh_rs_8_random_r(struct pcg_state_16* rng) -{ - uint16_t oldstate = rng->state; - pcg_oneseq_16_step_r(rng); - return pcg_output_xsh_rs_16_8(oldstate); -} - -inline uint8_t pcg_oneseq_16_xsh_rs_8_boundedrand_r(struct pcg_state_16* rng, - uint8_t bound) -{ - uint8_t threshold = ((uint8_t)(-bound)) % bound; - for (;;) { - uint8_t r = pcg_oneseq_16_xsh_rs_8_random_r(rng); - if (r >= threshold) - return r % bound; - } -} - -inline uint16_t pcg_oneseq_32_xsh_rs_16_random_r(struct pcg_state_32* rng) -{ - uint32_t oldstate = rng->state; - pcg_oneseq_32_step_r(rng); - return pcg_output_xsh_rs_32_16(oldstate); -} - -inline uint16_t pcg_oneseq_32_xsh_rs_16_boundedrand_r(struct pcg_state_32* rng, - uint16_t bound) -{ - uint16_t threshold = ((uint16_t)(-bound)) % bound; - for (;;) { - uint16_t r = pcg_oneseq_32_xsh_rs_16_random_r(rng); - if (r >= threshold) - return r % bound; - } -} - -inline uint32_t pcg_oneseq_64_xsh_rs_32_random_r(struct pcg_state_64* rng) -{ - uint64_t oldstate = rng->state; - pcg_oneseq_64_step_r(rng); - return pcg_output_xsh_rs_64_32(oldstate); -} - -inline uint32_t pcg_oneseq_64_xsh_rs_32_boundedrand_r(struct pcg_state_64* rng, - uint32_t bound) -{ - uint32_t threshold = -bound % bound; - for (;;) { - uint32_t r = pcg_oneseq_64_xsh_rs_32_random_r(rng); - if (r >= threshold) - return r % bound; - } -} - -#if PCG_HAS_128BIT_OPS -inline uint64_t pcg_oneseq_128_xsh_rs_64_random_r(struct pcg_state_128* rng) -{ - pcg_oneseq_128_step_r(rng); - return pcg_output_xsh_rs_128_64(rng->state); -} -#endif - -#if PCG_HAS_128BIT_OPS -inline uint64_t -pcg_oneseq_128_xsh_rs_64_boundedrand_r(struct pcg_state_128* rng, - uint64_t bound) -{ - uint64_t threshold = -bound % bound; - for (;;) { - uint64_t r = pcg_oneseq_128_xsh_rs_64_random_r(rng); - if (r >= threshold) - return r % bound; - } -} -#endif - -inline uint8_t pcg_unique_16_xsh_rs_8_random_r(struct pcg_state_16* rng) -{ - uint16_t oldstate = rng->state; - pcg_unique_16_step_r(rng); - return pcg_output_xsh_rs_16_8(oldstate); -} - -inline uint8_t pcg_unique_16_xsh_rs_8_boundedrand_r(struct pcg_state_16* rng, - uint8_t bound) -{ - uint8_t threshold = ((uint8_t)(-bound)) % bound; - for (;;) { - uint8_t r = pcg_unique_16_xsh_rs_8_random_r(rng); - if (r >= threshold) - return r % bound; - } -} - -inline uint16_t pcg_unique_32_xsh_rs_16_random_r(struct pcg_state_32* rng) -{ - uint32_t oldstate = rng->state; - pcg_unique_32_step_r(rng); - return pcg_output_xsh_rs_32_16(oldstate); -} - -inline uint16_t pcg_unique_32_xsh_rs_16_boundedrand_r(struct pcg_state_32* rng, - uint16_t bound) -{ - uint16_t threshold = ((uint16_t)(-bound)) % bound; - for (;;) { - uint16_t r = pcg_unique_32_xsh_rs_16_random_r(rng); - if (r >= threshold) - return r % bound; - } -} - -inline uint32_t pcg_unique_64_xsh_rs_32_random_r(struct pcg_state_64* rng) -{ - uint64_t oldstate = rng->state; - pcg_unique_64_step_r(rng); - return pcg_output_xsh_rs_64_32(oldstate); -} - -inline uint32_t pcg_unique_64_xsh_rs_32_boundedrand_r(struct pcg_state_64* rng, - uint32_t bound) -{ - uint32_t threshold = -bound % bound; - for (;;) { - uint32_t r = pcg_unique_64_xsh_rs_32_random_r(rng); - if (r >= threshold) - return r % bound; - } -} - -#if PCG_HAS_128BIT_OPS -inline uint64_t pcg_unique_128_xsh_rs_64_random_r(struct pcg_state_128* rng) -{ - pcg_unique_128_step_r(rng); - return pcg_output_xsh_rs_128_64(rng->state); -} -#endif - -#if PCG_HAS_128BIT_OPS -inline uint64_t -pcg_unique_128_xsh_rs_64_boundedrand_r(struct pcg_state_128* rng, - uint64_t bound) -{ - uint64_t threshold = -bound % bound; - for (;;) { - uint64_t r = pcg_unique_128_xsh_rs_64_random_r(rng); - if (r >= threshold) - return r % bound; - } -} -#endif - -inline uint8_t pcg_setseq_16_xsh_rs_8_random_r(struct pcg_state_setseq_16* rng) -{ - uint16_t oldstate = rng->state; - pcg_setseq_16_step_r(rng); - return pcg_output_xsh_rs_16_8(oldstate); -} - -inline uint8_t -pcg_setseq_16_xsh_rs_8_boundedrand_r(struct pcg_state_setseq_16* rng, - uint8_t bound) -{ - uint8_t threshold = ((uint8_t)(-bound)) % bound; - for (;;) { - uint8_t r = pcg_setseq_16_xsh_rs_8_random_r(rng); - if (r >= threshold) - return r % bound; - } -} - -inline uint16_t -pcg_setseq_32_xsh_rs_16_random_r(struct pcg_state_setseq_32* rng) -{ - uint32_t oldstate = rng->state; - pcg_setseq_32_step_r(rng); - return pcg_output_xsh_rs_32_16(oldstate); -} - -inline uint16_t -pcg_setseq_32_xsh_rs_16_boundedrand_r(struct pcg_state_setseq_32* rng, - uint16_t bound) -{ - uint16_t threshold = ((uint16_t)(-bound)) % bound; - for (;;) { - uint16_t r = pcg_setseq_32_xsh_rs_16_random_r(rng); - if (r >= threshold) - return r % bound; - } -} - -inline uint32_t -pcg_setseq_64_xsh_rs_32_random_r(struct pcg_state_setseq_64* rng) -{ - uint64_t oldstate = rng->state; - pcg_setseq_64_step_r(rng); - return pcg_output_xsh_rs_64_32(oldstate); -} - -inline uint32_t -pcg_setseq_64_xsh_rs_32_boundedrand_r(struct pcg_state_setseq_64* rng, - uint32_t bound) -{ - uint32_t threshold = -bound % bound; - for (;;) { - uint32_t r = pcg_setseq_64_xsh_rs_32_random_r(rng); - if (r >= threshold) - return r % bound; - } -} - -#if PCG_HAS_128BIT_OPS -inline uint64_t -pcg_setseq_128_xsh_rs_64_random_r(struct pcg_state_setseq_128* rng) -{ - pcg_setseq_128_step_r(rng); - return pcg_output_xsh_rs_128_64(rng->state); -} -#endif - -#if PCG_HAS_128BIT_OPS -inline uint64_t -pcg_setseq_128_xsh_rs_64_boundedrand_r(struct pcg_state_setseq_128* rng, - uint64_t bound) -{ - uint64_t threshold = -bound % bound; - for (;;) { - uint64_t r = pcg_setseq_128_xsh_rs_64_random_r(rng); - if (r >= threshold) - return r % bound; - } -} -#endif - -inline uint8_t pcg_mcg_16_xsh_rs_8_random_r(struct pcg_state_16* rng) -{ - uint16_t oldstate = rng->state; - pcg_mcg_16_step_r(rng); - return pcg_output_xsh_rs_16_8(oldstate); -} - -inline uint8_t pcg_mcg_16_xsh_rs_8_boundedrand_r(struct pcg_state_16* rng, - uint8_t bound) -{ - uint8_t threshold = ((uint8_t)(-bound)) % bound; - for (;;) { - uint8_t r = pcg_mcg_16_xsh_rs_8_random_r(rng); - if (r >= threshold) - return r % bound; - } -} - -inline uint16_t pcg_mcg_32_xsh_rs_16_random_r(struct pcg_state_32* rng) -{ - uint32_t oldstate = rng->state; - pcg_mcg_32_step_r(rng); - return pcg_output_xsh_rs_32_16(oldstate); -} - -inline uint16_t pcg_mcg_32_xsh_rs_16_boundedrand_r(struct pcg_state_32* rng, - uint16_t bound) -{ - uint16_t threshold = ((uint16_t)(-bound)) % bound; - for (;;) { - uint16_t r = pcg_mcg_32_xsh_rs_16_random_r(rng); - if (r >= threshold) - return r % bound; - } -} - -inline uint32_t pcg_mcg_64_xsh_rs_32_random_r(struct pcg_state_64* rng) -{ - uint64_t oldstate = rng->state; - pcg_mcg_64_step_r(rng); - return pcg_output_xsh_rs_64_32(oldstate); -} - -inline uint32_t pcg_mcg_64_xsh_rs_32_boundedrand_r(struct pcg_state_64* rng, - uint32_t bound) -{ - uint32_t threshold = -bound % bound; - for (;;) { - uint32_t r = pcg_mcg_64_xsh_rs_32_random_r(rng); - if (r >= threshold) - return r % bound; - } -} - -#if PCG_HAS_128BIT_OPS -inline uint64_t pcg_mcg_128_xsh_rs_64_random_r(struct pcg_state_128* rng) -{ - pcg_mcg_128_step_r(rng); - return pcg_output_xsh_rs_128_64(rng->state); -} -#endif - -#if PCG_HAS_128BIT_OPS -inline uint64_t pcg_mcg_128_xsh_rs_64_boundedrand_r(struct pcg_state_128* rng, - uint64_t bound) -{ - uint64_t threshold = -bound % bound; - for (;;) { - uint64_t r = pcg_mcg_128_xsh_rs_64_random_r(rng); - if (r >= threshold) - return r % bound; - } -} -#endif - -/* Generation functions for XSH RR */ - -inline uint8_t pcg_oneseq_16_xsh_rr_8_random_r(struct pcg_state_16* rng) -{ - uint16_t oldstate = rng->state; - pcg_oneseq_16_step_r(rng); - return pcg_output_xsh_rr_16_8(oldstate); -} - -inline uint8_t pcg_oneseq_16_xsh_rr_8_boundedrand_r(struct pcg_state_16* rng, - uint8_t bound) -{ - uint8_t threshold = ((uint8_t)(-bound)) % bound; - for (;;) { - uint8_t r = pcg_oneseq_16_xsh_rr_8_random_r(rng); - if (r >= threshold) - return r % bound; - } -} - -inline uint16_t pcg_oneseq_32_xsh_rr_16_random_r(struct pcg_state_32* rng) -{ - uint32_t oldstate = rng->state; - pcg_oneseq_32_step_r(rng); - return pcg_output_xsh_rr_32_16(oldstate); -} - -inline uint16_t pcg_oneseq_32_xsh_rr_16_boundedrand_r(struct pcg_state_32* rng, - uint16_t bound) -{ - uint16_t threshold = ((uint16_t)(-bound)) % bound; - for (;;) { - uint16_t r = pcg_oneseq_32_xsh_rr_16_random_r(rng); - if (r >= threshold) - return r % bound; - } -} - -inline uint32_t pcg_oneseq_64_xsh_rr_32_random_r(struct pcg_state_64* rng) -{ - uint64_t oldstate = rng->state; - pcg_oneseq_64_step_r(rng); - return pcg_output_xsh_rr_64_32(oldstate); -} - -inline uint32_t pcg_oneseq_64_xsh_rr_32_boundedrand_r(struct pcg_state_64* rng, - uint32_t bound) -{ - uint32_t threshold = -bound % bound; - for (;;) { - uint32_t r = pcg_oneseq_64_xsh_rr_32_random_r(rng); - if (r >= threshold) - return r % bound; - } -} - -#if PCG_HAS_128BIT_OPS -inline uint64_t pcg_oneseq_128_xsh_rr_64_random_r(struct pcg_state_128* rng) -{ - pcg_oneseq_128_step_r(rng); - return pcg_output_xsh_rr_128_64(rng->state); -} -#endif - -#if PCG_HAS_128BIT_OPS -inline uint64_t -pcg_oneseq_128_xsh_rr_64_boundedrand_r(struct pcg_state_128* rng, - uint64_t bound) -{ - uint64_t threshold = -bound % bound; - for (;;) { - uint64_t r = pcg_oneseq_128_xsh_rr_64_random_r(rng); - if (r >= threshold) - return r % bound; - } -} -#endif - -inline uint8_t pcg_unique_16_xsh_rr_8_random_r(struct pcg_state_16* rng) -{ - uint16_t oldstate = rng->state; - pcg_unique_16_step_r(rng); - return pcg_output_xsh_rr_16_8(oldstate); -} - -inline uint8_t pcg_unique_16_xsh_rr_8_boundedrand_r(struct pcg_state_16* rng, - uint8_t bound) -{ - uint8_t threshold = ((uint8_t)(-bound)) % bound; - for (;;) { - uint8_t r = pcg_unique_16_xsh_rr_8_random_r(rng); - if (r >= threshold) - return r % bound; - } -} - -inline uint16_t pcg_unique_32_xsh_rr_16_random_r(struct pcg_state_32* rng) -{ - uint32_t oldstate = rng->state; - pcg_unique_32_step_r(rng); - return pcg_output_xsh_rr_32_16(oldstate); -} - -inline uint16_t pcg_unique_32_xsh_rr_16_boundedrand_r(struct pcg_state_32* rng, - uint16_t bound) -{ - uint16_t threshold = ((uint16_t)(-bound)) % bound; - for (;;) { - uint16_t r = pcg_unique_32_xsh_rr_16_random_r(rng); - if (r >= threshold) - return r % bound; - } -} - -inline uint32_t pcg_unique_64_xsh_rr_32_random_r(struct pcg_state_64* rng) -{ - uint64_t oldstate = rng->state; - pcg_unique_64_step_r(rng); - return pcg_output_xsh_rr_64_32(oldstate); -} - -inline uint32_t pcg_unique_64_xsh_rr_32_boundedrand_r(struct pcg_state_64* rng, - uint32_t bound) -{ - uint32_t threshold = -bound % bound; - for (;;) { - uint32_t r = pcg_unique_64_xsh_rr_32_random_r(rng); - if (r >= threshold) - return r % bound; - } -} - -#if PCG_HAS_128BIT_OPS -inline uint64_t pcg_unique_128_xsh_rr_64_random_r(struct pcg_state_128* rng) -{ - pcg_unique_128_step_r(rng); - return pcg_output_xsh_rr_128_64(rng->state); -} -#endif - -#if PCG_HAS_128BIT_OPS -inline uint64_t -pcg_unique_128_xsh_rr_64_boundedrand_r(struct pcg_state_128* rng, - uint64_t bound) -{ - uint64_t threshold = -bound % bound; - for (;;) { - uint64_t r = pcg_unique_128_xsh_rr_64_random_r(rng); - if (r >= threshold) - return r % bound; - } -} -#endif - -inline uint8_t pcg_setseq_16_xsh_rr_8_random_r(struct pcg_state_setseq_16* rng) -{ - uint16_t oldstate = rng->state; - pcg_setseq_16_step_r(rng); - return pcg_output_xsh_rr_16_8(oldstate); -} - -inline uint8_t -pcg_setseq_16_xsh_rr_8_boundedrand_r(struct pcg_state_setseq_16* rng, - uint8_t bound) -{ - uint8_t threshold = ((uint8_t)(-bound)) % bound; - for (;;) { - uint8_t r = pcg_setseq_16_xsh_rr_8_random_r(rng); - if (r >= threshold) - return r % bound; - } -} - -inline uint16_t -pcg_setseq_32_xsh_rr_16_random_r(struct pcg_state_setseq_32* rng) -{ - uint32_t oldstate = rng->state; - pcg_setseq_32_step_r(rng); - return pcg_output_xsh_rr_32_16(oldstate); -} - -inline uint16_t -pcg_setseq_32_xsh_rr_16_boundedrand_r(struct pcg_state_setseq_32* rng, - uint16_t bound) -{ - uint16_t threshold = ((uint16_t)(-bound)) % bound; - for (;;) { - uint16_t r = pcg_setseq_32_xsh_rr_16_random_r(rng); - if (r >= threshold) - return r % bound; - } -} - -inline uint32_t -pcg_setseq_64_xsh_rr_32_random_r(struct pcg_state_setseq_64* rng) -{ - uint64_t oldstate = rng->state; - pcg_setseq_64_step_r(rng); - return pcg_output_xsh_rr_64_32(oldstate); -} - -inline uint32_t -pcg_setseq_64_xsh_rr_32_boundedrand_r(struct pcg_state_setseq_64* rng, - uint32_t bound) -{ - uint32_t threshold = -bound % bound; - for (;;) { - uint32_t r = pcg_setseq_64_xsh_rr_32_random_r(rng); - if (r >= threshold) - return r % bound; - } -} - -#if PCG_HAS_128BIT_OPS -inline uint64_t -pcg_setseq_128_xsh_rr_64_random_r(struct pcg_state_setseq_128* rng) -{ - pcg_setseq_128_step_r(rng); - return pcg_output_xsh_rr_128_64(rng->state); -} -#endif - -#if PCG_HAS_128BIT_OPS -inline uint64_t -pcg_setseq_128_xsh_rr_64_boundedrand_r(struct pcg_state_setseq_128* rng, - uint64_t bound) -{ - uint64_t threshold = -bound % bound; - for (;;) { - uint64_t r = pcg_setseq_128_xsh_rr_64_random_r(rng); - if (r >= threshold) - return r % bound; - } -} -#endif - -inline uint8_t pcg_mcg_16_xsh_rr_8_random_r(struct pcg_state_16* rng) -{ - uint16_t oldstate = rng->state; - pcg_mcg_16_step_r(rng); - return pcg_output_xsh_rr_16_8(oldstate); -} - -inline uint8_t pcg_mcg_16_xsh_rr_8_boundedrand_r(struct pcg_state_16* rng, - uint8_t bound) -{ - uint8_t threshold = ((uint8_t)(-bound)) % bound; - for (;;) { - uint8_t r = pcg_mcg_16_xsh_rr_8_random_r(rng); - if (r >= threshold) - return r % bound; - } -} - -inline uint16_t pcg_mcg_32_xsh_rr_16_random_r(struct pcg_state_32* rng) -{ - uint32_t oldstate = rng->state; - pcg_mcg_32_step_r(rng); - return pcg_output_xsh_rr_32_16(oldstate); -} - -inline uint16_t pcg_mcg_32_xsh_rr_16_boundedrand_r(struct pcg_state_32* rng, - uint16_t bound) -{ - uint16_t threshold = ((uint16_t)(-bound)) % bound; - for (;;) { - uint16_t r = pcg_mcg_32_xsh_rr_16_random_r(rng); - if (r >= threshold) - return r % bound; - } -} - -inline uint32_t pcg_mcg_64_xsh_rr_32_random_r(struct pcg_state_64* rng) -{ - uint64_t oldstate = rng->state; - pcg_mcg_64_step_r(rng); - return pcg_output_xsh_rr_64_32(oldstate); -} - -inline uint32_t pcg_mcg_64_xsh_rr_32_boundedrand_r(struct pcg_state_64* rng, - uint32_t bound) -{ - uint32_t threshold = -bound % bound; - for (;;) { - uint32_t r = pcg_mcg_64_xsh_rr_32_random_r(rng); - if (r >= threshold) - return r % bound; - } -} - -#if PCG_HAS_128BIT_OPS -inline uint64_t pcg_mcg_128_xsh_rr_64_random_r(struct pcg_state_128* rng) -{ - pcg_mcg_128_step_r(rng); - return pcg_output_xsh_rr_128_64(rng->state); -} -#endif - -#if PCG_HAS_128BIT_OPS -inline uint64_t pcg_mcg_128_xsh_rr_64_boundedrand_r(struct pcg_state_128* rng, - uint64_t bound) -{ - uint64_t threshold = -bound % bound; - for (;;) { - uint64_t r = pcg_mcg_128_xsh_rr_64_random_r(rng); - if (r >= threshold) - return r % bound; - } -} -#endif - -/* Generation functions for RXS M XS (no MCG versions because they - * don't make sense when you want to use the entire state) - */ - -inline uint8_t pcg_oneseq_8_rxs_m_xs_8_random_r(struct pcg_state_8* rng) -{ - uint8_t oldstate = rng->state; - pcg_oneseq_8_step_r(rng); - return pcg_output_rxs_m_xs_8_8(oldstate); -} - -inline uint8_t pcg_oneseq_8_rxs_m_xs_8_boundedrand_r(struct pcg_state_8* rng, - uint8_t bound) -{ - uint8_t threshold = ((uint8_t)(-bound)) % bound; - for (;;) { - uint8_t r = pcg_oneseq_8_rxs_m_xs_8_random_r(rng); - if (r >= threshold) - return r % bound; - } -} - -inline uint16_t pcg_oneseq_16_rxs_m_xs_16_random_r(struct pcg_state_16* rng) -{ - uint16_t oldstate = rng->state; - pcg_oneseq_16_step_r(rng); - return pcg_output_rxs_m_xs_16_16(oldstate); -} - -inline uint16_t -pcg_oneseq_16_rxs_m_xs_16_boundedrand_r(struct pcg_state_16* rng, - uint16_t bound) -{ - uint16_t threshold = ((uint16_t)(-bound)) % bound; - for (;;) { - uint16_t r = pcg_oneseq_16_rxs_m_xs_16_random_r(rng); - if (r >= threshold) - return r % bound; - } -} - -inline uint32_t pcg_oneseq_32_rxs_m_xs_32_random_r(struct pcg_state_32* rng) -{ - uint32_t oldstate = rng->state; - pcg_oneseq_32_step_r(rng); - return pcg_output_rxs_m_xs_32_32(oldstate); -} - -inline uint32_t -pcg_oneseq_32_rxs_m_xs_32_boundedrand_r(struct pcg_state_32* rng, - uint32_t bound) -{ - uint32_t threshold = -bound % bound; - for (;;) { - uint32_t r = pcg_oneseq_32_rxs_m_xs_32_random_r(rng); - if (r >= threshold) - return r % bound; - } -} - -inline uint64_t pcg_oneseq_64_rxs_m_xs_64_random_r(struct pcg_state_64* rng) -{ - uint64_t oldstate = rng->state; - pcg_oneseq_64_step_r(rng); - return pcg_output_rxs_m_xs_64_64(oldstate); -} - -inline uint64_t -pcg_oneseq_64_rxs_m_xs_64_boundedrand_r(struct pcg_state_64* rng, - uint64_t bound) -{ - uint64_t threshold = -bound % bound; - for (;;) { - uint64_t r = pcg_oneseq_64_rxs_m_xs_64_random_r(rng); - if (r >= threshold) - return r % bound; - } -} - -#if PCG_HAS_128BIT_OPS -inline pcg128_t pcg_oneseq_128_rxs_m_xs_128_random_r(struct pcg_state_128* rng) -{ - pcg_oneseq_128_step_r(rng); - return pcg_output_rxs_m_xs_128_128(rng->state); -} -#endif - -#if PCG_HAS_128BIT_OPS -inline pcg128_t -pcg_oneseq_128_rxs_m_xs_128_boundedrand_r(struct pcg_state_128* rng, - pcg128_t bound) -{ - pcg128_t threshold = -bound % bound; - for (;;) { - pcg128_t r = pcg_oneseq_128_rxs_m_xs_128_random_r(rng); - if (r >= threshold) - return r % bound; - } -} -#endif - -inline uint16_t pcg_unique_16_rxs_m_xs_16_random_r(struct pcg_state_16* rng) -{ - uint16_t oldstate = rng->state; - pcg_unique_16_step_r(rng); - return pcg_output_rxs_m_xs_16_16(oldstate); -} - -inline uint16_t -pcg_unique_16_rxs_m_xs_16_boundedrand_r(struct pcg_state_16* rng, - uint16_t bound) -{ - uint16_t threshold = ((uint16_t)(-bound)) % bound; - for (;;) { - uint16_t r = pcg_unique_16_rxs_m_xs_16_random_r(rng); - if (r >= threshold) - return r % bound; - } -} - -inline uint32_t pcg_unique_32_rxs_m_xs_32_random_r(struct pcg_state_32* rng) -{ - uint32_t oldstate = rng->state; - pcg_unique_32_step_r(rng); - return pcg_output_rxs_m_xs_32_32(oldstate); -} - -inline uint32_t -pcg_unique_32_rxs_m_xs_32_boundedrand_r(struct pcg_state_32* rng, - uint32_t bound) -{ - uint32_t threshold = -bound % bound; - for (;;) { - uint32_t r = pcg_unique_32_rxs_m_xs_32_random_r(rng); - if (r >= threshold) - return r % bound; - } -} - -inline uint64_t pcg_unique_64_rxs_m_xs_64_random_r(struct pcg_state_64* rng) -{ - uint64_t oldstate = rng->state; - pcg_unique_64_step_r(rng); - return pcg_output_rxs_m_xs_64_64(oldstate); -} - -inline uint64_t -pcg_unique_64_rxs_m_xs_64_boundedrand_r(struct pcg_state_64* rng, - uint64_t bound) -{ - uint64_t threshold = -bound % bound; - for (;;) { - uint64_t r = pcg_unique_64_rxs_m_xs_64_random_r(rng); - if (r >= threshold) - return r % bound; - } -} - -#if PCG_HAS_128BIT_OPS -inline pcg128_t pcg_unique_128_rxs_m_xs_128_random_r(struct pcg_state_128* rng) -{ - pcg_unique_128_step_r(rng); - return pcg_output_rxs_m_xs_128_128(rng->state); -} -#endif - -#if PCG_HAS_128BIT_OPS -inline pcg128_t -pcg_unique_128_rxs_m_xs_128_boundedrand_r(struct pcg_state_128* rng, - pcg128_t bound) -{ - pcg128_t threshold = -bound % bound; - for (;;) { - pcg128_t r = pcg_unique_128_rxs_m_xs_128_random_r(rng); - if (r >= threshold) - return r % bound; - } -} -#endif - -inline uint8_t pcg_setseq_8_rxs_m_xs_8_random_r(struct pcg_state_setseq_8* rng) -{ - uint8_t oldstate = rng->state; - pcg_setseq_8_step_r(rng); - return pcg_output_rxs_m_xs_8_8(oldstate); -} - -inline uint8_t -pcg_setseq_8_rxs_m_xs_8_boundedrand_r(struct pcg_state_setseq_8* rng, - uint8_t bound) -{ - uint8_t threshold = ((uint8_t)(-bound)) % bound; - for (;;) { - uint8_t r = pcg_setseq_8_rxs_m_xs_8_random_r(rng); - if (r >= threshold) - return r % bound; - } -} - -inline uint16_t -pcg_setseq_16_rxs_m_xs_16_random_r(struct pcg_state_setseq_16* rng) -{ - uint16_t oldstate = rng->state; - pcg_setseq_16_step_r(rng); - return pcg_output_rxs_m_xs_16_16(oldstate); -} - -inline uint16_t -pcg_setseq_16_rxs_m_xs_16_boundedrand_r(struct pcg_state_setseq_16* rng, - uint16_t bound) -{ - uint16_t threshold = ((uint16_t)(-bound)) % bound; - for (;;) { - uint16_t r = pcg_setseq_16_rxs_m_xs_16_random_r(rng); - if (r >= threshold) - return r % bound; - } -} - -inline uint32_t -pcg_setseq_32_rxs_m_xs_32_random_r(struct pcg_state_setseq_32* rng) -{ - uint32_t oldstate = rng->state; - pcg_setseq_32_step_r(rng); - return pcg_output_rxs_m_xs_32_32(oldstate); -} - -inline uint32_t -pcg_setseq_32_rxs_m_xs_32_boundedrand_r(struct pcg_state_setseq_32* rng, - uint32_t bound) -{ - uint32_t threshold = -bound % bound; - for (;;) { - uint32_t r = pcg_setseq_32_rxs_m_xs_32_random_r(rng); - if (r >= threshold) - return r % bound; - } -} - -inline uint64_t -pcg_setseq_64_rxs_m_xs_64_random_r(struct pcg_state_setseq_64* rng) -{ - uint64_t oldstate = rng->state; - pcg_setseq_64_step_r(rng); - return pcg_output_rxs_m_xs_64_64(oldstate); -} - -inline uint64_t -pcg_setseq_64_rxs_m_xs_64_boundedrand_r(struct pcg_state_setseq_64* rng, - uint64_t bound) -{ - uint64_t threshold = -bound % bound; - for (;;) { - uint64_t r = pcg_setseq_64_rxs_m_xs_64_random_r(rng); - if (r >= threshold) - return r % bound; - } -} - -#if PCG_HAS_128BIT_OPS -inline pcg128_t -pcg_setseq_128_rxs_m_xs_128_random_r(struct pcg_state_setseq_128* rng) -{ - pcg_setseq_128_step_r(rng); - return pcg_output_rxs_m_xs_128_128(rng->state); -} -#endif - -#if PCG_HAS_128BIT_OPS -inline pcg128_t -pcg_setseq_128_rxs_m_xs_128_boundedrand_r(struct pcg_state_setseq_128* rng, - pcg128_t bound) -{ - pcg128_t threshold = -bound % bound; - for (;;) { - pcg128_t r = pcg_setseq_128_rxs_m_xs_128_random_r(rng); - if (r >= threshold) - return r % bound; - } -} -#endif - -/* Generation functions for XSL RR (only defined for "large" types) */ - -inline uint32_t pcg_oneseq_64_xsl_rr_32_random_r(struct pcg_state_64* rng) -{ - uint64_t oldstate = rng->state; - pcg_oneseq_64_step_r(rng); - return pcg_output_xsl_rr_64_32(oldstate); -} - -inline uint32_t pcg_oneseq_64_xsl_rr_32_boundedrand_r(struct pcg_state_64* rng, - uint32_t bound) -{ - uint32_t threshold = -bound % bound; - for (;;) { - uint32_t r = pcg_oneseq_64_xsl_rr_32_random_r(rng); - if (r >= threshold) - return r % bound; - } -} - -#if PCG_HAS_128BIT_OPS -inline uint64_t pcg_oneseq_128_xsl_rr_64_random_r(struct pcg_state_128* rng) -{ - pcg_oneseq_128_step_r(rng); - return pcg_output_xsl_rr_128_64(rng->state); -} -#endif - -#if PCG_HAS_128BIT_OPS -inline uint64_t -pcg_oneseq_128_xsl_rr_64_boundedrand_r(struct pcg_state_128* rng, - uint64_t bound) -{ - uint64_t threshold = -bound % bound; - for (;;) { - uint64_t r = pcg_oneseq_128_xsl_rr_64_random_r(rng); - if (r >= threshold) - return r % bound; - } -} -#endif - -inline uint32_t pcg_unique_64_xsl_rr_32_random_r(struct pcg_state_64* rng) -{ - uint64_t oldstate = rng->state; - pcg_unique_64_step_r(rng); - return pcg_output_xsl_rr_64_32(oldstate); -} - -inline uint32_t pcg_unique_64_xsl_rr_32_boundedrand_r(struct pcg_state_64* rng, - uint32_t bound) -{ - uint32_t threshold = -bound % bound; - for (;;) { - uint32_t r = pcg_unique_64_xsl_rr_32_random_r(rng); - if (r >= threshold) - return r % bound; - } -} - -#if PCG_HAS_128BIT_OPS -inline uint64_t pcg_unique_128_xsl_rr_64_random_r(struct pcg_state_128* rng) -{ - pcg_unique_128_step_r(rng); - return pcg_output_xsl_rr_128_64(rng->state); -} -#endif - -#if PCG_HAS_128BIT_OPS -inline uint64_t -pcg_unique_128_xsl_rr_64_boundedrand_r(struct pcg_state_128* rng, - uint64_t bound) -{ - uint64_t threshold = -bound % bound; - for (;;) { - uint64_t r = pcg_unique_128_xsl_rr_64_random_r(rng); - if (r >= threshold) - return r % bound; - } -} -#endif - -inline uint32_t -pcg_setseq_64_xsl_rr_32_random_r(struct pcg_state_setseq_64* rng) -{ - uint64_t oldstate = rng->state; - pcg_setseq_64_step_r(rng); - return pcg_output_xsl_rr_64_32(oldstate); -} - -inline uint32_t -pcg_setseq_64_xsl_rr_32_boundedrand_r(struct pcg_state_setseq_64* rng, - uint32_t bound) -{ - uint32_t threshold = -bound % bound; - for (;;) { - uint32_t r = pcg_setseq_64_xsl_rr_32_random_r(rng); - if (r >= threshold) - return r % bound; - } -} - -#if PCG_HAS_128BIT_OPS -inline uint64_t -pcg_setseq_128_xsl_rr_64_random_r(struct pcg_state_setseq_128* rng) -{ - pcg_setseq_128_step_r(rng); - return pcg_output_xsl_rr_128_64(rng->state); -} -#endif - -#if PCG_HAS_128BIT_OPS -inline uint64_t -pcg_setseq_128_xsl_rr_64_boundedrand_r(struct pcg_state_setseq_128* rng, - uint64_t bound) -{ - uint64_t threshold = -bound % bound; - for (;;) { - uint64_t r = pcg_setseq_128_xsl_rr_64_random_r(rng); - if (r >= threshold) - return r % bound; - } -} -#endif - -inline uint32_t pcg_mcg_64_xsl_rr_32_random_r(struct pcg_state_64* rng) -{ - uint64_t oldstate = rng->state; - pcg_mcg_64_step_r(rng); - return pcg_output_xsl_rr_64_32(oldstate); -} - -inline uint32_t pcg_mcg_64_xsl_rr_32_boundedrand_r(struct pcg_state_64* rng, - uint32_t bound) -{ - uint32_t threshold = -bound % bound; - for (;;) { - uint32_t r = pcg_mcg_64_xsl_rr_32_random_r(rng); - if (r >= threshold) - return r % bound; - } -} - -#if PCG_HAS_128BIT_OPS -inline uint64_t pcg_mcg_128_xsl_rr_64_random_r(struct pcg_state_128* rng) -{ - pcg_mcg_128_step_r(rng); - return pcg_output_xsl_rr_128_64(rng->state); -} -#endif - -#if PCG_HAS_128BIT_OPS -inline uint64_t pcg_mcg_128_xsl_rr_64_boundedrand_r(struct pcg_state_128* rng, - uint64_t bound) -{ - uint64_t threshold = -bound % bound; - for (;;) { - uint64_t r = pcg_mcg_128_xsl_rr_64_random_r(rng); - if (r >= threshold) - return r % bound; - } -} -#endif - -/* Generation functions for XSL RR RR (only defined for "large" types) */ - -inline uint64_t pcg_oneseq_64_xsl_rr_rr_64_random_r(struct pcg_state_64* rng) -{ - uint64_t oldstate = rng->state; - pcg_oneseq_64_step_r(rng); - return pcg_output_xsl_rr_rr_64_64(oldstate); -} - -inline uint64_t -pcg_oneseq_64_xsl_rr_rr_64_boundedrand_r(struct pcg_state_64* rng, - uint64_t bound) -{ - uint64_t threshold = -bound % bound; - for (;;) { - uint64_t r = pcg_oneseq_64_xsl_rr_rr_64_random_r(rng); - if (r >= threshold) - return r % bound; - } -} - -#if PCG_HAS_128BIT_OPS -inline pcg128_t pcg_oneseq_128_xsl_rr_rr_128_random_r(struct pcg_state_128* rng) -{ - pcg_oneseq_128_step_r(rng); - return pcg_output_xsl_rr_rr_128_128(rng->state); -} -#endif - -#if PCG_HAS_128BIT_OPS -inline pcg128_t -pcg_oneseq_128_xsl_rr_rr_128_boundedrand_r(struct pcg_state_128* rng, - pcg128_t bound) -{ - pcg128_t threshold = -bound % bound; - for (;;) { - pcg128_t r = pcg_oneseq_128_xsl_rr_rr_128_random_r(rng); - if (r >= threshold) - return r % bound; - } -} -#endif - -inline uint64_t pcg_unique_64_xsl_rr_rr_64_random_r(struct pcg_state_64* rng) -{ - uint64_t oldstate = rng->state; - pcg_unique_64_step_r(rng); - return pcg_output_xsl_rr_rr_64_64(oldstate); -} - -inline uint64_t -pcg_unique_64_xsl_rr_rr_64_boundedrand_r(struct pcg_state_64* rng, - uint64_t bound) -{ - uint64_t threshold = -bound % bound; - for (;;) { - uint64_t r = pcg_unique_64_xsl_rr_rr_64_random_r(rng); - if (r >= threshold) - return r % bound; - } -} - -#if PCG_HAS_128BIT_OPS -inline pcg128_t pcg_unique_128_xsl_rr_rr_128_random_r(struct pcg_state_128* rng) -{ - pcg_unique_128_step_r(rng); - return pcg_output_xsl_rr_rr_128_128(rng->state); -} -#endif - -#if PCG_HAS_128BIT_OPS -inline pcg128_t -pcg_unique_128_xsl_rr_rr_128_boundedrand_r(struct pcg_state_128* rng, - pcg128_t bound) -{ - pcg128_t threshold = -bound % bound; - for (;;) { - pcg128_t r = pcg_unique_128_xsl_rr_rr_128_random_r(rng); - if (r >= threshold) - return r % bound; - } -} -#endif - -inline uint64_t -pcg_setseq_64_xsl_rr_rr_64_random_r(struct pcg_state_setseq_64* rng) -{ - uint64_t oldstate = rng->state; - pcg_setseq_64_step_r(rng); - return pcg_output_xsl_rr_rr_64_64(oldstate); -} - -inline uint64_t -pcg_setseq_64_xsl_rr_rr_64_boundedrand_r(struct pcg_state_setseq_64* rng, - uint64_t bound) -{ - uint64_t threshold = -bound % bound; - for (;;) { - uint64_t r = pcg_setseq_64_xsl_rr_rr_64_random_r(rng); - if (r >= threshold) - return r % bound; - } -} - -#if PCG_HAS_128BIT_OPS -inline pcg128_t -pcg_setseq_128_xsl_rr_rr_128_random_r(struct pcg_state_setseq_128* rng) -{ - pcg_setseq_128_step_r(rng); - return pcg_output_xsl_rr_rr_128_128(rng->state); -} -#endif - -#if PCG_HAS_128BIT_OPS -inline pcg128_t -pcg_setseq_128_xsl_rr_rr_128_boundedrand_r(struct pcg_state_setseq_128* rng, - pcg128_t bound) -{ - pcg128_t threshold = -bound % bound; - for (;;) { - pcg128_t r = pcg_setseq_128_xsl_rr_rr_128_random_r(rng); - if (r >= threshold) - return r % bound; - } -} -#endif - -//// Typedefs -typedef struct pcg_state_setseq_64 pcg32_random_t; -typedef struct pcg_state_64 pcg32s_random_t; -typedef struct pcg_state_64 pcg32u_random_t; -typedef struct pcg_state_64 pcg32f_random_t; -//// random_r -#define pcg32_random_r pcg_setseq_64_xsh_rr_32_random_r -#define pcg32s_random_r pcg_oneseq_64_xsh_rr_32_random_r -#define pcg32u_random_r pcg_unique_64_xsh_rr_32_random_r -#define pcg32f_random_r pcg_mcg_64_xsh_rs_32_random_r -//// boundedrand_r -#define pcg32_boundedrand_r pcg_setseq_64_xsh_rr_32_boundedrand_r -#define pcg32s_boundedrand_r pcg_oneseq_64_xsh_rr_32_boundedrand_r -#define pcg32u_boundedrand_r pcg_unique_64_xsh_rr_32_boundedrand_r -#define pcg32f_boundedrand_r pcg_mcg_64_xsh_rs_32_boundedrand_r -//// srandom_r -#define pcg32_srandom_r pcg_setseq_64_srandom_r -#define pcg32s_srandom_r pcg_oneseq_64_srandom_r -#define pcg32u_srandom_r pcg_unique_64_srandom_r -#define pcg32f_srandom_r pcg_mcg_64_srandom_r -//// advance_r -#define pcg32_advance_r pcg_setseq_64_advance_r -#define pcg32s_advance_r pcg_oneseq_64_advance_r -#define pcg32u_advance_r pcg_unique_64_advance_r -#define pcg32f_advance_r pcg_mcg_64_advance_r - -#if PCG_HAS_128BIT_OPS -//// Typedefs -typedef struct pcg_state_setseq_128 pcg64_random_t; -typedef struct pcg_state_128 pcg64s_random_t; -typedef struct pcg_state_128 pcg64u_random_t; -typedef struct pcg_state_128 pcg64f_random_t; -//// random_r -#define pcg64_random_r pcg_setseq_128_xsl_rr_64_random_r -#define pcg64s_random_r pcg_oneseq_128_xsl_rr_64_random_r -#define pcg64u_random_r pcg_unique_128_xsl_rr_64_random_r -#define pcg64f_random_r pcg_mcg_128_xsl_rr_64_random_r -//// boundedrand_r -#define pcg64_boundedrand_r pcg_setseq_128_xsl_rr_64_boundedrand_r -#define pcg64s_boundedrand_r pcg_oneseq_128_xsl_rr_64_boundedrand_r -#define pcg64u_boundedrand_r pcg_unique_128_xsl_rr_64_boundedrand_r -#define pcg64f_boundedrand_r pcg_mcg_128_xsl_rr_64_boundedrand_r -//// srandom_r -#define pcg64_srandom_r pcg_setseq_128_srandom_r -#define pcg64s_srandom_r pcg_oneseq_128_srandom_r -#define pcg64u_srandom_r pcg_unique_128_srandom_r -#define pcg64f_srandom_r pcg_mcg_128_srandom_r -//// advance_r -#define pcg64_advance_r pcg_setseq_128_advance_r -#define pcg64s_advance_r pcg_oneseq_128_advance_r -#define pcg64u_advance_r pcg_unique_128_advance_r -#define pcg64f_advance_r pcg_mcg_128_advance_r -#endif - -//// Typedefs -typedef struct pcg_state_8 pcg8si_random_t; -typedef struct pcg_state_16 pcg16si_random_t; -typedef struct pcg_state_32 pcg32si_random_t; -typedef struct pcg_state_64 pcg64si_random_t; -//// random_r -#define pcg8si_random_r pcg_oneseq_8_rxs_m_xs_8_random_r -#define pcg16si_random_r pcg_oneseq_16_rxs_m_xs_16_random_r -#define pcg32si_random_r pcg_oneseq_32_rxs_m_xs_32_random_r -#define pcg64si_random_r pcg_oneseq_64_rxs_m_xs_64_random_r -//// boundedrand_r -#define pcg8si_boundedrand_r pcg_oneseq_8_rxs_m_xs_8_boundedrand_r -#define pcg16si_boundedrand_r pcg_oneseq_16_rxs_m_xs_16_boundedrand_r -#define pcg32si_boundedrand_r pcg_oneseq_32_rxs_m_xs_32_boundedrand_r -#define pcg64si_boundedrand_r pcg_oneseq_64_rxs_m_xs_64_boundedrand_r -//// srandom_r -#define pcg8si_srandom_r pcg_oneseq_8_srandom_r -#define pcg16si_srandom_r pcg_oneseq_16_srandom_r -#define pcg32si_srandom_r pcg_oneseq_32_srandom_r -#define pcg64si_srandom_r pcg_oneseq_64_srandom_r -//// advance_r -#define pcg8si_advance_r pcg_oneseq_8_advance_r -#define pcg16si_advance_r pcg_oneseq_16_advance_r -#define pcg32si_advance_r pcg_oneseq_32_advance_r -#define pcg64si_advance_r pcg_oneseq_64_advance_r - -#if PCG_HAS_128BIT_OPS -typedef struct pcg_state_128 pcg128si_random_t; -#define pcg128si_random_r pcg_oneseq_128_rxs_m_xs_128_random_r -#define pcg128si_boundedrand_r pcg_oneseq_128_rxs_m_xs_128_boundedrand_r -#define pcg128si_srandom_r pcg_oneseq_128_srandom_r -#define pcg128si_advance_r pcg_oneseq_128_advance_r -#endif - -//// Typedefs -typedef struct pcg_state_setseq_8 pcg8i_random_t; -typedef struct pcg_state_setseq_16 pcg16i_random_t; -typedef struct pcg_state_setseq_32 pcg32i_random_t; -typedef struct pcg_state_setseq_64 pcg64i_random_t; -//// random_r -#define pcg8i_random_r pcg_setseq_8_rxs_m_xs_8_random_r -#define pcg16i_random_r pcg_setseq_16_rxs_m_xs_16_random_r -#define pcg32i_random_r pcg_setseq_32_rxs_m_xs_32_random_r -#define pcg64i_random_r pcg_setseq_64_rxs_m_xs_64_random_r -//// boundedrand_r -#define pcg8i_boundedrand_r pcg_setseq_8_rxs_m_xs_8_boundedrand_r -#define pcg16i_boundedrand_r pcg_setseq_16_rxs_m_xs_16_boundedrand_r -#define pcg32i_boundedrand_r pcg_setseq_32_rxs_m_xs_32_boundedrand_r -#define pcg64i_boundedrand_r pcg_setseq_64_rxs_m_xs_64_boundedrand_r -//// srandom_r -#define pcg8i_srandom_r pcg_setseq_8_srandom_r -#define pcg16i_srandom_r pcg_setseq_16_srandom_r -#define pcg32i_srandom_r pcg_setseq_32_srandom_r -#define pcg64i_srandom_r pcg_setseq_64_srandom_r -//// advance_r -#define pcg8i_advance_r pcg_setseq_8_advance_r -#define pcg16i_advance_r pcg_setseq_16_advance_r -#define pcg32i_advance_r pcg_setseq_32_advance_r -#define pcg64i_advance_r pcg_setseq_64_advance_r - -#if PCG_HAS_128BIT_OPS -typedef struct pcg_state_setseq_128 pcg128i_random_t; -#define pcg128i_random_r pcg_setseq_128_rxs_m_xs_128_random_r -#define pcg128i_boundedrand_r pcg_setseq_128_rxs_m_xs_128_boundedrand_r -#define pcg128i_srandom_r pcg_setseq_128_srandom_r -#define pcg128i_advance_r pcg_setseq_128_advance_r -#endif - -extern uint32_t pcg32_random(); -extern uint32_t pcg32_boundedrand(uint32_t bound); -extern void pcg32_srandom(uint64_t seed, uint64_t seq); -extern void pcg32_advance(uint64_t delta); - -#if PCG_HAS_128BIT_OPS -extern uint64_t pcg64_random(); -extern uint64_t pcg64_boundedrand(uint64_t bound); -extern void pcg64_srandom(pcg128_t seed, pcg128_t seq); -extern void pcg64_advance(pcg128_t delta); -#endif - -/* - * Static initialization constants (if you can't call srandom for some - * bizarre reason). - */ - -#define PCG32_INITIALIZER PCG_STATE_SETSEQ_64_INITIALIZER -#define PCG32U_INITIALIZER PCG_STATE_UNIQUE_64_INITIALIZER -#define PCG32S_INITIALIZER PCG_STATE_ONESEQ_64_INITIALIZER -#define PCG32F_INITIALIZER PCG_STATE_MCG_64_INITIALIZER - -#if PCG_HAS_128BIT_OPS -#define PCG64_INITIALIZER PCG_STATE_SETSEQ_128_INITIALIZER -#define PCG64U_INITIALIZER PCG_STATE_UNIQUE_128_INITIALIZER -#define PCG64S_INITIALIZER PCG_STATE_ONESEQ_128_INITIALIZER -#define PCG64F_INITIALIZER PCG_STATE_MCG_128_INITIALIZER -#endif - -#define PCG8SI_INITIALIZER PCG_STATE_ONESEQ_8_INITIALIZER -#define PCG16SI_INITIALIZER PCG_STATE_ONESEQ_16_INITIALIZER -#define PCG32SI_INITIALIZER PCG_STATE_ONESEQ_32_INITIALIZER -#define PCG64SI_INITIALIZER PCG_STATE_ONESEQ_64_INITIALIZER -#if PCG_HAS_128BIT_OPS -#define PCG128SI_INITIALIZER PCG_STATE_ONESEQ_128_INITIALIZER -#endif - -#define PCG8I_INITIALIZER PCG_STATE_SETSEQ_8_INITIALIZER -#define PCG16I_INITIALIZER PCG_STATE_SETSEQ_16_INITIALIZER -#define PCG32I_INITIALIZER PCG_STATE_SETSEQ_32_INITIALIZER -#define PCG64I_INITIALIZER PCG_STATE_SETSEQ_64_INITIALIZER -#if PCG_HAS_128BIT_OPS -#define PCG128I_INITIALIZER PCG_STATE_SETSEQ_128_INITIALIZER -#endif - -#if __cplusplus -} -#endif - -#endif // PCG_VARIANTS_H_INCLUDED diff --git a/numpy/random/src/pcg64/pcg64.h b/numpy/random/src/pcg64/pcg64.h index 20d64f8ab..67695d002 100644 --- a/numpy/random/src/pcg64/pcg64.h +++ b/numpy/random/src/pcg64/pcg64.h @@ -168,7 +168,7 @@ static inline void pcg_setseq_128_srandom_r(pcg_state_setseq_128 *rng, pcg128_t initseq) { rng->state = PCG_128BIT_CONSTANT(0ULL, 0ULL); rng->inc.high = initseq.high << 1u; - rng->inc.high |= initseq.low & 0x800000000000ULL; + rng->inc.high |= initseq.low >> 63u; rng->inc.low = (initseq.low << 1u) | 1u; pcg_setseq_128_step_r(rng); rng->state = pcg128_add(rng->state, initstate); diff --git a/numpy/random/src/philox/LICENSE.md b/numpy/random/src/philox/LICENSE.md index 4a9f6bb29..9738e44de 100644 --- a/numpy/random/src/philox/LICENSE.md +++ b/numpy/random/src/philox/LICENSE.md @@ -1,4 +1,4 @@ -# THREEFRY +# PHILOX Copyright 2010-2012, D. E. Shaw Research. All rights reserved. diff --git a/numpy/random/src/sfc64/LICENSE.md b/numpy/random/src/sfc64/LICENSE.md new file mode 100644 index 000000000..21dd604af --- /dev/null +++ b/numpy/random/src/sfc64/LICENSE.md @@ -0,0 +1,27 @@ +# SFC64 + +## The MIT License + +Adapted from a C++ implementation of Chris Doty-Humphrey's SFC PRNG. + +https://gist.github.com/imneme/f1f7821f07cf76504a97f6537c818083 + +Copyright (c) 2018 Melissa E. O'Neill + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. diff --git a/numpy/random/src/sfc64/sfc64.c b/numpy/random/src/sfc64/sfc64.c new file mode 100644 index 000000000..5546fff08 --- /dev/null +++ b/numpy/random/src/sfc64/sfc64.c @@ -0,0 +1,39 @@ +#include "sfc64.h" + +extern void sfc64_set_seed(sfc64_state *state, uint64_t *seed) { + /* Conservatively stick with the original formula. With SeedSequence, it + * might be fine to just set the state with 4 uint64s and be done. + */ + int i; + + state->s[0] = seed[0]; + state->s[1] = seed[1]; + state->s[2] = seed[2]; + state->s[3] = 1; + + for (i=0; i<12; i++) { + (void)sfc64_next(state->s); + } +} + +extern void sfc64_get_state(sfc64_state *state, uint64_t *state_arr, int *has_uint32, + uint32_t *uinteger) { + int i; + + for (i=0; i<4; i++) { + state_arr[i] = state->s[i]; + } + has_uint32[0] = state->has_uint32; + uinteger[0] = state->uinteger; +} + +extern void sfc64_set_state(sfc64_state *state, uint64_t *state_arr, int has_uint32, + uint32_t uinteger) { + int i; + + for (i=0; i<4; i++) { + state->s[i] = state_arr[i]; + } + state->has_uint32 = has_uint32; + state->uinteger = uinteger; +} diff --git a/numpy/random/src/sfc64/sfc64.h b/numpy/random/src/sfc64/sfc64.h new file mode 100644 index 000000000..6674ae69c --- /dev/null +++ b/numpy/random/src/sfc64/sfc64.h @@ -0,0 +1,60 @@ +#ifndef _RANDOMDGEN__SFC64_H_ +#define _RANDOMDGEN__SFC64_H_ + +#include <inttypes.h> +#ifdef _WIN32 +#include <stdlib.h> +#endif +#include "numpy/npy_common.h" + +typedef struct s_sfc64_state { + uint64_t s[4]; + int has_uint32; + uint32_t uinteger; +} sfc64_state; + + +static NPY_INLINE uint64_t rotl(const uint64_t value, unsigned int rot) { +#ifdef _WIN32 + return _rotl64(value, rot); +#else + return (value << rot) | (value >> ((-rot) & 63)); +#endif +} + +static NPY_INLINE uint64_t sfc64_next(uint64_t *s) { + const uint64_t tmp = s[0] + s[1] + s[3]++; + + s[0] = s[1] ^ (s[1] >> 11); + s[1] = s[2] + (s[2] << 3); + s[2] = rotl(s[2], 24) + tmp; + + return tmp; +} + + +static NPY_INLINE uint64_t sfc64_next64(sfc64_state *state) { + return sfc64_next(&state->s[0]); +} + +static NPY_INLINE uint32_t sfc64_next32(sfc64_state *state) { + uint64_t next; + if (state->has_uint32) { + state->has_uint32 = 0; + return state->uinteger; + } + next = sfc64_next(&state->s[0]); + state->has_uint32 = 1; + state->uinteger = (uint32_t)(next >> 32); + return (uint32_t)(next & 0xffffffff); +} + +void sfc64_set_seed(sfc64_state *state, uint64_t *seed); + +void sfc64_get_state(sfc64_state *state, uint64_t *state_arr, int *has_uint32, + uint32_t *uinteger); + +void sfc64_set_state(sfc64_state *state, uint64_t *state_arr, int has_uint32, + uint32_t uinteger); + +#endif diff --git a/numpy/random/src/threefry/LICENSE.md b/numpy/random/src/threefry/LICENSE.md deleted file mode 100644 index 4a9f6bb29..000000000 --- a/numpy/random/src/threefry/LICENSE.md +++ /dev/null @@ -1,31 +0,0 @@ -# THREEFRY - -Copyright 2010-2012, D. E. Shaw Research. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - -* Redistributions of source code must retain the above copyright - notice, this list of conditions, and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright - notice, this list of conditions, and the following disclaimer in the - documentation and/or other materials provided with the distribution. - -* Neither the name of D. E. Shaw Research nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/numpy/random/src/threefry/threefry-benchmark.c b/numpy/random/src/threefry/threefry-benchmark.c deleted file mode 100644 index 5e2cfe844..000000000 --- a/numpy/random/src/threefry/threefry-benchmark.c +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Simple benchamrk command - * - * cl threefry-benchmark.c /Ox - * - * gcc threefry-benchmark.c -O3 -o threefry-benchmark - * - * Requires the Random123 directory containing header files to be located in the - * same directory (not included). - */ -#include "Random123/threefry.h" -#include <inttypes.h> -#include <stdio.h> -#include <time.h> - -#define N 1000000000 - -int main() { - threefry4x64_key_t ctr = {{0, 0, 0, 0}}; - threefry4x64_ctr_t key = {{0xDEADBEAF, 0, 0, 0}}; - threefry4x64_ctr_t out; - uint64_t count = 0, sum = 0; - int i, j; - clock_t begin = clock(); - for (i = 0; i < N / 4UL; i++) { - ctr.v[0]++; - out = threefry4x64_R(threefry4x64_rounds, ctr, key); - for (j = 0; j < 4; j++) { - sum += out.v[j]; - count++; - } - } - clock_t end = clock(); - double time_spent = (double)(end - begin) / CLOCKS_PER_SEC; - printf("0x%" PRIx64 "\ncount: %" PRIu64 "\n", sum, count); - printf("%" PRIu64 " randoms per second\n", - (uint64_t)(N / time_spent) / 1000000 * 1000000); -} diff --git a/numpy/random/src/threefry/threefry-orig.c b/numpy/random/src/threefry/threefry-orig.c deleted file mode 100644 index d27cfd797..000000000 --- a/numpy/random/src/threefry/threefry-orig.c +++ /dev/null @@ -1,83 +0,0 @@ -/* -Copyright (c) 2017, Pierre de Buyl - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - -1. Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright -notice, this list of conditions and the following disclaimer in the -documentation and/or other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#include "threefry.h" -#include <stdint.h> - -#define N_WORDS 2 -#define KEY_LENGTH 3 -#define C240 0x1BD11BDAA9FC1A22 -#define N_ROUNDS 20 -#define MASK 0xffffffffffffffff -#define DOUBLE_MULT 5.421010862427522e-20 - -static const int ROTATION[] = {16, 42, 12, 31, 16, 32, 24, 21}; - -uint64_t rotl_64(uint64_t x, int d) { return ((x << d) | (x >> (64 - d))); } - -threefry_t mix(threefry_t x, int R) { - x.c0 += x.c1; - x.c1 = rotl_64(x.c1, R) ^ x.c0; - return x; -} - -threefry_t threefry(threefry_t p, threefry_t k) { - uint64_t K[] = {k.c0, k.c1, C240 ^ k.c0 ^ k.c1}; - int rmod4, rdiv4; - threefry_t x; - x = p; - for (int r = 0; r < N_ROUNDS; r++) { - rmod4 = r % 4; - if (rmod4 == 0) { - rdiv4 = r / 4; - x.c0 += K[rdiv4 % KEY_LENGTH]; - x.c1 += K[(rdiv4 + 1) % KEY_LENGTH] + rdiv4; - } - x = mix(x, ROTATION[r % 8]); - } - x.c0 += K[(N_ROUNDS / 4) % KEY_LENGTH]; - x.c1 += K[(N_ROUNDS / 4 + 1) % KEY_LENGTH] + N_ROUNDS / 4; - return x; -} - -uint64_t threefry_uint64(threefry_t *c, threefry_t *k) { - threefry_t x; - x = threefry(*c, *k); - c->c0++; - return x.c0; -} - -double threefry_double(threefry_t *c, threefry_t *k) { - threefry_t x; - x = threefry(*c, *k); - c->c0++; - return x.c0 * DOUBLE_MULT; -} diff --git a/numpy/random/src/threefry/threefry-test-data-gen.c b/numpy/random/src/threefry/threefry-test-data-gen.c deleted file mode 100644 index 8514a227e..000000000 --- a/numpy/random/src/threefry/threefry-test-data-gen.c +++ /dev/null @@ -1,83 +0,0 @@ -/* - * Generate testing csv files - * - * cl threefry-test-data-gen.c /Ox ../splitmix64/splitmix64.c /Ox - * threefry-test-data-gen.exe - * - * gcc threefry-test-data-gen.c ../splitmix64/splitmix64.c /Ox -o - * threefry-test-data-gen - * ./threefry-test-data-gen - * - * Requires the Random123 directory containing header files to be located in the - * same directory (not included). - * - */ - -#include "../splitmix64/splitmix64.h" -#include "Random123/threefry.h" -#include <inttypes.h> -#include <stdio.h> - -#define N 1000 - -int main() { - threefry4x64_key_t ctr = {{0, 0, 0, 0}}; - uint64_t state, seed = 0xDEADBEAF; - state = seed; - threefry4x64_ctr_t key = {{0}}; - threefry4x64_ctr_t out; - uint64_t store[N]; - int i, j; - for (i = 0; i < 4; i++) { - key.v[i] = splitmix64_next(&state); - } - for (i = 0; i < N / 4UL; i++) { - ctr.v[0]++; - out = threefry4x64_R(threefry4x64_rounds, ctr, key); - for (j = 0; j < 4; j++) { - store[i * 4 + j] = out.v[j]; - } - } - - FILE *fp; - fp = fopen("threefry-testset-1.csv", "w"); - if (fp == NULL) { - printf("Couldn't open file\n"); - return -1; - } - fprintf(fp, "seed, 0x%" PRIx64 "\n", seed); - for (i = 0; i < N; i++) { - fprintf(fp, "%d, 0x%" PRIx64 "\n", i, store[i]); - if (i == 999) { - printf("%d, 0x%" PRIx64 "\n", i, store[i]); - } - } - fclose(fp); - - ctr.v[0] = 0; - state = seed = 0; - for (i = 0; i < 4; i++) { - key.v[i] = splitmix64_next(&state); - } - for (i = 0; i < N / 4; i++) { - ctr.v[0]++; - out = threefry4x64_R(threefry4x64_rounds, ctr, key); - for (j = 0; j < 4; j++) { - store[i * 4 + j] = out.v[j]; - } - } - - fp = fopen("threefry-testset-2.csv", "w"); - if (fp == NULL) { - printf("Couldn't open file\n"); - return -1; - } - fprintf(fp, "seed, 0x%" PRIx64 "\n", seed); - for (i = 0; i < N; i++) { - fprintf(fp, "%d, 0x%" PRIx64 "\n", i, store[i]); - if (i == 999) { - printf("%d, 0x%" PRIx64 "\n", i, store[i]); - } - } - fclose(fp); -} diff --git a/numpy/random/src/threefry/threefry.c b/numpy/random/src/threefry/threefry.c deleted file mode 100644 index 55d3c022a..000000000 --- a/numpy/random/src/threefry/threefry.c +++ /dev/null @@ -1,29 +0,0 @@ -#include "threefry.h" - -extern NPY_INLINE uint64_t threefry_next64(threefry_state *state); - -extern NPY_INLINE uint32_t threefry_next32(threefry_state *state); - -extern void threefry_jump(threefry_state *state) { - /* Advances state as-if 2^128 draws were made */ - state->ctr->v[2]++; - if (state->ctr->v[2] == 0) { - state->ctr->v[3]++; - } -} - -extern void threefry_advance(uint64_t *step, threefry_state *state) { - int i, carry = 0; - uint64_t v_orig; - for (i = 0; i < 4; i++) { - if (carry == 1) { - state->ctr->v[i]++; - carry = state->ctr->v[i] == 0 ? 1 : 0; - } - v_orig = state->ctr->v[i]; - state->ctr->v[i] += step[i]; - if (state->ctr->v[i] < v_orig && carry == 0) { - carry = 1; - } - } -} diff --git a/numpy/random/src/threefry/threefry.h b/numpy/random/src/threefry/threefry.h deleted file mode 100644 index 596b57e12..000000000 --- a/numpy/random/src/threefry/threefry.h +++ /dev/null @@ -1,331 +0,0 @@ -/* -Adapted from random123's threefry.h -*/ -#ifndef _RANDOMDGEN__THREEFRY_H_ -#define _RANDOMDGEN__THREEFRY_H_ - -#include <inttypes.h> -#include "numpy/npy_common.h" - -#define THREEFRY_BUFFER_SIZE 4L - -enum r123_enum_threefry64x4 { - /* These are the R_256 constants from the Threefish reference sources - with names changed to R_64x4... */ - R_64x4_0_0 = 14, - R_64x4_0_1 = 16, - R_64x4_1_0 = 52, - R_64x4_1_1 = 57, - R_64x4_2_0 = 23, - R_64x4_2_1 = 40, - R_64x4_3_0 = 5, - R_64x4_3_1 = 37, - R_64x4_4_0 = 25, - R_64x4_4_1 = 33, - R_64x4_5_0 = 46, - R_64x4_5_1 = 12, - R_64x4_6_0 = 58, - R_64x4_6_1 = 22, - R_64x4_7_0 = 32, - R_64x4_7_1 = 32 -}; - -struct r123array4x64 { - uint64_t v[4]; -}; /* r123array4x64 */ - -typedef struct r123array4x64 threefry4x64_key_t; -typedef struct r123array4x64 threefry4x64_ctr_t; - -static NPY_INLINE uint64_t RotL_64(uint64_t x, unsigned int N); -static NPY_INLINE uint64_t RotL_64(uint64_t x, unsigned int N) { - return (x << (N & 63)) | (x >> ((64 - N) & 63)); -} - -static NPY_INLINE threefry4x64_ctr_t threefry4x64_R(unsigned int Nrounds, - threefry4x64_ctr_t in, - threefry4x64_key_t k); -static NPY_INLINE threefry4x64_ctr_t threefry4x64_R(unsigned int Nrounds, - threefry4x64_ctr_t in, - threefry4x64_key_t k) { - threefry4x64_ctr_t X; - uint64_t ks[4 + 1]; - int i; - ks[4] = ((0xA9FC1A22) + (((uint64_t)(0x1BD11BDA)) << 32)); - for (i = 0; i < 4; i++) { - ks[i] = k.v[i]; - X.v[i] = in.v[i]; - ks[4] ^= k.v[i]; - } - X.v[0] += ks[0]; - X.v[1] += ks[1]; - X.v[2] += ks[2]; - X.v[3] += ks[3]; - if (Nrounds > 0) { - X.v[0] += X.v[1]; - X.v[1] = RotL_64(X.v[1], R_64x4_0_0); - X.v[1] ^= X.v[0]; - X.v[2] += X.v[3]; - X.v[3] = RotL_64(X.v[3], R_64x4_0_1); - X.v[3] ^= X.v[2]; - } - if (Nrounds > 1) { - X.v[0] += X.v[3]; - X.v[3] = RotL_64(X.v[3], R_64x4_1_0); - X.v[3] ^= X.v[0]; - X.v[2] += X.v[1]; - X.v[1] = RotL_64(X.v[1], R_64x4_1_1); - X.v[1] ^= X.v[2]; - } - if (Nrounds > 2) { - X.v[0] += X.v[1]; - X.v[1] = RotL_64(X.v[1], R_64x4_2_0); - X.v[1] ^= X.v[0]; - X.v[2] += X.v[3]; - X.v[3] = RotL_64(X.v[3], R_64x4_2_1); - X.v[3] ^= X.v[2]; - } - if (Nrounds > 3) { - X.v[0] += X.v[3]; - X.v[3] = RotL_64(X.v[3], R_64x4_3_0); - X.v[3] ^= X.v[0]; - X.v[2] += X.v[1]; - X.v[1] = RotL_64(X.v[1], R_64x4_3_1); - X.v[1] ^= X.v[2]; - } - if (Nrounds > 3) { - X.v[0] += ks[1]; - X.v[1] += ks[2]; - X.v[2] += ks[3]; - X.v[3] += ks[4]; - X.v[4 - 1] += 1; - } - if (Nrounds > 4) { - X.v[0] += X.v[1]; - X.v[1] = RotL_64(X.v[1], R_64x4_4_0); - X.v[1] ^= X.v[0]; - X.v[2] += X.v[3]; - X.v[3] = RotL_64(X.v[3], R_64x4_4_1); - X.v[3] ^= X.v[2]; - } - if (Nrounds > 5) { - X.v[0] += X.v[3]; - X.v[3] = RotL_64(X.v[3], R_64x4_5_0); - X.v[3] ^= X.v[0]; - X.v[2] += X.v[1]; - X.v[1] = RotL_64(X.v[1], R_64x4_5_1); - X.v[1] ^= X.v[2]; - } - if (Nrounds > 6) { - X.v[0] += X.v[1]; - X.v[1] = RotL_64(X.v[1], R_64x4_6_0); - X.v[1] ^= X.v[0]; - X.v[2] += X.v[3]; - X.v[3] = RotL_64(X.v[3], R_64x4_6_1); - X.v[3] ^= X.v[2]; - } - if (Nrounds > 7) { - X.v[0] += X.v[3]; - X.v[3] = RotL_64(X.v[3], R_64x4_7_0); - X.v[3] ^= X.v[0]; - X.v[2] += X.v[1]; - X.v[1] = RotL_64(X.v[1], R_64x4_7_1); - X.v[1] ^= X.v[2]; - } - if (Nrounds > 7) { - X.v[0] += ks[2]; - X.v[1] += ks[3]; - X.v[2] += ks[4]; - X.v[3] += ks[0]; - X.v[4 - 1] += 2; - } - if (Nrounds > 8) { - X.v[0] += X.v[1]; - X.v[1] = RotL_64(X.v[1], R_64x4_0_0); - X.v[1] ^= X.v[0]; - X.v[2] += X.v[3]; - X.v[3] = RotL_64(X.v[3], R_64x4_0_1); - X.v[3] ^= X.v[2]; - } - if (Nrounds > 9) { - X.v[0] += X.v[3]; - X.v[3] = RotL_64(X.v[3], R_64x4_1_0); - X.v[3] ^= X.v[0]; - X.v[2] += X.v[1]; - X.v[1] = RotL_64(X.v[1], R_64x4_1_1); - X.v[1] ^= X.v[2]; - } - if (Nrounds > 10) { - X.v[0] += X.v[1]; - X.v[1] = RotL_64(X.v[1], R_64x4_2_0); - X.v[1] ^= X.v[0]; - X.v[2] += X.v[3]; - X.v[3] = RotL_64(X.v[3], R_64x4_2_1); - X.v[3] ^= X.v[2]; - } - if (Nrounds > 11) { - X.v[0] += X.v[3]; - X.v[3] = RotL_64(X.v[3], R_64x4_3_0); - X.v[3] ^= X.v[0]; - X.v[2] += X.v[1]; - X.v[1] = RotL_64(X.v[1], R_64x4_3_1); - X.v[1] ^= X.v[2]; - } - if (Nrounds > 11) { - X.v[0] += ks[3]; - X.v[1] += ks[4]; - X.v[2] += ks[0]; - X.v[3] += ks[1]; - X.v[4 - 1] += 3; - } - if (Nrounds > 12) { - X.v[0] += X.v[1]; - X.v[1] = RotL_64(X.v[1], R_64x4_4_0); - X.v[1] ^= X.v[0]; - X.v[2] += X.v[3]; - X.v[3] = RotL_64(X.v[3], R_64x4_4_1); - X.v[3] ^= X.v[2]; - } - if (Nrounds > 13) { - X.v[0] += X.v[3]; - X.v[3] = RotL_64(X.v[3], R_64x4_5_0); - X.v[3] ^= X.v[0]; - X.v[2] += X.v[1]; - X.v[1] = RotL_64(X.v[1], R_64x4_5_1); - X.v[1] ^= X.v[2]; - } - if (Nrounds > 14) { - X.v[0] += X.v[1]; - X.v[1] = RotL_64(X.v[1], R_64x4_6_0); - X.v[1] ^= X.v[0]; - X.v[2] += X.v[3]; - X.v[3] = RotL_64(X.v[3], R_64x4_6_1); - X.v[3] ^= X.v[2]; - } - if (Nrounds > 15) { - X.v[0] += X.v[3]; - X.v[3] = RotL_64(X.v[3], R_64x4_7_0); - X.v[3] ^= X.v[0]; - X.v[2] += X.v[1]; - X.v[1] = RotL_64(X.v[1], R_64x4_7_1); - X.v[1] ^= X.v[2]; - } - if (Nrounds > 15) { - X.v[0] += ks[4]; - X.v[1] += ks[0]; - X.v[2] += ks[1]; - X.v[3] += ks[2]; - X.v[4 - 1] += 4; - } - if (Nrounds > 16) { - X.v[0] += X.v[1]; - X.v[1] = RotL_64(X.v[1], R_64x4_0_0); - X.v[1] ^= X.v[0]; - X.v[2] += X.v[3]; - X.v[3] = RotL_64(X.v[3], R_64x4_0_1); - X.v[3] ^= X.v[2]; - } - if (Nrounds > 17) { - X.v[0] += X.v[3]; - X.v[3] = RotL_64(X.v[3], R_64x4_1_0); - X.v[3] ^= X.v[0]; - X.v[2] += X.v[1]; - X.v[1] = RotL_64(X.v[1], R_64x4_1_1); - X.v[1] ^= X.v[2]; - } - if (Nrounds > 18) { - X.v[0] += X.v[1]; - X.v[1] = RotL_64(X.v[1], R_64x4_2_0); - X.v[1] ^= X.v[0]; - X.v[2] += X.v[3]; - X.v[3] = RotL_64(X.v[3], R_64x4_2_1); - X.v[3] ^= X.v[2]; - } - if (Nrounds > 19) { - X.v[0] += X.v[3]; - X.v[3] = RotL_64(X.v[3], R_64x4_3_0); - X.v[3] ^= X.v[0]; - X.v[2] += X.v[1]; - X.v[1] = RotL_64(X.v[1], R_64x4_3_1); - X.v[1] ^= X.v[2]; - } - if (Nrounds > 19) { - X.v[0] += ks[0]; - X.v[1] += ks[1]; - X.v[2] += ks[2]; - X.v[3] += ks[3]; - X.v[4 - 1] += 5; - } - /* Maximum of 20 rounds */ - if (Nrounds > 20) { - X.v[0] += X.v[1]; - X.v[1] = RotL_64(X.v[1], R_64x4_4_0); - X.v[1] ^= X.v[0]; - X.v[2] += X.v[3]; - X.v[3] = RotL_64(X.v[3], R_64x4_4_1); - X.v[3] ^= X.v[2]; - } - return X; -} -enum r123_enum_threefry4x64 { threefry4x64_rounds = 20 }; - -typedef struct s_threefry_state { - threefry4x64_key_t *ctr; - threefry4x64_ctr_t *key; - int buffer_pos; - uint64_t buffer[THREEFRY_BUFFER_SIZE]; - int has_uint32; - uint32_t uinteger; -} threefry_state; - -static NPY_INLINE uint64_t threefry_next(threefry_state *state) { - int i; - threefry4x64_ctr_t ct; - uint64_t out; - if (state->buffer_pos < THREEFRY_BUFFER_SIZE) { - out = state->buffer[state->buffer_pos]; - state->buffer_pos++; - return out; - } - /* generate 4 new uint64_t */ - state->ctr->v[0]++; - /* Handle carry */ - if (state->ctr->v[0] == 0) { - state->ctr->v[1]++; - if (state->ctr->v[1] == 0) { - state->ctr->v[2]++; - if (state->ctr->v[2] == 0) { - state->ctr->v[3]++; - } - } - } - ct = threefry4x64_R(threefry4x64_rounds, *state->ctr, *state->key); - for (i = 0; i < 4; i++) { - state->buffer[i] = ct.v[i]; - } - state->buffer_pos = 1; - return state->buffer[0]; -} - -static NPY_INLINE uint64_t threefry_next64(threefry_state *state) { - return threefry_next(state); -} - -static NPY_INLINE uint32_t threefry_next32(threefry_state *state) { - uint64_t next; - if (state->has_uint32) { - state->has_uint32 = 0; - return state->uinteger; - } - next = threefry_next(state); - - state->has_uint32 = 1; - state->uinteger = (uint32_t)(next >> 32); - return (uint32_t)(next & 0xffffffff); -} - -extern void threefry_jump(threefry_state *state); - -extern void threefry_advance(uint64_t *step, threefry_state *state); - -#endif diff --git a/numpy/random/src/xoshiro256/LICENSE.md b/numpy/random/src/xoshiro256/LICENSE.md deleted file mode 100644 index d863f3b29..000000000 --- a/numpy/random/src/xoshiro256/LICENSE.md +++ /dev/null @@ -1,9 +0,0 @@ -# XOSHIRO256STARSTAR - -Written in 2018 by David Blackman and Sebastiano Vigna (vigna@acm.org) - -To the extent possible under law, the author has dedicated all copyright -and related and neighboring rights to this software to the public domain -worldwide. This software is distributed without any warranty. - -See <http://creativecommons.org/publicdomain/zero/1.0/>.
\ No newline at end of file diff --git a/numpy/random/src/xoshiro256/xoshiro256-test-data-gen.c b/numpy/random/src/xoshiro256/xoshiro256-test-data-gen.c deleted file mode 100644 index b5351bf7a..000000000 --- a/numpy/random/src/xoshiro256/xoshiro256-test-data-gen.c +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Generate testing csv files - * - * cl xoshiro256-test-data-gen.c xoshiro256.orig.c / - * ../splitmix64/splitmix64.c /Ox - * xoshiro256-test-data-gen.exe * - * - * gcc xoshiro256-test-data-gen.c xoshiro256.orig.c / - * ../splitmix64/splitmix64.c -o xoshiro256-test-data-gen - * ./xoshiro256-test-data-gen - * - * Requires the Random123 directory containing header files to be located in the - * same directory (not included). - * - */ - -#include "../splitmix64/splitmix64.h" -#include "xoshiro256.orig.h" -#include <inttypes.h> -#include <stdio.h> - -#define N 1000 - -int main() { - uint64_t sum = 0; - uint64_t state, seed = 0xDEADBEAF; - state = seed; - int i; - for (i = 0; i < 4; i++) { - s[i] = splitmix64_next(&state); - } - uint64_t store[N]; - for (i = 0; i < N; i++) { - store[i] = next(); - } - - FILE *fp; - fp = fopen("xoshiro256-testset-1.csv", "w"); - if (fp == NULL) { - printf("Couldn't open file\n"); - return -1; - } - fprintf(fp, "seed, 0x%" PRIx64 "\n", seed); - for (i = 0; i < N; i++) { - fprintf(fp, "%d, 0x%" PRIx64 "\n", i, store[i]); - if (i == 999) { - printf("%d, 0x%" PRIx64 "\n", i, store[i]); - } - } - fclose(fp); - - seed = state = 0; - for (i = 0; i < 4; i++) { - s[i] = splitmix64_next(&state); - } - for (i = 0; i < N; i++) { - store[i] = next(); - } - fp = fopen("xoshiro256-testset-2.csv", "w"); - if (fp == NULL) { - printf("Couldn't open file\n"); - return -1; - } - fprintf(fp, "seed, 0x%" PRIx64 "\n", seed); - for (i = 0; i < N; i++) { - fprintf(fp, "%d, 0x%" PRIx64 "\n", i, store[i]); - if (i == 999) { - printf("%d, 0x%" PRIx64 "\n", i, store[i]); - } - } - fclose(fp); -} diff --git a/numpy/random/src/xoshiro256/xoshiro256.c b/numpy/random/src/xoshiro256/xoshiro256.c deleted file mode 100644 index f5cda2721..000000000 --- a/numpy/random/src/xoshiro256/xoshiro256.c +++ /dev/null @@ -1,56 +0,0 @@ -/* Written in 2018 by David Blackman and Sebastiano Vigna (vigna@acm.org) - -To the extent possible under law, the author has dedicated all copyright -and related and neighboring rights to this software to the public domain -worldwide. This software is distributed without any warranty. - -See <http://creativecommons.org/publicdomain/zero/1.0/>. */ - -#include "xoshiro256.h" - -/* This is xoshiro256** 1.0, our all-purpose, rock-solid generator. It has - excellent (sub-ns) speed, a state (256 bits) that is large enough for - any parallel application, and it passes all tests we are aware of. - - For generating just floating-point numbers, xoshiro256+ is even faster. - - The state must be seeded so that it is not everywhere zero. If you have - a 64-bit seed, we suggest to seed a splitmix64 generator and use its - output to fill s. */ - -extern NPY_INLINE uint64_t xoshiro256_next64(xoshiro256_state *state); - -extern NPY_INLINE uint32_t xoshiro256_next32(xoshiro256_state *state); - - -/* This is the jump function for the generator. It is equivalent - to 2^128 calls to next(); it can be used to generate 2^128 - non-overlapping subsequences for parallel computations. */ - -void xoshiro256_jump(xoshiro256_state *state) -{ - int i, b; - static const uint64_t JUMP[] = {0x180ec6d33cfd0aba, 0xd5a61266f0c9392c, 0xa9582618e03fc9aa, 0x39abdc4529b1661c}; - - uint64_t s0 = 0; - uint64_t s1 = 0; - uint64_t s2 = 0; - uint64_t s3 = 0; - for (i = 0; i < sizeof JUMP / sizeof *JUMP; i++) - for (b = 0; b < 64; b++) - { - if (JUMP[i] & UINT64_C(1) << b) - { - s0 ^= state->s[0]; - s1 ^= state->s[1]; - s2 ^= state->s[2]; - s3 ^= state->s[3]; - } - xoshiro256_next(&state->s[0]); - } - - state->s[0] = s0; - state->s[1] = s1; - state->s[2] = s2; - state->s[3] = s3; -} diff --git a/numpy/random/src/xoshiro256/xoshiro256.h b/numpy/random/src/xoshiro256/xoshiro256.h deleted file mode 100644 index 1908245a5..000000000 --- a/numpy/random/src/xoshiro256/xoshiro256.h +++ /dev/null @@ -1,53 +0,0 @@ -#ifndef _RANDOMDGEN__XOSHIRO256STARSTAR_H_ -#define _RANDOMDGEN__XOSHIRO256STARSTAR_H_ - -#include <inttypes.h> -#include "numpy/npy_common.h" - -typedef struct s_xoshiro256_state { - uint64_t s[4]; - int has_uint32; - uint32_t uinteger; -} xoshiro256_state; - -static NPY_INLINE uint64_t rotl(const uint64_t x, int k) { - return (x << k) | (x >> (64 - k)); -} - -static NPY_INLINE uint64_t xoshiro256_next(uint64_t *s) { - const uint64_t result_starstar = rotl(s[1] * 5, 7) * 9; - const uint64_t t = s[1] << 17; - - s[2] ^= s[0]; - s[3] ^= s[1]; - s[1] ^= s[2]; - s[0] ^= s[3]; - - s[2] ^= t; - - s[3] = rotl(s[3], 45); - - return result_starstar; -} - - -static NPY_INLINE uint64_t xoshiro256_next64(xoshiro256_state *state) { - return xoshiro256_next(&state->s[0]); -} - -static NPY_INLINE uint32_t xoshiro256_next32(xoshiro256_state *state) { - - uint64_t next; - if (state->has_uint32) { - state->has_uint32 = 0; - return state->uinteger; - } - next = xoshiro256_next(&state->s[0]); - state->has_uint32 = 1; - state->uinteger = (uint32_t)(next >> 32); - return (uint32_t)(next & 0xffffffff); -} - -void xoshiro256_jump(xoshiro256_state *state); - -#endif diff --git a/numpy/random/src/xoshiro256/xoshiro256.orig.c b/numpy/random/src/xoshiro256/xoshiro256.orig.c deleted file mode 100644 index ecf87bab9..000000000 --- a/numpy/random/src/xoshiro256/xoshiro256.orig.c +++ /dev/null @@ -1,103 +0,0 @@ -/* Written in 2018 by David Blackman and Sebastiano Vigna (vigna@acm.org) - -To the extent possible under law, the author has dedicated all copyright -and related and neighboring rights to this software to the public domain -worldwide. This software is distributed without any warranty. - -See <http://creativecommons.org/publicdomain/zero/1.0/>. */ - -#include <stdint.h> - -/* This is xoshiro256** 1.0, our all-purpose, rock-solid generator. It has - excellent (sub-ns) speed, a state (256 bits) that is large enough for - any parallel application, and it passes all tests we are aware of. - - For generating just floating-point numbers, xoshiro256+ is even faster. - - The state must be seeded so that it is not everywhere zero. If you have - a 64-bit seed, we suggest to seed a splitmix64 generator and use its - output to fill s. */ - -static inline uint64_t rotl(const uint64_t x, int k) { - return (x << k) | (x >> (64 - k)); -} - - -uint64_t s[4]; - -uint64_t next(void) { - const uint64_t result_starstar = rotl(s[1] * 5, 7) * 9; - - const uint64_t t = s[1] << 17; - - s[2] ^= s[0]; - s[3] ^= s[1]; - s[1] ^= s[2]; - s[0] ^= s[3]; - - s[2] ^= t; - - s[3] = rotl(s[3], 45); - - return result_starstar; -} - - -/* This is the jump function for the generator. It is equivalent - to 2^128 calls to next(); it can be used to generate 2^128 - non-overlapping subsequences for parallel computations. */ - -void jump(void) { - static const uint64_t JUMP[] = { 0x180ec6d33cfd0aba, 0xd5a61266f0c9392c, 0xa9582618e03fc9aa, 0x39abdc4529b1661c }; - - uint64_t s0 = 0; - uint64_t s1 = 0; - uint64_t s2 = 0; - uint64_t s3 = 0; - for(int i = 0; i < sizeof JUMP / sizeof *JUMP; i++) - for(int b = 0; b < 64; b++) { - if (JUMP[i] & UINT64_C(1) << b) { - s0 ^= s[0]; - s1 ^= s[1]; - s2 ^= s[2]; - s3 ^= s[3]; - } - next(); - } - - s[0] = s0; - s[1] = s1; - s[2] = s2; - s[3] = s3; -} - - - -/* This is the long-jump function for the generator. It is equivalent to - 2^192 calls to next(); it can be used to generate 2^64 starting points, - from each of which jump() will generate 2^64 non-overlapping - subsequences for parallel distributed computations. */ - -void long_jump(void) { - static const uint64_t LONG_JUMP[] = { 0x76e15d3efefdcbbf, 0xc5004e441c522fb3, 0x77710069854ee241, 0x39109bb02acbe635 }; - - uint64_t s0 = 0; - uint64_t s1 = 0; - uint64_t s2 = 0; - uint64_t s3 = 0; - for(int i = 0; i < sizeof LONG_JUMP / sizeof *LONG_JUMP; i++) - for(int b = 0; b < 64; b++) { - if (LONG_JUMP[i] & UINT64_C(1) << b) { - s0 ^= s[0]; - s1 ^= s[1]; - s2 ^= s[2]; - s3 ^= s[3]; - } - next(); - } - - s[0] = s0; - s[1] = s1; - s[2] = s2; - s[3] = s3; -}
\ No newline at end of file diff --git a/numpy/random/src/xoshiro256/xoshiro256.orig.h b/numpy/random/src/xoshiro256/xoshiro256.orig.h deleted file mode 100644 index 3aa788ec9..000000000 --- a/numpy/random/src/xoshiro256/xoshiro256.orig.h +++ /dev/null @@ -1,5 +0,0 @@ -#include <stdint.h> - -uint64_t s[4]; -uint64_t next(void); -void jump(void); diff --git a/numpy/random/src/xoshiro512/LICENSE.md b/numpy/random/src/xoshiro512/LICENSE.md deleted file mode 100644 index aa34c1966..000000000 --- a/numpy/random/src/xoshiro512/LICENSE.md +++ /dev/null @@ -1,9 +0,0 @@ -# XOSHIRO512STARSTAR - -Written in 2018 by David Blackman and Sebastiano Vigna (vigna@acm.org) - -To the extent possible under law, the author has dedicated all copyright -and related and neighboring rights to this software to the public domain -worldwide. This software is distributed without any warranty. - -See <http://creativecommons.org/publicdomain/zero/1.0/>. diff --git a/numpy/random/src/xoshiro512/xoshiro512-test-data-gen.c b/numpy/random/src/xoshiro512/xoshiro512-test-data-gen.c deleted file mode 100644 index 698923bda..000000000 --- a/numpy/random/src/xoshiro512/xoshiro512-test-data-gen.c +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Generate testing csv files - * - * cl xoshiro512-test-data-gen.c xoshiro512.orig.c / - * ../splitmix64/splitmix64.c /Ox - * xoshiro512-test-data-gen.exe * - * - * gcc xoshiro512-test-data-gen.c xoshiro512.orig.c / - * ../splitmix64/splitmix64.c -o xoshiro512-test-data-gen - * ./xoshiro512-test-data-gen - * - * Requires the Random123 directory containing header files to be located in the - * same directory (not included). - * - */ - -#include "../splitmix64/splitmix64.h" -#include "xoshiro512.orig.h" -#include <inttypes.h> -#include <stdio.h> - -#define N 1000 - -int main() { - uint64_t sum = 0; - uint64_t state, seed = 0xDEADBEAF; - state = seed; - int i; - for (i = 0; i < 8; i++) { - s[i] = splitmix64_next(&state); - } - uint64_t store[N]; - for (i = 0; i < N; i++) { - store[i] = next(); - } - - FILE *fp; - fp = fopen("xoshiro512-testset-1.csv", "w"); - if (fp == NULL) { - printf("Couldn't open file\n"); - return -1; - } - fprintf(fp, "seed, 0x%" PRIx64 "\n", seed); - for (i = 0; i < N; i++) { - fprintf(fp, "%d, 0x%" PRIx64 "\n", i, store[i]); - if (i == 999) { - printf("%d, 0x%" PRIx64 "\n", i, store[i]); - } - } - fclose(fp); - - seed = state = 0; - for (i = 0; i < 8; i++) { - s[i] = splitmix64_next(&state); - } - for (i = 0; i < N; i++) { - store[i] = next(); - } - fp = fopen("xoshiro512-testset-2.csv", "w"); - if (fp == NULL) { - printf("Couldn't open file\n"); - return -1; - } - fprintf(fp, "seed, 0x%" PRIx64 "\n", seed); - for (i = 0; i < N; i++) { - fprintf(fp, "%d, 0x%" PRIx64 "\n", i, store[i]); - if (i == 999) { - printf("%d, 0x%" PRIx64 "\n", i, store[i]); - } - } - fclose(fp); -} diff --git a/numpy/random/src/xoshiro512/xoshiro512.c b/numpy/random/src/xoshiro512/xoshiro512.c deleted file mode 100644 index 9fdbed125..000000000 --- a/numpy/random/src/xoshiro512/xoshiro512.c +++ /dev/null @@ -1,52 +0,0 @@ -/* Written in 2018 by David Blackman and Sebastiano Vigna (vigna@acm.org) - -To the extent possible under law, the author has dedicated all copyright -and related and neighboring rights to this software to the public domain -worldwide. This software is distributed without any warranty. - -See <http://creativecommons.org/publicdomain/zero/1.0/>. */ - -#include "xoshiro512.h" - -/* This is xoshiro512** 1.0, an all-purpose, rock-solid generator. It has - excellent (about 1ns) speed, an increased state (512 bits) that is - large enough for any parallel application, and it passes all tests we - are aware of. - - For generating just floating-point numbers, xoshiro512+ is even faster. - - The state must be seeded so that it is not everywhere zero. If you have - a 64-bit seed, we suggest to seed a splitmix64 generator and use its - output to fill s. */ - -extern NPY_INLINE uint64_t xoshiro512_next64(xoshiro512_state *state); - -extern NPY_INLINE uint32_t xoshiro512_next32(xoshiro512_state *state); - - -/* This is the jump function for the generator. It is equivalent - to 2^256 calls to next(); it can be used to generate 2^256 - non-overlapping subsequences for parallel computations. */ - -static uint64_t s_placeholder[8]; - -void xoshiro512_jump(xoshiro512_state *state) { - - int i, b, w; - static const uint64_t JUMP[] = {0x33ed89b6e7a353f9, 0x760083d7955323be, - 0x2837f2fbb5f22fae, 0x4b8c5674d309511c, - 0xb11ac47a7ba28c25, 0xf1be7667092bcc1c, - 0x53851efdb6df0aaf, 0x1ebbc8b23eaf25db}; - - uint64_t t[sizeof s_placeholder / sizeof *s_placeholder]; - memset(t, 0, sizeof t); - for (i = 0; i < sizeof JUMP / sizeof *JUMP; i++) - for (b = 0; b < 64; b++) { - if (JUMP[i] & UINT64_C(1) << b) - for (w = 0; w < sizeof s_placeholder / sizeof *s_placeholder; w++) - t[w] ^= state->s[w]; - xoshiro512_next(&state->s[0]); - } - - memcpy(state->s, t, sizeof s_placeholder); -} diff --git a/numpy/random/src/xoshiro512/xoshiro512.h b/numpy/random/src/xoshiro512/xoshiro512.h deleted file mode 100644 index 6ce6c7db7..000000000 --- a/numpy/random/src/xoshiro512/xoshiro512.h +++ /dev/null @@ -1,64 +0,0 @@ -#ifndef _RANDOMDGEN__XOSHIRO512STARSTAR_H_ -#define _RANDOMDGEN__XOSHIRO512STARSTAR_H_ - -#include <string.h> -#include <inttypes.h> -#include "numpy/npy_common.h" - -typedef struct s_xoshiro512_state -{ - uint64_t s[8]; - int has_uint32; - uint32_t uinteger; -} xoshiro512_state; - -static NPY_INLINE uint64_t rotl(const uint64_t x, int k) -{ - return (x << k) | (x >> (64 - k)); -} - -static NPY_INLINE uint64_t xoshiro512_next(uint64_t *s) -{ - const uint64_t result_starstar = rotl(s[1] * 5, 7) * 9; - - const uint64_t t = s[1] << 11; - - s[2] ^= s[0]; - s[5] ^= s[1]; - s[1] ^= s[2]; - s[7] ^= s[3]; - s[3] ^= s[4]; - s[4] ^= s[5]; - s[0] ^= s[6]; - s[6] ^= s[7]; - - s[6] ^= t; - - s[7] = rotl(s[7], 21); - - return result_starstar; -} - - -static NPY_INLINE uint64_t xoshiro512_next64(xoshiro512_state *state) -{ - return xoshiro512_next(&state->s[0]); -} - -static NPY_INLINE uint32_t xoshiro512_next32(xoshiro512_state *state) -{ - uint64_t next; - if (state->has_uint32) - { - state->has_uint32 = 0; - return state->uinteger; - } - next = xoshiro512_next(&state->s[0]); - state->has_uint32 = 1; - state->uinteger = (uint32_t)(next >> 32); - return (uint32_t)(next & 0xffffffff); -} - -void xoshiro512_jump(xoshiro512_state *state); - -#endif diff --git a/numpy/random/src/xoshiro512/xoshiro512.orig.c b/numpy/random/src/xoshiro512/xoshiro512.orig.c deleted file mode 100644 index ecdf81fc1..000000000 --- a/numpy/random/src/xoshiro512/xoshiro512.orig.c +++ /dev/null @@ -1,67 +0,0 @@ -/* Written in 2018 by David Blackman and Sebastiano Vigna (vigna@acm.org) - -To the extent possible under law, the author has dedicated all copyright -and related and neighboring rights to this software to the public domain -worldwide. This software is distributed without any warranty. - -See <http://creativecommons.org/publicdomain/zero/1.0/>. */ - -#include "xoshiro512.orig.h" - -/* This is xoshiro512** 1.0, an all-purpose, rock-solid generator. It has - excellent (about 1ns) speed, an increased state (512 bits) that is - large enough for any parallel application, and it passes all tests we - are aware of. - - For generating just floating-point numbers, xoshiro512+ is even faster. - - The state must be seeded so that it is not everywhere zero. If you have - a 64-bit seed, we suggest to seed a splitmix64 generator and use its - output to fill s. */ - -static inline uint64_t rotl(const uint64_t x, int k) { - return (x << k) | (x >> (64 - k)); -} - - -uint64_t next(void) { - const uint64_t result_starstar = rotl(s[1] * 5, 7) * 9; - - const uint64_t t = s[1] << 11; - - s[2] ^= s[0]; - s[5] ^= s[1]; - s[1] ^= s[2]; - s[7] ^= s[3]; - s[3] ^= s[4]; - s[4] ^= s[5]; - s[0] ^= s[6]; - s[6] ^= s[7]; - - s[6] ^= t; - - s[7] = rotl(s[7], 21); - - return result_starstar; -} - - -/* This is the jump function for the generator. It is equivalent - to 2^256 calls to next(); it can be used to generate 2^256 - non-overlapping subsequences for parallel computations. */ - -void jump(void) { - static const uint64_t JUMP[] = { 0x33ed89b6e7a353f9, 0x760083d7955323be, 0x2837f2fbb5f22fae, 0x4b8c5674d309511c, 0xb11ac47a7ba28c25, 0xf1be7667092bcc1c, 0x53851efdb6df0aaf, 0x1ebbc8b23eaf25db }; - - uint64_t t[sizeof s / sizeof *s]; - memset(t, 0, sizeof t); - for(int i = 0; i < sizeof JUMP / sizeof *JUMP; i++) - for(int b = 0; b < 64; b++) { - if (JUMP[i] & UINT64_C(1) << b) - for(int w = 0; w < sizeof s / sizeof *s; w++) - t[w] ^= s[w]; - next(); - } - - memcpy(s, t, sizeof s); -}
\ No newline at end of file diff --git a/numpy/random/src/xoshiro512/xoshiro512.orig.h b/numpy/random/src/xoshiro512/xoshiro512.orig.h deleted file mode 100644 index 0b7892473..000000000 --- a/numpy/random/src/xoshiro512/xoshiro512.orig.h +++ /dev/null @@ -1,6 +0,0 @@ -#include <stdint.h> -#include <string.h> - -uint64_t s[8]; -uint64_t next(void); -void jump(void); diff --git a/numpy/random/tests/data/dSFMT-testset-1.csv b/numpy/random/tests/data/dSFMT-testset-1.csv deleted file mode 100644 index 9f3f68aee..000000000 --- a/numpy/random/tests/data/dSFMT-testset-1.csv +++ /dev/null @@ -1,1001 +0,0 @@ -seed, 1 -0, 4607719943344484518 -1, 4611291582431749820 -2, 4609448534071823958 -3, 4611106200950903790 -4, 4609580282971267356 -5, 4609720762470045007 -6, 4607636870422133563 -7, 4611678836133173816 -8, 4610735809705346030 -9, 4608789817543785341 -10, 4610393651369520670 -11, 4611623758339670553 -12, 4608444108616433164 -13, 4607465458608330898 -14, 4610235165931416513 -15, 4608103709635697272 -16, 4608100588970381609 -17, 4608641074646810943 -18, 4608616221842668388 -19, 4607549343270027634 -20, 4610344140656206312 -21, 4610535464314418457 -22, 4611312430982209353 -23, 4607401331162512449 -24, 4609116099984352425 -25, 4611257698187747276 -26, 4607645174989853474 -27, 4608837854111428888 -28, 4608691299413198001 -29, 4608930266190921041 -30, 4608332808182207925 -31, 4608421484748440698 -32, 4608383650014337452 -33, 4611545817730524178 -34, 4611496890204636496 -35, 4610861924086585884 -36, 4608194351754852419 -37, 4610283774852204513 -38, 4609474926233319727 -39, 4608727547276598994 -40, 4609717674488922238 -41, 4609423015229480073 -42, 4609349380679114027 -43, 4610751388265382808 -44, 4607733281112877867 -45, 4610591846531581004 -46, 4610735578621585065 -47, 4611251806424951188 -48, 4609460646876881407 -49, 4611551161354804803 -50, 4611249469634822485 -51, 4608821959551777081 -52, 4610052971574464565 -53, 4607777094091618436 -54, 4610851094220499210 -55, 4607702337070583856 -56, 4611414385520522876 -57, 4611576460026085858 -58, 4611473034943841786 -59, 4608897639026169673 -60, 4607883926313481761 -61, 4608797023994348324 -62, 4610894444453627505 -63, 4608376332448068935 -64, 4609893849888152414 -65, 4610202941918038529 -66, 4611056233415559924 -67, 4610877544761426248 -68, 4610994780372079388 -69, 4609067797141254153 -70, 4610982998126297925 -71, 4610789518257002641 -72, 4610598903890296442 -73, 4608025197953180744 -74, 4610185556158198401 -75, 4608809010429661575 -76, 4608768447244428523 -77, 4609124503281513660 -78, 4611101360372917414 -79, 4611042322702996474 -80, 4610858523716073186 -81, 4610375945852385997 -82, 4608483154301089968 -83, 4607798251963762687 -84, 4609119835265156007 -85, 4609188963843200093 -86, 4607266275697659547 -87, 4610923287424505039 -88, 4609618008081028402 -89, 4608201696292514469 -90, 4611530915051149734 -91, 4607364802882841466 -92, 4611236492431573193 -93, 4610807042893722656 -94, 4610080772943107179 -95, 4608570487813674878 -96, 4610901704116296546 -97, 4610535849683417477 -98, 4609487776344637464 -99, 4607684048114742415 -100, 4609756145565247020 -101, 4609839920313018364 -102, 4607300199263955605 -103, 4608349701001143604 -104, 4608563526536655950 -105, 4608211471894692660 -106, 4611561832400682724 -107, 4607607690303987255 -108, 4609884829632656291 -109, 4610554863807344395 -110, 4609913857729390656 -111, 4608533735726217242 -112, 4611205573734963697 -113, 4608825835576863771 -114, 4611237004326669392 -115, 4609254174450399374 -116, 4607622879864982635 -117, 4610819003887309229 -118, 4607698308712315302 -119, 4607833259972583494 -120, 4607681632288287295 -121, 4607910755187354207 -122, 4611122191561013257 -123, 4611656235846796861 -124, 4610565432604340253 -125, 4610908827351842030 -126, 4611268340320100590 -127, 4609313851656821466 -128, 4608528427564169020 -129, 4608200570336395038 -130, 4610538403125154877 -131, 4608888436053455398 -132, 4611543165544411944 -133, 4610250257231662522 -134, 4609297917742740245 -135, 4610400815978769483 -136, 4610528657337572565 -137, 4610705415667566712 -138, 4611077904559980731 -139, 4609927849369442287 -140, 4609397759777226314 -141, 4609010898016502992 -142, 4609120772081864228 -143, 4607237141609153161 -144, 4610571899308981431 -145, 4609008993363640801 -146, 4610287560785901157 -147, 4608623756174376020 -148, 4608653243870415213 -149, 4609547819331301107 -150, 4609673847833623842 -151, 4608235666485521661 -152, 4610114805542994107 -153, 4610479707694856806 -154, 4609103555741806169 -155, 4608500007602890176 -156, 4610672856146553685 -157, 4611610717675563449 -158, 4610730068759051595 -159, 4608685224971234052 -160, 4609413185190097208 -161, 4608897450787802174 -162, 4607186845514749512 -163, 4607348569795042779 -164, 4611009214373065786 -165, 4609635836233645619 -166, 4610977547720639382 -167, 4610180471225090534 -168, 4608711346241655575 -169, 4608627118356010890 -170, 4611222988628267196 -171, 4610585467803239650 -172, 4608953295299223634 -173, 4610267719343621921 -174, 4608384815012305523 -175, 4610760760005158447 -176, 4609888294496573856 -177, 4608487712307397941 -178, 4610046813921597302 -179, 4607901372889700267 -180, 4611648045743259157 -181, 4611287922111507955 -182, 4609242748471226007 -183, 4607755201380013067 -184, 4611417807283839436 -185, 4609947268752725748 -186, 4610889795243117380 -187, 4610682734427309711 -188, 4609430103755831273 -189, 4610392513282878252 -190, 4608028130931026108 -191, 4609354927353821574 -192, 4607999262827197226 -193, 4608772265877184447 -194, 4611465843018312306 -195, 4607857062574325894 -196, 4610666426888867633 -197, 4610600830920094283 -198, 4609205915408410545 -199, 4607853688411879209 -200, 4607747795491854335 -201, 4608262126937716822 -202, 4611534185487112177 -203, 4610074422869556166 -204, 4609237471248388861 -205, 4609177882315404739 -206, 4607287155741697257 -207, 4611476554139586317 -208, 4609517208333105115 -209, 4607319309983389553 -210, 4608526076922090888 -211, 4610748479257207053 -212, 4609931527304084444 -213, 4608009987636217635 -214, 4610407130291313714 -215, 4608891664598965696 -216, 4610296160139884006 -217, 4611484560328101663 -218, 4611019501503618978 -219, 4610246433435823295 -220, 4608562757718917889 -221, 4607471913719777131 -222, 4611613370049530904 -223, 4608319297993304206 -224, 4607745017639172981 -225, 4609731861577957712 -226, 4609663467149266458 -227, 4609543591294589508 -228, 4608524115958204496 -229, 4611293271186698245 -230, 4610645493162693253 -231, 4607841282620685061 -232, 4608714555579084575 -233, 4608149900642705668 -234, 4609881346718346991 -235, 4609652423006025080 -236, 4610576204477932347 -237, 4608419142720251589 -238, 4609292870725527035 -239, 4607915743890091921 -240, 4610631007573258876 -241, 4611091737638956363 -242, 4610866832498942602 -243, 4608679206316379049 -244, 4611254040795706209 -245, 4608564985000526959 -246, 4609448881222436994 -247, 4611606861023266002 -248, 4608930513670169902 -249, 4607323764955464423 -250, 4607288181905687970 -251, 4610373160370490855 -252, 4608411794278861897 -253, 4610212894218458057 -254, 4610694380708700429 -255, 4609922533346642803 -256, 4609392056590729641 -257, 4609803732845487397 -258, 4608878803170308012 -259, 4611524443328391151 -260, 4608174079771415727 -261, 4607408890033763317 -262, 4607845699541088935 -263, 4611555920103058967 -264, 4607479194613061911 -265, 4607653663534995980 -266, 4610070893479029228 -267, 4611538868870820080 -268, 4608567899678704260 -269, 4608770231079288078 -270, 4610411454914405807 -271, 4607820664883172463 -272, 4610714780751262327 -273, 4607194611952450391 -274, 4609087763682578279 -275, 4608165254026394594 -276, 4609234355157830083 -277, 4609341303623897409 -278, 4607843258265880283 -279, 4609385462693327627 -280, 4610305709185463397 -281, 4607607148427164960 -282, 4608714881122218799 -283, 4609651616092383148 -284, 4609231203213271499 -285, 4611257982347817477 -286, 4610152698091154688 -287, 4608144133423192484 -288, 4610573628352437761 -289, 4608544728261953288 -290, 4610198309467009097 -291, 4610449593868273119 -292, 4610593290392091594 -293, 4609046058809591309 -294, 4611622292530238189 -295, 4610657414068263882 -296, 4611165834719653845 -297, 4610350928332385108 -298, 4611352448760095628 -299, 4609948012409647959 -300, 4610309189747788666 -301, 4607755081207867022 -302, 4610231879852064105 -303, 4607888125265337265 -304, 4609172092280206898 -305, 4608588257784565842 -306, 4607741678424158070 -307, 4609025150930086850 -308, 4609393539064468217 -309, 4610911632660167908 -310, 4610958667007850644 -311, 4611286666277101605 -312, 4609804183682242390 -313, 4611608707704948262 -314, 4609669610113267167 -315, 4607666787328441261 -316, 4607581099645179700 -317, 4610190388918185110 -318, 4610216151360211572 -319, 4608284982213104796 -320, 4609043908200033150 -321, 4610094358636174240 -322, 4607727851642292863 -323, 4607748339680477190 -324, 4610333796608461237 -325, 4611630659133526098 -326, 4611011836822995398 -327, 4611271586336335851 -328, 4608676990846072419 -329, 4610486194528414452 -330, 4607576606876065603 -331, 4607719568700291080 -332, 4608551235063435831 -333, 4611011581816455613 -334, 4608841433006333809 -335, 4609590566174099924 -336, 4610751108417575356 -337, 4609783802139185311 -338, 4610078674097919534 -339, 4608133838483219458 -340, 4609277956691541130 -341, 4608489591310323203 -342, 4608190218485836055 -343, 4611079531841410411 -344, 4608880618309483643 -345, 4608911948674088293 -346, 4611291894381153496 -347, 4608451717289459361 -348, 4608796294882212937 -349, 4608414460486049632 -350, 4607422609721232463 -351, 4608080483385313266 -352, 4607622634488318995 -353, 4609289604313013439 -354, 4609239936097680379 -355, 4608372018123900887 -356, 4610702814261825804 -357, 4611274091783983647 -358, 4611215484124931059 -359, 4608990421919168365 -360, 4609097190054835106 -361, 4610994750415795356 -362, 4611072443902954170 -363, 4608952917718970557 -364, 4608900180943861654 -365, 4608934424322310689 -366, 4609731940535270405 -367, 4610297241526025992 -368, 4608524744985785409 -369, 4610233647335282974 -370, 4609397840502965617 -371, 4609931050226720744 -372, 4607823742164438535 -373, 4607386223202154150 -374, 4611077706407577954 -375, 4608540055157729754 -376, 4610737951147572257 -377, 4610902929285966658 -378, 4611385693211960164 -379, 4607224622379354821 -380, 4609166781986849209 -381, 4608748083335025668 -382, 4610443657454469430 -383, 4610468401119056286 -384, 4610937884247828753 -385, 4609084940396193513 -386, 4611415358123142084 -387, 4610501805353766962 -388, 4607767036448986638 -389, 4607461223165192234 -390, 4608226484980255663 -391, 4611607256659641032 -392, 4609945211367732974 -393, 4609006453263783302 -394, 4610265844375613630 -395, 4607694615392738521 -396, 4608606212547814938 -397, 4610034239111814504 -398, 4610103751968466900 -399, 4611088505838050253 -400, 4608851769231884474 -401, 4610288514235425111 -402, 4608505539036108714 -403, 4611453738759382658 -404, 4611101647329150173 -405, 4607983202842737743 -406, 4607628593913051809 -407, 4610817169808213622 -408, 4610274104936495796 -409, 4607686898188473999 -410, 4611494545938384459 -411, 4609445238317096124 -412, 4609809658023272942 -413, 4610395993443671939 -414, 4609532016275791584 -415, 4610018501692092651 -416, 4608683763430851439 -417, 4608548880896401248 -418, 4610478349829709585 -419, 4607855690965045385 -420, 4609679774972563395 -421, 4609301972366993458 -422, 4609957828433462989 -423, 4611601276026033182 -424, 4610886414042292178 -425, 4610540517589250995 -426, 4609329807459066933 -427, 4611012060649555364 -428, 4611004988464520281 -429, 4610092518739796845 -430, 4608982525313436661 -431, 4610220581774992574 -432, 4608389110412341488 -433, 4610577194017978099 -434, 4607777219986546519 -435, 4608552325706694521 -436, 4609384775042120780 -437, 4610819470183619029 -438, 4608862514454376763 -439, 4608050912492519261 -440, 4609954958938789219 -441, 4611451357502982166 -442, 4607476785936630269 -443, 4611329691194458319 -444, 4610683876885297263 -445, 4608922438780754530 -446, 4607347319284557650 -447, 4610212564213298006 -448, 4607187736152210274 -449, 4607821132969264993 -450, 4610701944842365016 -451, 4609138892484188991 -452, 4607579978932469946 -453, 4608297026731285373 -454, 4609117946354613867 -455, 4609873371753866995 -456, 4609883036162181473 -457, 4610617143057865264 -458, 4609705966715129773 -459, 4609266086686667759 -460, 4611092203109148192 -461, 4607277668644988197 -462, 4610243051742855164 -463, 4611488200475462773 -464, 4610159190694085398 -465, 4607187122077884953 -466, 4609178002227614028 -467, 4607200609172450908 -468, 4607203109970409745 -469, 4610157519627986095 -470, 4608168608616624151 -471, 4607556712879928934 -472, 4610602971628266891 -473, 4607272386871519909 -474, 4609226601189759664 -475, 4608821958178910465 -476, 4610337925540682923 -477, 4607756826141445338 -478, 4610670714123277518 -479, 4609997633318663199 -480, 4610992528318514467 -481, 4610508873379935121 -482, 4610548944839799582 -483, 4608576872646763539 -484, 4611475238517289488 -485, 4609969545809504006 -486, 4611604653736723262 -487, 4610513754499061149 -488, 4610047791400434915 -489, 4610466779122303079 -490, 4609199569907073109 -491, 4611355331378329938 -492, 4609211256613089457 -493, 4611345984656025190 -494, 4609276744577281463 -495, 4610677520254288398 -496, 4611565920468553537 -497, 4608887769347254935 -498, 4607891688277052029 -499, 4611210417809931519 -500, 4609181196197018924 -501, 4608620849445253589 -502, 4610338756450099522 -503, 4610235666137930968 -504, 4610190689620274242 -505, 4608156139098624503 -506, 4610233351376219666 -507, 4611116196066412550 -508, 4611244546095227734 -509, 4608354486449139402 -510, 4608722837522685541 -511, 4607298792335449598 -512, 4610940117180049531 -513, 4609905783847698405 -514, 4611068115688450709 -515, 4609567280627055335 -516, 4609668102454567333 -517, 4608575291283631952 -518, 4608606739858036458 -519, 4609920659405064132 -520, 4609633855399730395 -521, 4607420399082287137 -522, 4607497830797814837 -523, 4608734929795542569 -524, 4611677103224173563 -525, 4609895185651955231 -526, 4608551100268458835 -527, 4608794936863357442 -528, 4608839444940253689 -529, 4609723875823547919 -530, 4609134168731540965 -531, 4610864297289180458 -532, 4609561568240290174 -533, 4609455706988469654 -534, 4610110730269692806 -535, 4607590724900811004 -536, 4609841446856073581 -537, 4607519144944801539 -538, 4610958924924618965 -539, 4608058978781928209 -540, 4608930736822030783 -541, 4610339624224904683 -542, 4611268940884582276 -543, 4611614440252938509 -544, 4610283933065539718 -545, 4610827563929259801 -546, 4610238281320018148 -547, 4609068702417082470 -548, 4609965625349945622 -549, 4610567655464689798 -550, 4609517999871284092 -551, 4608853313183377285 -552, 4608597386123068580 -553, 4608596804275711127 -554, 4608806942254133750 -555, 4611595740982862812 -556, 4610653226348519116 -557, 4610010878229382699 -558, 4611430012536690008 -559, 4608194334909286956 -560, 4609770785529395235 -561, 4609636612234158840 -562, 4610467762650198285 -563, 4611250113292757754 -564, 4611123483515753501 -565, 4610256050464540468 -566, 4611554812085476534 -567, 4609545597507432057 -568, 4610251629953739706 -569, 4608097940038860692 -570, 4608939256004427493 -571, 4609549477949346267 -572, 4607856563525396488 -573, 4608407566119329436 -574, 4610977065049540740 -575, 4608677612836947043 -576, 4611670385382852661 -577, 4609169914628845192 -578, 4608385528780825832 -579, 4608431699759708725 -580, 4610213210579325967 -581, 4607790519129120154 -582, 4611460475578903177 -583, 4611645204412117197 -584, 4611045465835867018 -585, 4610795725227740679 -586, 4607610666986980838 -587, 4607713533366355938 -588, 4608008411737790225 -589, 4607218032541409981 -590, 4610712747455657843 -591, 4607322986186115065 -592, 4608609778168478040 -593, 4609117986895835630 -594, 4608387138944308707 -595, 4609405159006321483 -596, 4609201389487900126 -597, 4610814010656557822 -598, 4610461402205528089 -599, 4608856848982780180 -600, 4610009661369407408 -601, 4609531046728456306 -602, 4608781638378145485 -603, 4611071218907304246 -604, 4607718364365206169 -605, 4610766522014845193 -606, 4610418511682022913 -607, 4611489866910598987 -608, 4611024768525348505 -609, 4608411227740737072 -610, 4608347021514952714 -611, 4607229154687220486 -612, 4609527688395331186 -613, 4608610487126715045 -614, 4610163014754346271 -615, 4610119594096556803 -616, 4609099103543638986 -617, 4607960911715387937 -618, 4610543345562112354 -619, 4611673200269784439 -620, 4607890122556287450 -621, 4610510919142595773 -622, 4611000945873569885 -623, 4609861297670464893 -624, 4607365464269028252 -625, 4610263820456779466 -626, 4608382757430988076 -627, 4608592826360850405 -628, 4607897223655826864 -629, 4608783406301942627 -630, 4610831809342653056 -631, 4610592838071858481 -632, 4607625427481844846 -633, 4610803200293531160 -634, 4607315949328468373 -635, 4609568473332490124 -636, 4608018723588381940 -637, 4610473680670701003 -638, 4608867424437758236 -639, 4607226771732395005 -640, 4607648878101783522 -641, 4608407495823699878 -642, 4609303470297933457 -643, 4607995287639912115 -644, 4610604756706603303 -645, 4608065328364362400 -646, 4607659009213858799 -647, 4609407180393559403 -648, 4610161232799622667 -649, 4608312339248283632 -650, 4611365830215244879 -651, 4609241343071166241 -652, 4607187426157508336 -653, 4611008486844877795 -654, 4609348293209960853 -655, 4611430342690450936 -656, 4610022123422557819 -657, 4610662613803950933 -658, 4610421175429479085 -659, 4609631547889552562 -660, 4609940555785407216 -661, 4609822163096232669 -662, 4608970136612861659 -663, 4609427082274890719 -664, 4608697401879465484 -665, 4611207783165609518 -666, 4611373087590380940 -667, 4610545384528497527 -668, 4607694071454287047 -669, 4607913509258771897 -670, 4607226952976335318 -671, 4611367164497924691 -672, 4610773799850733403 -673, 4608923576905855388 -674, 4610829132227252858 -675, 4611539466506594954 -676, 4607450455252831956 -677, 4607924760556738513 -678, 4609257351177318999 -679, 4607886491020993167 -680, 4607262386448907585 -681, 4608805527475164058 -682, 4608519384875417362 -683, 4609768003609528793 -684, 4607990620996706344 -685, 4608000541499168509 -686, 4607514221391064237 -687, 4610596308708149427 -688, 4608457358343713720 -689, 4611109413177548323 -690, 4609292098957449828 -691, 4608275497070553256 -692, 4609949308659603960 -693, 4610508332440425814 -694, 4610523421224858005 -695, 4611628503654168653 -696, 4608988043865917565 -697, 4609452807254068291 -698, 4611008104380823402 -699, 4609415493514583781 -700, 4608204811849219551 -701, 4608154991732011594 -702, 4609565684575358357 -703, 4607201300980991047 -704, 4611578953897989322 -705, 4608949284388541303 -706, 4608953402339590043 -707, 4611094520261253641 -708, 4611564299263181877 -709, 4611244613212746921 -710, 4607665698546290637 -711, 4609929742865966113 -712, 4608756528459788870 -713, 4608559801324682100 -714, 4611161313083363936 -715, 4610640544822605367 -716, 4610461950314271130 -717, 4608429389531989501 -718, 4610594975443340868 -719, 4610653541215203471 -720, 4610354404384656514 -721, 4611322467270517926 -722, 4609004358268238303 -723, 4610113217342068535 -724, 4607247286313434436 -725, 4607936058322365025 -726, 4607498677954044120 -727, 4607367643972642434 -728, 4610903724213995603 -729, 4608398398619525170 -730, 4609011100867415968 -731, 4609286350498400836 -732, 4610564846286379047 -733, 4610610842418549113 -734, 4609379950548700715 -735, 4608749477629127198 -736, 4609389534628643041 -737, 4609709510894589547 -738, 4609720477301256427 -739, 4610433170873472685 -740, 4607581786915955136 -741, 4610426993537088574 -742, 4609893496842706786 -743, 4608182222083733544 -744, 4607415409292672163 -745, 4608909799371727180 -746, 4609682438519448644 -747, 4609837420608110159 -748, 4607722492204198941 -749, 4608063142644927447 -750, 4611212896211946065 -751, 4610459279330601000 -752, 4610766525803719281 -753, 4610541719260518609 -754, 4608446538192511629 -755, 4608529268885531628 -756, 4607702152237957857 -757, 4608797703031075472 -758, 4607439116134819826 -759, 4608311115301487628 -760, 4611675179452768396 -761, 4608076597967526423 -762, 4611585923502702782 -763, 4611007505903425519 -764, 4610334401882712716 -765, 4611292864862708587 -766, 4610520603991775838 -767, 4610790439348561649 -768, 4608020323209861832 -769, 4609132354146195150 -770, 4611648991029158429 -771, 4608415373761338387 -772, 4611222889759456059 -773, 4610394879407915891 -774, 4611223274533537520 -775, 4611048920373264726 -776, 4611203040226595031 -777, 4608581225592953052 -778, 4607944132899105268 -779, 4610553416357950208 -780, 4609183189134981159 -781, 4610931403284842449 -782, 4609626797792255137 -783, 4608437008274383407 -784, 4608841271194024119 -785, 4609511843950082189 -786, 4608432804080683600 -787, 4607886713946305196 -788, 4610350555892554303 -789, 4611041162152526452 -790, 4608810036185927099 -791, 4609731609025465382 -792, 4608387458587420116 -793, 4608846429123315125 -794, 4610376323596472588 -795, 4609423912646885032 -796, 4609218872949994167 -797, 4611375967003041069 -798, 4609485140993387628 -799, 4607604870717557062 -800, 4609495797464442279 -801, 4611456949409319675 -802, 4610344977769413626 -803, 4610598065942935600 -804, 4608013012863891262 -805, 4610252455143552284 -806, 4607700593028756519 -807, 4610045641566183312 -808, 4609480926180737252 -809, 4610275596338864080 -810, 4607659695464558950 -811, 4607219197645073589 -812, 4608177295501330522 -813, 4611273956331899579 -814, 4610913813005660249 -815, 4608470207120093898 -816, 4608174217124512103 -817, 4610065364926597101 -818, 4607349317207213784 -819, 4607602167222023985 -820, 4607657145979677117 -821, 4611508729708873431 -822, 4607908717595303714 -823, 4609727931398518344 -824, 4609540956592359987 -825, 4610440481396242417 -826, 4611346585992438567 -827, 4611152612229187917 -828, 4610384157247730087 -829, 4610830126611132722 -830, 4610272123470087431 -831, 4607234503905390991 -832, 4610613653079230069 -833, 4609179215008588124 -834, 4608441295871321425 -835, 4608116436734160239 -836, 4607605033373857689 -837, 4610599359267200688 -838, 4611379096030431268 -839, 4609842285031861233 -840, 4611250379332137731 -841, 4608487405142537379 -842, 4607380789043538335 -843, 4609546285413174259 -844, 4608919052624376420 -845, 4611474363794717141 -846, 4611079221421189606 -847, 4607871497110868045 -848, 4608251852430693481 -849, 4611271625089563201 -850, 4608142282722604751 -851, 4610614961087854140 -852, 4611030874745849847 -853, 4609674534508351596 -854, 4610748124279118172 -855, 4610214076525417764 -856, 4608915989016466776 -857, 4611186209375381383 -858, 4609729165373960964 -859, 4608171107224247283 -860, 4608322267844345836 -861, 4611385726702876896 -862, 4607526082606428148 -863, 4609300797912528830 -864, 4607995042613073018 -865, 4609544162095522243 -866, 4607273392907536721 -867, 4610915254133616443 -868, 4608528592480458486 -869, 4611065489354804147 -870, 4610750286707033259 -871, 4609777244768435300 -872, 4610807148417457906 -873, 4607877316209555589 -874, 4610316726265842451 -875, 4608771732565061950 -876, 4611471267762612145 -877, 4607984815868159369 -878, 4608744077489931245 -879, 4611032300367986435 -880, 4609572801223705776 -881, 4607388928679638867 -882, 4610440380910085523 -883, 4611677400759288526 -884, 4608231223120382380 -885, 4609826308636672129 -886, 4610729764513821105 -887, 4608945691565841376 -888, 4608283276108322908 -889, 4611090204591740692 -890, 4610600988861462466 -891, 4608814357404053556 -892, 4611331328900205001 -893, 4610440474296736006 -894, 4607431388306045801 -895, 4610821334292221218 -896, 4608554210663333875 -897, 4609824397495829498 -898, 4607541211343519985 -899, 4608435017263349928 -900, 4607219271691108353 -901, 4608430070452421044 -902, 4609082847439943417 -903, 4610866784520449850 -904, 4608287501071307688 -905, 4609218510235145503 -906, 4608114112360957267 -907, 4609922412275378983 -908, 4608601574612929512 -909, 4608063236537296892 -910, 4610507352144992045 -911, 4610831100303954067 -912, 4610989778846895898 -913, 4611131006465079227 -914, 4607610719457154999 -915, 4610658650342157966 -916, 4607418499615550301 -917, 4610402445180375078 -918, 4610463803051786556 -919, 4610040245423397003 -920, 4610291132556872432 -921, 4610915180727115233 -922, 4607198239226330244 -923, 4610719993407015954 -924, 4608790436210431943 -925, 4611518788065155885 -926, 4609410806758155597 -927, 4610354727542013410 -928, 4609032496183417847 -929, 4607612835462448389 -930, 4609119308314247716 -931, 4610676295665807893 -932, 4610030018059715751 -933, 4610396681520935881 -934, 4610115299841718605 -935, 4610531703556384068 -936, 4607313656834232832 -937, 4607826054856970203 -938, 4609717410497090129 -939, 4609043343821435147 -940, 4607629724646231370 -941, 4611347190635269674 -942, 4607431356324177025 -943, 4609743147159956874 -944, 4608919951624732686 -945, 4608549836830011507 -946, 4609835749585271216 -947, 4610001878208091800 -948, 4607727638454636808 -949, 4608140523490695322 -950, 4610951723878037203 -951, 4609561113218416843 -952, 4607375879120504969 -953, 4610968421496640577 -954, 4608729663137359994 -955, 4611521561048982293 -956, 4607647181466306462 -957, 4608815536941397702 -958, 4611410078681334217 -959, 4610883601143579986 -960, 4609217767853028115 -961, 4610569694955441160 -962, 4608142872889589658 -963, 4609078496262967192 -964, 4610075946790752678 -965, 4607952350453678296 -966, 4610919620741525096 -967, 4611050224420434596 -968, 4608163018441029734 -969, 4611368242936987963 -970, 4607644493316907613 -971, 4611292201819050900 -972, 4610919228494056420 -973, 4607225037781465524 -974, 4609803354294636294 -975, 4610012640039408504 -976, 4610054964621136538 -977, 4609178240405976665 -978, 4607687932449852507 -979, 4609284420963602445 -980, 4609123874172501167 -981, 4608282636137081729 -982, 4609729376153713229 -983, 4611206065074370636 -984, 4609819396180228727 -985, 4610891933717707670 -986, 4608390654319867654 -987, 4610530001352182832 -988, 4608968440000980355 -989, 4611276663454436837 -990, 4609638657758409036 -991, 4610986200094730228 -992, 4610734380577234553 -993, 4609408663096464249 -994, 4609878290485950846 -995, 4607522064640469547 -996, 4610791378999926894 -997, 4607540164715119602 -998, 4609346418539511860 -999, 4611057822391293948 diff --git a/numpy/random/tests/data/dSFMT-testset-2.csv b/numpy/random/tests/data/dSFMT-testset-2.csv deleted file mode 100644 index 2ec2d7a51..000000000 --- a/numpy/random/tests/data/dSFMT-testset-2.csv +++ /dev/null @@ -1,1001 +0,0 @@ -seed, 123456789 -0, 4611184391270596398 -1, 4607748002806405513 -2, 4610950593283603895 -3, 4608090221984835117 -4, 4608620401509188549 -5, 4608933259318787038 -6, 4609013189947794152 -7, 4610981701838014712 -8, 4607749361849391199 -9, 4607937126452632796 -10, 4607787877636103702 -11, 4610534911848167216 -12, 4610758085486021829 -13, 4608376900672555174 -14, 4611475749905869564 -15, 4610499914926478618 -16, 4610900925684457179 -17, 4609184136046668572 -18, 4610480821748015478 -19, 4609898134786890046 -20, 4610017288264709787 -21, 4610945461469807520 -22, 4611377383751342990 -23, 4610945102533068783 -24, 4611669662318553242 -25, 4609191925356202514 -26, 4607369493394647937 -27, 4610171428966243908 -28, 4608117572388953111 -29, 4608266910229155519 -30, 4608559463354581151 -31, 4608291596231703883 -32, 4609993154230249063 -33, 4608158820656759750 -34, 4607825861011031752 -35, 4611091529260321033 -36, 4609803558980700204 -37, 4610892045184692457 -38, 4607844754686911799 -39, 4609239584278564809 -40, 4608975935937490223 -41, 4611186452462884146 -42, 4610644474758878544 -43, 4608188546959932195 -44, 4610317408616093972 -45, 4607827178108179262 -46, 4611275432938764949 -47, 4608511443742655969 -48, 4607200952336491646 -49, 4609727773590041393 -50, 4609137674464229063 -51, 4611529391150713249 -52, 4607446200291229812 -53, 4608618724431091553 -54, 4608231197118968153 -55, 4609848377535763472 -56, 4609769454787363651 -57, 4609093431634418146 -58, 4610941233823434235 -59, 4609301175512188901 -60, 4610884340334734656 -61, 4610063958683836346 -62, 4607897080185028324 -63, 4610305504370096344 -64, 4609499707572786607 -65, 4609874865902334026 -66, 4610351583670684094 -67, 4607292638794148255 -68, 4609412782688385863 -69, 4610390851314330496 -70, 4610340712140767101 -71, 4611109929809487388 -72, 4608431958302562464 -73, 4611491800847619506 -74, 4611664179902108071 -75, 4609243488780021515 -76, 4611114015923144350 -77, 4608524512724098287 -78, 4610450327089558934 -79, 4608720370826377375 -80, 4609572763010883699 -81, 4610381056495781763 -82, 4610005210825690556 -83, 4610341565220388232 -84, 4609034688757121677 -85, 4608823563858030255 -86, 4607971981785212736 -87, 4608714648124969040 -88, 4608968779454607977 -89, 4607272316660152324 -90, 4610748035362895446 -91, 4611319709331049410 -92, 4611390662594804501 -93, 4610054939662414847 -94, 4610394601776085983 -95, 4611424622746948620 -96, 4609395571329163407 -97, 4608527159228147662 -98, 4608379506646233343 -99, 4608996098073467200 -100, 4609633861067625056 -101, 4609387288473331641 -102, 4609369354653726335 -103, 4609305386464755625 -104, 4609085462578529471 -105, 4607213117834450226 -106, 4608676147693465985 -107, 4609894016428056597 -108, 4610808023909042858 -109, 4608152398284126687 -110, 4608864655829389907 -111, 4608853043279974421 -112, 4609998495057236534 -113, 4610971344400740897 -114, 4610947677840469570 -115, 4608888205458648733 -116, 4607306226266885750 -117, 4609476897174960733 -118, 4609298769587075756 -119, 4608046849854182276 -120, 4607709982476583693 -121, 4608905629015127110 -122, 4610027478304152622 -123, 4610378827605636632 -124, 4609168469605184889 -125, 4608424320664524511 -126, 4611224145925927248 -127, 4610598390440508158 -128, 4607548101463088366 -129, 4610445109429344448 -130, 4608982837349247842 -131, 4611526772283530460 -132, 4609215133306156120 -133, 4610747257006687691 -134, 4611305960482481336 -135, 4610602687315818756 -136, 4607839670910202130 -137, 4610527601541091852 -138, 4611462737727028786 -139, 4609212169757271808 -140, 4608447721028771557 -141, 4608224903291976145 -142, 4607298632533980318 -143, 4607975637289743494 -144, 4608776340673956742 -145, 4608578170133208214 -146, 4611177429384019220 -147, 4607665628038835535 -148, 4609531011383000577 -149, 4609360969802432085 -150, 4609908488618542164 -151, 4607366945146869514 -152, 4610136614778041377 -153, 4611168569218164361 -154, 4610462572118833671 -155, 4608070981696376487 -156, 4611058778037833630 -157, 4608159294705821382 -158, 4607530053661949689 -159, 4609136441084496096 -160, 4609331241894336822 -161, 4611313107630037707 -162, 4607957053472625207 -163, 4609675126838719650 -164, 4609482958203648215 -165, 4609691585561697624 -166, 4611475423312731438 -167, 4611412076067906505 -168, 4610429355560523848 -169, 4610625875093760541 -170, 4607241368914269823 -171, 4608589893979475221 -172, 4610073186156188115 -173, 4607291233411155158 -174, 4607675047628278616 -175, 4610869395774400226 -176, 4610232438803745722 -177, 4611554162813131112 -178, 4611642473714833781 -179, 4610563419014907913 -180, 4608459192490850885 -181, 4610780149188594220 -182, 4608960376226045768 -183, 4609069361322693819 -184, 4607256923555182400 -185, 4608474664242579394 -186, 4610207389506744572 -187, 4609112003475072746 -188, 4609240603140788354 -189, 4607525348408117354 -190, 4611149396864007205 -191, 4609114686465130118 -192, 4608849128028589904 -193, 4607248401924217556 -194, 4611387244175010347 -195, 4610567855974092668 -196, 4608169346845917282 -197, 4608490452199719856 -198, 4611203596728963611 -199, 4609287639795895008 -200, 4611614031789088265 -201, 4607236671819565824 -202, 4607466608820858068 -203, 4609639323480231358 -204, 4611254610116912557 -205, 4608807229543638034 -206, 4608381564380368174 -207, 4607428682272410485 -208, 4611229637925604134 -209, 4609236526826003496 -210, 4608889880949328886 -211, 4611135901473627148 -212, 4609923185324027506 -213, 4608879482743843897 -214, 4607662449177713187 -215, 4609980811569949840 -216, 4608275147595190524 -217, 4610799005466054235 -218, 4607667917597769158 -219, 4610185589593486163 -220, 4607529819757965470 -221, 4608839547249506178 -222, 4607706145147011973 -223, 4610988495472186250 -224, 4611534361958731542 -225, 4611641549824093970 -226, 4607316484858856298 -227, 4608641757303921184 -228, 4609375357848069574 -229, 4610565635665894453 -230, 4611147322350665952 -231, 4610071054475069545 -232, 4608886005124134993 -233, 4611384240695070553 -234, 4609556577749744408 -235, 4607688273402525356 -236, 4609395656487625483 -237, 4607920617948366178 -238, 4608233544953726639 -239, 4607736865102992897 -240, 4611554956498550667 -241, 4608735997467283056 -242, 4608499613076219431 -243, 4607926707839352263 -244, 4607349468190181214 -245, 4607855564980078814 -246, 4608566548361033733 -247, 4608689878198670581 -248, 4607485839302113425 -249, 4611493753178685166 -250, 4608566613320387204 -251, 4609743179886038389 -252, 4610508594994820223 -253, 4608995913792958562 -254, 4610248353463386070 -255, 4609788192124211795 -256, 4610619330306161425 -257, 4610873599325465005 -258, 4607324385499645328 -259, 4610611165167596515 -260, 4608006298637673371 -261, 4608540339048264499 -262, 4609631136716349669 -263, 4608685013736282276 -264, 4607363759784022848 -265, 4609492611310929004 -266, 4607780070180818716 -267, 4611531753698196550 -268, 4609227266216837458 -269, 4609211002065400677 -270, 4610668395253295080 -271, 4609134381345731597 -272, 4609382192034225627 -273, 4607208308209034488 -274, 4610579328733327647 -275, 4608921603525338555 -276, 4608290209927931669 -277, 4610866583781415461 -278, 4608182329361248100 -279, 4611648549813945436 -280, 4608601920453704621 -281, 4607406218324299637 -282, 4610748358143595351 -283, 4607437422367397844 -284, 4610299319830347312 -285, 4607992330520188137 -286, 4607658701765777668 -287, 4610721959305012250 -288, 4608971493894533044 -289, 4610010722223631500 -290, 4611050493332836673 -291, 4611164520867402836 -292, 4610619993846650787 -293, 4610600062391983254 -294, 4610986071470687711 -295, 4607815296700712791 -296, 4608678841251990428 -297, 4609887779099788759 -298, 4609503319862290027 -299, 4608809762931362117 -300, 4608037449870401927 -301, 4607755403017924034 -302, 4609087730452781738 -303, 4608773046045154889 -304, 4609803415624001168 -305, 4610998875554212160 -306, 4610380022165388956 -307, 4607984105708776524 -308, 4607847620250154418 -309, 4609666480042052524 -310, 4609307223459772378 -311, 4610669103098622941 -312, 4611513493576426284 -313, 4610110724985187558 -314, 4607584875859460118 -315, 4607466337518526743 -316, 4610953875036984820 -317, 4608473324196281668 -318, 4610528420574205379 -319, 4611218523029715214 -320, 4609404517070225101 -321, 4610679296055932161 -322, 4611602007192673713 -323, 4608768227857799294 -324, 4611351262607349204 -325, 4608656666931918232 -326, 4607814222059811944 -327, 4610377735718844205 -328, 4609693488663627404 -329, 4607234605916181353 -330, 4610438458653690136 -331, 4607691881688829838 -332, 4610084067104393530 -333, 4610193058189981242 -334, 4610500065590109969 -335, 4608182288567589802 -336, 4610884979206264676 -337, 4607934930963198287 -338, 4608198333740812601 -339, 4611615912551444803 -340, 4611091273781746311 -341, 4609878217869378267 -342, 4610329799427547900 -343, 4608946066069950044 -344, 4610517372931467061 -345, 4610173879547218394 -346, 4610768143539619524 -347, 4608251912463490886 -348, 4609138858501301814 -349, 4609537774087558923 -350, 4607501599203475779 -351, 4608820206286486654 -352, 4607594549608867563 -353, 4608928529430502872 -354, 4610326793501581341 -355, 4609216901643916714 -356, 4609921023396761286 -357, 4610188250845345370 -358, 4609056567531193554 -359, 4608042356944953893 -360, 4611153374110275273 -361, 4607652688871602388 -362, 4607736758450185452 -363, 4607772815382776660 -364, 4610793989334300613 -365, 4610810029813744832 -366, 4608713713202824549 -367, 4610555523666319407 -368, 4608933966316349782 -369, 4610847233909664040 -370, 4610569003709254271 -371, 4610141934611190870 -372, 4609800637427386711 -373, 4609531911954538534 -374, 4610018946619778104 -375, 4607563033735657544 -376, 4609466294634090519 -377, 4609110904485970900 -378, 4608802716203741548 -379, 4611231193234792818 -380, 4609853965624850005 -381, 4607407678664700238 -382, 4611560957363283790 -383, 4607258843130776963 -384, 4607438437753792222 -385, 4610880518315386981 -386, 4608724997072138032 -387, 4607896367882266335 -388, 4609466683623316620 -389, 4609649679136642775 -390, 4607572059242669390 -391, 4610690224087953221 -392, 4607212888873300995 -393, 4610115548532567091 -394, 4611204182849533970 -395, 4611480154563209673 -396, 4607313745181304733 -397, 4609677304468142434 -398, 4608230866091821000 -399, 4607916785319391722 -400, 4607735989143160304 -401, 4608364795273033367 -402, 4608202139927885958 -403, 4608897400704372931 -404, 4611267249785141575 -405, 4609988674862878902 -406, 4607825900064550736 -407, 4611018040541037989 -408, 4608438772151688632 -409, 4610422591938237999 -410, 4607217184553988938 -411, 4607633087503746743 -412, 4609394147749351901 -413, 4608101641384193571 -414, 4609733515509206078 -415, 4611489547250433971 -416, 4607834589624331833 -417, 4611349716992792673 -418, 4609707846875238752 -419, 4607311797705362203 -420, 4608945328148355588 -421, 4611273525690510581 -422, 4611458884537996759 -423, 4607997755969685936 -424, 4609048489714323017 -425, 4610334128017869552 -426, 4607485869716832613 -427, 4607547499540098372 -428, 4611447798198333473 -429, 4607207442813565439 -430, 4611108178646490883 -431, 4609758124675924332 -432, 4610269457948568827 -433, 4607360068671694963 -434, 4607781179483110631 -435, 4610840076859630697 -436, 4609605188868326206 -437, 4610833404575495679 -438, 4609202151986229830 -439, 4607653465598307819 -440, 4610341806509732173 -441, 4608937637268370608 -442, 4608846981481205936 -443, 4609890399657918800 -444, 4607475810914216914 -445, 4610779510882657410 -446, 4607200291019787105 -447, 4608763897810030884 -448, 4611030953084521579 -449, 4610608205209840707 -450, 4609901665329352338 -451, 4608229933322773774 -452, 4608306405922059711 -453, 4609402784224466904 -454, 4607797912916831810 -455, 4609320676286567523 -456, 4611203509963612873 -457, 4609443449463211381 -458, 4611201121136708490 -459, 4607891679344035909 -460, 4609295647591940857 -461, 4608699650823090334 -462, 4610113773137160513 -463, 4609644998840868353 -464, 4607236971413190205 -465, 4610986387001985169 -466, 4607686165213831157 -467, 4608006708913412573 -468, 4611617607231087789 -469, 4607950605030537282 -470, 4611312308422726037 -471, 4609920921889730694 -472, 4611272051294701454 -473, 4610732866915233164 -474, 4611475736494024667 -475, 4609129855793761412 -476, 4610896503566695638 -477, 4608983293576256239 -478, 4611337113271775442 -479, 4607264202049306366 -480, 4609273459645222412 -481, 4607686257312802596 -482, 4610552669683473434 -483, 4609573159080816112 -484, 4610109994193793014 -485, 4609104807624348930 -486, 4609056640876615682 -487, 4611233171931551808 -488, 4610700243077601839 -489, 4609689839939656894 -490, 4608154258714850667 -491, 4611519937102265713 -492, 4608524210713510379 -493, 4609408429794931452 -494, 4608727835041307081 -495, 4608363974471195432 -496, 4611053981101408157 -497, 4611244348235020563 -498, 4611215359362792075 -499, 4611323939601701219 -500, 4607339198007393537 -501, 4611192785515763411 -502, 4609520870364372480 -503, 4610305448099707859 -504, 4607627137213702268 -505, 4609512376112901200 -506, 4607188668249670063 -507, 4611507107596430103 -508, 4611290552034620332 -509, 4610948015281142465 -510, 4610082188797301672 -511, 4611154579920165202 -512, 4607910614898084038 -513, 4609111687709912685 -514, 4607756890586988655 -515, 4611478346930052063 -516, 4610271854072480776 -517, 4607666773584055448 -518, 4611269065667018778 -519, 4607229932372594880 -520, 4609361761863029782 -521, 4610810902409829664 -522, 4608310590726885309 -523, 4611549741777094242 -524, 4608905382237807476 -525, 4607539324166606283 -526, 4611302527859497090 -527, 4607673514510851852 -528, 4610239139758062881 -529, 4608296614307074920 -530, 4611131538327332418 -531, 4610491790884660304 -532, 4608012090568842826 -533, 4611145939579689859 -534, 4611569174305843109 -535, 4607548241749347055 -536, 4611302507266314629 -537, 4607334076415859573 -538, 4610759794541675536 -539, 4611562195466283509 -540, 4608064277646826273 -541, 4611362206697199696 -542, 4611267027417975453 -543, 4609817290222129321 -544, 4610075404291128380 -545, 4609555606129743990 -546, 4607220569899493231 -547, 4611584841957177930 -548, 4609037839026191075 -549, 4611594336803497113 -550, 4607225960438616513 -551, 4609362154617705500 -552, 4609887291423254556 -553, 4608541390551696577 -554, 4608696812349818364 -555, 4608371224718817057 -556, 4610715234165102256 -557, 4607906422122850842 -558, 4610831254800690212 -559, 4607810400373332275 -560, 4608705747590604299 -561, 4608938946760670556 -562, 4610310158116436046 -563, 4610355131502528018 -564, 4609768625905121586 -565, 4610143261296345738 -566, 4611431373682787281 -567, 4608146686998001641 -568, 4609198539721817636 -569, 4608916158230506393 -570, 4607654288747635129 -571, 4611682519183492769 -572, 4607197631212679817 -573, 4607299807028695407 -574, 4609116180622479613 -575, 4611019095836572557 -576, 4608581189094026112 -577, 4607488328508280547 -578, 4608587490233232612 -579, 4607245708447615950 -580, 4607189799494915135 -581, 4609348574263949313 -582, 4608021918670812153 -583, 4608172706554967110 -584, 4608811025395016288 -585, 4609364751750743520 -586, 4607844470980185823 -587, 4609405096277516268 -588, 4607748139765213490 -589, 4608512257043070004 -590, 4609962195184017357 -591, 4608461665680660962 -592, 4611127630212845842 -593, 4609686172238940069 -594, 4608777755231651430 -595, 4608284543534209439 -596, 4610868067515254496 -597, 4611535716997037852 -598, 4611319738221220860 -599, 4608658969391651641 -600, 4609452813595548756 -601, 4610236109831493974 -602, 4609938178451088584 -603, 4610331640367617101 -604, 4610901433958649983 -605, 4609766058585980491 -606, 4609222434831315585 -607, 4609778306904942608 -608, 4609448207660443683 -609, 4611299794046339746 -610, 4607801595505703392 -611, 4609594326292439532 -612, 4607668862605395543 -613, 4608245023900457864 -614, 4610578512588843180 -615, 4608185699959219467 -616, 4610904181340375013 -617, 4610647304739305074 -618, 4609795287579987586 -619, 4607960349041110093 -620, 4607703003215776639 -621, 4609403905570407605 -622, 4611233143041131400 -623, 4610530479829073842 -624, 4610679919769197229 -625, 4611448708224350289 -626, 4611445633822299312 -627, 4610496480556319861 -628, 4609555553457224207 -629, 4607626163577357218 -630, 4608595404165123581 -631, 4610510352711119715 -632, 4610203134139830798 -633, 4607550008954478579 -634, 4611603434572420257 -635, 4609780364056746558 -636, 4607295948877799964 -637, 4609867047995237092 -638, 4607936708021896797 -639, 4608897965423418533 -640, 4611287469240086203 -641, 4608515945123070881 -642, 4609851530250371283 -643, 4607577382199018499 -644, 4607744147814966969 -645, 4607260472041943130 -646, 4610683962948666275 -647, 4609625943316701593 -648, 4607251851603159602 -649, 4608016163551470839 -650, 4607202891515091580 -651, 4609099272171658208 -652, 4608510662830783836 -653, 4607744672536335386 -654, 4608142194450948613 -655, 4609476103099505412 -656, 4611399217441119768 -657, 4611495773005281088 -658, 4608815211248586470 -659, 4607337589064315457 -660, 4611394644152964336 -661, 4610812001439064700 -662, 4610702350009793284 -663, 4611075442411386625 -664, 4611077060876180663 -665, 4608164209437610624 -666, 4611368259599962784 -667, 4608333197470863467 -668, 4607183015995911227 -669, 4607199710185468635 -670, 4609413972037912933 -671, 4609234714230829818 -672, 4607739028685645905 -673, 4608232319438231981 -674, 4609333542787352994 -675, 4607657722219109388 -676, 4609193924059916664 -677, 4611141187805060655 -678, 4611068281150742947 -679, 4610549552759132313 -680, 4610085533805630329 -681, 4607232810679281805 -682, 4608493447592041083 -683, 4607355443052807819 -684, 4608410340438808883 -685, 4610315775824782427 -686, 4610312241247357403 -687, 4611287815156776852 -688, 4608076401857758978 -689, 4607457081882300105 -690, 4610908420357480199 -691, 4609797527119137644 -692, 4607351051017728429 -693, 4607618982820305008 -694, 4609846699151054310 -695, 4609389871379854176 -696, 4611243148153910479 -697, 4609270449294231868 -698, 4610832482336321517 -699, 4608101914557495685 -700, 4609128450704503077 -701, 4607351438344234793 -702, 4610010340063776057 -703, 4608461610523881117 -704, 4607869099658377415 -705, 4611211613048598168 -706, 4611196065771110369 -707, 4610515053922650643 -708, 4610096469861694516 -709, 4610477093507778048 -710, 4611547661480689243 -711, 4608438911039690892 -712, 4611311311815318674 -713, 4609279386396407118 -714, 4608222142760880731 -715, 4611613394716251191 -716, 4607603661150022989 -717, 4610135239835120022 -718, 4610929039427992532 -719, 4610757208246529003 -720, 4610920496514785256 -721, 4607326205191641070 -722, 4607938491595237155 -723, 4608585902537439220 -724, 4609326104534891368 -725, 4609325776820376036 -726, 4609693740995539995 -727, 4611329366056096595 -728, 4609303022615335557 -729, 4611512548552170265 -730, 4610404528899365728 -731, 4608023620660481005 -732, 4609431135637339890 -733, 4610767321626117704 -734, 4611106580332635792 -735, 4607433026987401919 -736, 4609580917376189588 -737, 4608816125719706388 -738, 4608380327649573838 -739, 4608700977565012592 -740, 4609148128564608995 -741, 4609631585490496912 -742, 4610745913090661333 -743, 4607498234984630394 -744, 4608367220496728902 -745, 4608365876885021447 -746, 4611537321062599251 -747, 4611238252705917535 -748, 4607525503355262497 -749, 4610601812175940986 -750, 4610145907668011789 -751, 4610384184669464682 -752, 4610699305276533889 -753, 4611440399153628650 -754, 4607963045023571960 -755, 4611498554915678298 -756, 4609015832347581911 -757, 4610795942139040060 -758, 4608894432143218464 -759, 4609704019108678046 -760, 4608168143636007672 -761, 4609566697927636482 -762, 4608690694207868944 -763, 4607746195488024521 -764, 4608350743731006452 -765, 4608442252024570087 -766, 4608428784099249674 -767, 4608941009071857822 -768, 4609298165329524240 -769, 4610447927377989769 -770, 4608304643580688447 -771, 4611265394576506233 -772, 4611210499769545678 -773, 4610114198739241967 -774, 4610653279632780678 -775, 4609515286518383576 -776, 4607984314013723903 -777, 4611541983726033367 -778, 4611393756437132236 -779, 4608968117844197920 -780, 4609367443784351367 -781, 4609488775108334110 -782, 4607529648757616057 -783, 4610676930934349350 -784, 4607750265025461672 -785, 4610373465791644318 -786, 4609305678766837551 -787, 4608947449753189724 -788, 4610366767677719066 -789, 4610439177886004542 -790, 4611242968978180676 -791, 4609370292455902521 -792, 4607754584885122450 -793, 4611224375496789735 -794, 4608921239858925416 -795, 4609513753577022933 -796, 4608075523570985167 -797, 4608608957047081948 -798, 4611273688846153770 -799, 4608394757574873003 -800, 4610377036529664140 -801, 4608600356910393592 -802, 4609667431524003711 -803, 4608601585637259149 -804, 4611533564639785432 -805, 4607510309835958191 -806, 4609651505654903275 -807, 4608166496451053374 -808, 4609515171183335141 -809, 4609776525693204395 -810, 4607696284598399608 -811, 4608607508956363891 -812, 4609695267960623947 -813, 4607576367302408137 -814, 4608741052307396862 -815, 4611095472713646530 -816, 4610161900255157770 -817, 4609145054582502965 -818, 4607410140376051944 -819, 4608126518935915215 -820, 4608269617716261203 -821, 4609477491264110038 -822, 4607463147955504958 -823, 4608999294660391637 -824, 4608694924732427850 -825, 4611156031005634796 -826, 4608453663346634965 -827, 4611380857524502488 -828, 4611362793875369801 -829, 4611632478058955853 -830, 4609434664425350531 -831, 4607606564530411276 -832, 4607391976443208678 -833, 4607762558563019180 -834, 4608554249145639939 -835, 4607806692993216225 -836, 4609510831152869655 -837, 4608164624489904634 -838, 4608455009317767175 -839, 4607280108540066925 -840, 4610080527249430824 -841, 4608840198094196329 -842, 4608916984669714190 -843, 4609771655387294402 -844, 4611351501375292078 -845, 4610356649846014183 -846, 4609861702465798084 -847, 4609335612683847594 -848, 4608963836668425606 -849, 4611448716653608808 -850, 4611618237088472583 -851, 4607650248665393412 -852, 4609477068480641193 -853, 4611408250260317487 -854, 4607799702152927524 -855, 4608984567553844241 -856, 4608966215304179278 -857, 4607599007502108199 -858, 4611197470586031919 -859, 4607738821906038713 -860, 4610174343711771016 -861, 4609411396159113704 -862, 4610528341790372072 -863, 4610621185894682737 -864, 4611164850264296206 -865, 4607500722733965482 -866, 4608747074062289526 -867, 4609587390330409056 -868, 4608013778287410191 -869, 4609438917309909895 -870, 4611359511257377419 -871, 4611161903145694224 -872, 4609908825458581349 -873, 4609974364203149964 -874, 4608056454984693014 -875, 4607485841556578933 -876, 4607689636557505920 -877, 4607225026099434704 -878, 4608918180817633858 -879, 4607389899324828547 -880, 4609528891100730648 -881, 4609347474444270651 -882, 4610604256334495724 -883, 4607717534965049292 -884, 4607416814400338843 -885, 4609568365470566179 -886, 4609490489177847460 -887, 4609959177607409888 -888, 4608249931585238164 -889, 4608374394377617948 -890, 4609359264913370700 -891, 4610789661266619275 -892, 4607881230950036624 -893, 4608163786355022310 -894, 4608830462616805753 -895, 4609531962596587483 -896, 4610555549279318514 -897, 4610008765530009024 -898, 4609509527271380682 -899, 4608445793235798406 -900, 4608895922045956617 -901, 4611496044586314375 -902, 4609855938206283389 -903, 4610584515201059904 -904, 4608185787632733541 -905, 4609925998848840417 -906, 4609746471060930910 -907, 4608322802169846228 -908, 4611668609080045996 -909, 4610918346613262546 -910, 4607487495258046096 -911, 4610091716845110326 -912, 4611060358092721143 -913, 4610617258787020006 -914, 4607968616643301279 -915, 4607216453440634248 -916, 4607683961727519867 -917, 4610192441377241514 -918, 4611340079503032986 -919, 4607737818907905432 -920, 4608040273267030617 -921, 4609075420363483026 -922, 4610025209467938351 -923, 4608669897432477872 -924, 4608611467736828996 -925, 4610963769428151250 -926, 4611230933830803123 -927, 4609892039139108424 -928, 4608322827835753071 -929, 4608048405227745232 -930, 4611336950552458383 -931, 4609990562309176924 -932, 4608539034786829718 -933, 4609715165139430182 -934, 4608805499266985258 -935, 4607728070995330274 -936, 4608780877909747196 -937, 4607569412899178661 -938, 4607268788340312926 -939, 4608510300788384404 -940, 4609202712081615466 -941, 4609583146251705462 -942, 4610981698790205568 -943, 4607925526524476327 -944, 4607793604049723576 -945, 4610915422726587727 -946, 4607690153123448022 -947, 4610957908781080072 -948, 4609688199240625930 -949, 4609195637372175715 -950, 4607455193109906152 -951, 4607614996131060051 -952, 4607821739007708428 -953, 4611432473374206640 -954, 4609331676904204846 -955, 4607810059335115947 -956, 4611077768988065423 -957, 4611510065592294343 -958, 4608753144000455824 -959, 4610618261702230984 -960, 4609478955747078670 -961, 4608250680894683660 -962, 4611056070648131063 -963, 4607756102257795122 -964, 4610370838903190290 -965, 4611412764774525666 -966, 4609100881666906368 -967, 4610119679924928715 -968, 4609686905253473358 -969, 4608711239949443984 -970, 4607839187561408271 -971, 4609413459785445169 -972, 4609209994304368132 -973, 4609118705149046785 -974, 4607291458128247233 -975, 4611161411572838996 -976, 4610256654040673624 -977, 4608882855825268963 -978, 4609049328169514708 -979, 4609651814435298462 -980, 4609304465056789103 -981, 4607682759379096849 -982, 4609946393233090661 -983, 4609946524554590950 -984, 4610880973039636436 -985, 4607217356662986962 -986, 4608230276563898969 -987, 4610664933477117472 -988, 4607562227262100270 -989, 4610133121835039282 -990, 4609071027656845298 -991, 4610444138469204749 -992, 4607185460608050805 -993, 4609895459462574326 -994, 4610016322490782234 -995, 4609380549113996677 -996, 4609371524623560982 -997, 4610108153607631096 -998, 4607489006177078361 -999, 4607632190656691768 diff --git a/numpy/random/tests/data/mt19937-testset-1.csv b/numpy/random/tests/data/mt19937-testset-1.csv index 3d4995840..b97bfa66f 100644 --- a/numpy/random/tests/data/mt19937-testset-1.csv +++ b/numpy/random/tests/data/mt19937-testset-1.csv @@ -1,1001 +1,1001 @@ seed, 0xdeadbeaf -0, 0xca6b2fb1 -1, 0x3fa2a974 -2, 0xc12788fe -3, 0x27c9b64d -4, 0xabea28ce -5, 0x540ac30f -6, 0xb239d7be -7, 0x440e5156 -8, 0xc65c133c -9, 0x7333c5fa -10, 0x8292807d -11, 0x459bdab6 -12, 0x4f9f1306 -13, 0xe261f5f7 -14, 0xdb8b69 -15, 0xdf65ed00 -16, 0x5fc8bb71 -17, 0x35a46ece -18, 0x6344e7ce -19, 0xd4c1c08b -20, 0xb88c9bf1 -21, 0x72292bb3 -22, 0xbfb6a51f -23, 0xbb2ab6f -24, 0x9378d4f3 -25, 0x85bc696 -26, 0x1fa92b2a -27, 0x5816122 -28, 0x54e84469 -29, 0x8cdbea8c -30, 0xefa62749 -31, 0x7b13a32e -32, 0xe0c88cc3 -33, 0x238fba9f -34, 0xbee28cb4 -35, 0xc4a2bbe1 -36, 0x8ebb893f -37, 0x53333007 -38, 0x42c59297 -39, 0x507542da -40, 0x4c89a1d9 -41, 0x28cd06c0 -42, 0x63b1b8ff -43, 0x890947ca -44, 0x73996302 -45, 0x7b9afff -46, 0x3d6cf3a2 -47, 0x2d8cf12c -48, 0x1915a047 -49, 0x2e9f42a2 -50, 0xe1d7ea8 -51, 0x8ce9eb49 -52, 0x452706b0 -53, 0x1495dda9 -54, 0x62339095 -55, 0x1fb22d23 -56, 0x6f68cf26 -57, 0x905f8cc4 -58, 0xde25d38f -59, 0xf4f3efa2 -60, 0x8b60b406 -61, 0xecf051fb -62, 0x287a9210 -63, 0x96e96fb -64, 0xb60dd795 -65, 0x305f4bb5 -66, 0xfe838ef2 -67, 0x40671f78 -68, 0xa1cfdcb3 -69, 0xa06c0c2d -70, 0xbcbce0a0 -71, 0x6485453c -72, 0xd6d9e7b5 -73, 0xeac233ef -74, 0xb2a276b4 -75, 0xb5b97ad1 -76, 0x87bc49da -77, 0x1036f82b -78, 0x1e6fc3df -79, 0x87afcd40 -80, 0xe827dc29 -81, 0x16d11b25 -82, 0xe0c549ba -83, 0x427b8a -84, 0x346fa564 -85, 0x5449ea5c -86, 0x511199c6 -87, 0x5ccf41ab -88, 0x9a8a0bbc -89, 0x77f12026 -90, 0x4c9b8ad3 -91, 0xead800a7 -92, 0x80c8a86b -93, 0x3c84c630 -94, 0x19a6c752 -95, 0xc9187482 -96, 0x7eb43f2f -97, 0x89f4fdeb -98, 0x14db06ce -99, 0xcbdc6e25 -100, 0x43ac775 -101, 0xbd730a54 -102, 0xf722dcaa -103, 0x41768d48 -104, 0x20992130 -105, 0xe9973805 -106, 0x61d15976 -107, 0x94c478c8 -108, 0x2b743992 -109, 0xf6fff8fa -110, 0xaac859b1 -111, 0xf03d49ec -112, 0x620dc61 -113, 0x4ce7143c -114, 0x6b85f7cc -115, 0x5fa31164 -116, 0xa284fa6a -117, 0x8714fcfe -118, 0x5d7713ff -119, 0x423c4261 -120, 0x78897296 -121, 0x84281814 -122, 0xec3f65c5 -123, 0xa3922399 -124, 0x7465ebf7 -125, 0x5e794eae -126, 0xaca415d0 -127, 0x277cf6ea -128, 0x248357fa -129, 0xefabaa92 -130, 0x57982e83 -131, 0xb1d764c -132, 0x7c945b58 -133, 0xfd684cf6 -134, 0xeac7a06d -135, 0x367835e0 -136, 0x1a5d6883 -137, 0xf900c7da -138, 0xe3571db7 -139, 0x9d6834db -140, 0xbba4a672 -141, 0x4cd219a3 -142, 0x58c4197e -143, 0x4b037cf4 -144, 0x357acf28 -145, 0x284d7c27 -146, 0x8d0c4569 -147, 0x6ed031f -148, 0xd43e8a5f -149, 0x9cef208b -150, 0x189ea68b -151, 0xf7dad179 -152, 0x5e562f3d -153, 0x322b1e73 -154, 0x3a328762 -155, 0xc4078884 -156, 0x20798ff2 -157, 0xbcfbf409 -158, 0xeb6d471 -159, 0x8a0cba0d -160, 0x53726e18 -161, 0x22b38033 -162, 0xa321a604 -163, 0xf40c90a3 -164, 0x755bb1d3 -165, 0x2832a2a8 -166, 0xfffce275 -167, 0x3afdb520 -168, 0x98d8f18d -169, 0x7a4183b4 -170, 0x69a43d75 -171, 0xd631a4ef -172, 0x2aec3183 -173, 0x60767685 -174, 0x214e1dfd -175, 0x9f14f54d -176, 0xfde4f2bc -177, 0x60a7d47b -178, 0xeaece219 -179, 0xd634f4a0 -180, 0x80ad6fab -181, 0xbe1a53d2 -182, 0xf9a527a4 -183, 0xfdf0ac75 -184, 0x924f54f -185, 0xf99626ee -186, 0xcf7140d3 -187, 0xc8169d5d -188, 0xeb43d58d -189, 0x4b44ace -190, 0xb44ecabe -191, 0x613d8bdf -192, 0x65e3c025 -193, 0x2e324718 -194, 0x9dba63bc -195, 0x8e01c6d2 -196, 0x34800136 -197, 0xc2b01a3 -198, 0x59a182fa -199, 0xf834c79f -200, 0x20e41a8d -201, 0x94079cae -202, 0xcafb9877 -203, 0x87a4b067 -204, 0xa89f22a7 -205, 0xa2932911 -206, 0x580f0787 -207, 0xe4ca48c5 -208, 0x65c9677a -209, 0x37a7ae16 -210, 0xb978422c -211, 0x565bef70 -212, 0xbd7e6dc4 -213, 0xe4ebe924 -214, 0x4a789e96 -215, 0x99520b24 -216, 0xebad792e -217, 0x5d28630a -218, 0x4b33a5bb -219, 0x5a5dedda -220, 0x7ce8d5e -221, 0xa6cdd3a9 -222, 0xb2bcef6a -223, 0x13a8db8c -224, 0x61791eb4 -225, 0xb71e2381 -226, 0xb80dbbcf -227, 0x4d82b92f -228, 0x4f655a9b -229, 0x7748a0a9 -230, 0x508f7c48 -231, 0xd0713d9b -232, 0x3f48b380 -233, 0xd71d7c16 -234, 0x1f8ccd28 -235, 0xebcb920 -236, 0x2f5f4540 -237, 0xb9f69275 -238, 0x6dd968b4 -239, 0x417759f7 -240, 0x7a73257d -241, 0x154ecc84 -242, 0x12f280ce -243, 0x8391eb4b -244, 0xd76d638d -245, 0xf6c44241 -246, 0x8b137d48 -247, 0x71fb30ef -248, 0xe738bba6 -249, 0x28f9bbac -250, 0x46b0dcfe -251, 0x933856e8 -252, 0xad21fdbb -253, 0x5706c9d -254, 0x254b3ce -255, 0xc95fa489 -256, 0x4cc8fd61 -257, 0x9f6d990f -258, 0x3ed84328 -259, 0xfb1251c7 -260, 0x1da78081 -261, 0x2592d895 -262, 0x5c8396cf -263, 0x47fa1df -264, 0x94526768 -265, 0xa41e6fb4 -266, 0x97d47f9a -267, 0x35a56c1f -268, 0xc7af497e -269, 0x906dbbfc -270, 0x861e3287 -271, 0xe91e3387 -272, 0x5b08570d -273, 0x69574f7c -274, 0x32ccf53 -275, 0xf6a6bee3 -276, 0x373d970f -277, 0xaa780838 -278, 0x309d4cc9 -279, 0x58ec672f -280, 0x47cb0305 -281, 0xd4809ac9 -282, 0x138a774d -283, 0x82fa852b -284, 0x53bbd107 -285, 0x1512b55d -286, 0x6d53592c -287, 0x92b7ab58 -288, 0x6654f430 -289, 0xe11837f3 -290, 0x4538410d -291, 0xa2101ede -292, 0x93c2435e -293, 0x5e91b4e4 -294, 0x8f16260 -295, 0x3e64fed1 -296, 0x267fc0f9 -297, 0x3d3ecd37 -298, 0xc4352f2d -299, 0x2170164d -300, 0x3fc50df -301, 0x2c9313dc -302, 0xe69e1950 -303, 0xf834dec1 -304, 0x598d6cb1 -305, 0x79b36360 -306, 0x5d49f11a -307, 0x2ab7af4b -308, 0xf80cc125 -309, 0x824e4b68 -310, 0x36800a00 -311, 0x39186f93 -312, 0x84e177fd -313, 0xe6a40078 -314, 0x86f11e7a -315, 0xa1e79fe1 -316, 0x19fc66f9 -317, 0xb3a2dfb4 -318, 0x88e8091f -319, 0x37dce87d -320, 0xd54b5bc1 -321, 0x323e0c83 -322, 0x1c3d9868 -323, 0x14096d96 -324, 0xe5fbfe55 -325, 0x330004c2 -326, 0x8991d8f -327, 0x934ba7db -328, 0x828aea71 -329, 0xaa955f4d -330, 0xb9097b03 -331, 0xdb924c7c -332, 0xc0fd3c77 -333, 0x6571bc9e -334, 0x3f89462f -335, 0x30ec5ce9 -336, 0xd5083782 -337, 0x68f7c4cc -338, 0x4fd9cbe6 -339, 0xbcf08518 -340, 0xeebb9016 -341, 0xadaf6dbe -342, 0x5aadbf38 -343, 0x5b52ba6c -344, 0x6f31bd06 -345, 0x76b03446 -346, 0xec383171 -347, 0xe5547138 -348, 0x8c87998a -349, 0x1c166e4 -350, 0xd73c5950 -351, 0xa257e0fd -352, 0x9f042772 -353, 0x7b26801e -354, 0x16bce15d -355, 0xb1b3b033 -356, 0x12fc256e -357, 0x8426ed90 -358, 0x16dc30d0 -359, 0x3e003f97 -360, 0x22bf7feb -361, 0x12941766 -362, 0x4da7a3e3 -363, 0x4e4e9900 -364, 0xc2a6efe8 -365, 0x16522570 -366, 0xc49fd435 -367, 0xfc8137a5 -368, 0xe595897e -369, 0xf9dcef1b -370, 0xabdef12a -371, 0x4ebe25f0 -372, 0x86f58fdd -373, 0x46cac45a -374, 0xe430ec3a -375, 0xfd6e6a04 -376, 0xeacffe64 -377, 0xe026aa7f -378, 0xdaf0b65b -379, 0xc0b72e68 -380, 0x63c1dd42 -381, 0x18ec01ec -382, 0x18678c16 -383, 0x2cbbbcc5 -384, 0x457872b4 -385, 0x937347d4 -386, 0x6bdf0813 -387, 0xc6e572de -388, 0x9e0c6f94 -389, 0x45225c3b -390, 0x6fe099ce -391, 0x73b82a0f -392, 0x27203a8e -393, 0xc402180c -394, 0x3b26ea4d -395, 0x852b4444 -396, 0xa6b9a99e -397, 0xecb23332 -398, 0x27fff68a -399, 0x234a59a3 -400, 0xd8a13a6c -401, 0x9e4e99a -402, 0xd4500a99 -403, 0x97822d54 -404, 0x1747949e -405, 0x79b82e14 -406, 0xe907796e -407, 0x2b4bd2ce -408, 0x242b9adf -409, 0xc6979922 -410, 0xa122e4c9 -411, 0x45289a38 -412, 0xa123f35d -413, 0x4464993d -414, 0x89a70091 -415, 0x29f6e129 -416, 0xa2bc559b -417, 0x7b9d89c9 -418, 0x74969534 -419, 0x97fdef8c -420, 0xff09ac83 -421, 0x8a8e913f -422, 0xcfb04bba -423, 0x4ae8ce80 -424, 0x5113f1b6 -425, 0x5e8cfda0 -426, 0x1c3b5e35 -427, 0xeab9562c -428, 0x18a11b6e -429, 0x2f8a0ac1 -430, 0xd564482f -431, 0x772b6c44 -432, 0x27937ce5 -433, 0x202aa930 -434, 0x1a6fb83a -435, 0x3514c661 -436, 0x8c6d26b2 -437, 0x62ce4154 -438, 0x86a82cf2 -439, 0x8a73e17f -440, 0xd7798e07 -441, 0xbd83717d -442, 0x886b880b -443, 0xf7ff35c6 -444, 0x3357dc52 -445, 0x3266f4f8 -446, 0x384ad1fb -447, 0xb34e4e06 -448, 0xfbe250d8 -449, 0xd3d37e83 -450, 0x862b1b12 -451, 0x839a3f7 -452, 0xb22afe3a -453, 0x851d430d -454, 0x514d7503 -455, 0xf8bb3e8 -456, 0x4acdb849 -457, 0xcdd0ace0 -458, 0x6f6b6638 -459, 0x37a6e0ef -460, 0x3e55d305 -461, 0x9ac94ea4 -462, 0x34d82789 -463, 0x1e50a54b -464, 0x12eca710 -465, 0x7813b899 -466, 0x7d56587 -467, 0xa0daf18d -468, 0x461f0a88 -469, 0xc38a68a8 -470, 0xb61e025f -471, 0x9c27611e -472, 0x21a055c9 -473, 0x5f2545d9 -474, 0x981e0107 -475, 0x3f651b42 -476, 0x72b8aece -477, 0x84b09757 -478, 0x3ce97c5 -479, 0x4ebc1ac2 -480, 0x395c23d -481, 0x7c87b77d -482, 0xa5a5b68 -483, 0x5b8a13a8 -484, 0xe5e6f965 -485, 0xf47c69d0 -486, 0x8a7bd38a -487, 0x59a94533 -488, 0xb506fe84 -489, 0x8d96d007 -490, 0x4052151e -491, 0xcaf48e44 -492, 0x2889548b -493, 0x4262fe1e -494, 0x93e43134 -495, 0xb585fdf2 -496, 0x3339e66a -497, 0xe530ee9e -498, 0xa2987fae -499, 0x977205c -500, 0xbfece4e0 -501, 0xf9c925bb -502, 0x999b687b -503, 0x35a166ed -504, 0xe9eba709 -505, 0x40827685 -506, 0xa301a157 -507, 0x18f6e790 -508, 0x8148659f -509, 0x1896e693 -510, 0x90cc1b28 -511, 0x4189c62e -512, 0xda765fdc -513, 0xd219eb8f -514, 0xfac2dd2e -515, 0xef5a48f5 -516, 0xe16f0fe -517, 0x341cba94 -518, 0x69d6e865 -519, 0xaa36eeb8 -520, 0xcfb99f18 -521, 0x8bb61595 -522, 0xa8c2123b -523, 0x3c9310e8 -524, 0x1ee33b4 -525, 0x70c4ca87 -526, 0x1fe3babc -527, 0x7e1a697d -528, 0xf950c974 -529, 0x62c4350f -530, 0xdf4b4b4c -531, 0xb3c8c87f -532, 0xf406b1b9 -533, 0x5b53d2a3 -534, 0x283606bf -535, 0xdf1dc8a8 -536, 0xdaf05fe -537, 0x6bd95a2c -538, 0xa40ffa04 -539, 0xc59ffac5 -540, 0x333bbaa2 -541, 0xa2e970e9 -542, 0x8686876e -543, 0xe7eff30f -544, 0xce8349c5 -545, 0xfb32eef3 -546, 0x692e678 -547, 0xb22eef64 -548, 0x32309c10 -549, 0xd28593bc -550, 0x1055cd1a -551, 0xeec5e7a4 -552, 0x9b15bd7f -553, 0x62068ffb -554, 0x35d431e6 -555, 0x6f795d99 -556, 0x5a583e83 -557, 0x940f9322 -558, 0xbb6392db -559, 0x9133e1be -560, 0x4ba22917 -561, 0x3d98a18d -562, 0xd7aa3d1a -563, 0xdd912a6 -564, 0x99265a2b -565, 0x7d2e4e3f -566, 0x9cfc42f3 -567, 0xad2be67e -568, 0xed7ef841 -569, 0xb1d3b8b4 -570, 0xa56b36f8 -571, 0xe2ef74e0 -572, 0xdf0ef0d9 -573, 0xfd944a1a -574, 0x8dbaa48 -575, 0x7842914 -576, 0x316243c2 -577, 0x2e4c5f54 -578, 0xb86e001a -579, 0x46546448 -580, 0x9643c3d6 -581, 0xbdf7d2da -582, 0xc4e703cb -583, 0x4a45fbad -584, 0xa6375deb -585, 0xa9fc789a -586, 0xc0d075d4 -587, 0xe1824e00 -588, 0xdb54581 -589, 0x645bd158 -590, 0x2044aaa9 -591, 0x706ab8db -592, 0x35151344 -593, 0x2ef15d18 -594, 0xf48d0690 -595, 0x5c23ba6c -596, 0x565c730e -597, 0xc8ed50ad -598, 0xbc6d554e -599, 0x37a911d2 -600, 0x865dc33b -601, 0xfb9ab637 -602, 0x453dcafe -603, 0x7889820c -604, 0xb9f6ef68 -605, 0x7815d4a0 -606, 0xe97080ad -607, 0xbbef816a -608, 0x52d9c2b8 -609, 0x15ea5696 -610, 0x3a83f72f -611, 0xa1378189 -612, 0x892d5668 -613, 0x919e54b4 -614, 0xdb28c6f5 -615, 0xdf6cdf84 -616, 0x8f8f8a52 -617, 0xb3ee2710 -618, 0x9ece78ae -619, 0xe60ffbb4 -620, 0x1e7646ac -621, 0x1682946d -622, 0xd4a252d0 -623, 0xcbc981de -624, 0x5261bf81 -625, 0xa33cd368 -626, 0x98e9e554 -627, 0xa14efd44 -628, 0xcd777d9 -629, 0x8ee578e5 -630, 0x169fcd30 -631, 0x46964c36 -632, 0x49415678 -633, 0xfbc239f3 -634, 0xe00071f4 -635, 0x5a4c1d76 -636, 0xa753cb6d -637, 0x6327b16e -638, 0xb38c5ebd -639, 0x8185adf5 -640, 0xb1cfdc44 -641, 0xaffdc601 -642, 0x46559995 -643, 0xf739bbda -644, 0x950a90f9 -645, 0x779bec0e -646, 0x55791e65 -647, 0xfd94fd72 -648, 0x982b57d6 -649, 0x935efae1 -650, 0x18707a87 -651, 0x5123add3 -652, 0x54b8a239 -653, 0xff5a40bd -654, 0x63ead20d -655, 0x125e8aa0 -656, 0xbae0eba5 -657, 0xc9238af1 -658, 0x3767fc3a -659, 0xc3df41b7 -660, 0xdc53148b -661, 0xd2fb97c5 -662, 0xf8c89afc -663, 0xbb6deecf -664, 0xbcc6ec6f -665, 0xc7931d3c -666, 0x9f40e3be -667, 0x4d966e4e -668, 0xf369918f -669, 0x43c3d8dd -670, 0x305248ca -671, 0xb6b52eab -672, 0x97aa1849 -673, 0x840729bf -674, 0x4cb6e57 -675, 0xa7d59069 -676, 0x1a9a8197 -677, 0xf584e7b5 -678, 0x699c6a70 -679, 0x189b83e8 -680, 0x49f4b09e -681, 0xe726ab1a -682, 0x243775c8 -683, 0x8220f49d -684, 0x6edba081 -685, 0x2fbd3b8a -686, 0x34818276 -687, 0x81bbd13c -688, 0xf30e9f84 -689, 0x2b75ac4b -690, 0xfe66b7ff -691, 0x178b6c29 -692, 0x89ff4e30 -693, 0xc047a72d -694, 0x87977310 -695, 0xa91bf888 -696, 0xf2abc0c6 -697, 0x8547f3ce -698, 0xe78699e9 -699, 0x7c715be7 -700, 0x715aec9c -701, 0x260708ea -702, 0x4bf72dba -703, 0x19134f34 -704, 0xcefe0ecc -705, 0xb74397aa -706, 0x8e48750 -707, 0xb4c2d35e -708, 0x76d81bcd -709, 0x9788da5d -710, 0x234182d6 -711, 0x7efb59e4 -712, 0x15656eb2 -713, 0x2b2ebf2c -714, 0x4d44ac09 -715, 0x57cb6312 -716, 0xe5facad4 -717, 0x6f2dda2 -718, 0x1ace7d61 -719, 0x703ca72e -720, 0x88481396 -721, 0x7235f4bc -722, 0x30921317 -723, 0xd0575405 -724, 0x7c96cf3a -725, 0xabf955c7 -726, 0x27ecd579 -727, 0xfc70f045 -728, 0x68a835b -729, 0x73bc67ba -730, 0x84fd3806 -731, 0x8e08d696 -732, 0x5454e052 -733, 0x1e2dd75d -734, 0xc7903278 -735, 0x50ddb207 -736, 0xcf7431a9 -737, 0x5e2db746 -738, 0x817e811c -739, 0x56c11bf -740, 0xe6f5e4e9 -741, 0x97816caf -742, 0x7abaa833 -743, 0x7d7d777e -744, 0x62d02361 -745, 0x162b687f -746, 0x1360b813 -747, 0xe1c25671 -748, 0x19cd787 -749, 0x9321cab6 -750, 0x799dc638 -751, 0x1b49aef0 -752, 0x6ebd59a5 -753, 0x173cdc79 -754, 0x77e4d187 -755, 0x21803577 -756, 0xa75154bc -757, 0xd92067f1 -758, 0xfcbbda1c -759, 0x713722ff -760, 0xb95dedf -761, 0x10c217fa -762, 0xb166163 -763, 0x39a49d38 -764, 0x4a5f52c6 -765, 0xba172c1 -766, 0x471eb536 -767, 0x9dec38e5 -768, 0x14d3b53 -769, 0x5c588a4c -770, 0xe1a85acc -771, 0x78a5baad -772, 0xd6f90a59 -773, 0xe8d371f7 -774, 0x931890ae -775, 0xea3e4b0e -776, 0xd63407ac -777, 0xf797c99d -778, 0x48da86e8 -779, 0xe23019c0 -780, 0xa70bebaa -781, 0xa49dde13 -782, 0x3f242449 -783, 0x1eddf689 -784, 0xad0e89a4 -785, 0x32e046dd -786, 0x572feee9 -787, 0xfe8cd35e -788, 0x361ade3f -789, 0x2781da1c -790, 0x7fe09627 -791, 0x9a81a896 -792, 0xb52dfbad -793, 0x862b12c8 -794, 0xd0dc9c3b -795, 0x410e82c1 -796, 0x20d95af3 -797, 0x17357938 -798, 0xd1f2e42a -799, 0x99efd6c3 -800, 0x2dae59f4 -801, 0x51702dba -802, 0xa020dc62 -803, 0xd71ebd9d -804, 0x9c498db6 -805, 0xc50017ae -806, 0x4f944ffc -807, 0xe9a8e62f -808, 0xac490f79 -809, 0xc816d8b0 -810, 0xf3770304 -811, 0x4ba63128 -812, 0x7f4be54f -813, 0xdcf19d03 -814, 0x589718c4 -815, 0xed7c3114 -816, 0x70e5d73d -817, 0xdce25620 -818, 0x411e12af -819, 0xd68dfd60 -820, 0xbd44f0e1 -821, 0xb2962c96 -822, 0x4c7fa632 -823, 0x85136387 -824, 0x41b232a4 -825, 0xdb9a8997 -826, 0xfcb5df1b -827, 0xa046c4 -828, 0x5a7e53d4 -829, 0xe214dfbf -830, 0xc0861c7d -831, 0x3087ed3 -832, 0xd70b7358 -833, 0x369a9dee -834, 0xb99e904c -835, 0x22052e4b -836, 0x9afd4d95 -837, 0xd9dbcec -838, 0x9c18c47a -839, 0x97caa173 -840, 0x6f124137 -841, 0x26db8abb -842, 0x2dfeba8f -843, 0xc9ebd4dd -844, 0x2bf6f89b -845, 0xec81549f -846, 0xee3f1ac2 -847, 0xa3bad22a -848, 0xb9597c71 -849, 0xe220adf -850, 0xa9fbfdb5 -851, 0x9d817858 -852, 0x5679190d -853, 0x216c47c0 -854, 0x6c1d0b13 -855, 0x401d2e42 -856, 0xf3ca424f -857, 0x2894625e -858, 0xa614fdd8 -859, 0xa11e427 -860, 0xbc937623 -861, 0xe684b934 -862, 0x33821e19 -863, 0xbfc008f9 -864, 0x11579cd9 -865, 0x9886df8f -866, 0x5889e2e8 -867, 0xefbba03b -868, 0x182e7d44 -869, 0x217f4e99 -870, 0x82623484 -871, 0x6bb6f662 -872, 0x49bb5fcf -873, 0xf7c8d1a9 -874, 0xea51c810 -875, 0x40ef965e -876, 0x24d4b1a3 -877, 0xe9266bbf -878, 0xfb5179a0 -879, 0x92d23fc -880, 0x8c646351 -881, 0x527608ec -882, 0xd215edf3 -883, 0x3434a6ad -884, 0x757e915e -885, 0x62ef706f -886, 0x467080bc -887, 0x2578c3b6 -888, 0xc308bc20 -889, 0x44fe744f -890, 0x50ea3915 -891, 0xeb3995d3 -892, 0xe5ee8390 -893, 0xb9c7a39f -894, 0x83ab2921 -895, 0xb194f017 -896, 0x17e00f01 -897, 0x54ca5220 -898, 0xa10e3a60 -899, 0x1426c5ca -900, 0xdd42073d -901, 0x6a7b3945 -902, 0xda2127d7 -903, 0x4b0dd400 -904, 0xd35134fd -905, 0xcfa033e8 -906, 0xcbf475f0 -907, 0xcdb92b39 -908, 0xde8c0c75 -909, 0x219d1cd7 -910, 0xd6398be -911, 0xa3eaac5f -912, 0x92898b14 -913, 0xf4c27fce -914, 0xd5f7cb82 -915, 0xc10ec953 -916, 0xa01d0f31 -917, 0xc794c9e4 -918, 0x54168123 -919, 0x723bcdf2 -920, 0x6cea1b -921, 0xdf18376a -922, 0x922a0845 -923, 0x8eda2a83 -924, 0x9b0608f -925, 0x472cbc78 -926, 0x7afdce6b -927, 0x1bfa7fdd -928, 0x5ada3d12 -929, 0x5cf41e17 -930, 0xc506060b -931, 0x7214c2ac -932, 0xc19ae321 -933, 0x9b031d30 -934, 0x4c7b88da -935, 0xd00e5d13 -936, 0xee6b59c4 -937, 0x79ddaf5b -938, 0x29cf931 -939, 0xc6fa4b96 -940, 0x874ab89b -941, 0x4abc046c -942, 0x366d693e -943, 0xd6a1758b -944, 0xd964eb41 -945, 0x7eabd20b -946, 0xf71f17ac -947, 0xdb5d8c06 -948, 0x54602ce1 -949, 0x786313f6 -950, 0xae4aea46 -951, 0xca92465b -952, 0x60047085 -953, 0x39f7dd56 -954, 0x9d1ff152 -955, 0xfdf62ba0 -956, 0xa15cf163 -957, 0xb953b33 -958, 0xc912dbb9 -959, 0x9e7f36f1 -960, 0x34c02ede -961, 0x6742f244 -962, 0xd586cf43 -963, 0xc2bf8b07 -964, 0x814f36b4 -965, 0xaef9cfbd -966, 0x1ec4b840 -967, 0x7aaaf552 -968, 0x5eab3290 -969, 0xc6f9bfdc -970, 0x7e43bf8e -971, 0x3c63bf8 -972, 0x4ce6e886 -973, 0x4b1e48ca -974, 0xff5bade3 -975, 0xdf72eca5 -976, 0x48e273a4 -977, 0x8b186129 -978, 0xcf6f6016 -979, 0x7c70ccf7 -980, 0xe82e54f8 -981, 0xcfdb9cfb -982, 0x884af787 -983, 0x839fb72d -984, 0x6f021358 -985, 0xbe27e737 -986, 0x12de7b8c -987, 0x946ce6c1 -988, 0xd95a0cee -989, 0x54adc084 -990, 0x6850d90e -991, 0x8e7e4a4a -992, 0x27e99d2c -993, 0xa966b606 -994, 0x6f9e586 -995, 0x141df137 -996, 0x80bdaf81 -997, 0xa1cd6dce -998, 0xecd7c0de -999, 0x44dc0c32 +0, 0xc816921f +1, 0xb3623c6d +2, 0x5fa391bb +3, 0x40178d9 +4, 0x7dcc9811 +5, 0x548eb8e6 +6, 0x92ba3125 +7, 0x65fde68d +8, 0x2f81ec95 +9, 0xbd94f7a2 +10, 0xdc4d9bcc +11, 0xa672bf13 +12, 0xb41113e +13, 0xec7e0066 +14, 0x50239372 +15, 0xd9d66b1d +16, 0xab72a161 +17, 0xddc2e29f +18, 0x7ea29ab4 +19, 0x80d141ba +20, 0xb1c7edf1 +21, 0x44d29203 +22, 0xe224d98 +23, 0x5b3e9d26 +24, 0x14fd567c +25, 0x27d98c96 +26, 0x838779fc +27, 0x92a138a +28, 0x5d08965b +29, 0x531e0ad6 +30, 0x984ee8f4 +31, 0x1ed78539 +32, 0x32bd6d8d +33, 0xc37c8516 +34, 0x9aef5c6b +35, 0x3aacd139 +36, 0xd96ed154 +37, 0x489cd1ed +38, 0x2cba4b3b +39, 0x76c6ae72 +40, 0x2dae02b9 +41, 0x52ac5fd6 +42, 0xc2b5e265 +43, 0x630e6a28 +44, 0x3f560d5d +45, 0x9315bdf3 +46, 0xf1055aba +47, 0x840e42c6 +48, 0xf2099c6b +49, 0x15ff7696 +50, 0x7948d146 +51, 0x97342961 +52, 0x7a7a21c +53, 0xc66f4fb1 +54, 0x23c4103e +55, 0xd7321f98 +56, 0xeb7efb75 +57, 0xe02490b5 +58, 0x2aa02de +59, 0x8bee0bf7 +60, 0xfc2da059 +61, 0xae835034 +62, 0x678f2075 +63, 0x6d03094b +64, 0x56455e05 +65, 0x18b32373 +66, 0x8ff0356b +67, 0x1fe442fb +68, 0x3f1ab6c3 +69, 0xb6fd21b +70, 0xfc310eb2 +71, 0xb19e9a4d +72, 0x17ddee72 +73, 0xfd534251 +74, 0x9e500564 +75, 0x9013a036 +76, 0xcf08f118 +77, 0x6b6d5969 +78, 0x3ccf1977 +79, 0x7cc11497 +80, 0x651c6ac9 +81, 0x4d6b104b +82, 0x9a28314e +83, 0x14c237be +84, 0x9cfc8d52 +85, 0x2947fad5 +86, 0xd71eff49 +87, 0x5188730e +88, 0x4b894614 +89, 0xf4fa2a34 +90, 0x42f7cc69 +91, 0x4089c9e8 +92, 0xbf0bbfe4 +93, 0x3cea65c +94, 0xc6221207 +95, 0x1bb71a8f +96, 0x54843fe7 +97, 0xbc59de4c +98, 0x79c6ee64 +99, 0x14e57a26 +100, 0x68d88fe +101, 0x2b86ef64 +102, 0x8ffff3c1 +103, 0x5bdd573f +104, 0x85671813 +105, 0xefe32ca2 +106, 0x105ded1e +107, 0x90ca2769 +108, 0xb33963ac +109, 0x363fbbc3 +110, 0x3b3763ae +111, 0x1d50ab88 +112, 0xc9ec01eb +113, 0xc8bbeada +114, 0x5d704692 +115, 0x5fd9e40 +116, 0xe61c125 +117, 0x2fe05792 +118, 0xda8afb72 +119, 0x4cbaa653 +120, 0xdd2243df +121, 0x896fd3f5 +122, 0x5bc23db +123, 0xa1c4e807 +124, 0x57d1a24d +125, 0x66503ddc +126, 0xcf7c0838 +127, 0x19e034fc +128, 0x66807450 +129, 0xfc219b3b +130, 0xe8a843e7 +131, 0x9ce61f08 +132, 0x92b950d6 +133, 0xce955ec4 +134, 0xda0d1f0d +135, 0x960c6250 +136, 0x39552432 +137, 0xde845e84 +138, 0xff3b4b11 +139, 0x5d918e6f +140, 0xbb930df2 +141, 0x7cfb0993 +142, 0x5400e1e9 +143, 0x3bfa0954 +144, 0x7e2605fb +145, 0x11941591 +146, 0x887e6994 +147, 0xdc8bed45 +148, 0x45b3fb50 +149, 0xfbdf8358 +150, 0x41507468 +151, 0x34c87166 +152, 0x17f64d77 +153, 0x3bbaf4f8 +154, 0x4f26f37e +155, 0x4a56ebf2 +156, 0x81100f1 +157, 0x96d94eae +158, 0xca88fda5 +159, 0x2eef3a60 +160, 0x952afbd3 +161, 0x2bec88c7 +162, 0x52335c4b +163, 0x8296db8e +164, 0x4da7d00a +165, 0xc00ac899 +166, 0xadff8c72 +167, 0xbecf26cf +168, 0x8835c83c +169, 0x1d13c804 +170, 0xaa940ddc +171, 0x68222cfe +172, 0x4569c0e1 +173, 0x29077976 +174, 0x32d4a5af +175, 0xd31fcdef +176, 0xdc60682b +177, 0x7c95c368 +178, 0x75a70213 +179, 0x43021751 +180, 0x5e52e0a6 +181, 0xf7e190b5 +182, 0xee3e4bb +183, 0x2fe3b150 +184, 0xcf419c07 +185, 0x478a4570 +186, 0xe5c3ea50 +187, 0x417f30a8 +188, 0xf0cfdaa0 +189, 0xd1f7f738 +190, 0x2c70fc23 +191, 0x54fc89f9 +192, 0x444dcf01 +193, 0xec2a002d +194, 0xef0c3a88 +195, 0xde21be9 +196, 0x88ab3296 +197, 0x3028897c +198, 0x264b200b +199, 0xd8ae0706 +200, 0x9eef901a +201, 0xbd1b96e0 +202, 0xea71366c +203, 0x1465b694 +204, 0x5a794650 +205, 0x83df52d4 +206, 0x8262413d +207, 0x5bc148c0 +208, 0xe0ecd80c +209, 0x40649571 +210, 0xb4d2ee5f +211, 0xedfd7d09 +212, 0xa082e25f +213, 0xc62992d1 +214, 0xbc7e65ee +215, 0x5499cf8a +216, 0xac28f775 +217, 0x649840fb +218, 0xd4c54805 +219, 0x1d166ba6 +220, 0xbeb1171f +221, 0x45b66703 +222, 0x78c03349 +223, 0x38d2a6ff +224, 0x935cae8b +225, 0x1d07dc3f +226, 0x6c1ed365 +227, 0x579fc585 +228, 0x1320c0ec +229, 0x632757eb +230, 0xd265a397 +231, 0x70e9b6c2 +232, 0xc81e322c +233, 0xa27153cf +234, 0x2118ba19 +235, 0x514ec400 +236, 0x2bd0ecd6 +237, 0xc3e7dae3 +238, 0xfa39355e +239, 0x48f23cc1 +240, 0xbcf75948 +241, 0x53ccc70c +242, 0x75346423 +243, 0x951181e0 +244, 0x348e90df +245, 0x14365d7f +246, 0xfbc95d7a +247, 0xdc98a9e6 +248, 0xed202df7 +249, 0xa59ec913 +250, 0x6b6e9ae2 +251, 0x1697f265 +252, 0x15d322d0 +253, 0xa2e7ee0a +254, 0x88860b7e +255, 0x455d8b9d +256, 0x2f5c59cb +257, 0xac49c9f1 +258, 0xa6a6a039 +259, 0xc057f56b +260, 0xf1ff1208 +261, 0x5eb8dc9d +262, 0xe6702509 +263, 0xe238b0ed +264, 0x5ae32e3d +265, 0xa88ebbdf +266, 0xef885ae7 +267, 0xafa6d49b +268, 0xc94499e0 +269, 0x1a196325 +270, 0x88938da3 +271, 0x14f4345 +272, 0xd8e33637 +273, 0xa3551bd5 +274, 0x73fe35c7 +275, 0x9561e94b +276, 0xd673bf68 +277, 0x16134872 +278, 0x68c42f9f +279, 0xdf7574c8 +280, 0x8809bab9 +281, 0x1432cf69 +282, 0xafb66bf1 +283, 0xc184aa7b +284, 0xedbf2007 +285, 0xbd420ce1 +286, 0x761033a0 +287, 0xff7e351f +288, 0xd6c3780e +289, 0x5844416f +290, 0xc6c0ee1c +291, 0xd2e147db +292, 0x92ac601a +293, 0x393e846b +294, 0x18196cca +295, 0x54a22be +296, 0x32bab1c4 +297, 0x60365183 +298, 0x64fa342 +299, 0xca24a493 +300, 0xd8cc8b83 +301, 0x3faf102b +302, 0x6e09bb58 +303, 0x812f0ea +304, 0x592c95d8 +305, 0xe45ea4c5 +306, 0x23aebf83 +307, 0xbd9691d4 +308, 0xf47b4baa +309, 0x4ac7b487 +310, 0xcce18803 +311, 0x3377556e +312, 0x3ff8e6b6 +313, 0x99d22063 +314, 0x23250bec +315, 0x4e1f9861 +316, 0x8554249b +317, 0x8635c2fc +318, 0xe8426e8a +319, 0x966c29d8 +320, 0x270b6082 +321, 0x3180a8a1 +322, 0xe7e1668b +323, 0x7f868dc +324, 0xcf4c17cf +325, 0xe31de4d1 +326, 0xc8c8aff4 +327, 0xae8db704 +328, 0x3c928cc2 +329, 0xe12cd48 +330, 0xb33ecd04 +331, 0xb93d7cbe +332, 0x49c69d6a +333, 0x7d3bce64 +334, 0x86bc219 +335, 0x8408233b +336, 0x44dc7479 +337, 0xdf80d538 +338, 0xf3db02c3 +339, 0xbbbd31d7 +340, 0x121281f +341, 0x7521e9a3 +342, 0x8859675a +343, 0x75aa6502 +344, 0x430ed15b +345, 0xecf0a28d +346, 0x659774fd +347, 0xd58a2311 +348, 0x512389a9 +349, 0xff65e1ff +350, 0xb6ddf222 +351, 0xe3458895 +352, 0x8b13cd6e +353, 0xd4a22870 +354, 0xe604c50c +355, 0x27f54f26 +356, 0x8f7f422f +357, 0x9735b4cf +358, 0x414072b0 +359, 0x76a1c6d5 +360, 0xa2208c06 +361, 0x83cd0f61 +362, 0x6c4f7ead +363, 0x6553cf76 +364, 0xeffcf44 +365, 0x7f434a3f +366, 0x9dc364bd +367, 0x3cdf52ed +368, 0xad597594 +369, 0x9c3e211b +370, 0x6c04a33f +371, 0x885dafa6 +372, 0xbbdaca71 +373, 0x7ae5dd5c +374, 0x37675644 +375, 0x251853c6 +376, 0x130b086b +377, 0x143fa54b +378, 0x54cdc282 +379, 0x9faff5b3 +380, 0x502a5c8b +381, 0xd9524550 +382, 0xae221aa6 +383, 0x55cf759b +384, 0x24782da4 +385, 0xd715d815 +386, 0x250ea09a +387, 0x4e0744ac +388, 0x11e15814 +389, 0xabe5f9df +390, 0xc8146350 +391, 0xfba67d9b +392, 0x2b82e42f +393, 0xd4ea96fc +394, 0x5ffc179e +395, 0x1598bafe +396, 0x7fb6d662 +397, 0x1a12a0db +398, 0x450cee4a +399, 0x85f8e12 +400, 0xce71b594 +401, 0xd4bb1d19 +402, 0x968f379d +403, 0x54cc1d52 +404, 0x467e6066 +405, 0x7da5f9a9 +406, 0x70977034 +407, 0x49e65c4b +408, 0xd08570d1 +409, 0x7acdf60b +410, 0xdffa038b +411, 0x9ce14e4c +412, 0x107cbbf8 +413, 0xdd746ca0 +414, 0xc6370a46 +415, 0xe7f83312 +416, 0x373fa9ce +417, 0xd822a2c6 +418, 0x1d4efea6 +419, 0xc53dcadb +420, 0x9b4e898f +421, 0x71daa6bf +422, 0x7a0bc78b +423, 0xd7b86f50 +424, 0x1b8b3286 +425, 0xcf9425dd +426, 0xd5263220 +427, 0x4ea0b647 +428, 0xc767fe64 +429, 0xcfc5e67 +430, 0xcc6a2942 +431, 0xa51eff00 +432, 0x76092e1b +433, 0xf606e80f +434, 0x824b5e20 +435, 0xebb55e14 +436, 0x783d96a6 +437, 0x10696512 +438, 0x17ee510a +439, 0x3ab70a1f +440, 0xcce6b210 +441, 0x8f72f0fb +442, 0xf0610b41 +443, 0x83d01fb5 +444, 0x6b3de36 +445, 0xe4c2e84f +446, 0x9c43bb15 +447, 0xddf2905 +448, 0x7dd63556 +449, 0x3662ca09 +450, 0xfb81f35b +451, 0xc2c8a72a +452, 0x8e93c37 +453, 0xa93da2d4 +454, 0xa03af8f1 +455, 0x8d75159a +456, 0x15f010b0 +457, 0xa296ab06 +458, 0xe55962ba +459, 0xeae700a9 +460, 0xe388964a +461, 0x917f2bec +462, 0x1c203fea +463, 0x792a01ba +464, 0xa93a80ac +465, 0x9eb8a197 +466, 0x56c0bc73 +467, 0xb8f05799 +468, 0xf429a8c8 +469, 0xb92cee42 +470, 0xf8864ec +471, 0x62f2518a +472, 0x3a7bfa3e +473, 0x12e56e6d +474, 0xd7a18313 +475, 0x41fa3899 +476, 0xa09c4956 +477, 0xebcfd94a +478, 0xc485f90b +479, 0x4391ce40 +480, 0x742a3333 +481, 0xc932f9e5 +482, 0x75c6c263 +483, 0x80937f0 +484, 0xcf21833c +485, 0x16027520 +486, 0xd42e669f +487, 0xb0f01fb7 +488, 0xb35896f1 +489, 0x763737a9 +490, 0x1bb20209 +491, 0x3551f189 +492, 0x56bc2602 +493, 0xb6eacf4 +494, 0x42ec4d11 +495, 0x245cc68 +496, 0xc27ac43b +497, 0x9d903466 +498, 0xce3f0c05 +499, 0xb708c31c +500, 0xc0fd37eb +501, 0x95938b2c +502, 0xf20175a7 +503, 0x4a86ee9b +504, 0xbe039a58 +505, 0xd41cabe7 +506, 0x83bc99ba +507, 0x761d60e1 +508, 0x7737cc2e +509, 0x2b82fc4b +510, 0x375aa401 +511, 0xfe9597a0 +512, 0x5543806a +513, 0x44f31238 +514, 0x7df31538 +515, 0x74cfa770 +516, 0x8755d881 +517, 0x1fde665a +518, 0xda8bf315 +519, 0x973d8e95 +520, 0x72205228 +521, 0x8fe59717 +522, 0x7bb90b34 +523, 0xef6ed945 +524, 0x16fd4a38 +525, 0x5db44de1 +526, 0xf09f93b3 +527, 0xe84824cc +528, 0x945bb50e +529, 0xd0be4aa5 +530, 0x47c277c2 +531, 0xd3800c28 +532, 0xac1c33ec +533, 0xd3dacce +534, 0x811c8387 +535, 0x6761b36 +536, 0x70d3882f +537, 0xd6e62e3a +538, 0xea25daa2 +539, 0xb07f39d1 +540, 0x391d89d7 +541, 0x84b6fb5e +542, 0x3dda3fca +543, 0x229e80a4 +544, 0x3d94a4b7 +545, 0x5d3d576a +546, 0xad7818a0 +547, 0xce23b03a +548, 0x7aa2079c +549, 0x9a6be555 +550, 0x83f3b34a +551, 0x1848f9d9 +552, 0xd8fefc1c +553, 0x48e6ce48 +554, 0x52e55750 +555, 0xf41a71cf +556, 0xba08e259 +557, 0xfaf06a15 +558, 0xeaaac0fb +559, 0x34f90098 +560, 0xb1dfffbb +561, 0x718daec2 +562, 0xab4dda21 +563, 0xd27cc1ee +564, 0x4aafbc4c +565, 0x356dfb4f +566, 0x83fcdfd6 +567, 0x8f0bcde0 +568, 0x4363f844 +569, 0xadc0f4d5 +570, 0x3bde994e +571, 0x3884d452 +572, 0x21876b4a +573, 0x9c985398 +574, 0xca55a226 +575, 0x3a88c583 +576, 0x916dc33c +577, 0x8f67d1d7 +578, 0x3b26a667 +579, 0xe4ddeb4b +580, 0x1a9d8c33 +581, 0x81c9b74f +582, 0x9ed1e9df +583, 0x6e61aecf +584, 0x95e95a5d +585, 0x68864ff5 +586, 0xb8fa5b9 +587, 0x72b1b3de +588, 0x5e18a86b +589, 0xd7f2337d +590, 0xd70e0925 +591, 0xb573a4c1 +592, 0xc77b3f8a +593, 0x389b20de +594, 0x16cf6afb +595, 0xa39bd275 +596, 0xf491cf01 +597, 0x6f88a802 +598, 0x8510af05 +599, 0xe7cd549a +600, 0x8603179a +601, 0xef43f191 +602, 0xf9b64c60 +603, 0xb00254a7 +604, 0xd7c06a2d +605, 0x17e9380b +606, 0x529e727b +607, 0xaaa8fe0a +608, 0xfb64ff4c +609, 0xcd75af26 +610, 0xfb717c87 +611, 0xa0789899 +612, 0x10391ec9 +613, 0x7e9b40b3 +614, 0x18536554 +615, 0x728c05f7 +616, 0x787dca98 +617, 0xad948d1 +618, 0x44c18def +619, 0x3303f2ec +620, 0xa15acb5 +621, 0xb58d38f4 +622, 0xfe041ef8 +623, 0xd151a956 +624, 0x7b9168e8 +625, 0x5ebeca06 +626, 0x90fe95df +627, 0xf76875aa +628, 0xb2e0d664 +629, 0x2e3253b7 +630, 0x68e34469 +631, 0x1f0c2d89 +632, 0x13a34ac2 +633, 0x5ffeb841 +634, 0xe381e91c +635, 0xb8549a92 +636, 0x3f35cf1 +637, 0xda0f9dcb +638, 0xdd9828a6 +639, 0xe1428f29 +640, 0xf4db80b5 +641, 0xdac30af5 +642, 0x1af1dd17 +643, 0x9a540254 +644, 0xcab68a38 +645, 0x33560361 +646, 0x2fbf3886 +647, 0xbc785923 +648, 0xe081cd10 +649, 0x8e473356 +650, 0xd102c357 +651, 0xeea4fe48 +652, 0x248d3453 +653, 0x1da79ac +654, 0x815a65ff +655, 0x27693e76 +656, 0xb7d5af40 +657, 0x6d245d30 +658, 0x9e06fa8f +659, 0xb0570dcb +660, 0x469f0005 +661, 0x3e0ca132 +662, 0xd89bbf3 +663, 0xd61ccd47 +664, 0x6383878 +665, 0x62b5956 +666, 0x4dc83675 +667, 0x93fd8492 +668, 0x5a0091f5 +669, 0xc9f9bc3 +670, 0xa26e7778 +671, 0xeabf2d01 +672, 0xe612dc06 +673, 0x85d89ff9 +674, 0xd1763179 +675, 0xcb88947b +676, 0x9e8757a5 +677, 0xe100e85c +678, 0x904166eb +679, 0x4996243d +680, 0x4038e1cb +681, 0x2be2c63d +682, 0x77017e81 +683, 0x3b1f556b +684, 0x1c785c77 +685, 0x6869b8bd +686, 0xe1217ed4 +687, 0x4012ab2f +688, 0xc06c0d8e +689, 0x2122eb68 +690, 0xad1783fd +691, 0x5f0c80e3 +692, 0x828f7efa +693, 0x29328399 +694, 0xeadf1087 +695, 0x85dc0037 +696, 0x9691ef26 +697, 0xc0947a53 +698, 0x2a178d2a +699, 0x2a2c7e8f +700, 0x90378380 +701, 0xaad8d326 +702, 0x9cf1c3c8 +703, 0x84eccd44 +704, 0x79e61808 +705, 0x8b3f454e +706, 0x209e6e1 +707, 0x51f88378 +708, 0xc210226f +709, 0xd982adb5 +710, 0x55d44a31 +711, 0x9817d443 +712, 0xa328c626 +713, 0x13455966 +714, 0xb8f681d3 +715, 0x2a3c713b +716, 0xc186959b +717, 0x814a74b0 +718, 0xed7bc90 +719, 0xa88d3d6d +720, 0x88a9f561 +721, 0x73aa1c0a +722, 0xdfeff404 +723, 0xec037e4b +724, 0xa5c209f0 +725, 0xb3a223b4 +726, 0x24ce3709 +727, 0x3184c790 +728, 0xa1398c62 +729, 0x2f92034e +730, 0xbb37a79a +731, 0x605287b4 +732, 0x8faa772c +733, 0x6ce56c1d +734, 0xc035fb4c +735, 0x7cf5b316 +736, 0x6502645 +737, 0xa283d810 +738, 0x778bc2f1 +739, 0xfdf99313 +740, 0x1f513265 +741, 0xbd3837e2 +742, 0x9b84a9a +743, 0x2139ce91 +744, 0x61a8e890 +745, 0xf9ff12db +746, 0xb43d2ea7 +747, 0x88532e61 +748, 0x175a6655 +749, 0x7a6c4f72 +750, 0x6dafc1b7 +751, 0x449b1459 +752, 0x514f654f +753, 0x9a6731e2 +754, 0x8632da43 +755, 0xc81b0422 +756, 0x81fe9005 +757, 0x15b79618 +758, 0xb5fa629f +759, 0x987a474f +760, 0x1c74f54e +761, 0xf9743232 +762, 0xec4b55f +763, 0x87d761e5 +764, 0xd1ad78b7 +765, 0x453d9350 +766, 0xc7a7d85 +767, 0xb2576ff5 +768, 0xcdde49b7 +769, 0x8e1f763e +770, 0x1338583e +771, 0xfd65b9dc +772, 0x4f19c4f4 +773, 0x3a52d73d +774, 0xd3509c4c +775, 0xda24fe31 +776, 0xe2de56ba +777, 0x2db5e540 +778, 0x23172734 +779, 0x4db572f +780, 0xeb941718 +781, 0x84c2649a +782, 0x3b1e5b6a +783, 0x4c9c61b9 +784, 0x3bccd11 +785, 0xb4d7b78e +786, 0x48580ae5 +787, 0xd273ab68 +788, 0x25c11615 +789, 0x470b53f6 +790, 0x329c2068 +791, 0x1693721b +792, 0xf8c9aacf +793, 0x4c3d5693 +794, 0xd778284e +795, 0xae1cb24f +796, 0x3c11d1b3 +797, 0xddd2b0c0 +798, 0x90269fa7 +799, 0x5666e0a2 +800, 0xf9f195a4 +801, 0x61d78eb2 +802, 0xada5a7c0 +803, 0xaa272fbe +804, 0xba3bae2f +805, 0xd0b70fc2 +806, 0x529f32b +807, 0xda7a3e21 +808, 0x9a776a20 +809, 0xb21f9635 +810, 0xb3acc14e +811, 0xac55f56 +812, 0x29dccf41 +813, 0x32dabdb3 +814, 0xaa032f58 +815, 0xfa406af4 +816, 0xce3c415d +817, 0xb44fb4d9 +818, 0x32248d1c +819, 0x680c6440 +820, 0xae2337b +821, 0x294cb597 +822, 0x5bca48fe +823, 0xaef19f40 +824, 0xad60406 +825, 0x4781f090 +826, 0xfd691ffc +827, 0xb6568268 +828, 0xa56c72cb +829, 0xf8a9e0fc +830, 0x9af4fd02 +831, 0x2cd30932 +832, 0x776cefd7 +833, 0xe31f476e +834, 0x6d94a437 +835, 0xb3cab598 +836, 0xf582d13f +837, 0x3bf8759d +838, 0xc3777dc +839, 0x5e425ea8 +840, 0x1c7ff4ed +841, 0x1c2e97d1 +842, 0xc062d2b4 +843, 0x46dc80e0 +844, 0xbcdb47e6 +845, 0x32282fe0 +846, 0xaba89063 +847, 0x5e94e9bb +848, 0x3e667f78 +849, 0xea6eb21a +850, 0xe56e54e8 +851, 0xa0383510 +852, 0x6768fe2b +853, 0xb53ac3e0 +854, 0x779569a0 +855, 0xeca83c6a +856, 0x24db4d2d +857, 0x4585f696 +858, 0xf84748b2 +859, 0xf6a4dd5b +860, 0x31fb524d +861, 0x67ab39fe +862, 0x5882a899 +863, 0x9a05fcf6 +864, 0x712b5674 +865, 0xe8c6958f +866, 0x4b448bb3 +867, 0x530b9abf +868, 0xb491f491 +869, 0x98352c62 +870, 0x2d0a50e3 +871, 0xeb4384da +872, 0x36246f07 +873, 0xcbc5c1a +874, 0xae24031d +875, 0x44d11ed6 +876, 0xf07f1608 +877, 0xf296aadd +878, 0x3bcfe3be +879, 0x8fa1e7df +880, 0xfd317a6e +881, 0xe4975c44 +882, 0x15205892 +883, 0xa762d4df +884, 0xf1167365 +885, 0x6811cc00 +886, 0x8315f23 +887, 0xe045b4b1 +888, 0xa8496414 +889, 0xbed313ae +890, 0xcdae3ddb +891, 0xa9c22c9 +892, 0x275fab1a +893, 0xedd65fa +894, 0x4c188229 +895, 0x63a83e58 +896, 0x18aa9207 +897, 0xa41f2e78 +898, 0xd9f63653 +899, 0xbe2be73b +900, 0xa3364d39 +901, 0x896d5428 +902, 0xc737539e +903, 0x745a78c6 +904, 0xf0b2b042 +905, 0x510773b4 +906, 0x92ad8e37 +907, 0x27f2f8c4 +908, 0x23704cc8 +909, 0x3d95a77f +910, 0xf08587a4 +911, 0xbd696a25 +912, 0x948924f3 +913, 0x8cddb634 +914, 0xcd2a4910 +915, 0x8e0e300e +916, 0x83815a9b +917, 0x67383510 +918, 0x3c18f0d0 +919, 0xc7a7bccc +920, 0x7cc2d3a2 +921, 0x52eb2eeb +922, 0xe4a257e5 +923, 0xec76160e +924, 0x63f9ad68 +925, 0x36d0bbbf +926, 0x957bc4e4 +927, 0xc9ed90ff +928, 0x4cb6059d +929, 0x2f86eca1 +930, 0x3e3665a3 +931, 0x9b7eb6f4 +932, 0x492e7e18 +933, 0xa098aa51 +934, 0x7eb568b2 +935, 0x3fd639ba +936, 0x7bebcf1 +937, 0x99c844ad +938, 0x43cb5ec7 +939, 0x8dfbbef5 +940, 0x5be413ff +941, 0xd93b976d +942, 0xc1c7a86d +943, 0x1f0e93d0 +944, 0x498204a2 +945, 0xe8fe832a +946, 0x2236bd7 +947, 0x89953769 +948, 0x2acc3491 +949, 0x2c4f22c6 +950, 0xd7996277 +951, 0x3bcdc349 +952, 0xfc286630 +953, 0x5f8909fd +954, 0x242677c0 +955, 0x4cb34104 +956, 0xa6ff8100 +957, 0x39ea47ec +958, 0x9bd54140 +959, 0x7502ffe8 +960, 0x7ebef8ae +961, 0x1ed8abe4 +962, 0xfaba8450 +963, 0xc197b65f +964, 0x19431455 +965, 0xe229c176 +966, 0xeb2967da +967, 0xe0c5dc05 +968, 0xa84e3227 +969, 0x10dd9e0f +970, 0xbdb70b02 +971, 0xce24808a +972, 0x423edab8 +973, 0x194caf71 +974, 0x144f150d +975, 0xf811c2d2 +976, 0xc224ee85 +977, 0x2b217a5b +978, 0xf78a5a79 +979, 0x6554a4b1 +980, 0x769582df +981, 0xf4b2cf93 +982, 0x89648483 +983, 0xb3283a3e +984, 0x82b895db +985, 0x79388ef0 +986, 0x54bc42a6 +987, 0xc4dd39d9 +988, 0x45b33b7d +989, 0x8703b2c1 +990, 0x1cc94806 +991, 0xe0f43e49 +992, 0xcaa7b6bc +993, 0x4f88e9af +994, 0x1477cce5 +995, 0x347dd115 +996, 0x36e335fa +997, 0xb93c9a31 +998, 0xaac3a175 +999, 0x68a19647 diff --git a/numpy/random/tests/data/mt19937-testset-2.csv b/numpy/random/tests/data/mt19937-testset-2.csv index d2f6c156c..cdb8e4794 100644 --- a/numpy/random/tests/data/mt19937-testset-2.csv +++ b/numpy/random/tests/data/mt19937-testset-2.csv @@ -1,1001 +1,1001 @@ seed, 0x0 -0, 0x8c7f0aac -1, 0x97c4aa2f -2, 0xb716a675 -3, 0xd821ccc0 -4, 0x9a4eb343 -5, 0xdba252fb -6, 0x8b7d76c3 -7, 0xd8e57d67 -8, 0x6c74a409 -9, 0x9fa1ded3 -10, 0xa5595115 -11, 0x6266d6f2 -12, 0x7005b724 -13, 0x4c2b3a57 -14, 0xe44b3c46 -15, 0xe84bdd8 -16, 0xf6b29a58 -17, 0x45cccd8c -18, 0x6229393a -19, 0x7a4842c1 -20, 0xcaae7de6 -21, 0xcfea4a27 -22, 0x8765a857 -23, 0x7adfc8ae -24, 0x916b5e58 -25, 0x648d8b51 -26, 0xecf3e6a5 -27, 0xd6094219 -28, 0x122f6b4d -29, 0x565f9848 -30, 0x164e1b09 -31, 0xa5ee9794 -32, 0x52d0873 -33, 0x5e4513d0 -34, 0xd52692f3 -35, 0xf5081ec5 -36, 0xc73547fe -37, 0x23ee074f -38, 0xdeb91daf -39, 0xdebe09c0 -40, 0xfa86bb52 -41, 0x793e6063 -42, 0xcc95a7d8 -43, 0xcd087cb1 -44, 0x762382f3 -45, 0x853e031d -46, 0xc7d0c293 -47, 0xadcb0c93 -48, 0x1e473b8e -49, 0xb87b61a7 -50, 0xa3d1dd20 -51, 0x94ff3fc1 -52, 0x24b2cd09 -53, 0x89914ab9 -54, 0xf1d5d27f -55, 0xc234a220 -56, 0x8597da1f -57, 0x1b1cc2ca -58, 0x6a2748f4 -59, 0x793de097 -60, 0x43b9eaa3 -61, 0x2fb379fe -62, 0xc6342dcb -63, 0xbca6ab72 -64, 0x74c644b7 -65, 0x376fd81c -66, 0x9184e322 -67, 0x229da880 -68, 0x4cf6880 -69, 0x52fae7a4 -70, 0x9e1d5c35 -71, 0x26511785 -72, 0x9cb24e26 -73, 0x38ea0de8 -74, 0x9def62f4 -75, 0x62f0f111 -76, 0xf199794f -77, 0xe710b184 -78, 0xae8bc669 -79, 0x732fec2a -80, 0x5c08b5ba -81, 0x9cf1ba1f -82, 0x6fe15378 -83, 0xe7005101 -84, 0xb297f541 -85, 0x196a6fe7 -86, 0xf6aefa9 -87, 0xf8456839 -88, 0xaab13923 -89, 0xa7342f66 -90, 0xabaeec77 -91, 0x2bc0bb0b -92, 0x35dba1ae -93, 0x5bafdc52 -94, 0x2101505b -95, 0xc02cf780 -96, 0x50bfe98e -97, 0x9b9aca63 -98, 0x5d1c2635 -99, 0x53364b8c -100, 0x91f86a79 -101, 0x9d63faa -102, 0x70483054 -103, 0xa25fc8cb -104, 0xfd061144 -105, 0xf57db306 -106, 0x1a1f9bc4 -107, 0xa71d442f -108, 0x3578f27f -109, 0xa29337f4 -110, 0x294b9483 -111, 0xfecbf3cc -112, 0xa7321b64 -113, 0x94f424b4 -114, 0x40d7b7e8 -115, 0x6a140f4e -116, 0x7760248f -117, 0x7985c694 -118, 0x3e92ace3 -119, 0x9f9e5bba -120, 0x28b23b17 -121, 0x5687aacf -122, 0x1c418b8d -123, 0xacbc9175 -124, 0xa8053755 -125, 0x51342230 -126, 0x235ff531 -127, 0xc741a645 -128, 0x325338a9 -129, 0xf31716a3 -130, 0x5e64c5c0 -131, 0xa99b5c5f -132, 0xd22c9cc5 -133, 0x3796e5e -134, 0x18dba100 -135, 0x9f72d771 -136, 0xd6838eb2 -137, 0xac74f524 -138, 0x1899e7a2 -139, 0xf8d16330 -140, 0xf9f93f5d -141, 0xe0d14983 -142, 0x77f98662 -143, 0x8276be2a -144, 0xfa0d03cd -145, 0xe435170 -146, 0x9ad727e7 -147, 0x737f2b95 -148, 0xbd4060c9 -149, 0x51de97f -150, 0xa083600 -151, 0x7113f78a -152, 0x48660972 -153, 0xfac6322b -154, 0x1ec533ba -155, 0x5c048d7f -156, 0x4bcfd817 -157, 0x7b1bd6bb -158, 0x1e64f082 -159, 0xb04c1979 -160, 0x51675862 -161, 0xe166de3e -162, 0x6a0d23a3 -163, 0xeb117ade -164, 0x106bf87b -165, 0x3781a7c3 -166, 0xb145da52 -167, 0x90b037ae -168, 0x910ccae3 -169, 0xdd775c94 -170, 0x43f090d1 -171, 0x824bca32 -172, 0x85f3959b -173, 0xeaae5b0e -174, 0x180c7c29 -175, 0xebd0fc3a -176, 0x93713ac1 -177, 0x1546dc24 -178, 0xede65b0a -179, 0x47189056 -180, 0x518dbc2b -181, 0x2653368 -182, 0xaadb680b -183, 0xd7a3bb02 -184, 0x21bd8133 -185, 0xa5ad3450 -186, 0xb7613820 -187, 0xd76514b6 -188, 0x4a168480 -189, 0x43c55b26 -190, 0x2ee5a113 -191, 0x65d794ae -192, 0x9625b62a -193, 0x8d85b573 -194, 0x525c4b8 -195, 0x2a3989bc -196, 0xd43569e8 -197, 0x5eabbe4d -198, 0x133b91e -199, 0x257d3518 -200, 0xad85627d -201, 0x91d28302 -202, 0x451f3e03 -203, 0xb428205e -204, 0xbc35ace2 -205, 0x49d9976b -206, 0xf651fd0d -207, 0x6eebf770 -208, 0x3fae4928 -209, 0xc1903548 -210, 0x937f0c13 -211, 0x6566b25f -212, 0x97900f48 -213, 0xe562c59a -214, 0x927f19c2 -215, 0xa39054f8 -216, 0x391be0b4 -217, 0xe43ce943 -218, 0xf3e75bec -219, 0xae181f3d -220, 0x7276cf0e -221, 0x72fe9f60 -222, 0xd8ae3d04 -223, 0xfa839fc3 -224, 0xb31112ed -225, 0x1dbf688b -226, 0x4c24d3fc -227, 0xc45baa56 -228, 0xd0550dcd -229, 0x696d0b79 -230, 0x6581666d -231, 0xace9934b -232, 0xe18ffab8 -233, 0x3ff2a610 -234, 0x94ce4c98 -235, 0x502f139d -236, 0xe1b96895 -237, 0xf725846e -238, 0xb149c019 -239, 0x96a5a5d0 -240, 0xb9aa43bc -241, 0xa8e00779 -242, 0x8056cb76 -243, 0x88803475 -244, 0xf4c1e5bd -245, 0x3b043653 -246, 0xa4dc8aa1 -247, 0x65162768 -248, 0x6c81c3a0 -249, 0x9e6a3ce4 -250, 0x9b3c95fb -251, 0x7990eafb -252, 0x4e9d879 -253, 0x785a9546 -254, 0x4d3401d5 -255, 0xb750a91f -256, 0xa901220d -257, 0x49b9c747 -258, 0x4a4286b8 -259, 0x622a9498 -260, 0x9e36424f -261, 0xbfc99829 -262, 0x6dc3c912 -263, 0xe0e23e28 -264, 0x22ae6db6 -265, 0x1a5540cf -266, 0x4c5c3b0b -267, 0x17a5d0a6 -268, 0x91e9386f -269, 0x5aa2cd5d -270, 0x97436ff9 -271, 0x8d43d481 -272, 0x9306fadf -273, 0x89ba776 -274, 0xa7382b2c -275, 0xf80de0d8 -276, 0xa6f03d7d -277, 0x522ce018 -278, 0x6e717043 -279, 0x38a4abd2 -280, 0xe58413ef -281, 0x2429df03 -282, 0x5e1888ea -283, 0x18e606cc -284, 0x6f94d7e6 -285, 0xfbea3123 -286, 0xe45516d6 -287, 0x42a5b3fe -288, 0xce62babd -289, 0x897a4ec5 -290, 0xb4320ad7 -291, 0x72ab4a2b -292, 0x19a87820 -293, 0x197d5c0b -294, 0xeb633668 -295, 0x5a3118d4 -296, 0xb6d8848a -297, 0x7820b6b6 -298, 0xffb46feb -299, 0xd754f5a5 -300, 0x26423e7d -301, 0xe796fe9c -302, 0xde3d826f -303, 0x99d7de8 -304, 0x29992302 -305, 0x8220f61b -306, 0x9d954fd3 -307, 0x2ab684d9 -308, 0x1fb2aa97 -309, 0xc76fe335 -310, 0xd9171133 -311, 0xdd6c44ae -312, 0xceac7494 -313, 0x69514bb5 -314, 0x91b0961d -315, 0x23d53e43 -316, 0x683d2a23 -317, 0x8814327 -318, 0x11b4ed89 -319, 0xfb8a0849 -320, 0xb28ab129 -321, 0x5f8ffb97 -322, 0x741b5f83 -323, 0x6b8a0f2e -324, 0xb8d8a2da -325, 0xcf357b2 -326, 0xddcb3b6c -327, 0x5d912703 -328, 0xf9bbc71f -329, 0x441bb09 -330, 0xdb15ed8a -331, 0x3b11ee1b -332, 0x2ffb1ad -333, 0xc3d140c7 -334, 0x5c2785a7 -335, 0xf1b2143d -336, 0xbae0a955 -337, 0xbffff361 -338, 0x2befec2c -339, 0x56e32b22 -340, 0x8562a7a2 -341, 0x7d531458 -342, 0xde91821 -343, 0x56c7ba85 -344, 0x3332f8e8 -345, 0x2df312ff -346, 0x4bdd824 -347, 0x2bc5c700 -348, 0xcb2fc5cb -349, 0x76a4b922 -350, 0x395320c5 -351, 0xdfe4037e -352, 0x5868f7b5 -353, 0xf1b1d4fe -354, 0xed96bc50 -355, 0x9bb675be -356, 0xb4548088 -357, 0x98be68bd -358, 0x8269881 -359, 0xc89ce8d1 -360, 0x2a296570 -361, 0x8001b923 -362, 0x9f193578 -363, 0xce50d5b -364, 0x93c540a8 -365, 0xb2f81774 -366, 0x3ce68b24 -367, 0xfe0db0b0 -368, 0xef28a619 -369, 0x446b5143 -370, 0x9d2cdf67 -371, 0xadd8e1fc -372, 0x891f3b23 -373, 0xdd418c72 -374, 0x9704571e -375, 0xc037541d -376, 0xbae946f1 -377, 0xf6e8cd21 -378, 0x4fdba092 -379, 0x8de2d511 -380, 0x65f1d0dd -381, 0x365f3954 -382, 0x35b851fd -383, 0x38f20a02 -384, 0x2faa5845 -385, 0x37fff565 -386, 0xf1c2638c -387, 0x91cf922c -388, 0xbd533375 -389, 0x73bd6afd -390, 0x7d8eb542 -391, 0xf8616e6f -392, 0x3a37d85b -393, 0xae382d55 -394, 0x411d81a7 -395, 0x15d5ee27 -396, 0xedaffcb -397, 0xe716e96 -398, 0x6f35ed9e -399, 0x7ce2ee91 -400, 0x4fd1dac6 -401, 0xe18983c7 -402, 0xb2439112 -403, 0xf9f5a35c -404, 0x60b4582b -405, 0x9e1ed453 -406, 0x2dfa81b1 -407, 0x8ae13329 -408, 0x651585d -409, 0xdac7f4ae -410, 0x11374595 -411, 0xbe6bf0c9 -412, 0xadecaf59 -413, 0x7a8549f2 -414, 0x742579e0 -415, 0xad5537db -416, 0x895d4149 -417, 0x9b674e1c -418, 0xe58c3feb -419, 0xb6f660d1 -420, 0xfd86da69 -421, 0x7830f7ba -422, 0x37868f80 -423, 0x74bd5fd6 -424, 0xa9bf7e3f -425, 0xe80b0410 -426, 0x4369186a -427, 0x2320e0a4 -428, 0x549625e -429, 0x3aae1e18 -430, 0xc2251a74 -431, 0xe1af94bf -432, 0x51eca4c3 -433, 0xe7886533 -434, 0x622ab088 -435, 0xa55223b8 -436, 0x969bf35b -437, 0x531e6c5d -438, 0xd4bf977b -439, 0x850bcaee -440, 0xa104f457 -441, 0x3a0a0 -442, 0xdf660893 -443, 0x4fd61248 -444, 0x4606d9c7 -445, 0x6cea6457 -446, 0xcc4ccc0d -447, 0xe2a57d3a -448, 0x2f85d651 -449, 0xae0c9478 -450, 0xf3ea2774 -451, 0x74c4ebb7 -452, 0xafff3b40 -453, 0x7bc0aacb -454, 0x372b82dc -455, 0xc9ead3a4 -456, 0xf286e119 -457, 0x3abcb320 -458, 0xbb195daa -459, 0xe15b2f0e -460, 0x410251d6 -461, 0x504e251c -462, 0x369b9d14 -463, 0xf51b7fd2 -464, 0x84a8cd44 -465, 0x78c4b616 -466, 0x691d4e3 -467, 0xb62a5b7a -468, 0x351cc253 -469, 0x27588287 -470, 0x6cb82fc8 -471, 0xbafe423d -472, 0x5fc99a8d -473, 0xa5719605 -474, 0x76ace100 -475, 0x37026c88 -476, 0x4712accf -477, 0x2fbbb9cf -478, 0x96377fb5 -479, 0xcebd948b -480, 0xdd25a404 -481, 0xbf4099a7 -482, 0x1e16915c -483, 0xacc2cbad -484, 0x8472f51a -485, 0x46e2824a -486, 0x21cf3734 -487, 0x2cc6d3ee -488, 0xb7841db1 -489, 0xb4586cdb -490, 0x65642b33 -491, 0x769102e3 -492, 0x90bf7369 -493, 0xd7265312 -494, 0x2eeb6d75 -495, 0x34721522 -496, 0x2514be33 -497, 0x2a3abe9e -498, 0x7cf141b5 -499, 0x1ff50f3a -500, 0x5b096fab -501, 0xb8da4737 -502, 0xf0c025fc -503, 0x7cbc3fc -504, 0xc3ec5b12 -505, 0xbf3b03ad -506, 0xbfa86b57 -507, 0x17b461c1 -508, 0xe75a2d46 -509, 0x37aad5ea -510, 0x155b2c35 -511, 0xbfcf2330 -512, 0x8d5c7c5e -513, 0xbb50483b -514, 0x95a03950 -515, 0xbad669a -516, 0xf641767c -517, 0x358b50a3 -518, 0x4aca2e3a -519, 0x497343b1 -520, 0x3da6f46a -521, 0xad6120c9 -522, 0x19acdd2c -523, 0x1023470d -524, 0x434bb79 -525, 0x8e3f0746 -526, 0xedf5a226 -527, 0x25d8ea7 -528, 0xab7fa688 -529, 0xd541fc0d -530, 0xc8ffc7f8 -531, 0xfbfd0387 -532, 0x481f76d0 -533, 0xb4183bf8 -534, 0x961efa16 -535, 0x2e7f61f8 -536, 0x105f5f4f -537, 0x832c37d9 -538, 0x7c521708 -539, 0x94982ee3 -540, 0xfa3d1f06 -541, 0xc99c5cd1 -542, 0xe062a5c7 -543, 0x9b41f9d4 -544, 0x569195d9 -545, 0x37e93fc2 -546, 0xf629763c -547, 0x7485f190 -548, 0x3b50cc38 -549, 0xe0fd9b72 -550, 0xf3068eed -551, 0x7e054a97 -552, 0xf0fe2118 -553, 0xb72f0404 -554, 0xcc988a64 -555, 0x7c74f3ec -556, 0xa1650931 -557, 0xb5636957 -558, 0xdfd1561e -559, 0x7f861e36 -560, 0x4b036099 -561, 0xd8346f14 -562, 0xd9545d61 -563, 0x31c06965 -564, 0x9e2d2ab9 -565, 0xc5f8b197 -566, 0x3637d9b -567, 0xf969041d -568, 0x58e44ba1 -569, 0xdcc05573 -570, 0x25ec8f35 -571, 0xc7ca0a77 -572, 0xfb592bb3 -573, 0xfc2b1356 -574, 0x7a7679f6 -575, 0xc0e9f007 -576, 0x7f550a69 -577, 0x1094bf1 -578, 0xa3b47889 -579, 0x44fc9ab6 -580, 0x5e5b8f80 -581, 0x69160353 -582, 0x230be578 -583, 0x6da013a4 -584, 0xd2764ed1 -585, 0x4c3f5c94 -586, 0x3099df75 -587, 0x66b09bf0 -588, 0x82e5cd03 -589, 0x1ee3607e -590, 0x396cd72a -591, 0xfb0f2241 -592, 0x190c5614 -593, 0x67f78324 -594, 0xdcb89544 -595, 0x91b7cbd0 -596, 0xf9114070 -597, 0x57f687af -598, 0xf5f9428a -599, 0xc9f390ed -600, 0xe8140568 -601, 0x694fb3de -602, 0xc627f75b -603, 0x5bf9362b -604, 0x5549003f -605, 0x66458f9f -606, 0x14c30f94 -607, 0x4d44c9c6 -608, 0x6840f509 -609, 0xc674cdbc -610, 0x3b73b25b -611, 0xed1c4a6f -612, 0x21eab5a3 -613, 0x53478953 -614, 0xdad674c -615, 0xf3ef5512 -616, 0xb9c08d71 -617, 0x3921f4a -618, 0x2ece8e2 -619, 0x889134e1 -620, 0xc544c7ab -621, 0x4df91683 -622, 0x259e4b8c -623, 0xe2031ce4 -624, 0x145b8f3a -625, 0x4028cf81 -626, 0x16f03971 -627, 0xad6adc80 -628, 0xac0b5327 -629, 0xcf77f418 -630, 0x3ed062ba -631, 0x6ea14124 -632, 0x6ba87963 -633, 0xc08be345 -634, 0x8eafb886 -635, 0xd460d003 -636, 0xdc4d14e2 -637, 0x61085b79 -638, 0xba1f92a8 -639, 0x18b779bc -640, 0x453435a1 -641, 0x41925d1c -642, 0x21a8db44 -643, 0x9789101a -644, 0xe2d02e0 -645, 0x79fa68f8 -646, 0x4d35916d -647, 0x7ce947b3 -648, 0x431a2cc9 -649, 0x756135b5 -650, 0x74c5a0c5 -651, 0x864bb3a1 -652, 0xaeeb8687 -653, 0x7127ea7d -654, 0xb214825e -655, 0xda464848 -656, 0x4894b0f6 -657, 0x6ef5db54 -658, 0x6142e487 -659, 0xd3adc6c3 -660, 0x2e5fe8d5 -661, 0x82643ddb -662, 0xc9de1e6c -663, 0x161ccd43 -664, 0xe8d9866 -665, 0xa8f85f54 -666, 0xb26e6947 -667, 0x34e36253 -668, 0xc75894df -669, 0xd8e70900 -670, 0xc7042e85 -671, 0xae6d8d5b -672, 0x4269846b -673, 0x2da97b9e -674, 0x5fb237c9 -675, 0x11e247d3 -676, 0x966cee07 -677, 0x27aec95 -678, 0x45d7a7e5 -679, 0xe45d5ddc -680, 0x5ef03588 -681, 0x222ac6ab -682, 0x3272262e -683, 0xc7792000 -684, 0x75b91d68 -685, 0xecd782b3 -686, 0xb6bb626 -687, 0xb715f459 -688, 0xccbf6c4a -689, 0x7da649f3 -690, 0x13b36ae2 -691, 0x78310a7b -692, 0x84d26157 -693, 0xe1f93c60 -694, 0x4e8b1b53 -695, 0x7d08711a -696, 0x93d9dace -697, 0x6a211820 -698, 0xf59d6c73 -699, 0x2c9299c6 -700, 0xa5441761 -701, 0x79ac91ac -702, 0x90d833b -703, 0xc89d2739 -704, 0x6e2edab2 -705, 0x8e7228ad -706, 0x829076e9 -707, 0x28ed0c84 -708, 0x8942edb9 -709, 0x24d2005d -710, 0xae6fbd5b -711, 0xa6433591 -712, 0x471089a3 -713, 0x8a0a8ec2 -714, 0x20fd0194 -715, 0x536013ad -716, 0x648664b9 -717, 0x25a2b3cf -718, 0xf4d70177 -719, 0x28ed3ea4 -720, 0x2fe7cf69 -721, 0x21212abe -722, 0xe76b7e04 -723, 0x943441f1 -724, 0x8b36ddf2 -725, 0x179e5ccd -726, 0x74f8259e -727, 0xe919756d -728, 0xe1cd7757 -729, 0x153da2e2 -730, 0x756711a3 -731, 0xcce59a49 -732, 0xb9630cda -733, 0xe08ba7b7 -734, 0x6626861a -735, 0x17ecf576 -736, 0xe76f7416 -737, 0x6d2261cc -738, 0xb0a57acf -739, 0x7924fd62 -740, 0xb31a6e5a -741, 0x9487cc33 -742, 0x53e57be6 -743, 0xb75bc72e -744, 0xc1bc3ed0 -745, 0x6edfe3d -746, 0xa2d4e5bc -747, 0xbb3cdb2f -748, 0x3d71f7fa -749, 0xc457b868 -750, 0x29191280 -751, 0x2800d8a -752, 0xcbe04fcb -753, 0x4eebd78d -754, 0xf58bf147 -755, 0x3b9d125e -756, 0x75489606 -757, 0x80e09ead -758, 0x974abcf5 -759, 0xf427159e -760, 0xdb93b60f -761, 0x8eccb8a9 -762, 0x750c98a6 -763, 0x18f3b535 -764, 0xf3ae0bab -765, 0x9f265252 -766, 0x93646d87 -767, 0xdcef0cdc -768, 0xd21dcb41 -769, 0x285a96a9 -770, 0xe8a9fb42 -771, 0xfe0fdc72 -772, 0xd0c62b5c -773, 0x15c2a14e -774, 0x28cf62e5 -775, 0x182e64db -776, 0xa0ff7cf6 -777, 0xa2342064 -778, 0x65ffc99f -779, 0xf30528dd -780, 0x100df4b2 -781, 0xefce9dfc -782, 0x6c8d60ae -783, 0x7287625d -784, 0x42391e72 -785, 0xba4a4ea1 -786, 0xd95a930c -787, 0xbe034ee0 -788, 0x886a6e9 -789, 0x4e96a350 -790, 0xf57fe442 -791, 0x1ea955c8 -792, 0x5af973f3 -793, 0x71a2087d -794, 0x5b51248a -795, 0x644b5270 -796, 0x42e1ada -797, 0x8827449b -798, 0x2f6b62b8 -799, 0xd8695c78 -800, 0x66b8f141 -801, 0x894949c0 -802, 0xede60ac5 -803, 0xae262f58 -804, 0x19805d22 -805, 0x9bf30fcf -806, 0xf1ff4803 -807, 0x1935dabc -808, 0xde96ccee -809, 0x178f1ea5 -810, 0x7443fcab -811, 0xe53c6d3 -812, 0x53a2ab58 -813, 0x1626fe46 -814, 0x3b951e94 -815, 0x3cb76386 -816, 0x9d4d8f1c -817, 0xd6ea5273 -818, 0x8779386 -819, 0x85ba1342 -820, 0x3fec25c -821, 0x8358dfdc -822, 0x6dc58e66 -823, 0xa65b6365 -824, 0x116d4d7b -825, 0x8b6a4ec5 -826, 0x407f346d -827, 0x84fa549 -828, 0x389e0064 -829, 0x9484d2b6 -830, 0x40d1234d -831, 0xc5661795 -832, 0x218cd5fb -833, 0x6050629f -834, 0x314ce51 -835, 0x7db3cc23 -836, 0x1d9060ed -837, 0xfb4cbcf3 -838, 0x9e54b8fa -839, 0x3ea17988 -840, 0xf968dafe -841, 0x5fd3a519 -842, 0xfd874015 -843, 0xbb059ad -844, 0x68b7c4e5 -845, 0x4f6097d6 -846, 0x29b76190 -847, 0xd4de7499 -848, 0xa385e3ee -849, 0xce990c77 -850, 0x7d84a6a5 -851, 0xa3d89f7f -852, 0xfd49f581 -853, 0x5e3bf585 -854, 0x10b7c6c6 -855, 0x5010998c -856, 0xc8820d5a -857, 0xcd45224a -858, 0x49d47bfb -859, 0x1208d3b6 -860, 0x3dcd9c4e -861, 0xaefea33e -862, 0xa999e648 -863, 0x617778c7 -864, 0x3efdff2d -865, 0xa2494c85 -866, 0xaa75be2f -867, 0xed47f2bb -868, 0x846e54aa -869, 0xda9bd1c3 -870, 0x6c91188a -871, 0x7f67d2f2 -872, 0x8e000539 -873, 0x6d868ddb -874, 0x497c3559 -875, 0xd2934183 -876, 0xb4e2147d -877, 0xbcfc6ace -878, 0x6a340f52 -879, 0x727804c5 -880, 0x5c4cb6ba -881, 0xf80a0784 -882, 0xd422dc11 -883, 0x5cf822c5 -884, 0xeccaa1bf -885, 0x65c4c15e -886, 0xbc72298 -887, 0xbd1a4e83 -888, 0x3b8d7145 -889, 0x72f721a8 -890, 0x593890a4 -891, 0xeff1de3a -892, 0xd0a1a4b1 -893, 0x41da0db7 -894, 0xfc492a98 -895, 0x61bb02a1 -896, 0xf80e8792 -897, 0xb277df61 -898, 0xe7aab1ce -899, 0xe5a662f1 -900, 0x4beb1c87 -901, 0x1efdc7b5 -902, 0xfdf472eb -903, 0x3dd5f02e -904, 0x3fd9fdf0 -905, 0x3a6f7bf4 -906, 0x1b1caa7f -907, 0x7d507ba1 -908, 0xf371a151 -909, 0xe43ad49d -910, 0x3bc16e0c -911, 0x5bacee76 -912, 0xb094a72e -913, 0x629eeb76 -914, 0xef07120 -915, 0xeaae9f22 -916, 0xbb0fc073 -917, 0x1d231657 -918, 0xe1b86a7c -919, 0xa1917199 -920, 0x45be6cae -921, 0x220029f2 -922, 0x6109df6b -923, 0x5fce7e34 -924, 0x5fd1dfe9 -925, 0x530c326e -926, 0xbfb09640 -927, 0xae1c0d4c -928, 0x3ce0ef76 -929, 0xcba82a49 -930, 0x2bfe9092 -931, 0x8101cb04 -932, 0x7304c707 -933, 0x4bd68a83 -934, 0x4df1a430 -935, 0xe2ce6c4c -936, 0xd6d51925 -937, 0x5a143074 -938, 0x3cdca5ed -939, 0xbd072630 -940, 0x809c986d -941, 0x8e2c27d2 -942, 0xf14d28b3 -943, 0x3396aa31 -944, 0xa24dac47 -945, 0x8c6bbf5a -946, 0xde06adb1 -947, 0x85074fee -948, 0xf0b1951d -949, 0x5949d203 -950, 0xc032204a -951, 0x64d7e54 -952, 0xb31759ea -953, 0x2619ad41 -954, 0xf7cc9777 -955, 0x21c10e14 -956, 0xfe910cd0 -957, 0xb53a142a -958, 0x73aa95f2 -959, 0xb585c01c -960, 0x1224859a -961, 0x9c9b8b57 -962, 0x4af48cb4 -963, 0xac021930 -964, 0x2700b7c2 -965, 0x72906666 -966, 0x6ae06309 -967, 0xb2321d02 -968, 0x219c2d74 -969, 0x60d9fb6c -970, 0x9aa776e9 -971, 0x199bb359 -972, 0x61ffb57c -973, 0xf5d36375 -974, 0xe5380264 -975, 0x128b105a -976, 0xf7c16444 -977, 0x4f0e269 -978, 0x8c00a60a -979, 0xfac5500c -980, 0x465ad668 -981, 0x2602a8e1 -982, 0x979c69a5 -983, 0x423a50a7 -984, 0xe59223a0 -985, 0x372ce57a -986, 0x681fad21 -987, 0x9475239a -988, 0x8d550063 -989, 0xf9cadcd9 -990, 0x458b0932 -991, 0x45e3e958 -992, 0x7497fcd2 -993, 0xf856d714 -994, 0x66d6b2de -995, 0x686fe9c -996, 0x3f980648 -997, 0xe356d512 -998, 0x81807599 -999, 0xb5676398 +0, 0x7ab4ea94 +1, 0x9b561119 +2, 0x4957d02e +3, 0x7dd3fdc2 +4, 0x5affe54 +5, 0x5a01741c +6, 0x8b9e8c1f +7, 0xda5bf11a +8, 0x509226 +9, 0x64e2ea17 +10, 0x82c6dab5 +11, 0xe4302515 +12, 0x8198b873 +13, 0xc3ec9a82 +14, 0x829dff28 +15, 0x5278e44f +16, 0x994a7d2c +17, 0xf1c89398 +18, 0xaf2fddec +19, 0x22abc6ee +20, 0x963dbd43 +21, 0xc29edffb +22, 0x41c1ce07 +23, 0x9c90034d +24, 0x1f17a796 +25, 0x3833caa8 +26, 0xb8795528 +27, 0xebc595a2 +28, 0xf8f5b5dd +29, 0xc2881f72 +30, 0x18e5d3f0 +31, 0x9b19ac7a +32, 0xb9992436 +33, 0xc00052b3 +34, 0xb63f4475 +35, 0x962642d9 +36, 0x63506c10 +37, 0x2be6b127 +38, 0x569bdbc6 +39, 0x7f185e01 +40, 0xebb55f53 +41, 0x1c30198c +42, 0x7c8d75c6 +43, 0xd3f2186b +44, 0xaca5b9b1 +45, 0xbc49ff45 +46, 0xc4a802af +47, 0x2cecd86f +48, 0x8e0da529 +49, 0x1f22b00e +50, 0x4559ea80 +51, 0x60f587d8 +52, 0x7c7460e9 +53, 0x67be0a4a +54, 0x987a0183 +55, 0x7bd30f1 +56, 0xab18c4ac +57, 0xffdbfb64 +58, 0x9ea917f9 +59, 0x1239dab7 +60, 0x38efabeb +61, 0x5da91888 +62, 0x8f49ed62 +63, 0x83f60b1e +64, 0x5950a3fc +65, 0xd8911104 +66, 0x19e8859e +67, 0x1a4d89ec +68, 0x968ca180 +69, 0x9e1b6da3 +70, 0x3d99c2c +71, 0x55f76289 +72, 0x8fa28b9e +73, 0x9fe01d33 +74, 0xdade4e38 +75, 0x1ea04290 +76, 0xa7263313 +77, 0xaafc762e +78, 0x460476d6 +79, 0x31226e12 +80, 0x451d3f05 +81, 0xd0d2764b +82, 0xd06e1ab3 +83, 0x1394e3f4 +84, 0x2fc04ea3 +85, 0x5b8401c +86, 0xebd6c929 +87, 0xe881687c +88, 0x94bdd66a +89, 0xabf85983 +90, 0x223ad12d +91, 0x2aaeeaa3 +92, 0x1f704934 +93, 0x2db2efb6 +94, 0xf49b8dfb +95, 0x5bdbbb9d +96, 0xba0cd0db +97, 0x4ec4674e +98, 0xad0129e +99, 0x7a66129b +100, 0x50d12c5e +101, 0x85b1d335 +102, 0x3efda58a +103, 0xecd886fb +104, 0x8ecadd3d +105, 0x60ebac0f +106, 0x5e10fe79 +107, 0xa84f7e5d +108, 0x43931288 +109, 0xfacf448 +110, 0x4ee01997 +111, 0xcdc0a651 +112, 0x33c87037 +113, 0x8b50fc03 +114, 0xf52aad34 +115, 0xda6cd856 +116, 0x7585bea0 +117, 0xe947c762 +118, 0x4ddff5d8 +119, 0xe0e79b3b +120, 0xb804cf09 +121, 0x84765c44 +122, 0x3ff666b4 +123, 0xe31621ad +124, 0x816f2236 +125, 0x228176bc +126, 0xfdc14904 +127, 0x635f5077 +128, 0x6981a817 +129, 0xfd9a0300 +130, 0xd3fa8a24 +131, 0xd67c1a77 +132, 0x903fe97a +133, 0xf7c4a4d5 +134, 0x109f2058 +135, 0x48ab87fe +136, 0xfd6f1928 +137, 0x707e9452 +138, 0xf327db9e +139, 0x7b80d76d +140, 0xfb6ba193 +141, 0x454a1ad0 +142, 0xe20b51e +143, 0xb774d085 +144, 0x6b1ed574 +145, 0xb1e77de4 +146, 0xe2a83b37 +147, 0x33d3176f +148, 0x2f0ca0fc +149, 0x17f51e2 +150, 0x7c1fbf55 +151, 0xf09e9cd0 +152, 0xe3d9bacd +153, 0x4244db0a +154, 0x876c09fc +155, 0x9db4fc2f +156, 0xd3771d60 +157, 0x25fc6a75 +158, 0xb309915c +159, 0xc50ee027 +160, 0xaa5b7b38 +161, 0x4c650ded +162, 0x1acb2879 +163, 0x50db5887 +164, 0x90054847 +165, 0xfef23e5b +166, 0x2dd7b7d5 +167, 0x990b8c2e +168, 0x6001a601 +169, 0xb5d314c4 +170, 0xfbfb7bf9 +171, 0x1aba997d +172, 0x814e7304 +173, 0x989d956a +174, 0x86d5a29c +175, 0x70a9fa08 +176, 0xc4ccba87 +177, 0x7e9cb366 +178, 0xee18eb0a +179, 0x44f5be58 +180, 0x91d4af2d +181, 0x5ab6e593 +182, 0x9fd6bb4d +183, 0x85894ce +184, 0x728a2401 +185, 0xf006f6d4 +186, 0xd782741e +187, 0x842cd5bd +188, 0xfb5883aa +189, 0x7e5a471 +190, 0x83ff6965 +191, 0xc9675c6b +192, 0xb6ced3c7 +193, 0x3de6425b +194, 0x25e14db4 +195, 0x69ca3dec +196, 0x81342d13 +197, 0xd7cd8417 +198, 0x88d15e69 +199, 0xefba17c9 +200, 0x43d595e6 +201, 0x89d4cf25 +202, 0x7cae9b9b +203, 0x2242c621 +204, 0x27fc3598 +205, 0x467b1d84 +206, 0xe84d4622 +207, 0xa26bf980 +208, 0x80411010 +209, 0xe2c2bfea +210, 0xbc6ca25a +211, 0x3ddb592a +212, 0xdd46eb9e +213, 0xdfe8f657 +214, 0x2cedc974 +215, 0xf0dc546b +216, 0xd46be68f +217, 0x26d8a5aa +218, 0x76e96ba3 +219, 0x7d5b5353 +220, 0xf532237c +221, 0x6478b79 +222, 0x9b81a5e5 +223, 0x5fc68e5c +224, 0x68436e70 +225, 0x2a0043f9 +226, 0x108d523c +227, 0x7a4c32a3 +228, 0x9c84c742 +229, 0x6f813dae +230, 0xfcc5bbcc +231, 0x215b6f3a +232, 0x84cb321d +233, 0x7913a248 +234, 0xb1e6b585 +235, 0x49376b31 +236, 0x1dc896b0 +237, 0x347051ad +238, 0x5524c042 +239, 0xda0eef9d +240, 0xf2e73342 +241, 0xbeee2f9d +242, 0x7c702874 +243, 0x9eb3bd34 +244, 0x97b09700 +245, 0xcdbab1d4 +246, 0x4a2f6ed1 +247, 0x2047bda5 +248, 0x3ecc7005 +249, 0x8d0d5e67 +250, 0x40876fb5 +251, 0xb5fd2187 +252, 0xe915d8af +253, 0x9a2351c7 +254, 0xccc658ae +255, 0xebb1eddc +256, 0xc4a83671 +257, 0xffb2548f +258, 0xe4fe387a +259, 0x477aaab4 +260, 0x8475a4e4 +261, 0xf8823e46 +262, 0xe4130f71 +263, 0xbdb54482 +264, 0x98fe0462 +265, 0xf36b27b8 +266, 0xed7733da +267, 0x5f428afc +268, 0x43a3a21a +269, 0xf8370b55 +270, 0xfade1de1 +271, 0xd9a038ea +272, 0x3c69af23 +273, 0x24df7dd0 +274, 0xf66d9353 +275, 0x71d811be +276, 0xcc4d024b +277, 0xb8c30bf0 +278, 0x4198509d +279, 0x8b37ba36 +280, 0xa41ae29a +281, 0x8cf7799e +282, 0x5cd0136a +283, 0xa11324ef +284, 0x2f8b6d4b +285, 0x3657cf17 +286, 0x35b6873f +287, 0xee6e5bd7 +288, 0xbeeaa98 +289, 0x9ad3c581 +290, 0xe2376c3f +291, 0x738027cc +292, 0x536ac839 +293, 0xf066227 +294, 0x6c9cb0f9 +295, 0x84082ae6 +296, 0xab38ae9d +297, 0x493eade9 +298, 0xcb630b3a +299, 0x64d44250 +300, 0xe5efb557 +301, 0xea2424d9 +302, 0x11a690ba +303, 0x30a48ae4 +304, 0x58987e53 +305, 0x94ec6076 +306, 0x5d3308fa +307, 0xf1635ebb +308, 0x56a5ab90 +309, 0x2b2f2ee4 +310, 0x6f9e6483 +311, 0x8b93e327 +312, 0xa7ce140b +313, 0x4c8aa42 +314, 0x7657bb3f +315, 0xf250fd75 +316, 0x1edfcb0f +317, 0xdb42ace3 +318, 0xf8147e16 +319, 0xd1992bd +320, 0x64bb14d1 +321, 0x423e724d +322, 0x7b172f7c +323, 0x17171696 +324, 0x4acaf83b +325, 0x7a83527e +326, 0xfc980c60 +327, 0xc8b56bb +328, 0x2453f77f +329, 0x85ad1bf9 +330, 0x62a85dfe +331, 0x48238c4d +332, 0xbb3ec1eb +333, 0x4c1c039c +334, 0x1f37f571 +335, 0x98aecb63 +336, 0xc3b3ddd6 +337, 0xd22dad4 +338, 0xe49671a3 +339, 0xe3baf945 +340, 0xb9e21680 +341, 0xda562856 +342, 0xe8b88ce4 +343, 0x86f88de2 +344, 0x986faf76 +345, 0x6f0025c3 +346, 0x3fe21234 +347, 0xd8d3f729 +348, 0xc2d11c6f +349, 0xd4f9e8f +350, 0xf61a0aa +351, 0xc48bb313 +352, 0xe944e940 +353, 0xf1801b2e +354, 0x253590be +355, 0x981f069d +356, 0x891454d8 +357, 0xa4f824ad +358, 0x6dd2cc48 +359, 0x3018827e +360, 0x3fb329e6 +361, 0x65276517 +362, 0x8d2c0dd2 +363, 0xc965b48e +364, 0x85d14d90 +365, 0x5a51623c +366, 0xa9573d6a +367, 0x82d00edf +368, 0x5ed7ce07 +369, 0x1d946abc +370, 0x24fa567b +371, 0x83ef5ecc +372, 0x9001724a +373, 0xc4fe48f3 +374, 0x1e07c25c +375, 0xf4d5e65e +376, 0xb734f6e9 +377, 0x327a2df8 +378, 0x766d59b7 +379, 0x625e6b61 +380, 0xe82f32d7 +381, 0x1566c638 +382, 0x2e815871 +383, 0x606514aa +384, 0x36b7386e +385, 0xcaa8ce08 +386, 0xb453fe9c +387, 0x48574e23 +388, 0x71f0da06 +389, 0xa8a79463 +390, 0x6b590210 +391, 0x86e989db +392, 0x42899f4f +393, 0x7a654ef9 +394, 0x4c4fe932 +395, 0x77b2fd10 +396, 0xb6b4565c +397, 0xa2e537a3 +398, 0xef5a3dca +399, 0x41235ea8 +400, 0x95c90541 +401, 0x50ad32c4 +402, 0xc1b8e0a4 +403, 0x498e9aab +404, 0xffc965f1 +405, 0x72633485 +406, 0x3a731aef +407, 0x7cfddd0b +408, 0xb04d4129 +409, 0x184fc28e +410, 0x424369b0 +411, 0xf9ae13a1 +412, 0xaf357c8d +413, 0x7a19228e +414, 0xb46de2a8 +415, 0xeff2ac76 +416, 0xa6c9357b +417, 0x614f19c1 +418, 0x8ee1a53f +419, 0xbe1257b1 +420, 0xf72651fe +421, 0xd347c298 +422, 0x96dd2f23 +423, 0x5bb1d63e +424, 0x32e10887 +425, 0x36a144da +426, 0x9d70e791 +427, 0x5e535a25 +428, 0x214253da +429, 0x2e43dd40 +430, 0xfc0413f4 +431, 0x1f5ea409 +432, 0x1754c126 +433, 0xcdbeebbe +434, 0x1fb44a14 +435, 0xaec7926 +436, 0xb9d9a1e +437, 0x9e4a6577 +438, 0x8b1f04c5 +439, 0x19854e8a +440, 0x531080cd +441, 0xc0cbd73 +442, 0x20399d77 +443, 0x7d8e9ed5 +444, 0x66177598 +445, 0x4d18a5c2 +446, 0xe08ebf58 +447, 0xb1f9c87b +448, 0x66bedb10 +449, 0x26670d21 +450, 0x7a7892da +451, 0x69b69d86 +452, 0xd04f1d1c +453, 0xaf469625 +454, 0x7946b813 +455, 0x1ee596bd +456, 0x7f365d85 +457, 0x795b662b +458, 0x194ad02d +459, 0x5a9649b5 +460, 0x6085e278 +461, 0x2cf54550 +462, 0x9c77ea0b +463, 0x3c6ff8b +464, 0x2141cd34 +465, 0xb90bc671 +466, 0x35037c4b +467, 0xd04c0d76 +468, 0xc75bff8 +469, 0x8f52003b +470, 0xfad3d031 +471, 0x667024bc +472, 0xcb04ea36 +473, 0x3e03d587 +474, 0x2644d3a0 +475, 0xa8fe99ba +476, 0x2b9a55fc +477, 0x45c4d44a +478, 0xd059881 +479, 0xe07fcd20 +480, 0x4e22046c +481, 0x7c2cbf81 +482, 0xbf7f23de +483, 0x69d924c3 +484, 0xe53cd01 +485, 0x3879017c +486, 0xa590e558 +487, 0x263bc076 +488, 0x245465b1 +489, 0x449212c6 +490, 0x249dcb29 +491, 0x703d42d7 +492, 0x140eb9ec +493, 0xc86c5741 +494, 0x7992aa5b +495, 0xb8b76a91 +496, 0x771dac3d +497, 0x4ecd81e3 +498, 0xe5ac30b3 +499, 0xf4d7a5a6 +500, 0xac24b97 +501, 0x63494d78 +502, 0x627ffa89 +503, 0xfa4f330 +504, 0x8098a1aa +505, 0xcc0c61dc +506, 0x34749fa0 +507, 0x7f217822 +508, 0x418d6f15 +509, 0xa4b6e51e +510, 0x1036de68 +511, 0x1436986e +512, 0x44df961d +513, 0x368e4651 +514, 0x6a9e5d8c +515, 0x27d1597e +516, 0xa1926c62 +517, 0x8d1f2b55 +518, 0x5797eb42 +519, 0xa90f9e81 +520, 0x57547b10 +521, 0xdbbcca8e +522, 0x9edd2d86 +523, 0xbb0a7527 +524, 0x7662380c +525, 0xe7c98590 +526, 0x950fbf3f +527, 0xdc2b76b3 +528, 0x8a945102 +529, 0x3f0a1a85 +530, 0xeb215834 +531, 0xc59f2802 +532, 0xe2a4610 +533, 0x8b5a8665 +534, 0x8b2d9933 +535, 0x40a4f0bc +536, 0xaab5bc67 +537, 0x1442a69e +538, 0xdf531193 +539, 0x698d3db4 +540, 0x2d40324e +541, 0x1a25feb2 +542, 0xe8cc898f +543, 0xf12e98f5 +544, 0xc03ad34c +545, 0xf62fceff +546, 0xdd827e1e +547, 0x7d8ccb3b +548, 0xab2d6bc1 +549, 0xc323a124 +550, 0x8184a19a +551, 0xc3c4e934 +552, 0x5487424d +553, 0xd6a81a44 +554, 0x90a8689d +555, 0xe69c4c67 +556, 0xbdae02dd +557, 0x72a18a79 +558, 0x2a88e907 +559, 0x31cf4b5d +560, 0xb157772f +561, 0x206ba601 +562, 0x18529232 +563, 0x7dac90d8 +564, 0x3a5f8a09 +565, 0x9f4b64a3 +566, 0xae373af9 +567, 0x1d79447c +568, 0x2a23684b +569, 0x41fb7ba4 +570, 0x55e4bb9e +571, 0xd7619d3e +572, 0xc04e4dd8 +573, 0x8418d516 +574, 0x2b2ca585 +575, 0xfa8eedf +576, 0x5bafd977 +577, 0x31974fb0 +578, 0x9eb6697b +579, 0xc8be22f5 +580, 0x173b126a +581, 0x8809becf +582, 0x3e41efe1 +583, 0x3d6cbbb8 +584, 0x278c81d8 +585, 0xa6f08434 +586, 0xa0e6601d +587, 0x2fccd88d +588, 0x3cbc8beb +589, 0x5f65d864 +590, 0xa1ff8ddf +591, 0x609dcb7c +592, 0x4a4e1663 +593, 0xeae5531 +594, 0x962a7c85 +595, 0x1e110607 +596, 0x8c5db5d0 +597, 0xc7f2337e +598, 0xc94fcc9c +599, 0xe7f62629 +600, 0x6c9aa9f8 +601, 0x2e27fe0e +602, 0x4d0dae12 +603, 0x9eecf588 +604, 0x977ba3f2 +605, 0xed0a51af +606, 0x3f3ec633 +607, 0xc174b2ec +608, 0x590be8a9 +609, 0x4f630d18 +610, 0xf579e989 +611, 0xe2a55584 +612, 0xee11edcd +613, 0x150a4833 +614, 0xc0a0535c +615, 0xb5e00993 +616, 0xb6435700 +617, 0xa98dbff +618, 0x315716af +619, 0x94395776 +620, 0x6cbd48d9 +621, 0xab17f8fc +622, 0xa794ffb7 +623, 0x6b55e231 +624, 0x89ff5783 +625, 0x431dcb26 +626, 0x270f9bf8 +627, 0x2af1b8d0 +628, 0x881745ed +629, 0x17e1be4e +630, 0x132a0ec4 +631, 0x5712df17 +632, 0x2dfb3334 +633, 0xf5a35519 +634, 0xcafbdac6 +635, 0x73b6189d +636, 0x10107cac +637, 0x18c1045e +638, 0xbc19bbad +639, 0x8b4f05ac +640, 0x5830d038 +641, 0x468cd98a +642, 0x5b83a201 +643, 0xf0ccdd9c +644, 0xcb20c4bd +645, 0x1ff186c9 +646, 0xcdddb47f +647, 0x5c65ce6 +648, 0xb748c580 +649, 0x23b6f262 +650, 0xe2ba8e5c +651, 0x9a164a03 +652, 0x62d3322e +653, 0x918d8b43 +654, 0x45c8b49d +655, 0xce172c6e +656, 0x23febc6 +657, 0x84fdc5b7 +658, 0xe7d1fd82 +659, 0xf0ddf3a6 +660, 0x87050436 +661, 0x13d46375 +662, 0x5b191c78 +663, 0x2cbd99c0 +664, 0x7686c7f +665, 0xcff56c84 +666, 0x7f9b4486 +667, 0xefc997fe +668, 0x984d4588 +669, 0xfa44f36a +670, 0x7a5276c1 +671, 0xcfde6176 +672, 0xcacf7b1d +673, 0xcffae9a7 +674, 0xe98848d5 +675, 0xd4346001 +676, 0xa2196cac +677, 0x217f07dc +678, 0x42d5bef +679, 0x6f2e8838 +680, 0x4677a24 +681, 0x4ad9cd54 +682, 0x43df42af +683, 0x2dde417 +684, 0xaef5acb1 +685, 0xf377f4b3 +686, 0x7d870d40 +687, 0xe53df1c2 +688, 0xaeb5be50 +689, 0x7c92eac0 +690, 0x4f00838c +691, 0x91e05e84 +692, 0x23856c80 +693, 0xc4266fa6 +694, 0x912fddb +695, 0x34d42d22 +696, 0x6c02ffa +697, 0xe47d093 +698, 0x183c55b3 +699, 0xc161d142 +700, 0x3d43ff5f +701, 0xc944a36 +702, 0x27bb9fc6 +703, 0x75c91080 +704, 0x2460d0dc +705, 0xd2174558 +706, 0x68062dbf +707, 0x778e5c6e +708, 0xa4dc9a +709, 0x7a191e69 +710, 0xc084b2ba +711, 0xbb391d2 +712, 0x88849be +713, 0x69c02714 +714, 0x69d4a389 +715, 0x8f51854d +716, 0xaf10bb82 +717, 0x4d5d1c77 +718, 0x53b53109 +719, 0xa0a92aa0 +720, 0x83ecb757 +721, 0x5325752a +722, 0x114e466e +723, 0x4b3f2780 +724, 0xa7a6a39c +725, 0x5e723357 +726, 0xa6b8be9b +727, 0x157c32ff +728, 0x8b898012 +729, 0xd7ff2b1e +730, 0x69cd8444 +731, 0x6ad8030c +732, 0xa08a49ec +733, 0xfbc055d3 +734, 0xedf17e46 +735, 0xc9526200 +736, 0x3849b88a +737, 0x2746860b +738, 0xae13d0c1 +739, 0x4f15154f +740, 0xd65c3975 +741, 0x6a377278 +742, 0x54d501f7 +743, 0x81a054ea +744, 0x143592ba +745, 0x97714ad6 +746, 0x4f9926d9 +747, 0x4f7ac56d +748, 0xe87ca939 +749, 0x58b76f6f +750, 0x60901ad8 +751, 0x3e401bb6 +752, 0xa058468e +753, 0xc0bb14f6 +754, 0x2cb8f02a +755, 0x7c2cf756 +756, 0x34c31de5 +757, 0x9b243e83 +758, 0xa5c85ab4 +759, 0x2741e3b3 +760, 0x1249000e +761, 0x3fc4e72b +762, 0xa3e038a2 +763, 0x952dd92c +764, 0x2b821966 +765, 0xfa81b365 +766, 0x530919b9 +767, 0x4486d66f +768, 0xccf4f3c1 +769, 0xa8bddd1d +770, 0xcc295eb9 +771, 0xfccbe42f +772, 0x38bacd8d +773, 0x2261854f +774, 0x56068c62 +775, 0x9bdaeb8 +776, 0x555fa5b6 +777, 0x20fe615e +778, 0x49fb23d3 +779, 0xd093bad6 +780, 0x54919e86 +781, 0x7373eb24 +782, 0xfbaa7a98 +783, 0x5f62fb39 +784, 0xe03bc9ec +785, 0xa5074d41 +786, 0xa1cefb1 +787, 0x13912d74 +788, 0xf6421b8 +789, 0xfcb48812 +790, 0x8f1db50b +791, 0xc1654b87 +792, 0x948b43c2 +793, 0xf503ef77 +794, 0x117d891d +795, 0x5493ffa +796, 0x171313b1 +797, 0xa4b62e1e +798, 0x77454ea6 +799, 0xbea0aff0 +800, 0x13c36389 +801, 0xe3b60bac +802, 0xa176bed3 +803, 0x2863d428 +804, 0xe2314f46 +805, 0xa85cd3d4 +806, 0x7866e57 +807, 0x8f03f5bc +808, 0x239ae +809, 0x46f279fb +810, 0xcca00559 +811, 0xaa07a104 +812, 0x89123d08 +813, 0x2e6856ba +814, 0x43a9780d +815, 0x676cff25 +816, 0x6744b87d +817, 0xee260d4f +818, 0xb98d8b77 +819, 0x9b0ca455 +820, 0x659f6fe +821, 0x28d20d1c +822, 0x601f2657 +823, 0xdec3073e +824, 0x61263863 +825, 0x1a13435a +826, 0x27497d1e +827, 0x17a8458e +828, 0xdddc407d +829, 0x4bb2e8ac +830, 0x16b2aedb +831, 0x77ccd696 +832, 0x9d108fcd +833, 0x25ad233e +834, 0xaa9bc370 +835, 0xa873ab50 +836, 0xaf19c9d9 +837, 0x696e1e6b +838, 0x1fdc4bf4 +839, 0x4c2ebc81 +840, 0xde4929ed +841, 0xf4d0c10c +842, 0xb6595b76 +843, 0x75cbb1b3 +844, 0xbcb6de49 +845, 0xe23157fd +846, 0x5e596078 +847, 0xa69b0d29 +848, 0x2118a41 +849, 0x7088c16 +850, 0xc75e1e1 +851, 0x6a4af2d6 +852, 0xf19c6521 +853, 0xaff7b3b1 +854, 0x615295c7 +855, 0xbda3a8d7 +856, 0x5b5ca72e +857, 0xdad9d80f +858, 0xfa81c084 +859, 0xf4703fa +860, 0x3ca54540 +861, 0xa8961d51 +862, 0x53d1ecc2 +863, 0x808d83b6 +864, 0x68e8c48e +865, 0x89be2039 +866, 0x9088ea11 +867, 0xb8665d12 +868, 0x91272f9 +869, 0x53dddff2 +870, 0xb7a54ab +871, 0xd2b645ca +872, 0x99fb8590 +873, 0x5315c8e +874, 0x2a913806 +875, 0x7f15eb2b +876, 0xa7f1cc5d +877, 0xbb2ee836 +878, 0xd9fafd60 +879, 0x17448d6f +880, 0x999ec436 +881, 0x482ec606 +882, 0x9b403c0e +883, 0x569eb51b +884, 0xb275d1a6 +885, 0xadd29c31 +886, 0xb7ebdb15 +887, 0xdfef3662 +888, 0x51aba6db +889, 0x6d41946d +890, 0x77bf8896 +891, 0xcafa6fab +892, 0x976ab40f +893, 0x49a6d86b +894, 0x56639e55 +895, 0x9945b996 +896, 0x81459b50 +897, 0xbce97542 +898, 0xe397c9c9 +899, 0x247a5955 +900, 0xb72b1573 +901, 0x86306f86 +902, 0x34f65dc5 +903, 0x909360c0 +904, 0xf3f696ef +905, 0xcb9faae5 +906, 0x93daecd9 +907, 0xde1af7af +908, 0x43a1f2d +909, 0x6d75cde5 +910, 0x9e412b6 +911, 0x5673fed +912, 0x16bb511a +913, 0x35ef4cca +914, 0x4e615aca +915, 0x5cdaf47a +916, 0x26676047 +917, 0x8c199325 +918, 0x2adf0cb9 +919, 0x84f2e6fd +920, 0x5e627f64 +921, 0xb7cee354 +922, 0x542ab4a6 +923, 0xe59cd83b +924, 0x89cc3f10 +925, 0x92b0f5f +926, 0xc1328370 +927, 0x8208d9f7 +928, 0x68eb00cf +929, 0xfadd4ac4 +930, 0x2517784f +931, 0x4042b99 +932, 0x75ce0230 +933, 0x97c5a1b4 +934, 0x1a97f709 +935, 0x4c62781e +936, 0xf530a83 +937, 0x75776413 +938, 0x321c7240 +939, 0x6afe4e36 +940, 0xad00a2b4 +941, 0xbc05477d +942, 0xb0911e80 +943, 0x9935b87d +944, 0xd535eec5 +945, 0x149af45e +946, 0x786934b0 +947, 0xbc13cdac +948, 0x208bfa2e +949, 0xcf4b39cc +950, 0x6ac6c172 +951, 0xbfa9a37 +952, 0x42d28db6 +953, 0x2bf1ea63 +954, 0xbed6e677 +955, 0x50325d27 +956, 0xa79d3b8b +957, 0x52448bb1 +958, 0xefaad1bd +959, 0x833a2e54 +960, 0xd9de549a +961, 0x9f59672f +962, 0x9d5f5f16 +963, 0x1c914489 +964, 0xc08fa058 +965, 0xb188698b +966, 0xdc4672b5 +967, 0x594f720e +968, 0x56ed428f +969, 0x9b0898af +970, 0x8a64d3d5 +971, 0x773308d6 +972, 0x84d62098 +973, 0x46da7cf9 +974, 0x1114eae7 +975, 0xf9f2a092 +976, 0x5363a28 +977, 0xf2db7b3a +978, 0x102c71a9 +979, 0xe8e76aaf +980, 0x77a97b3b +981, 0x77b090d +982, 0x1099620e +983, 0xa6daaae6 +984, 0x86ff4713 +985, 0xc0ef85b8 +986, 0xf621d409 +987, 0xfd1561e2 +988, 0x4bcc687d +989, 0x596f760 +990, 0x7c8819f9 +991, 0x8cb865b8 +992, 0xadea115a +993, 0x56609348 +994, 0xb321ac14 +995, 0x1bac7db2 +996, 0x5fe6ee2 +997, 0xe9bfe072 +998, 0x15549e74 +999, 0xad8c191b diff --git a/numpy/random/tests/data/pcg32-testset-1.csv b/numpy/random/tests/data/pcg32-testset-1.csv deleted file mode 100644 index 6bddc8d5c..000000000 --- a/numpy/random/tests/data/pcg32-testset-1.csv +++ /dev/null @@ -1,1001 +0,0 @@ -seed, 0xdeadbeaf -0, 0xbeb77374 -1, 0x75cad014 -2, 0xabc6773e -3, 0xe99a034e -4, 0x1e3f5c6d -5, 0x513d3c5b -6, 0x4a378bad -7, 0xba5b3488 -8, 0x21e96448 -9, 0x5197a3d3 -10, 0x84bbcc90 -11, 0x674fce76 -12, 0xd1dd9879 -13, 0x1625afd4 -14, 0x4bb5e330 -15, 0x3f4b8f74 -16, 0xf0a7c00b -17, 0xecdb92d0 -18, 0xf069232c -19, 0x56dbeaa2 -20, 0x70c62231 -21, 0x6c68e57e -22, 0x3829213c -23, 0x9b8bc5e6 -24, 0x45abd553 -25, 0xf5991ce7 -26, 0xb4aff20a -27, 0x677a5785 -28, 0x108f180d -29, 0x2b3f1001 -30, 0x838fdfcb -31, 0x8ad3c2a0 -32, 0x596268fa -33, 0xee6bcc56 -34, 0x46810af0 -35, 0x1648a587 -36, 0x7265a926 -37, 0xed0f3acc -38, 0x72a1ac0 -39, 0xb3f7109f -40, 0x6ddd75f2 -41, 0xa968127f -42, 0x40df20fd -43, 0xde835b80 -44, 0xe453cd68 -45, 0x26ad68eb -46, 0x23a052d2 -47, 0x17881c5c -48, 0x785d41b9 -49, 0x61b4530a -50, 0x5ee92c84 -51, 0x4cad7358 -52, 0x843db584 -53, 0x3576368b -54, 0x14db6b2b -55, 0xb6e8b042 -56, 0x6323e866 -57, 0x9a709e25 -58, 0xae594bdc -59, 0x4be9ec1b -60, 0x77b4fd05 -61, 0x4421667 -62, 0x24bf98f7 -63, 0xfb202aed -64, 0x2f01b05f -65, 0xac766e69 -66, 0xc1572ce2 -67, 0xb26354d6 -68, 0x4db5f193 -69, 0x41a4609b -70, 0x26bbb4cc -71, 0x676b7438 -72, 0x13b2be7d -73, 0x7df521c4 -74, 0x57f770f3 -75, 0x78a8a8 -76, 0x164d46c6 -77, 0xbb29da20 -78, 0x5c262bf9 -79, 0xfd305d0 -80, 0xb500d90b -81, 0xbb7b4e37 -82, 0x5ba2bbfd -83, 0xa9561043 -84, 0xe175c662 -85, 0x3a5c8eec -86, 0xac5e2184 -87, 0x1e1c7de7 -88, 0x46be092a -89, 0x8b82f5be -90, 0xb1c1b591 -91, 0x6f06d957 -92, 0x1d26dc5c -93, 0x158c57e3 -94, 0x6da1ebf8 -95, 0x74501e60 -96, 0x70587043 -97, 0xa19b90fe -98, 0x7d327dff -99, 0x22dc6b90 -100, 0xf48a9ae6 -101, 0x75eeb769 -102, 0x9cdc12cb -103, 0x7fe2cdc6 -104, 0x4fba8066 -105, 0x1a7a0667 -106, 0xd9289d22 -107, 0x3a045bce -108, 0x60e5f71f -109, 0xd81b35dc -110, 0xceae6194 -111, 0xa032a688 -112, 0x7157b327 -113, 0x61c74c80 -114, 0x2d519c39 -115, 0x5b1a352e -116, 0x5ad266da -117, 0x9118352b -118, 0xdd20b6e1 -119, 0xc0d154fa -120, 0x93bbb9c9 -121, 0x91170de2 -122, 0xa3af5e05 -123, 0x1b19ff2f -124, 0xf814c3bf -125, 0x8914a953 -126, 0x5278efb7 -127, 0x3c96d7bd -128, 0xb5422a7 -129, 0x2aee2619 -130, 0x60c6a90c -131, 0xfbec0e9c -132, 0xef794075 -133, 0xda93d22e -134, 0xb956d02a -135, 0xd97cc49b -136, 0x80737244 -137, 0x7c56a95 -138, 0xa5311355 -139, 0x7dcdd592 -140, 0x92add23e -141, 0xb1ba1317 -142, 0x507e5330 -143, 0x2644b95a -144, 0xa1afa519 -145, 0x596c65c0 -146, 0x6f47dd11 -147, 0xfd2fbada -148, 0x98675d7c -149, 0xb9e21413 -150, 0x8bae5eca -151, 0xe1f50018 -152, 0x7dd08715 -153, 0x36a888e1 -154, 0x7fcd6364 -155, 0xb84c093 -156, 0x18e2d58f -157, 0x19fd21ed -158, 0x3c25e3a3 -159, 0x7a0d833b -160, 0x47525b28 -161, 0xba88474 -162, 0xd108e7da -163, 0x32b06660 -164, 0xbce027b3 -165, 0x96b31787 -166, 0x916ab263 -167, 0xa5fa088 -168, 0x3cb9cd59 -169, 0x7a97051f -170, 0x104b6883 -171, 0x6e08c314 -172, 0x33a4c62c -173, 0x14eb854 -174, 0x873f730a -175, 0x8c3f7224 -176, 0x9a41beeb -177, 0xe4e2ab0a -178, 0xfa89ad0e -179, 0x4aa62ac3 -180, 0xb75dc1bf -181, 0x3f4c5131 -182, 0x3fef0f91 -183, 0xffa06655 -184, 0x417d7d38 -185, 0x1e7734df -186, 0x25685235 -187, 0x33fe5b68 -188, 0x68923f72 -189, 0x5da45ff -190, 0xb871df26 -191, 0xd3ffd8c6 -192, 0x1718d862 -193, 0xe127d844 -194, 0xadcdc48a -195, 0x79ee30cb -196, 0x931a6cba -197, 0x9463c42d -198, 0x9f8d2806 -199, 0xa3695a97 -200, 0xfc9587bc -201, 0xb3943573 -202, 0x50ed8901 -203, 0x6891f33 -204, 0xb7a12dfb -205, 0x1245cf5d -206, 0xbc0f73a7 -207, 0x26cbfeb2 -208, 0x774d8e83 -209, 0xa19e9c1 -210, 0xc147a437 -211, 0xe034f2a3 -212, 0xd288b664 -213, 0xdcd0356d -214, 0x2b695901 -215, 0x3bc31736 -216, 0x4a5b1998 -217, 0x18537410 -218, 0x11b40f35 -219, 0xf16f6f89 -220, 0xe844cffe -221, 0xce026166 -222, 0x3770aaba -223, 0xc62566ee -224, 0x6db2d1f8 -225, 0xe4720b6d -226, 0x68321a69 -227, 0x488539ac -228, 0x5e18ab61 -229, 0xb58e598e -230, 0x6f501a91 -231, 0xc4fd3e8d -232, 0x9faa3631 -233, 0x184366b0 -234, 0xecf74d6a -235, 0x3773d622 -236, 0x382ca536 -237, 0x93451381 -238, 0x9f148ed5 -239, 0x2b66f241 -240, 0xa6807c39 -241, 0xbb087446 -242, 0xa18ba432 -243, 0x8e7a6013 -244, 0xab30278e -245, 0xbf457c78 -246, 0xb24814b1 -247, 0x710f99d5 -248, 0xbcb84762 -249, 0x4913a7e7 -250, 0x90a31a0c -251, 0x6d4b1673 -252, 0x18873994 -253, 0x1efd517a -254, 0x99b499d1 -255, 0x2d488776 -256, 0x1cded201 -257, 0xa53b02e4 -258, 0xcb20d0fd -259, 0x72bfaae3 -260, 0x858c865b -261, 0x2e2d3e96 -262, 0x8bc5b0b9 -263, 0x8980346a -264, 0xa8e47fba -265, 0x2a39fe16 -266, 0x9f34eeeb -267, 0x7baebcc9 -268, 0xbc0b8d74 -269, 0x37373c8 -270, 0xe128cfc4 -271, 0x49cdb150 -272, 0x5965c726 -273, 0xfc326226 -274, 0x53a3e8e -275, 0xa99d89f7 -276, 0x33ac111c -277, 0x143fe678 -278, 0x96212281 -279, 0x6a83bffd -280, 0x529852f7 -281, 0x97fef4 -282, 0x303ce151 -283, 0x4f8c7b83 -284, 0xd5ef9c82 -285, 0xede9d572 -286, 0xc03e2c38 -287, 0x89d7f886 -288, 0x21e998b0 -289, 0x58d505cf -290, 0x5c42089 -291, 0x9a01dcab -292, 0x83d8cc17 -293, 0x7d6aacf -294, 0xa1cbdced -295, 0x47365e25 -296, 0xbb61e976 -297, 0xfeafd0a6 -298, 0x760d82b4 -299, 0x9ffb351d -300, 0x28e19ac0 -301, 0x891131c6 -302, 0xc1656522 -303, 0x4536d90 -304, 0x956b1b84 -305, 0xf9ff54f6 -306, 0xb0050d88 -307, 0x7d7fafa2 -308, 0x430e670b -309, 0x18ad450d -310, 0xd5a1d6b6 -311, 0x390a6da4 -312, 0xc70d557d -313, 0xd8fadb5e -314, 0xfb4b4cb6 -315, 0xce707f8b -316, 0x4c18d350 -317, 0x8dc0d200 -318, 0x228d9e85 -319, 0xd6485ba3 -320, 0x37c4a70a -321, 0x9d7cc5f5 -322, 0x889a9b9 -323, 0x41d2f942 -324, 0x4c13b3bd -325, 0x70e58147 -326, 0x4a0e1270 -327, 0x3cdc1b73 -328, 0x7a4e56f3 -329, 0xd8350406 -330, 0x46068108 -331, 0xfc4da48 -332, 0xf6111245 -333, 0x40a15167 -334, 0x38a591ac -335, 0x3e97e682 -336, 0x5c515d2d -337, 0x45023a37 -338, 0xacb0ed6a -339, 0x899f0ebb -340, 0x2054df01 -341, 0x6d629607 -342, 0x79ced597 -343, 0xba0a3a12 -344, 0xde63b611 -345, 0x228cb776 -346, 0x61f10dba -347, 0x9a1095d3 -348, 0xf08dcb3 -349, 0x88e58009 -350, 0x131880aa -351, 0xc55002ee -352, 0xcf556f47 -353, 0x17b6dd76 -354, 0x6110ba20 -355, 0x74a91935 -356, 0xe83cf9ed -357, 0x3138e936 -358, 0x103bfb72 -359, 0x2084abe4 -360, 0xf3a05dd9 -361, 0x9213f3a4 -362, 0xe7674dd7 -363, 0xcd09d629 -364, 0x260461f2 -365, 0x411c2428 -366, 0xbb5f6f2e -367, 0x6feb8c93 -368, 0x3cde3ece -369, 0x7a424d2c -370, 0x808a0948 -371, 0x653c3fdf -372, 0x26f88849 -373, 0xf540b6ae -374, 0x1f82e8ac -375, 0x300f7e39 -376, 0xb6e62e7b -377, 0x970441a1 -378, 0x91f2946c -379, 0xaad281f -380, 0x43be1dcf -381, 0x95a1b4c8 -382, 0x2d956dea -383, 0xc532ca29 -384, 0xc93f1fcf -385, 0x70762aab -386, 0x231a72ef -387, 0xe5bd1b75 -388, 0xfa31468 -389, 0x77e1b7b5 -390, 0x19d80215 -391, 0xd45704b7 -392, 0x33472a0d -393, 0x833a435e -394, 0x2354a326 -395, 0x8af39828 -396, 0x603a7960 -397, 0x288c2d54 -398, 0x75bd7c23 -399, 0xe2dd42e1 -400, 0x9a87b486 -401, 0x32e9bcd1 -402, 0x8630f74f -403, 0x160408ea -404, 0xd2127c63 -405, 0xaf327f8e -406, 0x8d879a61 -407, 0xc5c88f60 -408, 0x53a19fa1 -409, 0x706dacb4 -410, 0xd04ea0f -411, 0x94806c1a -412, 0x941cfe69 -413, 0x956a5562 -414, 0xee1f71c -415, 0xe6ba12d -416, 0x333e31f6 -417, 0x17aee12e -418, 0x20ccfedb -419, 0xd7bb7f92 -420, 0xba7d14f3 -421, 0xb935d4fb -422, 0xbdb8f5e1 -423, 0xb24e7adc -424, 0xc9abef71 -425, 0x3e3d8125 -426, 0x5fc0878b -427, 0x5ba172d9 -428, 0xe28f648c -429, 0x5137f3a7 -430, 0xb57273df -431, 0xe68df236 -432, 0xbc29802b -433, 0xb1419e66 -434, 0x69ecb739 -435, 0x490e8eb6 -436, 0x61e25a6c -437, 0xc1fa0de6 -438, 0x2bf2fbf1 -439, 0x9487e8da -440, 0xce5c5532 -441, 0x75859040 -442, 0x2606bdeb -443, 0x1b77c072 -444, 0xe5fbeed1 -445, 0xea9e1ab3 -446, 0x55cf96ae -447, 0x283ed27d -448, 0xc94067a1 -449, 0x8687b3e5 -450, 0x4031b307 -451, 0xc5790e82 -452, 0x4031ee7f -453, 0x952c4503 -454, 0x379ec606 -455, 0x7c35e19d -456, 0x2d333769 -457, 0xbca36d54 -458, 0xcdc70741 -459, 0xa3ab56fb -460, 0x187a2fd6 -461, 0xdd1f32f1 -462, 0xc007ac56 -463, 0x14c441c1 -464, 0xf290ed47 -465, 0xc833edac -466, 0x13f0a8fe -467, 0x63c10b6e -468, 0x6af1be34 -469, 0x5bd4930e -470, 0xfe56bfbb -471, 0x1b412c8e -472, 0xf0c7712a -473, 0xf3a96226 -474, 0xbd0aaad8 -475, 0xbd00355e -476, 0x8ba9eca1 -477, 0x81f136a0 -478, 0x7de3a327 -479, 0x7be298ea -480, 0xe60e320a -481, 0xaf4373b -482, 0x6eacbf3 -483, 0x1291760f -484, 0xd48ed89b -485, 0x596603d4 -486, 0x53abc8 -487, 0x82123b2f -488, 0x1276dc8 -489, 0xfeb474bb -490, 0x4013da51 -491, 0x111cb9d6 -492, 0x5726df82 -493, 0x45806861 -494, 0x2580801a -495, 0x1326049e -496, 0xb9474bf9 -497, 0x6c5d85ed -498, 0x9c4a9352 -499, 0x9eb915ed -500, 0x914505 -501, 0xd14c5b9a -502, 0x57ef8ffd -503, 0x480d8719 -504, 0xb18d7fce -505, 0xfd29e178 -506, 0x2679f6c9 -507, 0xd94a086e -508, 0x6e46f559 -509, 0xb7c3a2e3 -510, 0x793a4c3b -511, 0x4e5252f9 -512, 0x1bdb53a4 -513, 0xbed5794 -514, 0x31a3ebc7 -515, 0xa6eb54e1 -516, 0xc6ae5d92 -517, 0x392acfc8 -518, 0xb283fb8f -519, 0x80b15ffe -520, 0x763b49a8 -521, 0x3febc1d3 -522, 0x60f2b20 -523, 0xd93aeba9 -524, 0xeddf06bb -525, 0x13992ab3 -526, 0x4521bcf6 -527, 0x5ad82a14 -528, 0xf2bfc79c -529, 0xf664b9b -530, 0xeb9540a2 -531, 0x5641dc50 -532, 0x9282d9c4 -533, 0x5d2443a4 -534, 0x407b5011 -535, 0x84a415d7 -536, 0x5db90eae -537, 0xd2947d4c -538, 0x8bd8856d -539, 0xbc05a99b -540, 0x1c2e0f5 -541, 0xb94d03a2 -542, 0xb8ed5ac1 -543, 0x199943d9 -544, 0x12482e5c -545, 0x20aa7c9f -546, 0x8733e45c -547, 0x277b4f44 -548, 0x673d5a73 -549, 0xabc0aad9 -550, 0xbed6cd98 -551, 0x2943c24b -552, 0x5237d6f9 -553, 0x1cb1a392 -554, 0xc7b69454 -555, 0x4f792707 -556, 0xa32ef400 -557, 0x7a5b6b72 -558, 0xa8683acc -559, 0x418d0491 -560, 0x56e2470e -561, 0xbe385495 -562, 0xe7944341 -563, 0x438abaab -564, 0x82ad2c2 -565, 0x7afc306b -566, 0xfcb88957 -567, 0x530414bd -568, 0x2e3c7d41 -569, 0x633f7573 -570, 0xeffeefb2 -571, 0xf6de11f9 -572, 0x337710f2 -573, 0x88bf46dc -574, 0x6fdaf5dc -575, 0x34229d26 -576, 0x46b0aba0 -577, 0x78e40a29 -578, 0x7f9623cd -579, 0x6cfe8779 -580, 0x1d4af99 -581, 0x78f97244 -582, 0xa198d714 -583, 0x9124883e -584, 0x1cf88a12 -585, 0x69fe0966 -586, 0x78484a68 -587, 0xf9d8718b -588, 0xcbf3ba5b -589, 0xf67fb149 -590, 0xc95977c1 -591, 0x474f57f5 -592, 0x11bb9ec1 -593, 0xe28f21be -594, 0x8ca6e21b -595, 0x2609defc -596, 0x989b6f6b -597, 0x1c87383e -598, 0xacd78f57 -599, 0x8c46cfcb -600, 0xc37cce08 -601, 0x327d196a -602, 0xf63c3572 -603, 0xc56780b5 -604, 0x9ac37d16 -605, 0xe692a39c -606, 0x563938a3 -607, 0x1e80e32f -608, 0x745652af -609, 0xe425c9a8 -610, 0x11c71e82 -611, 0x9c721f6d -612, 0xef89b973 -613, 0x494c7e80 -614, 0xadc29895 -615, 0xc7ee35ad -616, 0x19beeb0c -617, 0x9c25ae3f -618, 0x27bf930f -619, 0x223970a0 -620, 0x7cdb17ca -621, 0xa49054f -622, 0xf8321dcb -623, 0x3f96a9eb -624, 0x4468072a -625, 0xfd7d727 -626, 0xee0af4f1 -627, 0xe6585512 -628, 0x56a6d8a1 -629, 0x40586642 -630, 0xb46bdaa0 -631, 0xe053a140 -632, 0x4de1953d -633, 0xb6cbc718 -634, 0x2ed92c19 -635, 0x9da2840 -636, 0x6ab418b1 -637, 0x179f64cf -638, 0x7c281c0 -639, 0x7015b62a -640, 0x8d31e38e -641, 0xa6de57ca -642, 0xe509c4e1 -643, 0xa010162c -644, 0xf71abd42 -645, 0x3d24ac8b -646, 0xc2deb72f -647, 0xd81570ba -648, 0x17fc7d15 -649, 0xf17997b6 -650, 0xfa2ec5b5 -651, 0xbf7e189b -652, 0xb3d9e761 -653, 0xe1194bd1 -654, 0x8d5280dd -655, 0xdea2d148 -656, 0x6d85e66c -657, 0x37f5fb07 -658, 0x65c1dd1 -659, 0xf52c04f8 -660, 0x4460d846 -661, 0x1729f55f -662, 0xe03a699d -663, 0x9f05ff9f -664, 0x31abe986 -665, 0x64899f61 -666, 0x52fba7 -667, 0x2833ce74 -668, 0xa34d0e57 -669, 0x7203d492 -670, 0x1a63d91e -671, 0x463781b7 -672, 0xf9842e7b -673, 0x809276ad -674, 0x88237b9d -675, 0xaa648b06 -676, 0x9cf916bd -677, 0x3b3068e4 -678, 0x20d6ae7d -679, 0x7855dafd -680, 0x9ebd14ed -681, 0xc5934a1c -682, 0xb3c421a1 -683, 0xa2b709a2 -684, 0x91fa8b34 -685, 0x9009a54 -686, 0xb2c4215f -687, 0x7b294eb1 -688, 0x1802911e -689, 0xa2067de5 -690, 0x5ebd85e9 -691, 0xc4f8e698 -692, 0xd143d368 -693, 0x2ca2b6fb -694, 0xb5d27ebc -695, 0x410146ca -696, 0x9d6948fe -697, 0xfafd0af5 -698, 0x290e9c5f -699, 0x2ff06292 -700, 0x417903d5 -701, 0xc51af07c -702, 0xd2bbaf6b -703, 0xfa3720f1 -704, 0x4a6eb52d -705, 0xed86ad3c -706, 0x72a8676e -707, 0xc3c2bbed -708, 0x62b6a951 -709, 0xe08f9534 -710, 0xe2686ea5 -711, 0x3dbbf99b -712, 0xfec5319f -713, 0xef9c67eb -714, 0x9d69d19b -715, 0xc732ed2 -716, 0xc6e829bd -717, 0xe712e882 -718, 0xd24594ca -719, 0x102b8426 -720, 0xa5145730 -721, 0x62fecd71 -722, 0xe6439ca2 -723, 0x58819419 -724, 0xef722791 -725, 0x5ef6ab17 -726, 0x85ce3714 -727, 0xd4e18303 -728, 0xf91eb9c2 -729, 0x86bae692 -730, 0x6d81c21c -731, 0xd9985982 -732, 0xfdd55f22 -733, 0x72ecd91a -734, 0x4b1cee6 -735, 0xefa672ec -736, 0x3f18114f -737, 0xacae5e62 -738, 0x68369afd -739, 0xff5e6612 -740, 0x3760af8c -741, 0xd8c878bf -742, 0x3945fe59 -743, 0x2cf7f99a -744, 0x2cc59bb4 -745, 0xbba95cd6 -746, 0x6511688d -747, 0xcf326178 -748, 0xf850cc68 -749, 0x4bd2540e -750, 0xa02cf5e5 -751, 0x5546fcb5 -752, 0xe2b289fd -753, 0x960c6ba -754, 0x3a2c9d74 -755, 0x2def7a8f -756, 0x54e57d43 -757, 0xf953c277 -758, 0xd9b414b1 -759, 0x19a25920 -760, 0xaf2691a1 -761, 0x81e88159 -762, 0x49a3eab -763, 0x276a797d -764, 0x98337885 -765, 0x37055fd0 -766, 0x6927effc -767, 0xb6de7fc0 -768, 0x9e920f9a -769, 0xd2dc9145 -770, 0xe2861109 -771, 0xe42e2c1e -772, 0x836fe968 -773, 0x23452a15 -774, 0xd49f0e2b -775, 0x2998f647 -776, 0x94f8c803 -777, 0xf8be479e -778, 0xfd44079f -779, 0x685ab9c1 -780, 0xea8eeab3 -781, 0x580ff5d8 -782, 0x88ad0666 -783, 0x19df5d86 -784, 0xe4862012 -785, 0x3ad25460 -786, 0x677449ce -787, 0x1c7e0b9a -788, 0x287a98d0 -789, 0xed39d094 -790, 0x40501707 -791, 0xb99073a4 -792, 0x31847bd4 -793, 0x91e5b7 -794, 0x46815e56 -795, 0xc823384c -796, 0xdb6fb24 -797, 0xabe50dd8 -798, 0x2a33797b -799, 0x4fb617ec -800, 0x811a36df -801, 0xb6b7a25f -802, 0x8962cd0a -803, 0xc40818fe -804, 0x5dbe4e57 -805, 0x591f6c61 -806, 0x22aa4809 -807, 0xc0e4a72 -808, 0xa8a0e2e7 -809, 0xf91d553a -810, 0x77674da7 -811, 0x196657d6 -812, 0x5ae38c0f -813, 0x8bcf1ed2 -814, 0x9e0a2c8f -815, 0xf94e5215 -816, 0x11299b2b -817, 0xc499eca3 -818, 0x25e58d1b -819, 0xdd722954 -820, 0x816f4c21 -821, 0x2504fd9b -822, 0x722a597a -823, 0x92f80aab -824, 0xe2d7e54d -825, 0xefb26dba -826, 0x9ebf8863 -827, 0xd297ec21 -828, 0xa0ebfbb5 -829, 0xec609873 -830, 0xd079b3d1 -831, 0x920f722d -832, 0xfd58146 -833, 0x5fbb5784 -834, 0x30187f5d -835, 0x887f4ec6 -836, 0x6839a2ed -837, 0x72bccd98 -838, 0x7565903e -839, 0x8d3afaef -840, 0xfb713a03 -841, 0x34216b35 -842, 0xbe0da7e9 -843, 0x4b11764e -844, 0x6666922a -845, 0x3f2dc90d -846, 0xeca8fb8d -847, 0x91579404 -848, 0x8d413df7 -849, 0x2a0f8307 -850, 0x39d5a495 -851, 0x79ba5e62 -852, 0xbb06fd0f -853, 0x47ba4208 -854, 0x4a2efb9c -855, 0xee3a07f0 -856, 0x291a73e0 -857, 0xe42a46c5 -858, 0x203455b2 -859, 0x40545253 -860, 0xa618bb0a -861, 0xd4792a15 -862, 0xd6e62559 -863, 0x8149e2f0 -864, 0x5f6499a9 -865, 0xa63fc585 -866, 0xe33e1c1f -867, 0x36ecb45b -868, 0x267883ca -869, 0x905d98fb -870, 0xfac3512c -871, 0x374d0a0e -872, 0x9920f3e0 -873, 0xfb961c9f -874, 0x70f2d752 -875, 0x69c44d12 -876, 0xcb6075d2 -877, 0xaf802ac8 -878, 0x2c4b792b -879, 0xa2203217 -880, 0xc2c15619 -881, 0xb13af213 -882, 0x759b165c -883, 0x411ecdf2 -884, 0x158e5fba -885, 0x70874450 -886, 0x226a484f -887, 0x87b95ecf -888, 0x45cef22f -889, 0xfaf186bd -890, 0x3544972a -891, 0xb4a2f73 -892, 0x5f5d10de -893, 0xf3d05e29 -894, 0x7616ba85 -895, 0x4d2e198 -896, 0x1f240293 -897, 0x317c2286 -898, 0x3bd97e7b -899, 0xd7e39d6f -900, 0x142ee43c -901, 0x688ada72 -902, 0xad8deac8 -903, 0xf7cc8d5e -904, 0xa84600f5 -905, 0xda6b1b3 -906, 0x5bad09de -907, 0x6f4276c7 -908, 0xa789933f -909, 0xede4329a -910, 0xa31f2df5 -911, 0x869c0c3c -912, 0x6658f5b -913, 0xdb451b7c -914, 0x16ec0b18 -915, 0x2e35872c -916, 0xf7bf3c44 -917, 0xda59c872 -918, 0x1ab63c0c -919, 0x9a361a82 -920, 0xd2e1afcc -921, 0x5c41ac55 -922, 0xd1d761db -923, 0x3639bb85 -924, 0x7a418cfb -925, 0xf0b06b8f -926, 0xa2ef4d47 -927, 0x4fac4d1b -928, 0x47e42283 -929, 0x6ee6a7df -930, 0xfe786975 -931, 0x4475b665 -932, 0xd881e311 -933, 0x6b02224 -934, 0xcba19b84 -935, 0x4efa35f6 -936, 0x3873a72d -937, 0x984d7964 -938, 0xe23cda62 -939, 0xea9949d2 -940, 0x243b83b1 -941, 0x48d1bcc4 -942, 0xe35b6a23 -943, 0x125288f1 -944, 0x72fdd401 -945, 0xa2af6873 -946, 0x7c211096 -947, 0xa00a13dd -948, 0x7b4ce5d6 -949, 0x1e4be120 -950, 0xc771cc00 -951, 0x343ae31 -952, 0xe8e0be50 -953, 0xd9095a3f -954, 0x616b7c17 -955, 0xa96e1580 -956, 0x60501426 -957, 0xeaac50b -958, 0x130c33b5 -959, 0xba30925b -960, 0xf942c440 -961, 0xc52e8e20 -962, 0x5f460318 -963, 0x94e1dadd -964, 0xdfa4f20e -965, 0xc9bbd26a -966, 0x75322ecb -967, 0x3dc3ff18 -968, 0xfa896826 -969, 0xe4ad213c -970, 0x7a0f97c3 -971, 0xd7b7b08f -972, 0x6ebcab4e -973, 0x1a37d816 -974, 0x16299fee -975, 0x89d94a3a -976, 0x11c2f073 -977, 0x4ef27a32 -978, 0xaaf42781 -979, 0x9862c844 -980, 0xaa672e94 -981, 0xba4f2690 -982, 0x1f767d21 -983, 0x157e1a5e -984, 0x5b6de343 -985, 0xc494501e -986, 0xe97b507b -987, 0x98cae4c8 -988, 0xc4a6b036 -989, 0x746f8686 -990, 0xe761c86 -991, 0xefdaaa15 -992, 0xb907b816 -993, 0xe9d05992 -994, 0xed2e1b0e -995, 0xe129d3ee -996, 0xb41bb95f -997, 0xaec36181 -998, 0xdcdcf5f0 -999, 0xf175572a diff --git a/numpy/random/tests/data/pcg32-testset-2.csv b/numpy/random/tests/data/pcg32-testset-2.csv deleted file mode 100644 index 2d4c8aed1..000000000 --- a/numpy/random/tests/data/pcg32-testset-2.csv +++ /dev/null @@ -1,1001 +0,0 @@ -seed, 0x0 -0, 0xe4c14788 -1, 0x379c6516 -2, 0x5c4ab3bb -3, 0x601d23e0 -4, 0x1c382b8c -5, 0xd1faab16 -6, 0x67680a2d -7, 0x92014a6e -8, 0x628ae389 -9, 0xa794034d -10, 0x5cc38cd9 -11, 0xfc913a3b -12, 0x81c851dc -13, 0x90c820e4 -14, 0x60dfa703 -15, 0xd613ae14 -16, 0x38ea1699 -17, 0x51f04d1b -18, 0xc4ef01a1 -19, 0x321eec02 -20, 0x4c37a737 -21, 0x6bfd1aa8 -22, 0x71a28325 -23, 0x4656d6e9 -24, 0x17509653 -25, 0x830bd521 -26, 0x6d35e3aa -27, 0x4ab85020 -28, 0x21c1da2c -29, 0x6a6057a2 -30, 0xf3a90dc1 -31, 0xa1cbdcd9 -32, 0xf70b61bf -33, 0x3b2b09a8 -34, 0xbc2ef54d -35, 0xce07f38f -36, 0xb51bc60b -37, 0x729efb83 -38, 0x7e4a5f66 -39, 0xdd824ead -40, 0x9be85945 -41, 0x57f8779c -42, 0xdb449e87 -43, 0xc0be253f -44, 0x18b4267e -45, 0xff78821 -46, 0xb53e3425 -47, 0x4550b21b -48, 0xefe89a4c -49, 0x74c130b9 -50, 0x1656a3a0 -51, 0x194da2a6 -52, 0x1a6cdb1d -53, 0x7c1fd58e -54, 0x3162d1e9 -55, 0x3e2f2c7d -56, 0xb0ab9b5c -57, 0x79156d4d -58, 0x97b85150 -59, 0x967a02ce -60, 0x1e64548d -61, 0x4196d24a -62, 0xd047eef5 -63, 0x8451cc3c -64, 0x7227eb94 -65, 0xb1191064 -66, 0x82e162d0 -67, 0xb473f07d -68, 0x92ea0426 -69, 0xbf2a25fa -70, 0x9935be52 -71, 0x28baec93 -72, 0xa29368b5 -73, 0xe3d6d97d -74, 0x85ecf1d4 -75, 0x482e4bc8 -76, 0xe4f22219 -77, 0x7531047 -78, 0x3c41ef1f -79, 0x19db5112 -80, 0xc1534caf -81, 0x6c45710a -82, 0xb323c369 -83, 0x2dac53c6 -84, 0xd5dc48b4 -85, 0x1dc6d7a1 -86, 0x3ae2bc10 -87, 0x6a7635e8 -88, 0xdeee7b7f -89, 0xcb705cd3 -90, 0xba11e537 -91, 0xb64a4936 -92, 0xff4b245e -93, 0x39cb1219 -94, 0x64833e10 -95, 0x76b0f975 -96, 0x333d7c7d -97, 0x88ccfb17 -98, 0xad78dace -99, 0xd82fb71 -100, 0x1595d411 -101, 0x47f9d57a -102, 0xd4dad6cb -103, 0x78bf16bd -104, 0x71b053d2 -105, 0xa4bb076e -106, 0xd7c57664 -107, 0x3fbcbf8f -108, 0xc816befc -109, 0x6df46890 -110, 0xd16f271f -111, 0xeeeb1571 -112, 0x58222e89 -113, 0xa55e81d3 -114, 0xafbe7622 -115, 0x938475a8 -116, 0xd8740af2 -117, 0xf937dbd7 -118, 0x7d3940fa -119, 0x694c55f2 -120, 0x2261fb68 -121, 0x6ce39e94 -122, 0xab43634 -123, 0xd92ff7c4 -124, 0xe8db22d -125, 0x52e250b1 -126, 0xaf0f7029 -127, 0xc23dd3a -128, 0xd66dc2b9 -129, 0xea7f01f3 -130, 0x4df54b3f -131, 0xf1eff09c -132, 0x2813663e -133, 0x21ae8115 -134, 0xb00d790d -135, 0x11e6adbb -136, 0x61005f4c -137, 0x3de17bf0 -138, 0x7b2050b9 -139, 0xe20dd275 -140, 0xafa0bdcc -141, 0x9c6d4c6c -142, 0xe938606 -143, 0x8eecdd8f -144, 0xea9a90a9 -145, 0x99cbb123 -146, 0x16fccad1 -147, 0x7e81fdd9 -148, 0x116e6abd -149, 0xdeb9ff4e -150, 0xc589f525 -151, 0x57d701a9 -152, 0xcf05e950 -153, 0x533a2839 -154, 0x12d592e7 -155, 0xae61f43f -156, 0x419ae221 -157, 0x81126e0a -158, 0xc3988c97 -159, 0xb3262eaa -160, 0x3baddf9e -161, 0xf19d8a16 -162, 0x2a8b130f -163, 0xe4c9ccea -164, 0xf5ae2ea -165, 0x75aaa98d -166, 0xdd45ce49 -167, 0x98e0d4f6 -168, 0xb1ec10a1 -169, 0xc9592952 -170, 0x23bb1f45 -171, 0xd0827b45 -172, 0x7a79b800 -173, 0x9d1b8348 -174, 0xe2958863 -175, 0x5143e17e -176, 0x44110af9 -177, 0x49d76858 -178, 0xdba4688e -179, 0x4e4d61dd -180, 0x729b81cc -181, 0xf3576e03 -182, 0x9b028e9d -183, 0x68d8d869 -184, 0xda15e018 -185, 0x5384abb2 -186, 0x1027ed5e -187, 0xaf5401f1 -188, 0x31411375 -189, 0xc75d87be -190, 0xad73f5fd -191, 0xadb3add7 -192, 0x4d5452ee -193, 0xdef42029 -194, 0x89d58a78 -195, 0x464d6b4a -196, 0xd01f533a -197, 0xb9533dd4 -198, 0x55c5d023 -199, 0x3dcf8fef -200, 0x198395ca -201, 0x7cdca51c -202, 0x6f4074f -203, 0xb9f79995 -204, 0xbbe3d9a5 -205, 0x520d417e -206, 0x9a8df0bd -207, 0xe390f486 -208, 0x5b578b3f -209, 0xb4cdf767 -210, 0x12d45034 -211, 0xe661e293 -212, 0x70cd3e91 -213, 0xdbc7f190 -214, 0x49829849 -215, 0x12017fbe -216, 0x1e35bf48 -217, 0x1effc3c7 -218, 0xe1f574cb -219, 0xf613ab7d -220, 0xd09d16fa -221, 0xa58bcf5a -222, 0xac39afdc -223, 0xd611d1ab -224, 0x36edd3b2 -225, 0xd9ea5d98 -226, 0xf6f2fce4 -227, 0x42cb31ce -228, 0xdd1f6530 -229, 0x3e43a7d0 -230, 0x175ec7fc -231, 0x8077af4b -232, 0x37cbcc22 -233, 0x26a89f -234, 0x998c930e -235, 0xb84e5f21 -236, 0x83817130 -237, 0x2ad05d66 -238, 0x48f3b861 -239, 0xd69f626 -240, 0x1d09f12 -241, 0xf207e7f0 -242, 0xcc709acc -243, 0x1b2881d7 -244, 0x7e18cc6c -245, 0xbfd9589c -246, 0xce0d301e -247, 0xc8668b4b -248, 0x584482bd -249, 0x722e14ae -250, 0xd79dfcff -251, 0xcc7e9c21 -252, 0xd081f540 -253, 0x3b49f7fa -254, 0xf23efb2a -255, 0xfd7fe8f8 -256, 0x9abcbf25 -257, 0x5b713674 -258, 0x1300e351 -259, 0xe884f0ad -260, 0x3c290461 -261, 0x4f64c1a1 -262, 0x17c55223 -263, 0xd5953a5f -264, 0xd85e042e -265, 0x75dfc597 -266, 0x379edfb -267, 0x75ebddc9 -268, 0xc19b98e1 -269, 0x1dd1b751 -270, 0xc5760a60 -271, 0x5f6e2f17 -272, 0x29e8610e -273, 0xb2edd7db -274, 0x9233eeca -275, 0xbc02b187 -276, 0xc997bb5b -277, 0x88ad3a98 -278, 0x3d1167ad -279, 0xcea54c9c -280, 0x7ea493eb -281, 0x586e3aa8 -282, 0xe2e027c7 -283, 0xae50ef9e -284, 0xd32e0c38 -285, 0xeba0edf6 -286, 0x980ad22a -287, 0x3b14e644 -288, 0xd7bfbff8 -289, 0xe0af1647 -290, 0x292d72dd -291, 0xb8c421bb -292, 0x114d690e -293, 0x85a86bd -294, 0x39f2b5e2 -295, 0x7c9c6b43 -296, 0xca387767 -297, 0x84f24ecf -298, 0x2aec5804 -299, 0x27d0f2 -300, 0xcd7bb6a9 -301, 0xe925969f -302, 0xc6454099 -303, 0xf7435a9d -304, 0xf7bc998f -305, 0xfa81f361 -306, 0xcba07d00 -307, 0x3e8a8a14 -308, 0xf0e7f785 -309, 0x25aecff -310, 0xe1a90226 -311, 0x4af1339d -312, 0x983f4fb9 -313, 0xbaec847f -314, 0x4e504dbb -315, 0xe7d0be86 -316, 0x73cb80ef -317, 0x336db698 -318, 0x8bf7de05 -319, 0x36e4e6ba -320, 0x47a8239b -321, 0x2a98e1d0 -322, 0x64a6c087 -323, 0x4a8591cb -324, 0x642d5d67 -325, 0x9f4b84b2 -326, 0x6bdf1176 -327, 0x7e2b1639 -328, 0xc90453f5 -329, 0xe72d0b96 -330, 0x5f0e1d0c -331, 0x156af798 -332, 0x6124d8e8 -333, 0xaa2f2ad7 -334, 0x145b30b7 -335, 0xd6582106 -336, 0x203abbad -337, 0x929d8d43 -338, 0x14d5b6dc -339, 0xef0f4eb2 -340, 0x8ff54463 -341, 0x588113a -342, 0x1bc43ba6 -343, 0x44f44097 -344, 0xb84cfdc6 -345, 0x3ee638af -346, 0xdd169321 -347, 0xaaac5f56 -348, 0xbb022bc2 -349, 0xf9ef8bde -350, 0x2829b2fb -351, 0x563368fa -352, 0x82ce66ae -353, 0x6d820e38 -354, 0xb87a080e -355, 0x756469af -356, 0x78086990 -357, 0xa220e762 -358, 0x14ba6bdb -359, 0xfa775c1b -360, 0x65fa7396 -361, 0xbae24370 -362, 0x8e42ddb8 -363, 0x1f46b8ac -364, 0x3c9236c5 -365, 0xd3a2184c -366, 0x308ba74 -367, 0x5638eb84 -368, 0x64076fe6 -369, 0x37fe334f -370, 0x8de24732 -371, 0xf0d0b02b -372, 0x18492b71 -373, 0x848f38ac -374, 0x9b46dc75 -375, 0xf5d3c06a -376, 0x203afe47 -377, 0x19857724 -378, 0x38033528 -379, 0xf7fa640c -380, 0xf1cb86e8 -381, 0x1fcd5b99 -382, 0xb07f1023 -383, 0x3bb9ab75 -384, 0x57f54e78 -385, 0xf5b51d4b -386, 0xe94eba44 -387, 0xa5a39292 -388, 0x50803af -389, 0x34ea9cc5 -390, 0xabf621ca -391, 0xb275f802 -392, 0xf46dffd6 -393, 0xd33e27d1 -394, 0xca9a56e -395, 0x6eda85a4 -396, 0x639b78ba -397, 0x799d1980 -398, 0xf3c09bf1 -399, 0x6d4cdbe -400, 0x112dae8d -401, 0xd97414b1 -402, 0x9499df3d -403, 0xa58ece6c -404, 0xe56bf91b -405, 0x3bdbfd9 -406, 0x91aae1fd -407, 0xec1fce54 -408, 0x60e0eced -409, 0x278d5b22 -410, 0xdee29da2 -411, 0xf1f55d27 -412, 0xd532ab83 -413, 0xb0fe9589 -414, 0x88fcc255 -415, 0xf524359b -416, 0x7270a00b -417, 0x42489eaf -418, 0xc020d6bb -419, 0xf9ed0f78 -420, 0x4bc5cdec -421, 0x55061393 -422, 0x6b84a5a4 -423, 0x826c0471 -424, 0x9e69e30d -425, 0x9dfd9b15 -426, 0xf4014c40 -427, 0xcd04ef4d -428, 0x7376c02c -429, 0xb15a9e3c -430, 0xf76c1fa9 -431, 0xcd51bdd8 -432, 0x99f2859e -433, 0xb62c6a4d -434, 0x52239d8b -435, 0x27fa2869 -436, 0x6dba918c -437, 0x9891e444 -438, 0x71e29f5 -439, 0xa9cd3ac9 -440, 0xf6ec3b80 -441, 0x8c8d3226 -442, 0x7c528725 -443, 0xd543932b -444, 0xf76b3e02 -445, 0xeccaf183 -446, 0x8f757854 -447, 0x785edb62 -448, 0x54397da0 -449, 0xe1fe0557 -450, 0x7a79d418 -451, 0xd2740507 -452, 0xc3561bc7 -453, 0xef7c3f18 -454, 0xecf8effe -455, 0xc7a073ad -456, 0xeb5ea9fd -457, 0x33dade18 -458, 0x89d0e41c -459, 0x7720d298 -460, 0xe912f029 -461, 0x7794462 -462, 0xa436dcf6 -463, 0x55cbb318 -464, 0x7b4a78e0 -465, 0xa8ce0afb -466, 0x7e18bb28 -467, 0x92c4f8f6 -468, 0x6828052c -469, 0xbf619f8 -470, 0x272d1d15 -471, 0xb34e2e52 -472, 0x52158f7f -473, 0x682fb062 -474, 0x52e80435 -475, 0x787e0fb3 -476, 0xe331da39 -477, 0xfad42e58 -478, 0x1bdb3f90 -479, 0xe313ab2 -480, 0xe61af9bb -481, 0x46f03903 -482, 0x926b3d33 -483, 0x2b23ce3b -484, 0xed04d4af -485, 0x34c49faf -486, 0x142f503c -487, 0x47cf6a21 -488, 0x5352250c -489, 0xf5942210 -490, 0xca5950ae -491, 0xc5302422 -492, 0x41a5e9b1 -493, 0x30076390 -494, 0x8951d0e4 -495, 0xebe74e22 -496, 0xfcb7dbf8 -497, 0xd55076e7 -498, 0x88a1165b -499, 0x1a89b5a3 -500, 0xda2c3e2e -501, 0xdc1d606d -502, 0xfda0315c -503, 0x5f5610dd -504, 0x3eba316c -505, 0x72cae07b -506, 0x5336095 -507, 0x6a110322 -508, 0x46cb153b -509, 0xa2b11116 -510, 0xe2543988 -511, 0x51f53bae -512, 0x3b10466d -513, 0x189ddd56 -514, 0x1fd355b6 -515, 0x1230e8d3 -516, 0x2050d313 -517, 0x2fbb5c16 -518, 0x64b03f4f -519, 0xbd6cdc1a -520, 0x9d423316 -521, 0xc71a702f -522, 0xf2254f39 -523, 0xd953728b -524, 0xef3c8bb5 -525, 0x685a2fab -526, 0xcea73dff -527, 0x4a7fa029 -528, 0xa27e8058 -529, 0x561a1413 -530, 0x570fc5bc -531, 0x917e93ee -532, 0x15fdbb15 -533, 0xabee295e -534, 0xc40f5307 -535, 0xba18b087 -536, 0x6ea6e339 -537, 0x7e282248 -538, 0x875062c2 -539, 0xd1520c30 -540, 0xb4cef1a5 -541, 0x55812dd1 -542, 0x9c67743c -543, 0x22fd5992 -544, 0x1dacbfa -545, 0x5b35eab1 -546, 0xfa8c9316 -547, 0x490bc71c -548, 0xe5129bfb -549, 0xe7acb79f -550, 0x87667765 -551, 0x945be067 -552, 0x8acf5c32 -553, 0x466e0ee -554, 0x8fa89be0 -555, 0x4eb4afcc -556, 0x3302055b -557, 0x8f2e3ab9 -558, 0xc5bc175e -559, 0x903a3e85 -560, 0x4055dd04 -561, 0x37873bac -562, 0x2965a951 -563, 0x2206c56a -564, 0xf34dc2db -565, 0x34e43ba2 -566, 0xb61caa44 -567, 0xfd3eb260 -568, 0x9dcdc817 -569, 0x7019df83 -570, 0x6fcd9bea -571, 0x270cba0a -572, 0xd6cc3241 -573, 0x6345c906 -574, 0xd213fb94 -575, 0x6195e5b5 -576, 0x804abab7 -577, 0xb4cace45 -578, 0xded19bbc -579, 0x617db00c -580, 0xafb933d6 -581, 0x8192cae8 -582, 0x45ffd8af -583, 0x13ae0868 -584, 0x840f4541 -585, 0x12cd1a05 -586, 0xbb5b7d6d -587, 0x3907ab3 -588, 0xd77a1582 -589, 0x4e741292 -590, 0x28c60865 -591, 0xbaad11e2 -592, 0xa9d3e364 -593, 0x88a197cb -594, 0xe90f021f -595, 0x2056017a -596, 0xeb0a2fd9 -597, 0x1d3435aa -598, 0xdaa0b802 -599, 0x8121bf09 -600, 0x95a88f55 -601, 0xa8b9c257 -602, 0xb0ab4914 -603, 0xf360b741 -604, 0x5563d4ab -605, 0xad33cf0e -606, 0x397d315a -607, 0x6893767f -608, 0x79dd5b31 -609, 0xa9ea6777 -610, 0xcf48c06 -611, 0xb4cceafc -612, 0xf53cab50 -613, 0x72426c8 -614, 0xd128aa5a -615, 0x511eec88 -616, 0x668ab20a -617, 0xb9b53dbe -618, 0x3b03a0fb -619, 0x8f416a98 -620, 0xaa15b7f6 -621, 0xc7767aba -622, 0xa64d3342 -623, 0x42cf1388 -624, 0xfc3ee7c0 -625, 0x892a2902 -626, 0xdb054bf6 -627, 0x4973223f -628, 0xb9f74682 -629, 0x72f2ece -630, 0xddf94382 -631, 0x67581d86 -632, 0x9cb9cd6f -633, 0xed74731a -634, 0xcca05451 -635, 0x3b21fdc0 -636, 0x9e18e52b -637, 0xa40bb287 -638, 0x8bb05e07 -639, 0xa33555fe -640, 0x4c819ed -641, 0x5373903e -642, 0x611403c2 -643, 0x133e25fb -644, 0x9c7a44e4 -645, 0x67197b8d -646, 0xfa910436 -647, 0xa86a825d -648, 0xfc9b24c1 -649, 0x464a718e -650, 0x7421bc26 -651, 0x3c3186b7 -652, 0xf7304619 -653, 0x7ac7be81 -654, 0xae6adcc4 -655, 0xca96bf8c -656, 0x49711d50 -657, 0x74c51f0 -658, 0x275804c0 -659, 0x228098c5 -660, 0x73a31b94 -661, 0x7f01db79 -662, 0xb36209c8 -663, 0x6ccf8677 -664, 0x70dbcce0 -665, 0xa533d8cd -666, 0xd0b0f097 -667, 0xd9a3b784 -668, 0x80a929fc -669, 0x9708f29a -670, 0x95e1e56f -671, 0xd07a0b45 -672, 0x566acdb6 -673, 0x92663054 -674, 0x3667dc9a -675, 0x80f850ff -676, 0x549dd640 -677, 0xc3ff18ca -678, 0x8c70d392 -679, 0xf5547e3b -680, 0x8dbee1d7 -681, 0x51fe33b8 -682, 0xb1ea480b -683, 0x6646f6d0 -684, 0x4a8e7de9 -685, 0xcb053e32 -686, 0x6311aee8 -687, 0xcc2a411b -688, 0x5330e60b -689, 0x4680e825 -690, 0x96bdd8a2 -691, 0x8cf4268a -692, 0x8445c833 -693, 0xc237eef1 -694, 0x459670e8 -695, 0xedf26624 -696, 0x5713340f -697, 0x5a3e87a3 -698, 0xa24a7c2d -699, 0xfa9fdceb -700, 0x746fd14e -701, 0xc6aef3e5 -702, 0x3d957e9b -703, 0xc1926f7a -704, 0xee717768 -705, 0x101fe323 -706, 0xec0d63ab -707, 0x8b8e6f42 -708, 0x8c3d2286 -709, 0xb573dd68 -710, 0x53b68ec0 -711, 0x696525cf -712, 0xdab65d8e -713, 0xd2c6ed42 -714, 0xa1fc10f6 -715, 0x1554666 -716, 0x6ed42947 -717, 0x87f7e62 -718, 0xaf34733b -719, 0xc55baa8b -720, 0xcbff66f -721, 0x2516c228 -722, 0xec6980fb -723, 0x4f53d66c -724, 0x1be17a32 -725, 0xdcfb31df -726, 0x4b17d04f -727, 0x81e1f54b -728, 0x749eae52 -729, 0x3811c4d5 -730, 0x5d11e6a1 -731, 0x535d5d6c -732, 0xbb74cd20 -733, 0xd1b18b71 -734, 0xfbf7221a -735, 0x817c4279 -736, 0xcef30b85 -737, 0x41dee06c -738, 0x9d340a3a -739, 0x691f0449 -740, 0x363a515d -741, 0x73a1af6c -742, 0x25718271 -743, 0xb4a52d50 -744, 0x1e392f40 -745, 0x3c811345 -746, 0xc9aa8565 -747, 0x357c24e0 -748, 0x19ad7230 -749, 0xed250e20 -750, 0x4acc4824 -751, 0x825d53a -752, 0xcf2f515f -753, 0xb7973ff4 -754, 0xb03ce53f -755, 0x1afad500 -756, 0x39f64ee8 -757, 0x60bea483 -758, 0xedf16817 -759, 0x88beff73 -760, 0x4909868 -761, 0x879a96da -762, 0x52d4ac6b -763, 0x46fabe65 -764, 0x88fa5751 -765, 0x71df4521 -766, 0xfc6eb286 -767, 0xf83e78ad -768, 0x885e5aca -769, 0x77e63e4a -770, 0x2bdf5c02 -771, 0x2528323c -772, 0x5b5d1ce9 -773, 0xf795be8c -774, 0x5e113b2b -775, 0xa993c7aa -776, 0xe5f8560a -777, 0x77e1e8d -778, 0x5e9db88a -779, 0xdac4e96b -780, 0x9126b945 -781, 0x15bf293a -782, 0x1dc9a8f4 -783, 0x909b48b1 -784, 0xb50ce29e -785, 0x21671c87 -786, 0xcda80dec -787, 0xf5aff1a9 -788, 0xd70cdb2e -789, 0xd293139a -790, 0xcbf4f51d -791, 0xb23c6d7a -792, 0x1a06aa33 -793, 0x21880210 -794, 0x92679678 -795, 0x8d5bb26b -796, 0x23304100 -797, 0x8f5d1df4 -798, 0x143b39ff -799, 0x29e97d16 -800, 0xbfad952f -801, 0x257ca1d8 -802, 0x32ad2f8f -803, 0x84d320c3 -804, 0xcc4c59a -805, 0xbb5ae046 -806, 0x3d5fcf1d -807, 0xa0130b0 -808, 0xad86e9de -809, 0x1e422521 -810, 0x6b56a617 -811, 0xbe64d9fc -812, 0xfff31ed0 -813, 0xd1ad616e -814, 0x13486a20 -815, 0x1754613b -816, 0x52c7b9da -817, 0xc05d75aa -818, 0xd719cd98 -819, 0x61890574 -820, 0xc4711a8b -821, 0x9afd5635 -822, 0x4dabed21 -823, 0x94f173 -824, 0xb8b6e708 -825, 0x1d590111 -826, 0x60315dfd -827, 0x7fb8ae79 -828, 0xc69f4f2b -829, 0xcaf1c898 -830, 0x861a0c8b -831, 0x6ed14eaa -832, 0xc77da58 -833, 0x8fd4f29a -834, 0xa38187fb -835, 0x6ed1ee88 -836, 0xf1a9f55a -837, 0x74368cc8 -838, 0xf327e944 -839, 0x97a578af -840, 0x8a5345e5 -841, 0x63ee0a30 -842, 0xa7e4919b -843, 0x51e26930 -844, 0x38dbe017 -845, 0xedace3a9 -846, 0x9cda2ad4 -847, 0x96b1119 -848, 0xff56282a -849, 0x71773edf -850, 0xe41fb69c -851, 0xe7bce539 -852, 0x221ffeed -853, 0x35d3f67f -854, 0x7e089168 -855, 0x6fd47823 -856, 0x43bfb28d -857, 0x9ce49e62 -858, 0xde32120 -859, 0x6eacfe4e -860, 0x116c6128 -861, 0x5f975284 -862, 0xc547361c -863, 0xf48e8251 -864, 0x2ac8a3bd -865, 0x9a0fce5b -866, 0x1764e3d9 -867, 0xa31e6954 -868, 0xb9dca055 -869, 0x1cd35c79 -870, 0x1b502882 -871, 0xf973ab10 -872, 0x8b585146 -873, 0x841fd3f8 -874, 0x4999200f -875, 0x7ad10c4b -876, 0xcf1695bd -877, 0x26c58bc3 -878, 0xdc1f8310 -879, 0x546e1e86 -880, 0x2e39fec8 -881, 0x8c65e2ed -882, 0x6469bac -883, 0xbc4af1ff -884, 0xa1669010 -885, 0x41dabd80 -886, 0x5797e218 -887, 0x9bed24c1 -888, 0xa7552347 -889, 0x4e214099 -890, 0x34d4f986 -891, 0x316cc527 -892, 0xde30c21c -893, 0x4f273c1e -894, 0xc3dd9324 -895, 0xe61fda1c -896, 0x1d0f8076 -897, 0x5570867e -898, 0x289d6062 -899, 0x465b8b26 -900, 0xb72307de -901, 0xe78c8647 -902, 0xfee9723e -903, 0xa1534c9b -904, 0x4d652645 -905, 0xe623b6c2 -906, 0x454cfc8 -907, 0xc5a7fcaf -908, 0x1de804d9 -909, 0xa2501de7 -910, 0xe036c091 -911, 0xa4a55d1d -912, 0x50409892 -913, 0x58fd2731 -914, 0xb6fd3618 -915, 0xa0180bd2 -916, 0xd9bb2fe8 -917, 0x7c8e7a2c -918, 0xd90906fc -919, 0xf8721260 -920, 0x451b372d -921, 0xeeb1c70 -922, 0xc1a18778 -923, 0xd466244a -924, 0x88e4b84a -925, 0x4fc3af63 -926, 0xcf4387e4 -927, 0xb8872734 -928, 0x276eadef -929, 0xd2c164a1 -930, 0xd3c812d9 -931, 0x5a94f176 -932, 0xfba6f632 -933, 0xf7aeba97 -934, 0x9207585f -935, 0x70a41d67 -936, 0xa0b70910 -937, 0xd579fc6b -938, 0xf06a8fca -939, 0x471fd406 -940, 0xb15a0491 -941, 0x2f340f7a -942, 0x3df02de3 -943, 0x6022f8d6 -944, 0xa15b11c2 -945, 0x45715dd6 -946, 0xf293d85e -947, 0x7a2100d -948, 0x7dff786e -949, 0x52c6a183 -950, 0x5fbce2db -951, 0xbc29ec65 -952, 0x3dd14b27 -953, 0x1bedecd1 -954, 0xbfcba31c -955, 0xb911a26d -956, 0x6b6de680 -957, 0x36e8769 -958, 0x908de4a0 -959, 0xe1abee1f -960, 0x83acd7f8 -961, 0x5008c1eb -962, 0xd8bc7a2b -963, 0x6f639c56 -964, 0xe1f2634b -965, 0x267222ec -966, 0x48fa416c -967, 0xfa01e3cb -968, 0x2d28a700 -969, 0x58dcdc97 -970, 0x685ac2e7 -971, 0x9318840b -972, 0x99247a55 -973, 0x8d749b83 -974, 0x403f8415 -975, 0x373eb9c6 -976, 0xb840b6a2 -977, 0x9bb7bfc4 -978, 0xd5800634 -979, 0x3ef4a02d -980, 0x2ffa791f -981, 0x8a671150 -982, 0x40fdfc5e -983, 0xfa4bd35e -984, 0xf4ca1642 -985, 0x17fb231a -986, 0x42a3e57c -987, 0x58cf119d -988, 0x32f19c67 -989, 0xf3e2e153 -990, 0x66fce6fb -991, 0x9d61059b -992, 0x1628eafb -993, 0x9a6cf683 -994, 0x5ff5df3a -995, 0x206fb3c9 -996, 0x1914913c -997, 0x58c002ad -998, 0xd099145f -999, 0x155aab4b diff --git a/numpy/random/tests/data/pcg64-testset-1.csv b/numpy/random/tests/data/pcg64-testset-1.csv index da6d77d40..0c8271fab 100644 --- a/numpy/random/tests/data/pcg64-testset-1.csv +++ b/numpy/random/tests/data/pcg64-testset-1.csv @@ -1,1001 +1,1001 @@ seed, 0xdeadbeaf -0, 0xb174ddf3fe597da6 -1, 0xfc217240c1e61e6f -2, 0x20279da26fec9cbf -3, 0xa5f4ee34651f4e1e -4, 0xb254d7901c68b9db -5, 0x6bf2a64e4052c36f -6, 0xbec4c7418c0f61b6 -7, 0xb03e595a4ef2b2bd -8, 0xc8e051957ccb74c6 -9, 0xf5082df7473c6f62 -10, 0xb72aa3dc22752a38 -11, 0x7a941561514bd680 -12, 0x90a95f42834f347b -13, 0x88e17b9d59def797 -14, 0x18f19c86bfe60368 -15, 0x667f89277be8d1d8 -16, 0x63305475e7aeff27 -17, 0xd7e4d5c09fb0fb4c -18, 0x7dd6deab03a8c26a -19, 0x42bbcb746e2d4b26 -20, 0xe91f2ac4fa90689c -21, 0x2f83458da0af3125 -22, 0x49a43537a00fae89 -23, 0xef02111d1ebc16eb -24, 0x32b3b3019875f3e7 -25, 0x89eb15c48cd02774 -26, 0xa9f1b37865752731 -27, 0xe0eff9dadc47fb3 -28, 0xae859b1c54cc90c2 -29, 0x7b7c5e04d5015dec -30, 0x38faeff5ce3266ff -31, 0xd2ddd0d19fbc24ee -32, 0xe0d4f692829a31a9 -33, 0x30a6aa3f408e71c2 -34, 0x298362be21de6d44 -35, 0xb7efab759e691149 -36, 0x2ae1f84bba093d4c -37, 0xf6ab55f78f8b9258 -38, 0x2275d0af583cec95 -39, 0x18cfe066b183ac3c -40, 0xcc0a546d54064cf5 -41, 0x5de027ea3c25c225 -42, 0xdaf31ef489fe71e1 -43, 0xa7a2b1a72a4360e7 -44, 0x678a55d7a0506791 -45, 0x36facd8799ad2b78 -46, 0x32fec94506dca70e -47, 0x34e890d8539871f8 -48, 0xec48b5362b0d7818 -49, 0xe2e58921cf8228d3 -50, 0xd163588ec22730a4 -51, 0x17e2322b6be47d25 -52, 0xe1544989a0c6d24f -53, 0xa3a10fb279cdc347 -54, 0xad4ee318a5853900 -55, 0xc96a185feef4a85d -56, 0x82ec5b3aed6636fb -57, 0x2aac2ef8f25426d7 -58, 0xa81e3114165e0d08 -59, 0xc1d8128f83969da5 -60, 0x157505508eaf50f1 -61, 0x77c175067c9c199c -62, 0x973052089bd7af0 -63, 0x3cd70041e32c1921 -64, 0x7783719f13a254a0 -65, 0x2216485ff502d9ff -66, 0x7dae695d2c7f3b79 -67, 0x809ce710156fea36 -68, 0xb90ac31262460e4e -69, 0xc1afe8019306e7d7 -70, 0x6c57638edba4ca0a -71, 0xbe6133f6ab1e9aeb -72, 0x8f5699ff0bcf341d -73, 0x69d0218df036bcbc -74, 0xf0976fd79735d47d -75, 0x82b36a795e5cc74b -76, 0x263c30766b985686 -77, 0xf7426f94511d5ba0 -78, 0x8b04f9573050ed9e -79, 0x7280d4ec202e8359 -80, 0xa8235fbd1324f172 -81, 0x6dbd5d500a809a8c -82, 0x26c53c69292bca1d -83, 0xe348f657b20305ec -84, 0x562f0e2fbb375421 -85, 0xdf2be07bebfbe447 -86, 0x4275044640683760 -87, 0xad5d68bfe4ab4858 -88, 0x3c0e57df5b3306f0 -89, 0xc9d87622ac847565 -90, 0x83d04fd9e102c311 -91, 0x71996b9c65aaf5c0 -92, 0xe3df32742d6fc446 -93, 0x58d3a6573a39d0cb -94, 0x74dfa090e96d289d -95, 0x7856f45e5416c1ea -96, 0x80a18e88b3e4dff8 -97, 0x60565bbcb04f56ac -98, 0x9f4cf5ec45fae3a6 -99, 0x885d2909fe34e3f0 -100, 0x7a1db9118f60dee0 -101, 0xc4c17dc810746c7e -102, 0x8b954b14effe83b1 -103, 0x4f89fb0940999c86 -104, 0xc62e634bceca1c97 -105, 0x7e06e87dffd1619f -106, 0xd1ccbce841371671 -107, 0xe7f99698c66df1b3 -108, 0x5302c2f0e4e1f4e0 -109, 0xa57d11d3d7ee652e -110, 0x8abe0ed0e5508407 -111, 0x6780588af9f6c2ff -112, 0x8603a9fc73b6a4cd -113, 0x169c13a0b7a166b9 -114, 0x868969fb53578598 -115, 0x6089e0eacbe69039 -116, 0xf82482d424397dc2 -117, 0x11475d20896fc890 -118, 0x7983933df29e2aa0 -119, 0x4889c4780cd8e9cc -120, 0x53ebb258f3ea266b -121, 0x121896059b256fd1 -122, 0x2f9934516b2f8090 -123, 0xbabb9fa1d1efa60c -124, 0xfb0b1370ea044797 -125, 0x782ab293b597bc8e -126, 0x297fc0b3977271f5 -127, 0xa573e4d0674d02fc -128, 0xc7e8ddb6efe8a2db -129, 0xaae8a024e62f6e32 -130, 0x3217a47698c9e439 -131, 0xd7015db847a3de0b -132, 0xbc0b4368776e10a7 -133, 0x69d9ef0178679bfb -134, 0x28fd8f0936b66fab -135, 0x45b1c4d4aa9b5aca -136, 0x28feade39cd3ac00 -137, 0xa7e6515c534520f1 -138, 0x735703b5f4bfd54e -139, 0x798271ae0c91b8d8 -140, 0xf858458f9efa8d2 -141, 0x6a41f5845422a9e -142, 0x7fb0bba5f097aab0 -143, 0xbfaea58fe090e745 -144, 0x84770504bfb15b35 -145, 0x67ae11aa368049b8 -146, 0x846c5e493ee15e4a -147, 0xbbcf3baf029f056c -148, 0xd30c23bde142a356 -149, 0x32cd403edb746a8d -150, 0x40161ab00c636730 -151, 0x3a882c3c60d3e19a -152, 0xca8faab24d826529 -153, 0x241a687288551d04 -154, 0xbbc607fb9b48ac00 -155, 0xa844329d0c2d475a -156, 0x8fa4aa1d7296b9e4 -157, 0x82c7dc1f588ce2fc -158, 0xcbdaa663041e078c -159, 0xec108d219b2b147a -160, 0xcab01864270b334 -161, 0x6d3d08545041621b -162, 0x2aae054b8e5648f -163, 0x1bf5a72fa70e7eab -164, 0x2dddb2050af45a3a -165, 0x2b910b7078021a75 -166, 0xf7160201ede45f4e -167, 0xfaf75ae996f079bb -168, 0x407984a9451e659c -169, 0xbdf9c0a9ea078ac0 -170, 0x1e7717b8345acbb6 -171, 0x25cc2df4c0c8dc4a -172, 0xfda1715b573850db -173, 0x50e5cedad99e2651 -174, 0x9a67673ed73cfc0 -175, 0x802ec4fc9e946805 -176, 0x677cd320e641999f -177, 0xbfeb1b6053fe4f78 -178, 0x220cfc90bd31541 -179, 0xe4fdfae10ae6c86f -180, 0x76c568fd869af80d -181, 0xd17dc57109200bb1 -182, 0xeb96ba01c95382be -183, 0x6a9c7ebea5b5f7ac -184, 0xc1680450532fb8cd -185, 0x26b0829f68888094 -186, 0x98335aa1612d7c70 -187, 0xad8662125bf32ae3 -188, 0x15f18a9025ae26e8 -189, 0x5d065dba0d17c9fc -190, 0xf68e1d59f10ff109 -191, 0xcfbd97901a79f8b0 -192, 0x3e72a9fd1d95f143 -193, 0xe7ee82c1bb740dfd -194, 0x3a0f4ae5db22527b -195, 0xf4d025080ed4ea92 -196, 0x6924a99549b4657 -197, 0xcb83b51552208e2f -198, 0x9f306634214b44e9 -199, 0x4fb3307b0e1a7535 -200, 0x73d202d4225c5394 -201, 0xd5a2fa42f8cc8c5c -202, 0x7b3b3e3f7b948d3c -203, 0xa2dbc4d30d8c148e -204, 0xd1bfc1f05a8f2c5d -205, 0x2b00a4efa2f19262 -206, 0x9d4a05bb18647f48 -207, 0xff21fbaf0b46d13f -208, 0x126f9c5f2132af20 -209, 0xd4b7629b0d9a6b89 -210, 0x2d61949fb3126ecc -211, 0x30d61648763db1ce -212, 0x9c5234d15120bf17 -213, 0x2eb0eccb6cc14c8a -214, 0xcf18eff5ca2af8a4 -215, 0xab5fe599ea68c377 -216, 0xe47a0bb8436af89 -217, 0xd3728a566187c400 -218, 0xb8b54592b62f633e -219, 0xe02b958f9c13a180 -220, 0x9e5f5cc85283f24a -221, 0xbd1ab869878744a -222, 0xb93fd6297a29c8dc -223, 0xf22f06ee61dc2413 -224, 0xc93fe440766cbd8e -225, 0x7459d9b19375a51c -226, 0xd4ec87c57baa4127 -227, 0x1514d0226dc0409e -228, 0xc6b0d7e1bd56b190 -229, 0xc0c61c73c9dbffee -230, 0x2f1154afb48a93e2 -231, 0xd2ca05901bae0117 -232, 0x6263f647273694a0 -233, 0x94a98bf80488205b -234, 0xcb0d63747735bead -235, 0x9cbd4e1659932c5b -236, 0x1807e01931b5ade0 -237, 0x1d9f7721d3067854 -238, 0xb25dbde4ec77e547 -239, 0x4b186592a39adcd6 -240, 0xe8ad5514de72a98f -241, 0x2deac1cb096a09b4 -242, 0x6952f4b82a2c87 -243, 0xaa1590223ed83ffe -244, 0x9baf13d08f572e12 -245, 0x83ec1bca1e724d88 -246, 0x5c61bf2222b4907 -247, 0xd950ff64ad7b956e -248, 0x36bf5e992bf1f211 -249, 0x75ad67249d7a6c35 -250, 0xeb12dcef5c2bfe7d -251, 0xc508da925157e39d -252, 0x91cbd7491ea7f70e -253, 0xf10c018ec0b0e55 -254, 0xeeffb21fef1e87f1 -255, 0xe31692b834d067dd -256, 0xd69bbafdeb5c0d15 -257, 0x41358dadb9260eb1 -258, 0x5fa3c67d353cd6b2 -259, 0xdbb743cac20b2eda -260, 0xe7877ba98b2bfe4 -261, 0xf14d679436fd2dcf -262, 0xa313e39059d62afe -263, 0x7eaa134c761a6183 -264, 0x7719af9ad1fecaec -265, 0x533f921a4702d433 -266, 0xe072f9665ec3a3c8 -267, 0xba89560ab4ba08fa -268, 0xe94f0aa266e56d53 -269, 0x774b84bcb152afc -270, 0x787c9517e589748d -271, 0x3831a5303adfd362 -272, 0x19cb20184a4264f8 -273, 0x9bc5e99e1773700e -274, 0xed323bf38642f651 -275, 0x860868c0eba789f2 -276, 0x8c1602ffd9a5621a -277, 0xe298d8fc74e146ce -278, 0x3181a2083c76037f -279, 0x27942fd6842079c0 -280, 0x38fe8c0406516df -281, 0xd211a4a42857bec3 -282, 0x56002508b351879d -283, 0x2472ed93614c7e99 -284, 0xbcafdaadc0f77b7c -285, 0x86becbd3e5303107 -286, 0x930251d84de72320 -287, 0xea79aa2964954052 -288, 0x6dbc5e63b50b1724 -289, 0xb098535ed4bc7372 -290, 0x6490d6d8541fb656 -291, 0xc738f6ccb4b7076b -292, 0xd69ee4fd6ce63026 -293, 0xfa98e9d78a628338 -294, 0x9c30b63a70d607b6 -295, 0x8d544b5d224a25d9 -296, 0xa051f7fe38445228 -297, 0xf6931861338a00f5 -298, 0xecd71cd64b0b5dcd -299, 0xdbc818e7126193b -300, 0x3aaaa032aad8199a -301, 0x6fd68a3818e0c439 -302, 0xc82a651ba9ede8c9 -303, 0xe6d958e267017187 -304, 0x73a9eab64de651ae -305, 0x5a6757f7f222bb3c -306, 0xe62e7cca6bd17a32 -307, 0xc4f6c31f528dd387 -308, 0xdecd8b663c995773 -309, 0x69a21dedcbfef9c7 -310, 0xb33f8ac00f17b6b2 -311, 0xe32b3c962d613ba3 -312, 0xa9c317d026600d41 -313, 0x901d971c49671213 -314, 0x46c3f3d35db8808b -315, 0x1336297232af9791 -316, 0xed88d9242e11edb3 -317, 0xc70c48843f54af0 -318, 0x611062a0461deedf -319, 0x7e3183514f127f20 -320, 0x7b549d10bace1c47 -321, 0x6db523d19d0a7af3 -322, 0xf6e677e5222a21a4 -323, 0x28e5188ba7055c32 -324, 0xbe7b41d2ce539c4f -325, 0x5c085a18c3b7bbe0 -326, 0x209cf345b3c3b06c -327, 0x79ca5407dd486857 -328, 0x8e07ac4c65338ccd -329, 0x56dd5372249cadad -330, 0x27e0b07863fa27ff -331, 0x78dec95d299a8699 -332, 0xbd5d71253b73d456 -333, 0xbf83b6cedd205e9 -334, 0xee2352ee69aa68e -335, 0x4b14f253d684cfbc -336, 0x12ffa5d5f8a34bec -337, 0x2e38346fbc793f67 -338, 0x2ab5862872b4850b -339, 0xcbc8aec1e2bb6760 -340, 0xd79ef783845cc329 -341, 0xdbdcde91e1685704 -342, 0x29880643aa1095e4 -343, 0xcd5ccc1fe9a616af -344, 0xc7b6cdc4a43c132c -345, 0x7b08597fdec7fc9c -346, 0xa01ab3827e120a16 -347, 0x89ce37de99ca7748 -348, 0xb4644823ea6b90d5 -349, 0xdbe189861c409209 -350, 0xbfeb614759981b60 -351, 0x48c2c3a6d2419755 -352, 0x1aa1df0e99b3417e -353, 0xb9f061bf98c0da28 -354, 0x8bce2755a0b5b8ae -355, 0xc9bb2ff33d60b3e7 -356, 0x6abcbb1ea0d3a575 -357, 0x983a3c16a0e5d6f8 -358, 0xa122e616797ccdbe -359, 0x751dfe60252a01d0 -360, 0x8d1bcbbde84f6a11 -361, 0xb6bc4f2942ba0e57 -362, 0xb298977a4bb20e12 -363, 0xcf658188dd931722 -364, 0x39735757b19c90a3 -365, 0xc2fcf1df99f1b7c4 -366, 0xd42c50f6a912aaea -367, 0x95d0cb8a953965c4 -368, 0x75c7d03289269f25 -369, 0xd8d96184031fb36b -370, 0xb3b34b5ba8bac75 -371, 0xcfbf16d241e46f8c -372, 0xec465e59019b6f6f -373, 0x4051ce0bc2562a63 -374, 0x859f05ce7b75da05 -375, 0xf2661ef2e3c733ef -376, 0x8067f432dd5af0c4 -377, 0x6e8542a346911713 -378, 0xfcda2ac6aa45ca20 -379, 0x571f23fdacb25fe2 -380, 0x2546f5badf7adb8b -381, 0x929ebe6fbd330e2b -382, 0x9d41d6ded9facbeb -383, 0x4cf9d9da6c125106 -384, 0x495d5708443faa36 -385, 0xb0023a41a6057e59 -386, 0x37fa1cd9ce66b20a -387, 0x96a376fca4aff5a8 -388, 0xc22469c4a3e1ea85 -389, 0x5ab79b721966249b -390, 0x2124be452f7d4ca4 -391, 0xe71bb882b954ca11 -392, 0x322bdcaf9c7b0efa -393, 0x4c99c8753878439f -394, 0x3ffd6caec9f9ac49 -395, 0xfba842dd40a3c72e -396, 0xfd93517d31681d77 -397, 0x44c139a74249a128 -398, 0x828a145610684c8 -399, 0xb53696f802522b6 -400, 0xa2da2199474d079a -401, 0x739e508fbbdeb714 -402, 0xe75c4734a7c95f94 -403, 0x5c22c226f2bd8487 -404, 0x7108fa6b99b0d72e -405, 0x3c60b40f6e4bebde -406, 0x395150555d56dd18 -407, 0x13246a6e4d795fe3 -408, 0x27dca990fb678027 -409, 0xc5a92c32724a7373 -410, 0x30fed89f4171a817 -411, 0xf7f7810edea2e7eb -412, 0x46e930eef5351212 -413, 0xe1331cd8a678dc66 -414, 0xd4cc0a5f96a72457 -415, 0x2559f8d286b1da16 -416, 0x73831b2f6e4a4ba -417, 0xd929ccf267504761 -418, 0x8a7a1b357f8bbc38 -419, 0xd5e0d3e200d0d633 -420, 0xc2cc05cc3ac5abb -421, 0x75b8f78a06ca465b -422, 0xeaf1d6aa9c0baef3 -423, 0xa6c9bc3dbe45e62e -424, 0xb1496074b4c338d7 -425, 0xc18ebb892108cec -426, 0xf6cbbf4cd0f8f9ba -427, 0xd73759407ecbdcf6 -428, 0x54dc0805c85a3b0c -429, 0x4ba3936d6be048f3 -430, 0xa3fbea19803cf35 -431, 0x78b1d3a837d4bed -432, 0x6ed09ac2c177453b -433, 0x16134c4e8b30f6ba -434, 0x94718ce4868f01a3 -435, 0x612fa336da82e66d -436, 0x5d8833c9483b235d -437, 0xf5c72d4883bed9a2 -438, 0x2a6e27d1ed337134 -439, 0xfba250d6b9cc0d2b -440, 0x432f8734b61e4366 -441, 0x45e8becd5ccb4f32 -442, 0xffc7d68cb343170a -443, 0x247cb9a6b29b1a35 -444, 0x89876df3681dc65 -445, 0xd1e646c49aac769b -446, 0x4c3cd721635602d0 -447, 0x5139344709c749fc -448, 0xc5130d981e1a6b14 -449, 0xff269bea082608cb -450, 0xf45a5d57a6d4c6a6 -451, 0xc4c9f3e5398db827 -452, 0x2b3a0eacd42665b4 -453, 0x94d847d848a8e65d -454, 0x1a8aff186e1d75d2 -455, 0x6ad986366c54a242 -456, 0xbd832c0607523e7e -457, 0x973064c20c31842d -458, 0x34d0513e6d602f80 -459, 0x91b3c812f83392ed -460, 0x4c49ba38b6a4cf90 -461, 0x82e3370e1c5ad5d4 -462, 0xa29a01fa53250a13 -463, 0xbe8ed1e615a1ee6a -464, 0x17fb15941a9fe6b4 -465, 0x84aea1c0138fb970 -466, 0xab065efb4558003d -467, 0x3345b340257a2551 -468, 0xfd2ebda1048c0dcd -469, 0x2aa72fce0cb23982 -470, 0x9952f9363830ff6d -471, 0xdb240e279cb7f901 -472, 0xb4a1e7b54206aca4 -473, 0xe13bdbb980623f25 -474, 0xd989f009368f8a9a -475, 0x7084b7695149660d -476, 0x55b92a3f139c7f1 -477, 0xdb43c75c633debd0 -478, 0x94e362574c70b9a8 -479, 0x218a1a06d9223f9b -480, 0x82f3c3808f86bb95 -481, 0x63e9de6cee4b77b2 -482, 0x3bc5effa36bb166 -483, 0x8369cbe5fa0ecab -484, 0x2a5808b4d7bc8572 -485, 0x6856e29700de99f5 -486, 0x107e86fcfd4a48d9 -487, 0x15c9ee6528c1c223 -488, 0xbf7318d4206c5e75 -489, 0x15d7a6aa9343c9e8 -490, 0x93419fe0ee3bd5df -491, 0x916c7f75ededdd53 -492, 0xe89d6230690f74f1 -493, 0xf92f96834e0eb27 -494, 0xed5adc06c305adc9 -495, 0xf656fe40e7ecb4d7 -496, 0x32a2d3eda46114b6 -497, 0xb3f17867d23c75e2 -498, 0x2a2cc838c4d89c33 -499, 0x413df7052f8866e7 -500, 0x373bd93e91bbed18 -501, 0x78c8e5aa1e1e2dda -502, 0x6bd362f6be6d572b -503, 0xba1926efd387aeb5 -504, 0x3b826b77ae3e53fd -505, 0x383cf5a66fb6723c -506, 0xf5a4e1dded64d931 -507, 0x76d9843a304729d3 -508, 0x205b8753b6d309f0 -509, 0xd2a68ef67d8e7758 -510, 0x60d517f325411c0c -511, 0x37a3bb4950cf08d5 -512, 0xea3d4f95542ffe2d -513, 0xa88708db07fb1d34 -514, 0xd96555e1194f7ee0 -515, 0xdd046e642b59fa51 -516, 0x18ff34e73582d46b -517, 0x7ed73af03535c5fe -518, 0x8ffd64801d2c5187 -519, 0x7134902903c9cfe2 -520, 0x74fa0b238ad1e1ec -521, 0xa220ff0032395fd5 -522, 0x4ed0a7a2d9c3a064 -523, 0xb02cb878b4c9a04d -524, 0x8437cebea5ae2bec -525, 0xabcc162a0027aefa -526, 0xc8e86ab8f5c09011 -527, 0xc28dfaf764ec07d4 -528, 0xb19127d64ae5db18 -529, 0x857cb1b00ac7fbc7 -530, 0x173a441c4b494aad -531, 0x255af1a4d50952c3 -532, 0x87ff01c7d0139add -533, 0x489b15e4c97cfcde -534, 0xd4abbccecfb67239 -535, 0xa1a2912ad34ac4fb -536, 0x94b7f12e10bf720 -537, 0xdb8840c295333634 -538, 0x5a29aab5b359f2c0 -539, 0x630352d282b695bd -540, 0x399f00854d3fbdf3 -541, 0x19e917e0eb8bf070 -542, 0xa464b4dc93d1fe7d -543, 0xf152d3cdecbd7647 -544, 0x517907b570a6b082 -545, 0xfeb06f4bd978e7bc -546, 0xa22859ad14c0f183 -547, 0x33c11e90be9721e3 -548, 0x8394f642b5a40d7d -549, 0x9525633e7e60ab73 -550, 0xf97401c9b4b96001 -551, 0x3d78ce1ecf900029 -552, 0xa85791d9754a2765 -553, 0x16e77aadd9a30946 -554, 0xc91d4defe72f39f2 -555, 0x2fb67bd91edc4b51 -556, 0x95d635e95b468fa7 -557, 0x28b81869d1739e29 -558, 0x5b098fa22cb1747f -559, 0x6544b8704bd2400a -560, 0x91a64f9ec6e93245 -561, 0x2b46ba92268db263 -562, 0xbb52d7758efd5416 -563, 0x7032adc08e6d39da -564, 0xe9d3bbefdb61feb6 -565, 0x2d603389c757996b -566, 0x5871ed32ce17d042 -567, 0x31d622a6b8438f70 -568, 0xc71af17db6bf7aed -569, 0xe419e3c6fbe86530 -570, 0x648471d670f18dcd -571, 0xd13f9e25078599ed -572, 0xdaf86e56826d07a3 -573, 0x3c9374e4420a8580 -574, 0xcd75b12ad6d8d9fe -575, 0x2d4530f6e2b93ca3 -576, 0x303bb663ad4ca963 -577, 0xf8caecede4436b61 -578, 0x315a8124669a907f -579, 0x1c18d130a4b93836 -580, 0x9e0b83663631562a -581, 0x400059c1ce071c7f -582, 0xb27f7f67e7cbd970 -583, 0x6b446e8c4866f3d0 -584, 0x4ab1755d2734121c -585, 0xb9fc8e017d89edf2 -586, 0x3a9aa7f50355c0c9 -587, 0x899fece06a169b2e -588, 0x19d7d7088db0b27d -589, 0xe4f8862ca8f6b87e -590, 0xceaf0d6ab4ba624d -591, 0x318965c56f79886d -592, 0xb1840d9bb60b720e -593, 0x387427e7549150ca -594, 0x9be3edb621a5d2ef -595, 0x9758993cca6a481 -596, 0x3733c5cd48a1590c -597, 0x9bbe26951c666fb1 -598, 0x74c7e89fefb4ba59 -599, 0x6aa490a23907053f -600, 0xa62febef1e8d7300 -601, 0xdbfb07bbba2fd4cd -602, 0x11ee9e4bbd4f358 -603, 0x6b40912657c7f02f -604, 0x8d56c1a9216714bb -605, 0x7fcd86985949c2f9 -606, 0x706bb172d5677f2c -607, 0xfb657efea1331957 -608, 0x6e3032f72a3fe367 -609, 0x509fb8c5b618a18e -610, 0x3599e957259222e7 -611, 0xaafc78bea53c9102 -612, 0x404addaf7ac55279 -613, 0x97db28b3b0a2dddc -614, 0xd3f5b151a9f5aefb -615, 0x1a6534a9be80a19a -616, 0x78f989eb80e055b7 -617, 0xe0200fe015112dce -618, 0xfbe67decef6204dd -619, 0x662fef92c8e00970 -620, 0x9a7838962250f5d7 -621, 0xac0eabb1621567b3 -622, 0x1874cf715cdc5daa -623, 0xd3281a25a82ceecc -624, 0xd8ac0e497b11156c -625, 0x3c8bf98f8210af89 -626, 0x971973ff9d428a3f -627, 0x1af47276bc157e63 -628, 0x671cd5e661ed0a05 -629, 0x71b8ffba9b976a0 -630, 0x8763f1fa85c5f5d5 -631, 0x61f3c56f3441aad4 -632, 0x86482f5e90362e3c -633, 0x8e9d9aceba401c48 -634, 0x51d916579d19d42b -635, 0x67bdfa28310ad3c7 -636, 0xb9ab819d6a00add8 -637, 0xaa12cb0ed2d507bf -638, 0xc636190dfc7f6d43 -639, 0xf3f1e6c104c5e782 -640, 0xaed0be2f07ad4313 -641, 0x1d782d74661278bf -642, 0x58e6501bc7e61fa2 -643, 0x8ca4ad0e02d7fb42 -644, 0x8afc9e9fe83d4b78 -645, 0x72cb69cf4abf0b1d -646, 0x7601a7b3500d474d -647, 0x97fee7da53b533b0 -648, 0xd6ab646f53c0e19a -649, 0x6480f60992f2fcc0 -650, 0x64ec7590c60a4c00 -651, 0x3ccab37f11acbe91 -652, 0x9ddd546f201299fd -653, 0x9a0dc59d0b545d96 -654, 0x8c5f366bd21664f5 -655, 0xc0af97b445bfc5ee -656, 0x29762536dc00c3fc -657, 0xfc30927fd8f1c257 -658, 0xac9aadfced7d59fb -659, 0x8d039f87658a29cd -660, 0x13a3d73580eacf6f -661, 0x80b80e0adcc11ac5 -662, 0x1e53c21e639f9d08 -663, 0x8a73352dc442bca7 -664, 0xec7cb2fe0e6b0100 -665, 0xfa5e63f403ac3f33 -666, 0x493d9a0018185f8c -667, 0x1b1d1f41c6cf5cb4 -668, 0x95b4caca3e2500a7 -669, 0x4e759e6f89f62f91 -670, 0xd0a76a3198d7c05f -671, 0x86eee6259cab63b5 -672, 0x1daab21067011b59 -673, 0xd02d9236ebc91b38 -674, 0x693e17ac2b70e1b7 -675, 0xceb5899aa14d0f86 -676, 0x59ffc317faf17ab2 -677, 0xce94f02892a0fa30 -678, 0xf7c9d6f9e753737c -679, 0x87258cf7ff6a29b5 -680, 0xb39fc8ea8aa52a0e -681, 0xadd4b4e73af1103f -682, 0x511f423730b25a4e -683, 0x7f673288e53502b2 -684, 0x9aa499e3b6295919 -685, 0x83841ad95e6a7a6 -686, 0x6e549a2457a850c -687, 0x4763220b923113c3 -688, 0x99737bb550aa5049 -689, 0x89eb31b3f707c4 -690, 0xdad5331dda8a58d3 -691, 0x5f1681518d5a21b8 -692, 0x258a0b9b24110918 -693, 0x8854bb025009fa21 -694, 0x7ac331fd885642af -695, 0xe520f0e9bedf0bf6 -696, 0xc9419e8801aa2afb -697, 0x356fdc0fc3702b37 -698, 0x6d6a25f39fbc9524 -699, 0x930f65c4dbf8ae94 -700, 0xa73d7bbf8c19c4b3 -701, 0xe473f700513139fa -702, 0xfef8f0e84c521bae -703, 0x88525351995576a7 -704, 0xa156b646ab95f272 -705, 0x1a46ff3b9ae7e723 -706, 0xf6d82b8bd9f2a80 -707, 0x837b8127d8f39ebf -708, 0x1f8e120ea11fc9bb -709, 0xbd0918421430f8c9 -710, 0x4ef121a688d130c7 -711, 0x3fef66f1cf180b77 -712, 0xa92070bdc6a0100 -713, 0x2444dcbb4853c174 -714, 0xe46b7d6234504df8 -715, 0xe5ac8fd968a5d1fd -716, 0x988828d885f04f30 -717, 0x9730c37b69f3d963 -718, 0xdb9a0d16bf0a2aab -719, 0xe75d00b3681941b9 -720, 0x518421d62db82da0 -721, 0x4da04c94268c1dae -722, 0xdcf2635a55b7da9e -723, 0xb679d8206c55a04c -724, 0x1fbf58865fec1e83 -725, 0x53ca7cc07c0e5785 -726, 0xd18eee3f5b57c813 -727, 0x9fc8d328e41d1299 -728, 0xb2231521e026e15 -729, 0x1a7e2a8df269acde -730, 0xe5f547b160b0a6de -731, 0xab01e7130bd70c14 -732, 0x82a051680f661a75 -733, 0x479da77dd9686ca2 -734, 0x1417cc197738b272 -735, 0xb65b5ced585a8186 -736, 0x40b5a74813e7a05b -737, 0x55481e0f404fc2c5 -738, 0xef1ca09a2640c44a -739, 0xa0f1d37ee2db47cf -740, 0xcabb0c8e551f0587 -741, 0x84227dd83ad941ef -742, 0x7b47691b6e8327d -743, 0x4fe615394f53d6d2 -744, 0x60bca7e568f65c80 -745, 0x8676b74f2d5600f4 -746, 0x70f256171f1eb9b1 -747, 0x6b1d25099f80e1fd -748, 0xd8e77e8a67ff3338 -749, 0x3ec375feb7727aca -750, 0x26b9ad4afd4be26b -751, 0x849e6f9bc5ec636 -752, 0xa34e3fad187c089f -753, 0xe369ba87f04ecc37 -754, 0x83c6e1c3985cab4e -755, 0x6ffc032379a15336 -756, 0x654645504b159afc -757, 0xabc97562087edfad -758, 0x4633765a9f068fe5 -759, 0xa226c586394d348b -760, 0x7034d9fd40133a22 -761, 0x89e1d142a1a20097 -762, 0x7a3e1387a5ecdf70 -763, 0xf0ae75084f0a1bc4 -764, 0xdcf97778ae782977 -765, 0x87996a44dbac128d -766, 0x94b102ac15479072 -767, 0x9d670a01e10c48a0 -768, 0x8f977a03176d0cb1 -769, 0x8522bdbed25653c -770, 0x8f2b64a9cd6b5483 -771, 0x86b2beaa71c92fbc -772, 0x40f896707639f820 -773, 0x40e7df1535fc03ad -774, 0x1d34c491e13debde -775, 0x862d5ad393292476 -776, 0xd33ee4efdd4b14d9 -777, 0x63ce5c7643b85ecd -778, 0xd28a7fe0700fd15 -779, 0x8c3536390f9b7b55 -780, 0xfaf87a9036dd0265 -781, 0x187e261c23b454a5 -782, 0x95362150f08e5f86 -783, 0x6588c21939d9521d -784, 0xc7cee242280b7526 -785, 0xc1b8f83462038485 -786, 0x68c2f342724de8d6 -787, 0x35c283dbca3c62fd -788, 0x556c441e9fdc5cee -789, 0x898ba42c4ad3f5ba -790, 0xc654a072fe9ce540 -791, 0xcc2da7cabdc658d4 -792, 0x518b6badf9c1ba7 -793, 0xd43b259427de48cd -794, 0xfe7e74d4415bea8a -795, 0xdee4cacb454d92c -796, 0xdfb09dde6d6c3000 -797, 0x5c0d4ce2c7a8d426 -798, 0x29ccf2d288f4de4a -799, 0x4106e7f40d2597ad -800, 0x3bc376950bccf69 -801, 0x65b74e149d1066e3 -802, 0x751d008e4f823e5e -803, 0x4a3b9a34d8ece205 -804, 0x372e79ed6d9461fc -805, 0x78e08cab6244f8d2 -806, 0x7d273315b6d9250b -807, 0x26c401cb05f556b2 -808, 0x3324d95fbc93408d -809, 0x14fb55fb83ab0a8a -810, 0x7ea7efcddd0a747f -811, 0x150a110bd5cb1b57 -812, 0x1122b31f5d20ad23 -813, 0xbd996a43507da1 -814, 0x6d11fad057e5a75a -815, 0x22a4d3223d77684b -816, 0x349973b5dda3d3e8 -817, 0xe4dab5aec267e32d -818, 0x371cbd61bbb7858c -819, 0x7e49182abfc0fc68 -820, 0x937722b126a7d173 -821, 0x29604490ccbe6611 -822, 0x6c8b230bdcc8dfaa -823, 0xb1c267c94d4550ee -824, 0x80d1fa6e33cde91f -825, 0xe205a132f35af0a7 -826, 0xe4e8e50899fea5c8 -827, 0x3a6517d09206dfef -828, 0xeff4e4f8efd0a4ba -829, 0xd8df88c992b3df74 -830, 0x5b0df3c40071c0ac -831, 0xd44a062781f833f0 -832, 0xef35653edcb68251 -833, 0x21f879df2bd3cfe0 -834, 0xdb5e837565891932 -835, 0x6da15316efae41e7 -836, 0xd33cdc0d05f8dd6d -837, 0x3c6588502a24be1c -838, 0x3d25da26bee94818 -839, 0x79979979960d383d -840, 0x8a20663424f816ec -841, 0x74c587d5824ee15 -842, 0x145f90c6b342c489 -843, 0xe2c2d15b8de95387 -844, 0xd9deaecc24e84ede -845, 0xce52add2f5c3ea3 -846, 0xd1da2db8cca0014d -847, 0xcbeed544f8791232 -848, 0xb55b421de003edf0 -849, 0xde102a5a87a9a5da -850, 0xd74fc9d34c964bd3 -851, 0xda7e1e271d197070 -852, 0x1167b33a6bad0d13 -853, 0xd35c886fd0e28798 -854, 0xfb3334085bbcef67 -855, 0x88f4957ddc912f99 -856, 0x7c1b0e356835cffa -857, 0x8c737bc009bf5a1c -858, 0x44edc242bfd88b0f -859, 0x391f8b5db15f8b01 -860, 0xd44794c8a4245701 -861, 0xefa90e38ba4a2f6e -862, 0x597f65c886e697b4 -863, 0x28972f6be3ca8677 -864, 0x18a487b5e89a9dbb -865, 0xffb15ebcb8a15fb1 -866, 0xa1f64108b7feeab0 -867, 0x36fc88b440612004 -868, 0x72a723294ba9af87 -869, 0x1a38da0ff8f187d7 -870, 0x529d7f6cd18f664a -871, 0x6a5941953b4732c7 -872, 0xe91243bd8fb27a03 -873, 0xb80c55de03262828 -874, 0xacb9183e5b28a8d0 -875, 0x4c4ca12eb3d5d2e5 -876, 0x758635a20eb18211 -877, 0x211e03e90d6bd001 -878, 0xe36e20fbf0f271b5 -879, 0x4daecb676fc64ebd -880, 0x8f1e82c4dd582eb7 -881, 0x6e3c35a21bca1b8f -882, 0xf3c2a69420f159e8 -883, 0x2cda4d630caba89f -884, 0x4c93f3f96360d308 -885, 0x4192046fb5e9d801 -886, 0x349f2b172f49599c -887, 0x7bbff8dd8b480e6c -888, 0x83b33fafc4388bf -889, 0x9a5440f806d9d1b -890, 0x8d6b62101dcfe51f -891, 0xbc7dd6987af227ca -892, 0x4338e67e0d6ba6a0 -893, 0x4a23deabbb5fc3ce -894, 0x9f8edc91e6356eb8 -895, 0xf6b723dd2dd5f80b -896, 0x35c558dd3443021d -897, 0xa559dd33c2cf594d -898, 0xa50ceeced7a82783 -899, 0x21107b581db4ee9f -900, 0x13e8dd9302e8c97d -901, 0xbd8491f437e57ad6 -902, 0x72f4c2a57c06f35f -903, 0x518fbb95071d8d7d -904, 0xcdbbe8d47f9b13e9 -905, 0xe8152b0f387251cd -906, 0x411070a4f345676 -907, 0xc589c285b962389 -908, 0x8b0eb9e285844319 -909, 0xe2b007f446a21b38 -910, 0x868ffafb958a6c40 -911, 0x19ccccd559408de0 -912, 0xa7666f366db0ae71 -913, 0xd78c5f137da6dbc2 -914, 0xeeecc913fdb9af03 -915, 0x7a5afb2f3d54a396 -916, 0x64fadf73d7ba200b -917, 0xaa1b82c6b4b346aa -918, 0x9a312d9482244a60 -919, 0xadb3c0a30f68d0f4 -920, 0x21eee75a717008c1 -921, 0xcda2779023f54837 -922, 0xea3c577c6d7783e2 -923, 0xdaae89efcd431a13 -924, 0x9a6102d2dafaded8 -925, 0xd29443448e01734e -926, 0x6b968e58c3d5bcd0 -927, 0x13949d0c5c0f9d19 -928, 0x7053eef909932489 -929, 0x49fb97e33c279171 -930, 0xc955e4854e254d03 -931, 0x3300cb752a7834fd -932, 0x8319585b09da0928 -933, 0xd35c64e4ce23a294 -934, 0x9a41d980ba1774dd -935, 0xff570729be1f3f02 -936, 0x3f68ae1c3e690a41 -937, 0x6f58a3e861159e42 -938, 0x111d9975e94f0004 -939, 0x276d3ea0ff1ca6c -940, 0x4209cb1f5ca1c594 -941, 0x71699dc4c58f1bcf -942, 0xe0288bffc5a27a2e -943, 0x6c0962c36163c4f5 -944, 0x3a8ad088b4fd204f -945, 0xb945dc7721092d36 -946, 0x315f4c1738bdf365 -947, 0xe07ddd7121cafb70 -948, 0x626fadaee66f331e -949, 0x6fe3f71dd5e7ebe1 -950, 0xe3cfb6b53bd8713c -951, 0x30f5b732f7070968 -952, 0xce2f941f93b957f2 -953, 0x116897bad7f55bca -954, 0xb9d2c4a98826c3ff -955, 0x9672c28485d1c95c -956, 0xd0656535c3df1e44 -957, 0x15294f18a999528d -958, 0x82a98977ad1e933a -959, 0xddd17b6eeced5f84 -960, 0x9901a04270fa2d5c -961, 0xcd2a8d3ab69a0c62 -962, 0x706bf86127a4597b -963, 0xe614aa96ed708afb -964, 0x7f6361ae8f59987 -965, 0x6a355657b59c4874 -966, 0x5211dca87f30cdd -967, 0xa21cbbc602f58ee4 -968, 0x68dff176c9b02a7b -969, 0x68f89bb7bca83c5a -970, 0x229cb884febc7e56 -971, 0xce4f300cf6b70884 -972, 0x6ad3f343c76c5e0c -973, 0xb059a099f121222e -974, 0x9e990641d81a63b8 -975, 0x5564e79afe160ecb -976, 0x2a9fa9c590511dcb -977, 0xca36751ba40931da -978, 0x23a332a9fe1104aa -979, 0xdfe116c321547662 -980, 0xf484bfbe18f2c1cf -981, 0xf8f2b4adf2d1ad4 -982, 0x4308800511929ba -983, 0xe2773c41e0082a51 -984, 0x6b74adc21bac6b3a -985, 0x1faa6a3704bd1b66 -986, 0x89e3e641298e87cd -987, 0xcb2f118548abcdc3 -988, 0x690e34dfb4153ab9 -989, 0x103d668edb5f7e88 -990, 0xb29d9f22b3b1d4a4 -991, 0xc4ce3be9022b314d -992, 0x1cb3d5af1306da15 -993, 0x8236da372d964cce -994, 0x79188ac299f06c2b -995, 0x953dfd978aad2545 -996, 0x6058e1066e7285cd -997, 0xf47307b50589e391 -998, 0x2923873ecd9c4d32 -999, 0x4c44d61328ac5e4a +0, 0x60d24054e17a0698 +1, 0xd5e79d89856e4f12 +2, 0xd254972fe64bd782 +3, 0xf1e3072a53c72571 +4, 0xd7c1d7393d4115c9 +5, 0x77b75928b763e1e2 +6, 0xee6dee05190f7909 +7, 0x15f7b1c51d7fa319 +8, 0x27e44105f26ac2d7 +9, 0xcc0d88b29e5b415 +10, 0xe07b1a90c685e361 +11, 0xd2e430240de95e38 +12, 0x3260bca9a24ca9da +13, 0x9b3cf2e92385adb7 +14, 0x30b5514548271976 +15, 0xa3a1fa16c124faf9 +16, 0xf53e17e918e45bb6 +17, 0x26f19faaeb833bfc +18, 0x95e1d605730cce1b +19, 0xa7b520c5c093c1aa +20, 0x4b68c010c9b106a3 +21, 0x25e19fe91df703f0 +22, 0x898364bb0bf593cb +23, 0x5bd6ab7dbaa125db +24, 0xd1fe47f25152045c +25, 0x3bb11919addf2409 +26, 0x26a8cb7b3f54af8 +27, 0xe6a27ee11200aa24 +28, 0x7cb585ab01e22000 +29, 0x78e60028676d2ef3 +30, 0x5c32535e5a899528 +31, 0x83e8b6f8c4a46fb3 +32, 0xe56ef7668a161246 +33, 0x36dcbc15aeb73055 +34, 0x5ea247f0bd188acb +35, 0x438b547b84601a80 +36, 0x8acda2a1273e9e3d +37, 0x2b05e30a4b40c24c +38, 0xfd87236bd13af032 +39, 0x471df211d8d985ef +40, 0x18e8a5609a793292 +41, 0x46f0951fab6dc4e3 +42, 0x6c199c4e700f6795 +43, 0xf04aa16bfb7d22cb +44, 0xd763d269fbaffc89 +45, 0x9991930cefbe5c2b +46, 0xb2a11b953f824c96 +47, 0x63fd9f52172c44b0 +48, 0x183bdad907b1d848 +49, 0xe17953cddb931c52 +50, 0x515cf16726ec205a +51, 0x88c327605150711a +52, 0xc7090dd79cbc8dc3 +53, 0xcb487cedeb00a350 +54, 0xc8abf254d87b657 +55, 0xd43cc4cbfb493d1a +56, 0x8705452e5d9ed1e +57, 0xcecd11446769cf43 +58, 0xde72156c8d65bc69 +59, 0x796a8f0f47d52ee8 +60, 0xb4c0da443917d6c3 +61, 0xe07ad7568a8e3dc3 +62, 0xc24a8da39ce6dc21 +63, 0x92b21ea80a8556eb +64, 0x572f21e531edf3af +65, 0x9b917ed56bbed198 +66, 0xe65fd8ddc5ab3d7d +67, 0xf55a80a8ec84fa18 +68, 0x18fc22e1a5227b61 +69, 0x72305dc7eeaa79d3 +70, 0x47ce58a36e7592cf +71, 0x14c6374340c0f7cc +72, 0x6f98273d4eb5a2c +73, 0x59a8702c46fe8f8a +74, 0xb67cbd8113cfe57f +75, 0xaa03c5db5f5b7690 +76, 0x3fb0f77ea4568013 +77, 0x756530990398b26e +78, 0x4c1952b2a3a6a343 +79, 0x1da15c5383074582 +80, 0xb405b21c81c274f7 +81, 0xbe664677a16788b +82, 0x9d2e37550bcee656 +83, 0x8b4589f0d9defe02 +84, 0x2935f018ee06a59 +85, 0x3834bf88be97ed11 +86, 0xa610d049cea79b6d +87, 0xd49ffc0d09a59ea9 +88, 0x4073365b76567adf +89, 0x499eefb9bb7513e2 +90, 0x74a743ee6b0138a9 +91, 0x3bf0880f2d947594 +92, 0x555d1c0498600a99 +93, 0x923b32a88ef2ffa4 +94, 0x7325411065fbedea +95, 0x9f4129ff8b79d300 +96, 0xab2b0a9b8a3785dc +97, 0x11734bdfba3a1713 +98, 0xc8333398841ba585 +99, 0xee2409cc234e6742 +100, 0xf6638e700872ecd2 +101, 0x10875300c13cd284 +102, 0x27a9bbed7c15b2d3 +103, 0x3c87f8fef31ce9bd +104, 0x92be263cd0914a95 +105, 0xa7b0f11bc742307e +106, 0x4a56f788cc1c1a3c +107, 0x4a130fa32257a48b +108, 0x5d4d9eda16e90286 +109, 0x7cc2af564844bedc +110, 0x2532867bfe7cda1a +111, 0xb1c504676611fd17 +112, 0xce8e86cfb4189aee +113, 0x99685898980d1970 +114, 0x8c3b67db23bcf1e +115, 0x73e14c93905b135f +116, 0xf0271b64ac2bd4d3 +117, 0xf4beba82f3ec1b2d +118, 0x1cdbf3ee9f210af +119, 0x2e938557c09c3ea6 +120, 0x2d314ccfa6ffd81d +121, 0x31ad47079950ade4 +122, 0x342b27547b900872 +123, 0x171b0e20b9ef1a76 +124, 0xdf10ce6318b03654 +125, 0x1d625df4aa718897 +126, 0x8712715a9f6e02ec +127, 0xb4a072da725bca3b +128, 0x19d346cb7734bd42 +129, 0xfd4281d311cb2958 +130, 0x58274c9519fc8789 +131, 0x4cacf29d885fd544 +132, 0x784b14d1c2523b80 +133, 0x2d25242131bb2373 +134, 0xcd2a5e43a7d9abf9 +135, 0x15eda3806e650ecb +136, 0xdaac5e277d764d96 +137, 0xdc5a5dd59aaa94e0 +138, 0x40d00237a46d5999 +139, 0x6205dd35a692743f +140, 0xbbd8236740361f09 +141, 0x1625c9f4e7288bf9 +142, 0xb74f12df1479e3ce +143, 0xb2d72a51b43d7131 +144, 0xf006a324b3707c83 +145, 0x28e8ab4abe7655b8 +146, 0xfb480093ad7ab55 +147, 0x3f8abd0d6ff8d272 +148, 0xc81a94177ac26bb7 +149, 0x3cdc178307751b14 +150, 0x9de84cc2b10ba025 +151, 0x3f8ab5aefcd046e2 +152, 0x43bdb894e1ee83b2 +153, 0xe288a40f3f06ac9d +154, 0xdab62a7d04b4f30f +155, 0x49f4e20295e1a805 +156, 0x3643764805e0edef +157, 0x9449954618b6b +158, 0x6c87e0d4508e0ce0 +159, 0x3a334be688a9dd7b +160, 0xb35c39228776e499 +161, 0xc4118bfff938490e +162, 0x88cbde3dcbb034b2 +163, 0xf91b287793c417c3 +164, 0x42b15f731a59f5b3 +165, 0xffa27104bbe4814d +166, 0x1b6789d138beccde +167, 0x542c2c1440d0ceb9 +168, 0x367294504d18fa0d +169, 0xf918b60e804a1b58 +170, 0xd390964e33a9d0e3 +171, 0x23bb1be7c4030fe8 +172, 0x9731054d039a8afb +173, 0x1a6205026b9d139b +174, 0x2fa13b318254a07e +175, 0x69571de7d8520626 +176, 0x641a13d7c03332b7 +177, 0x76a6237818f7a441 +178, 0x4e77860d0c660d81 +179, 0x4441448a1c1cbdb2 +180, 0xccd7783a042046e5 +181, 0xf620d8e0805e3200 +182, 0x7de02971367fdd0c +183, 0x539c263c5914cab1 +184, 0x9c3b9ba1a87bbf08 +185, 0x6d95baa34cda215f +186, 0x2db3f83ace0bac5f +187, 0x7f5af1da2dc670a4 +188, 0xfcc098d16c891bfb +189, 0x81a33df1d7a5ab12 +190, 0x767b0f863c8e9882 +191, 0x7a92983830de483d +192, 0xfa7598c37a79ac25 +193, 0xb89b3ca42ce03053 +194, 0x457a542b8efed4f7 +195, 0x571b7737fd0eeda7 +196, 0xa0f59e524485c0a +197, 0x82dca766b7901efd +198, 0xa68243caf6a3bd5d +199, 0x1bac981c6c740e5e +200, 0xbcd51bedf9103e44 +201, 0x4e197efd3ae5a7bf +202, 0x523568efd782268b +203, 0x5ec4ef1191fef09 +204, 0xed751ed5e31c9ab +205, 0x44eac24de03e1b29 +206, 0x9237d57c011d3fb3 +207, 0xa8c6da0f7692f235 +208, 0x9f9eb6bc15d6cac7 +209, 0x34bb8e0c93427aad +210, 0x115febd738eaac4a +211, 0xa439991ed139d27a +212, 0x45c7c2633d8710a2 +213, 0x48b7475f3405a3ce +214, 0x80158497c77bd00b +215, 0x935c316a5b1657cb +216, 0x59c5d54440e9695e +217, 0x337c78c5b3d0ede2 +218, 0x8c46bb956b93790d +219, 0xbf1dd03e471d71c5 +220, 0x2d375e90a4bef583 +221, 0xd0365428331b3790 +222, 0xfcd3969ac827ecd4 +223, 0x392fb6c580498410 +224, 0x6d6db4ceab5ea6c0 +225, 0x9bf84f1972e24786 +226, 0x798dfd820959dcc5 +227, 0x2e425095e65e8bfb +228, 0x8c1aa11536b1c9c3 +229, 0xd28e2ef9b12f6f74 +230, 0x86583bc98c8f78d2 +231, 0x489877530e3f93e7 +232, 0xb1d9430631104a15 +233, 0x1814f6098e6263bd +234, 0x8e2658a4e0d4cd53 +235, 0x5afe20e2531cdb2a +236, 0x30d02f7c4755c9bf +237, 0xe1e217cda16ed2d2 +238, 0xccb4913a42e3b791 +239, 0xfff21363ac183226 +240, 0xe788690bbda147a7 +241, 0x76905cf5917bfc6a +242, 0x2a8fa58f7916f52c +243, 0xf903c0cc0357815a +244, 0x15d20f243a4998d2 +245, 0x5b7decee5a86ea44 +246, 0x114f7fc421211185 +247, 0x328eb21715764c50 +248, 0xaffaa3f45c0678fd +249, 0x2579e6ef50378393 +250, 0x7610ab7743c19795 +251, 0xf9923d2bd101b197 +252, 0x57e42e7a62ba7e53 +253, 0x9f1dc217b4f02901 +254, 0x88a9ebd86509b234 +255, 0x867fc926aecc8591 +256, 0xaf22c1bfef04c718 +257, 0x39f701f0313f4288 +258, 0x6171ad397e6faab2 +259, 0x239bb5b9abdec4fc +260, 0xd9a591e25dd01c6e +261, 0x826dc4a75b628e49 +262, 0xf112b152c408f47 +263, 0x6843a06110f86c0 +264, 0x965e56a7185c1332 +265, 0x8d84492edbc71710 +266, 0xeee8ec111cfd1319 +267, 0xf2858e94ad98e458 +268, 0xbc9589fdf5f3a97e +269, 0xaf0ceef3bc375130 +270, 0x48f4aaf13fa75c1e +271, 0x111e9db47bee758f +272, 0xea3171df130164ba +273, 0x2a7bbe30bf827ab6 +274, 0xc516c3fdbf758c35 +275, 0xec55097754b04be5 +276, 0x374a997d52b6d3e6 +277, 0x487df5456085ffbc +278, 0x528883b84df8eafe +279, 0x805f77ab5ba26f86 +280, 0x8eb81477dc04f213 +281, 0x471ea08ec6794d72 +282, 0x69d3667ecc4d2176 +283, 0x98b7b6e295548a66 +284, 0x3877713c173f8f2 +285, 0xa00542570d0e8de3 +286, 0xf534b1bfa4033e50 +287, 0x7e1fedeac8bf6b26 +288, 0x8043f37c89628af4 +289, 0x1dd7039ec295e86d +290, 0xce9c05b763a40cc4 +291, 0x246926481e61028f +292, 0xb7cb0f1babf5893b +293, 0xefe6b777f37fc63e +294, 0xebbcabb4cb35cdcb +295, 0x39fa63cd711eeea9 +296, 0xad5d3ba7aaf30c8d +297, 0x8e9e78fe46021990 +298, 0xc7eaef6e7d5a3c62 +299, 0xefccdd5495d3f386 +300, 0x2179557ee8cfc76a +301, 0x88a77f621f0885ce +302, 0xafda62674543d90c +303, 0xb8e6fbe2e13e56c0 +304, 0x8bfbbe26a14f9b1a +305, 0x1404f59f5851f8c3 +306, 0x1140c53a0489566d +307, 0x3edf2d138b5c3f1d +308, 0x75d6bb275d817dc +309, 0x8e660ae27107664e +310, 0x7a8021038ee303e1 +311, 0x2042ef5eefa9079f +312, 0xe3e7b90bbf6d457a +313, 0xf3f819d2bb9405b +314, 0x522e42155cae0c10 +315, 0xf5bfbb975b40e233 +316, 0x2cf82b614dd95cfa +317, 0x183ef4a96bc40e55 +318, 0x9f6e351c5ba4e752 +319, 0x37c1110683c90846 +320, 0x1d89b7a996d8a977 +321, 0x18a444f77c7cb4d9 +322, 0xd0a8a971b78dc893 +323, 0x860232fb9e6543f1 +324, 0x60b6097f51002555 +325, 0xca1e5214123e3894 +326, 0xe03fe695c95f99bb +327, 0x2c7c6779d5f03622 +328, 0xafeeee42f63055d1 +329, 0x670dde905515936a +330, 0x9a922f42b59fb094 +331, 0xddb5ff49af5a651a +332, 0xe61b04c9e58ebbf8 +333, 0x4e459dcf272e7fc4 +334, 0xd549e92c16adceeb +335, 0x7a17dba1299d4a9c +336, 0x825d756109f2b585 +337, 0xba142e61a9cb203e +338, 0xc2a19f00e9c04a30 +339, 0x2d0f8140d23d0652 +340, 0x8b866d4d4d6caaf4 +341, 0x4f11d90dd91f8217 +342, 0xf6efc37373b9e0d +343, 0x248493d6cd6a4736 +344, 0xd12b6ae74a951a3e +345, 0x56e34722070b70a7 +346, 0x22d3f201cc9fa0eb +347, 0xbfdcc320008291b7 +348, 0x1a7a6922e9204fbd +349, 0x831421e0c4945ae4 +350, 0x66316feddddf0e11 +351, 0xa8c86a1517456554 +352, 0x14a9049ad989e335 +353, 0x837022259f141ecd +354, 0xcb71793a06c261f7 +355, 0x4aeefc07ebe09a79 +356, 0x8982f15aa3b6594b +357, 0x67bccfa7ed9b0d5b +358, 0xb377463b523e9dec +359, 0x53d3d594870fecb7 +360, 0xa5274b1caec5a60a +361, 0xd6316d0cb643db39 +362, 0xabc1a9b536de88ce +363, 0xed2fdb1383d2a077 +364, 0x12319c6feb97221b +365, 0x7e0f6cd40ef47403 +366, 0x86135c84fe26dbf8 +367, 0xc96622d3fbbee19b +368, 0xe3989d8d8511573f +369, 0x42cc365554d1fdc7 +370, 0x4c1a1eb8bbce8b4f +371, 0xfc4e30e7ef2034c1 +372, 0xc490444317a91e76 +373, 0x7ccdf469ff5dc81c +374, 0xf5a0da4110cc09d7 +375, 0x505227baf34c0fb5 +376, 0xbe58737e8a35cc88 +377, 0xd449bee91b3e8c41 +378, 0x3e590e23299d0e6 +379, 0x291a7d9e0a64caf7 +380, 0xdc6fafbdfebd2293 +381, 0x8223f1e259fe8a65 +382, 0x6186fbc9efd9e3df +383, 0xfda39b07e4007ffb +384, 0xfc19aea98574dc02 +385, 0xd0e10d354fcacd8c +386, 0xc9619916544a55a5 +387, 0xd454d50a8c8558cd +388, 0xcd94a246712d91e +389, 0x76a771f5d1231cce +390, 0xdd20cb2b7b370ee5 +391, 0xa6f4f50feca57c49 +392, 0x78c8fb431f17ab9c +393, 0x1b692b79a59b43cc +394, 0x4c45045d287da7e6 +395, 0x522132e18bf43928 +396, 0x25c458983138b41c +397, 0x2a1fb426ef229796 +398, 0x74dc324c74e5dd3d +399, 0x6df75e3eb6eb5374 +400, 0xb63f2f4f9ca25b61 +401, 0xac72286112ee54d6 +402, 0x5a966f3d0a6863c4 +403, 0x8d7046bc64a46fc2 +404, 0xa7b740fd6e3087eb +405, 0xcdbcbe0340cfcdf5 +406, 0xcb632613bf312b65 +407, 0xa91b3f2c2aac238b +408, 0xa06deb3f5ae555a3 +409, 0x29d72e1f8db69 +410, 0x2d004bae09728ea6 +411, 0xc6eee5dce0736cc1 +412, 0xa7493145500ff60f +413, 0xc4d68c4aa18ab93c +414, 0x8210c29e79d48d7f +415, 0xd0999d7889ecbef6 +416, 0x6e3bd61e66e93566 +417, 0xe6cc13d47d7d7b1f +418, 0x3d6f181f42e03979 +419, 0xbed4e14fd867604a +420, 0xbe511c84067bd86d +421, 0x49a876d89e697d38 +422, 0xc04c3dde8f889c98 +423, 0xaf293eeab0f53e3f +424, 0x9f6291dd65732cd6 +425, 0xd7811ac01de78c01 +426, 0xe385cf0261d50ec2 +427, 0x5a64134b3542bbf +428, 0xf9d1302bc6f13a68 +429, 0x5d2aabbea37d8c31 +430, 0xd9842e99a5192970 +431, 0x713eadc4cd30e837 +432, 0xb7b002fc72abb413 +433, 0x276cfeea526af1cf +434, 0x8519fe79b633a0ce +435, 0x2f0e87363705a3e2 +436, 0x9adbac0be3c371e7 +437, 0xf3f44ba899a6173c +438, 0x782d6c29618fde2b +439, 0x7f61062acec408f +440, 0x6e79cd836359258f +441, 0x5c8e9b138df5785a +442, 0xa54359c9f39a9a84 +443, 0xeec3f033135084b0 +444, 0x883ee717787a535c +445, 0x9a2422b513a73b00 +446, 0x2dd4beddcdd64a58 +447, 0x90c8a13202239c7b +448, 0x85b352ab759646d9 +449, 0x139f5cb2e46c53aa +450, 0xe1d3ba6c721c66d1 +451, 0xaa66e0edc4b60a98 +452, 0x3521275c75be29b6 +453, 0x490a5190b3edfa5d +454, 0xd2abcdd2ccb2f14e +455, 0x9d9be8bef4a5857d +456, 0xde19676f13ef7755 +457, 0xdac2fee2e42615f3 +458, 0xf4239801cb02f2ab +459, 0xaa8bf923ed91875c +460, 0x61d18a1940e4c7c0 +461, 0x1eb6aa3d5f077a6d +462, 0xee7374c063bf29d8 +463, 0x2f0a59e34d76268d +464, 0xc92e80e17d1eb3e9 +465, 0xafd05b3ec3d2ca72 +466, 0x28a61ad8d6c497b8 +467, 0xa7094d6834ad7d47 +468, 0x57d80ea9eccbb4f +469, 0xb047e0fee6cdaf16 +470, 0x44f41b5eb48c00bb +471, 0xd6dc8e1eb9c8c9ba +472, 0x47adfd2c638c7849 +473, 0x365d63db7d526c68 +474, 0xc21cda439016135d +475, 0x14d10c3f0f98863c +476, 0xa93e56f74e037602 +477, 0x3b4e9c8915bdc9 +478, 0xb46f5ae155e54aa2 +479, 0x8e470d21ce1943e1 +480, 0x60b96301b5ba2e8d +481, 0x1b473a41d381f9ff +482, 0xabcf5a8e3269e73f +483, 0xd410f6e94fb21fa1 +484, 0x65d1a47eebf87e5e +485, 0x48eaa201c61cb843 +486, 0x212c1abc2499bfc5 +487, 0x4255ad8377d2d8d +488, 0x44caeef472010612 +489, 0xffae764524f572f2 +490, 0x78d374d20c9ee550 +491, 0x6e003206c0511cee +492, 0x7998a159145bfb82 +493, 0x921239650bda1d4d +494, 0xae05025509bcfdc5 +495, 0xc6430c980be407b4 +496, 0x78524f1744b153f1 +497, 0x84089e6f468181fe +498, 0x8d0d21d7dfb6c254 +499, 0x90bad90502a33603 +500, 0x3072a403cbd16315 +501, 0xdfadddf3f1c040c2 +502, 0x22f0b0639d9ff975 +503, 0xb49e48a4cad0765b +504, 0x95a0a04f8239709d +505, 0x56e147a24a4c481f +506, 0xacf16ef61dea4c7e +507, 0x424040afd2700de6 +508, 0xc67e8096a3c717a9 +509, 0x39f164181dd0a399 +510, 0x2449cedc1d62198c +511, 0x7a53df11a1f1a61c +512, 0x5596f1d4a3badae3 +513, 0x38ed4c822072b3d0 +514, 0xf07ef346b3fd730a +515, 0xfd349c35c3ed51fd +516, 0x2f15c9c7890f8f32 +517, 0x3b470df52b173c29 +518, 0xd31bfc8981281af7 +519, 0xbbcc9bdf561215bb +520, 0x5782fffea326574f +521, 0xb0ebdcfcc5e03290 +522, 0x7fd89d93d2b3fbef +523, 0x280ea1865d9ba2 +524, 0xe726959845b2c100 +525, 0xd0361f032cd7dbb1 +526, 0x3c65ec2028b81a22 +527, 0x5221e9b2188920bf +528, 0xeb5ab27c4125ec20 +529, 0x80a32dd48b54f0a4 +530, 0x369b5ced1012bebb +531, 0x582d35d76530bc6f +532, 0x7b50dc9b48e1e37d +533, 0x37fdfe8bbacf8dad +534, 0x7a0cb7e6e93840ea +535, 0xa1132c870be0b2ce +536, 0x9d8ac2c68267cd1a +537, 0x470969b647fa7df4 +538, 0xabcb7d8adf7e2d24 +539, 0xacdebec9bdf9eb1c +540, 0xe30f4cbf7eb6a59 +541, 0x746673836c4df41d +542, 0x75120a6b647bb326 +543, 0x2f4eab556c3f6878 +544, 0xd84651ab05405b7a +545, 0x9e695808b9622284 +546, 0xc93b71e56aa6e1a5 +547, 0x2be7f3be4a7b7050 +548, 0x6497e910b6733241 +549, 0xcf7050dfd08076fc +550, 0x4e3cc156eca183f7 +551, 0xf801a33d9326c265 +552, 0x6aa293c8a47d40e6 +553, 0x28c429755faa6230 +554, 0x82b818651f54e7bb +555, 0xa84d726d7acdbead +556, 0x5cfa535d5774965d +557, 0x4a34b7b1cb48d53 +558, 0x86a7b5bce426de84 +559, 0xfcd2307cecdb7318 +560, 0x16dbaaa71181a038 +561, 0x88e7e8cd261c2547 +562, 0x3c09ba6d1d5ea913 +563, 0x5dd3d643734ee5b6 +564, 0x326d725fe8cbb33 +565, 0x7bcca9ca2da8e784 +566, 0x482dcf6b11d7f9a4 +567, 0x1291b605b4cd3e04 +568, 0x6988181b50e2f4a8 +569, 0x649e3c37131fc292 +570, 0x4eeb67b9e21eba54 +571, 0xc051d39073dec45f +572, 0xc99c52e110270d67 +573, 0xcb813d5d77868add +574, 0x423a5f13573e7ac0 +575, 0x231ac4cc4fe73616 +576, 0x4c22b888a6e600ea +577, 0x8059a6dc7c9e25c6 +578, 0x49f498a5b8ad22de +579, 0xf1e812cc6d1826c8 +580, 0xbbaf60abe8b11e00 +581, 0x1d31d7f4d8be9a6a +582, 0xfeadce70a9a10c14 +583, 0xb47c635bc136996a +584, 0xd88e694c8da030cb +585, 0xc41bbe132aff1364 +586, 0x34249ab18a4b0800 +587, 0xf14b5c825aa736cc +588, 0x2710be6b08df78e +589, 0x2ab56bcc9bf9e740 +590, 0x9b7f6e591b5f648 +591, 0xfb665c3772f34135 +592, 0x628a0a5d2db5d8d5 +593, 0xb3e3f251e61b5259 +594, 0x82310ae33faf1b23 +595, 0x24af8723a65cbd0b +596, 0x671c93282fc4ad97 +597, 0x6cabeaac77270cad +598, 0xef4643fe38b02b7f +599, 0x7b011549d1ac6653 +600, 0xe2af87b9fccfe89 +601, 0x36b71ad67197ac8a +602, 0xdbba55d06f2fd93b +603, 0xf571dbd764b7f7e5 +604, 0x38ea402501cdbd45 +605, 0xb8ab5b5b1bab2913 +606, 0xfab973c4d45f32bd +607, 0x9364f1717c2636b9 +608, 0xfad00f4d983e00fe +609, 0xc90c532a11aef75a +610, 0x64a6eda96e44783c +611, 0x35891f2eb84520be +612, 0x28d216080caed43 +613, 0x129629cc5bd206f6 +614, 0x22c3d39822cbb4b3 +615, 0xf1efbf4cce1eaa2b +616, 0x7070cba12524ed08 +617, 0xa7ed0be9deabf20d +618, 0x8ddb4cd6b454f76b +619, 0xb82814b1db37b63 +620, 0x418e83b36de01876 +621, 0x9a538c7f39c6413 +622, 0xee0cd7abf8a2ecb9 +623, 0xa9222b07e95590f3 +624, 0x6296a415d68341e6 +625, 0x981e0a5a8f811929 +626, 0x4bb372d3b0de283d +627, 0xa9805b5971866e16 +628, 0xaf3b5f5183497657 +629, 0x2152b0fd23c3d9f +630, 0xb730c325b7173180 +631, 0x1e3439d231608c19 +632, 0x1c5ba6031379823c +633, 0x87f5d12d6d365cbc +634, 0xd3bc7f29614bc594 +635, 0x63102214bb391268 +636, 0x482bbd5bba648a44 +637, 0x6a23604690759dc4 +638, 0x4091d41408d3a39e +639, 0x7cd017f922101b15 +640, 0x7ce9004ac5f9231 +641, 0x978bc3d8ec7f7fdf +642, 0x5bd0c4d780580c11 +643, 0x4313c068bb040153 +644, 0x3ab7dab7bc38bf80 +645, 0x3aaf9c187728deea +646, 0x6633a4ce8efb88d9 +647, 0x7263b089878f00fc +648, 0xd0d767e96fe00eb8 +649, 0x184a7c0c01908028 +650, 0x1ebdf41e6f76e186 +651, 0xeb740ee1d0402083 +652, 0xfccf4974edb1c339 +653, 0x16e2707aa28306d +654, 0x1684f0bdb018c3a5 +655, 0x887b6b67b88aa862 +656, 0x923d7810a2bea33a +657, 0x56b3560babef5d6b +658, 0xb39a14614c54b8c6 +659, 0x33e4dc545a509fc8 +660, 0x26e21f84142da9b +661, 0xdd07598125756855 +662, 0x572d49a071d7ae0a +663, 0xba3c7e3baea28760 +664, 0x7ecdb2d714db4b61 +665, 0x1c62b4920e1b2fe2 +666, 0x71bfafb70092834a +667, 0xd710a4228f60d56a +668, 0xeb16277d4ce4e95b +669, 0x968168c90b16d3a1 +670, 0xac3439dfe8ad0062 +671, 0x5a8226f9dd5876ad +672, 0xb843affe917291b0 +673, 0xd76d1e67051f8259 +674, 0xb73a6638cce8ccde +675, 0xa0e6afd3c7295f9 +676, 0xff8857b4bbb5f4c6 +677, 0x99becf78938f0426 +678, 0xfcd17edc1e70f004 +679, 0x6223b8b23f2f50 +680, 0xca875f3e84587b4c +681, 0x7d1e81e589f87fb9 +682, 0x9eb621586aa826fc +683, 0xf46fb9ef5b9c2086 +684, 0x2882c9b7092725f3 +685, 0x5493f099bbedcd02 +686, 0x90c1ec979ffa811d +687, 0x963f765025bcc53 +688, 0x56194e3ec3d9d4e9 +689, 0x7ec4720954cac1f0 +690, 0xfab3145171af7f90 +691, 0x52a0b4e41a13b593 +692, 0x740e2d4d5909d126 +693, 0x98f5339c09c94a28 +694, 0x1700e462fe8dec76 +695, 0x3dbffc2aa4695ac3 +696, 0x5763edacabdfe2a1 +697, 0x7b5b623ce49ef21d +698, 0x30addc66f49860df +699, 0xcc7511a6c31bceda +700, 0x1b25b61ca75db43b +701, 0x416bc4c298e59046 +702, 0x4cd11fe2d74e4649 +703, 0xb54458a9229fc978 +704, 0x8c21a27882b6ca35 +705, 0x57887c8b5e01639b +706, 0xf4e893da996680bb +707, 0x8d601297702c9c0d +708, 0x2a27904a30aa53af +709, 0x497800f6917ea8d0 +710, 0xe96db3340ada9c00 +711, 0xcc23166f14c010ee +712, 0x782690d78fa65ec9 +713, 0xf3e00d74a0878eda +714, 0xa7cbb683decca0a3 +715, 0xdd2e038e683a94aa +716, 0xe2096ff8da896ca5 +717, 0xf7c83400afdabe11 +718, 0x395b8c6f6a4086a4 +719, 0x4a164ec05bee71d4 +720, 0xe87aa5d1ca0462fe +721, 0x8dbc5aed6dff9ceb +722, 0x12120d1e9552707b +723, 0x877dca6889b3e6cd +724, 0xbd65605c01e900fb +725, 0xbd6b82c4157c3115 +726, 0x8b60282732caf78a +727, 0x279fcf5e5de9e57f +728, 0x34b34ebfb6a37eae +729, 0xd258cc1a14e03b7b +730, 0x9a528ba3db4a13fb +731, 0xffa0aea59d057746 +732, 0x27fa7f456cd37c4e +733, 0xe1117a57a6fdce63 +734, 0xdc8fc903970a1551 +735, 0x492dd104f30faf29 +736, 0x110def0959e5652b +737, 0x7f8d1997636fdd15 +738, 0xfb77b05e538a9b59 +739, 0x2e41fa35b4b01fc6 +740, 0xbc35ae69a3374085 +741, 0x192c2a681c2d9b4b +742, 0x12566b8866c189d6 +743, 0x9d88ea785c5185c8 +744, 0x30a621ad5f983c4 +745, 0x8b875efe1206f587 +746, 0x224d25c3af6e3423 +747, 0x7503e976a1ac7bcc +748, 0x3c98aa869e823859 +749, 0x3d8835304b646892 +750, 0xf6353330ff970bc2 +751, 0x8a673f5e2edb8acb +752, 0xf2fdcc53493838b9 +753, 0x85ddcd526236af16 +754, 0x60afb99814c676c5 +755, 0x32a1c2749e281ca8 +756, 0x2367a92ae3bee9ca +757, 0x219fe082703743cc +758, 0x34d8b74dc85182a9 +759, 0xdd04164c72db23f +760, 0xe293ac28fe2671a9 +761, 0x9ca7d169cbda6f45 +762, 0x705c47972b4240ed +763, 0xc10eda9eeb536209 +764, 0xc36ddacd0c94e85d +765, 0x8eb592c27e8cd0d2 +766, 0x3e815991c76e7cc4 +767, 0xac9cfce31acf7580 +768, 0xbf7a4cb31c7aee94 +769, 0x663077444aceecf6 +770, 0xe7f614ff386eb568 +771, 0x79d7a229c66912c0 +772, 0x161ed4311f63e1f3 +773, 0x308a5faeb9982ede +774, 0x7b38ddb9b7efd10 +775, 0x1e103a2589b27ecf +776, 0x67b02baf4259f27e +777, 0x868921c115ea2eee +778, 0x959791912200f71e +779, 0x4dd55f36dec10557 +780, 0xe3464d90080cb99d +781, 0xfb2d4f6accce652f +782, 0x109900a9257d77ba +783, 0x3c4bda8e2c83684c +784, 0xc9ae040fb7f868c6 +785, 0x78098ffe994f4905 +786, 0x7a94c33eca77f0b4 +787, 0xbe6a2a95e9b5c0e8 +788, 0x797d39cf963f4837 +789, 0x8d2e249e4425d06d +790, 0x6ae2c30cd5da06f4 +791, 0x904489de762b179f +792, 0x84713e2dfb591e3b +793, 0x6405a40da3f6f51b +794, 0x976b560d663a2df1 +795, 0xed1c544784ba1e22 +796, 0xca658e995ed9344c +797, 0x2b1c6b8e4db49025 +798, 0x52b1513da528bad +799, 0x3c63406d256d9968 +800, 0x63a31ca3d423f85e +801, 0xb05a81f55789a720 +802, 0xd04412992c476c8e +803, 0x828ec2f77a150a3d +804, 0xee50926671bb60c6 +805, 0x5aa70f93e2df61b4 +806, 0x94d60fa2e8655858 +807, 0x3f5e5b770703cc7d +808, 0xc62dfb2688ca7784 +809, 0xaaf02e1e8ba89fe4 +810, 0x4ab74e0d8c047405 +811, 0x31ee04fbac6fcead +812, 0x1203b78b8228f5af +813, 0x412a70836f9aa71a +814, 0xab51cf98c03f1819 +815, 0x783a3ce9ce137f65 +816, 0x8897085b0a072cf2 +817, 0x685dd9bde8798cb +818, 0x9a1fac7b1705e2c1 +819, 0xf3e9ff98de48e9cb +820, 0x5c2d3eb1a1fbe917 +821, 0x3bda718b6b54d82e +822, 0x29f2dd18f22f0821 +823, 0xb992da1572ac3597 +824, 0xacb69e7aa14b34f7 +825, 0xcd36e3ad14f088d1 +826, 0x6aaacc96a1ec55e8 +827, 0xf8ac593f154fe68f +828, 0x18fc9cbff012339f +829, 0x2f3368ccbbb99899 +830, 0x7cec7d17f37031f7 +831, 0x96e86bfaadcb8fc2 +832, 0x74f9e7ee3d42a752 +833, 0xbd52f6c7d9b0733 +834, 0xa48e6d96bb6ce1c9 +835, 0xaefa058254b82133 +836, 0xb7a19edfd0929107 +837, 0x6160ce9125b26e26 +838, 0x6537dbbde1d2aed +839, 0xc567f9a6bec52dde +840, 0xca29fd3f22443342 +841, 0x7732aa6db6a1c476 +842, 0x8f5a4d7df6b11b3 +843, 0x76649262aa7e31e1 +844, 0x60a13eb125fbc829 +845, 0xc81e4d123dd21ac1 +846, 0x643cbb09bb72f86b +847, 0xf971a98fb25555a6 +848, 0xffa2774c66692d56 +849, 0xcb33c16c50b13ea9 +850, 0xfabf388dffda0e9b +851, 0x55d41ec12ca24b9f +852, 0x91cf693a3467e807 +853, 0x6be2c00b2c31d6dd +854, 0xc5cf513b5251ae28 +855, 0xffc4384212403dec +856, 0x45d4e1865255a69d +857, 0xfb1dcf956972086a +858, 0xcae946a55c4c55b8 +859, 0x7351ac7720e385c1 +860, 0x19aa8ffd86240254 +861, 0x8f515ae78f4040da +862, 0x1e1ed2058de50fce +863, 0x22d006dcdb374243 +864, 0x6e0f0ede7c95b441 +865, 0x70e8aa81b53b4d25 +866, 0x998f309ea41e3814 +867, 0x89ed6598fb66f390 +868, 0xb5997dc3278060df +869, 0xb2a021eac4f7e046 +870, 0x3705b60aa2fd0768 +871, 0xfc415079ab9200e +872, 0xf2871ac4cf45ecc9 +873, 0x24bf758d2246175f +874, 0xac503dd6f8141b3 +875, 0x4e879d12d9f03b3 +876, 0x82034af8cf93b644 +877, 0x59899dd7e478a6c7 +878, 0xae90addb6eb11507 +879, 0x1524ddf76730cdef +880, 0x6fd4afd5456b1c9d +881, 0xcddb9221ea001cbc +882, 0x64ff400bbf2e8604 +883, 0x6dda10549b06ed9b +884, 0xed2c85104c261527 +885, 0xc7e09217d29929a8 +886, 0x56284df611a428b1 +887, 0x1a7608289c0a61 +888, 0x7cb63db15166ff66 +889, 0xc6013c76fcdcdc72 +890, 0x8e5dd566c7a5a676 +891, 0x5a8e8565f40d133b +892, 0xe465973455848c44 +893, 0xf92eecbfe0f3c2c0 +894, 0x7d64155d4dcc5cac +895, 0xf17595706f988dad +896, 0xd590a001a6a19c5c +897, 0x82a164475758db3d +898, 0x6b144993ea1bbe32 +899, 0x22a81a7a6e453779 +900, 0x8e8c298df1a68a73 +901, 0x78056afd6d936b4c +902, 0xaaceef0325faaf62 +903, 0xe78bb7699f82266f +904, 0x523a2d283c5a5166 +905, 0x7076d87088f6c6db +906, 0x6087dd54cff5aeb2 +907, 0x7ef82e62cb851680 +908, 0x4e8bcc8ed84d03d8 +909, 0xd12fa0361df3cfd3 +910, 0xefb89c79f8127297 +911, 0xa9af4e2fbce0b1f8 +912, 0x462136685b70331e +913, 0xe9e74c93da699b77 +914, 0x9ec69215fb11d0c3 +915, 0xc10f229939e3e111 +916, 0x3f67fa79e41d2374 +917, 0xd5e7c1a9a7185162 +918, 0xa1dcce9ec91492fe +919, 0xd4e61f0727b5d21b +920, 0xdf6cdce46551800a +921, 0xa3f256ce906982d3 +922, 0x209742a6b9ffc27 +923, 0x4006c96958526a57 +924, 0x9606aebc75a1967e +925, 0x91b9f42fb64189df +926, 0xb27119defcb938bc +927, 0x128cc7a84ba05597 +928, 0x6c3df613c62d0d30 +929, 0x3adf69d48b629ec7 +930, 0xda42ee493837b128 +931, 0xb8e770480e760bb5 +932, 0x9feb55d57c99c626 +933, 0x29812d80afdae3ed +934, 0xae4222a64276a8c7 +935, 0xe3897212a5b4ed53 +936, 0x98bedfd13886e669 +937, 0xca858675d7fc0d0e +938, 0x28a359f665354234 +939, 0xfac2ccabe4128b35 +940, 0x61373cc5d11ca180 +941, 0x7007605a4512a87a +942, 0xe71f8eade7b30b3d +943, 0x3a9e77f9b99bd04d +944, 0x70d3e42488098866 +945, 0xd30fc159c7cd4d99 +946, 0xe4d3f6600d2e2d6f +947, 0x1088324dfa955c25 +948, 0x516437acd4764623 +949, 0x38a31abe50d0aa03 +950, 0x72e1054e9dc02ba +951, 0xe6971dd664d1a2e2 +952, 0xf6698cb095d3b702 +953, 0xad995a5a8c19bd92 +954, 0x34e53c6936f656e6 +955, 0x10de240bc07c757a +956, 0x3e3b9a6861c2bd1c +957, 0x9c0b0b97d3712ec9 +958, 0xabf1505a75043aed +959, 0xbdf93d3de3274179 +960, 0x28fa5904d3f62c28 +961, 0xc3b97b39ef6c5133 +962, 0xf2b2219225b8679d +963, 0x8be4ec0f930c0aaa +964, 0x47de5a56aa590643 +965, 0xb6f871b304129856 +966, 0x80a61c06233ab0f9 +967, 0x3ce6c3af8101b055 +968, 0x85b911708274e7d1 +969, 0x4cab65d093a488b7 +970, 0xaabc4b10661fe28e +971, 0x35b16dea64474a68 +972, 0x1d6eb5b093361223 +973, 0xc39107b92f0fe1fb +974, 0x1d09e048073c4841 +975, 0xc6a02f43aca8cb2f +976, 0xaf6613dbc7da909c +977, 0x5ac2a40c230aa756 +978, 0x33afb5e7c01c39a5 +979, 0xc7b0b20ea8b7d0ef +980, 0xdf7306c8ccb1bbea +981, 0x9710efc0c188b2a0 +982, 0xd6303eadb72c873e +983, 0xa38ca609b118f35a +984, 0x8390613065c6e535 +985, 0xdf9a0106757e431f +986, 0x8bcf77039788e143 +987, 0x6026806a986b378e +988, 0x482ff3b1394cb1dc +989, 0x2a27d0ccac9ede9c +990, 0x53c77f26e271b3ab +991, 0x1ba004cf276cf3f +992, 0xc135b0517dc81f7c +993, 0x5d137838db75e442 +994, 0x3fe505f93d1dbdd7 +995, 0x351654ae7d598294 +996, 0x173f8d182af9d84d +997, 0xf97dfcd164fe11c5 +998, 0xcda423e5ad43b290 +999, 0xa5cb380b8de10d10 diff --git a/numpy/random/tests/data/pcg64-testset-2.csv b/numpy/random/tests/data/pcg64-testset-2.csv index 779761d0f..7c13e3172 100644 --- a/numpy/random/tests/data/pcg64-testset-2.csv +++ b/numpy/random/tests/data/pcg64-testset-2.csv @@ -1,1001 +1,1001 @@ seed, 0x0 -0, 0xd4feb4e5a4bcfe09 -1, 0xe85a7fe071b026e6 -2, 0x3a5b9037fe928c11 -3, 0x7b044380d100f216 -4, 0x1c7850a6b6d83e6a -5, 0x240b82fcc04f0926 -6, 0x7e43df85bf9fba26 -7, 0x43adf3380b1fe129 -8, 0x3f0fb307287219c -9, 0x781f4b84f42a2df -10, 0x36dac886f4232c6f -11, 0xa32006a96a8d46b -12, 0xa56e609a788ce098 -13, 0x75711678fa371144 -14, 0xbcdd4619fa063896 -15, 0x5cb5c9a1594f1a04 -16, 0x799e6cc7d09bf3fd -17, 0xda1a4b52f72a8c6f -18, 0x374b6f698c864e48 -19, 0x96a3e4d45b8d252d -20, 0x5fc89e7cbf7735e4 -21, 0xe0cfe37beef7efe6 -22, 0xc3467c95f4649808 -23, 0x95cbda6a3275f18a -24, 0x3a4dc1e59bdb4172 -25, 0x47f8755023ac78b5 -26, 0xef8e166bf07dfa95 -27, 0x40065cf0fa99882d -28, 0xbaa083ad70102eb6 -29, 0x7c88e9d1a72a8dc -30, 0x1484e44aa83e901e -31, 0xf0f8df78086fdeba -32, 0x5114e38e0cff505d -33, 0x7e04bb9a2828c944 -34, 0xb88c0de9e2af5658 -35, 0xecba992ca7e9178d -36, 0x8b40b65347cfeffb -37, 0xfce9281a9381a55f -38, 0xfde34f9f228fc03f -39, 0x8c46656aa79eba9d -40, 0x1ed0d3f416073189 -41, 0xd7adcc20a26d48d1 -42, 0x2429dcfa355eddba -43, 0xec100f2285aaad68 -44, 0x91a83984506e1ef4 -45, 0x4c10c0f973e3cba5 -46, 0x45d0d0ad9ab6890e -47, 0xa52b22d88ddb6090 -48, 0x63f7e7549bf80c43 -49, 0xfb03f87e5ea7137d -50, 0x822f96594246a4aa -51, 0x42242b1335cd3424 -52, 0xf78652fc51ec76ac -53, 0x24db7314bda69cc5 -54, 0xcce4cf66737c8427 -55, 0xffd70eeca33ed90f -56, 0xc154aff2caddd546 -57, 0x59d47a8ccd59e1bb -58, 0xabf793045ca561f8 -59, 0x3f1486708729b21d -60, 0x76ed98409f3f9abe -61, 0x3f0bb2cd7cedd012 -62, 0x448f78da1713ac85 -63, 0xddbae7151c1578b2 -64, 0xcf94237ec0973cd7 -65, 0x76a0657cedebac81 -66, 0x2b13b564bed7a3b3 -67, 0x47a6fc0f4604c781 -68, 0x22acf016523ae80f -69, 0xf728771b939c13a2 -70, 0xab4aee3986c80ec8 -71, 0x61d8c8c918b3fe52 -72, 0x7a40380c747f9044 -73, 0xfaf974af2e96a882 -74, 0xb8bd56d90c69d42c -75, 0x7cea307dda515497 -76, 0x56d0858a27ded2a3 -77, 0x8717ea17698706b7 -78, 0x6b34d0c0587e8867 -79, 0x387a8142ee80d29a -80, 0xbba414cee59e3194 -81, 0x6d2fe8bec0e51a8 -82, 0x11d5dc961ba15ec5 -83, 0x7af1ae07932b2fb8 -84, 0xb13ea6b28d63b57e -85, 0x7e89a6f060cf59c5 -86, 0xad1f662c4daa4764 -87, 0x929a054dec3e229f -88, 0xf7f41c2a34920f09 -89, 0xf0eac1b75822b72b -90, 0x24f311773d90d399 -91, 0x9c2147da3d098c17 -92, 0xa62963f5bb0f8b9e -93, 0x97f650195285e480 -94, 0x602433fd24fe4125 -95, 0x6f17d6e3b5fd704c -96, 0x3ad6f2cf0ffd6a04 -97, 0x73a6d93edf693e03 -98, 0x467d4e6fecdfdb20 -99, 0x6aadbba2b2f8a2f8 -100, 0xc865bae9d8713526 -101, 0xa94d7c6b462e5acc -102, 0xdcbb47fdacd4d865 -103, 0x80aa6a71fd60cb40 -104, 0xf27ad62910288223 -105, 0x88f93784d309825c -106, 0xf7f9a500b821c886 -107, 0x6cd6e37a5dca4830 -108, 0x57694853b9c75561 -109, 0x9c7ef1aa6b8f2c1 -110, 0x12046439309d6e40 -111, 0xee3d652c43bd35b9 -112, 0x3838110676b26d7a -113, 0x9efd697137fa24c9 -114, 0x1eeaa149a7edd5be -115, 0x17eb32cd212e374a -116, 0x73dd5b7d7fd3b280 -117, 0x788e514de9649f29 -118, 0x6e2fb96fbf87fe8b -119, 0xc736a34c7ea74137 -120, 0xa4d48bb7df0e3c51 -121, 0x25b66ee78063d37f -122, 0x9058e087b9696e7 -123, 0xa2e6397ebdd3d935 -124, 0x394a16ba856e6899 -125, 0xe4aad4f1bc61d046 -126, 0x5e4904686af5c43 -127, 0x4e58956c61a1880a -128, 0x7328c827d6236eff -129, 0x29463809b511cf73 -130, 0xceb2c403cef62247 -131, 0x9ccc00f358aa8346 -132, 0x6fdc1c42421ba33 -133, 0x1111d660460f5300 -134, 0x97a4f922e55a9226 -135, 0xbc2a217152bfbc63 -136, 0x3617700c68d104d9 -137, 0x8eecc63c4a929622 -138, 0xc69cf9d8f8b45df3 -139, 0xa2a8ca8262f8921b -140, 0x4339edf9e292f9e0 -141, 0xfe385e2e7f6e1a1a -142, 0x5f30d1b803abc1d9 -143, 0xf123207050238c3c -144, 0x79e3401200b54b1a -145, 0x858d7ce163d4de92 -146, 0x5803a44cd013b965 -147, 0x17c65b0b01800940 -148, 0xc50b38bb58dcb3c7 -149, 0xe476e9925898603 -150, 0x3972fb0fa748a3a5 -151, 0x93da971efb1036f7 -152, 0x658bab8ef6082bf2 -153, 0xf664abd0de92444f -154, 0xa2145e8039e61d87 -155, 0x28af5560cb0ee0ac -156, 0xc1e43e6a30cefef6 -157, 0x74f61d623cc6965e -158, 0x3ee0139a07b6c130 -159, 0x214992e8a6134c54 -160, 0xaa83b771c9421231 -161, 0x15487762c93cf5c6 -162, 0xa3d37b883fffdfe8 -163, 0xe398d2bd15c1c511 -164, 0x3154f894aedd5938 -165, 0xc7ed5190721ec2b5 -166, 0xca02cf8dcfef83b4 -167, 0xa22c6a2e5460e0f3 -168, 0x2d72e4d264875109 -169, 0xf282e30c8b945616 -170, 0xa1a286624feece2e -171, 0x6f773be8548d3fe -172, 0x8c6dc6f48c83c30f -173, 0x13dc5926122501a1 -174, 0x5537f3d25d126e0d -175, 0xdb654b8409365aa5 -176, 0x55d8f727e066e818 -177, 0x534841122140f9a3 -178, 0x4e4ecc7b2ce8efa0 -179, 0x3655d535028e4044 -180, 0x6c2ad71379f15365 -181, 0xd1f1238395ce193c -182, 0x4ecd9ccc56595a72 -183, 0x3304220c15b60f7a -184, 0x3726fecf394006bf -185, 0x4523e03e39a92ac1 -186, 0x191c97036c0e20a8 -187, 0xbfbcf849ecc37cd5 -188, 0x3c6090d256b1c780 -189, 0xf7e94dd0d3e02fd8 -190, 0x83034fb1c17bb99f -191, 0xa7be8e0eb37c9260 -192, 0x177d2c560b0b55af -193, 0x55da4c839514e82e -194, 0xc9b393b79b0e7617 -195, 0xe9658403d3a140 -196, 0xc86401b988be38e7 -197, 0xe82baf54ee5df9e1 -198, 0x3a562e6572a853a4 -199, 0xcb83facbed1cb364 -200, 0x4db406f08ea62242 -201, 0x9cc816f5376ab97a -202, 0xe65a32f96a78b09 -203, 0x59e7b42c496e2c2f -204, 0x7e3e59a4546b6b33 -205, 0xc51a371516d5adc4 -206, 0x19ba384285a523ca -207, 0x5b998f71002a0912 -208, 0x81ee2f95f53dbce1 -209, 0x966a0c0bbf15492e -210, 0x80f88202ff2d29c2 -211, 0xf827f45274e32733 -212, 0x66a2611b73547490 -213, 0x1b2c3c3ae80997d0 -214, 0x264a86e09c63e4c9 -215, 0x35d4bf9c9d0d89a2 -216, 0x6051e319babb305f -217, 0xdf0d08608262be49 -218, 0xbe7aa9a7697278c2 -219, 0xac531985f79fca17 -220, 0x7ce7de0d95ba34d -221, 0x9a03956d30de1ee0 -222, 0x8106a5873e7950b0 -223, 0x804c06b1fab989fc -224, 0x20d5fe19357e95dd -225, 0xf3e89c08d1841c79 -226, 0xfc93b079bdb323cb -227, 0x8f6eb1dea40eda88 -228, 0x6e7f6b657f6d971e -229, 0xf2b15bb03a49e9bf -230, 0xcf7fed1aff1786b -231, 0xe53366adc5bafe42 -232, 0x89b853ed67fc2387 -233, 0xd13dadf3828f1df7 -234, 0x2f884ffbb83075b9 -235, 0x8efd2baea4771d71 -236, 0x7872e80c946c6bce -237, 0xcc487bc4ea869070 -238, 0x820609347e4fdd75 -239, 0xe939e3c63701a997 -240, 0xf70ed361e42164e9 -241, 0xa9f29046fce9ba8d -242, 0x61edfa750175e868 -243, 0xb7d2424653bde389 -244, 0xdadd225205e74ef4 -245, 0xecfb9a633ee3c774 -246, 0xcbc69459f0634f30 -247, 0xdbcd82538e0785e2 -248, 0x2b272f59ad36e01c -249, 0x601a38897a57cc68 -250, 0xfa012b9e5722d8be -251, 0x5bce8d48277d7338 -252, 0xd1b6ca2b93483dc2 -253, 0x8b94eceb88f55be9 -254, 0x93403aea5df5da18 -255, 0x57b6fcaf351c16b8 -256, 0x70f5e54095404bd8 -257, 0x9124d47160362770 -258, 0x987ed72af8aa305d -259, 0x71e3a8d5156f82c7 -260, 0xf788e966e86f7004 -261, 0xcf0cd5911c4bb0e1 -262, 0x3340b119d3e2f28f -263, 0x9952106be6e3bf95 -264, 0x99a6213e19fe9d1a -265, 0x4f0d3811a8a5d481 -266, 0x62d732ee5f975dd2 -267, 0x3abc8340ab323ebd -268, 0x15da761a2518c843 -269, 0xb453de7d4d15b261 -270, 0x4adc2d7cc2cc0049 -271, 0xcc9b7fa135c7dba4 -272, 0xa14857a738db2b52 -273, 0xce036b49e28c19c7 -274, 0xaee7e9fde421bd4c -275, 0x15dd298915099a9e -276, 0xa3fa6550b639b66b -277, 0x5f27c59b035a6532 -278, 0x2eef2e6292288715 -279, 0xabd211c514e3699e -280, 0x6d7bf9b33f8b09e5 -281, 0x91ff83561361c170 -282, 0x8f8e309797a91e4f -283, 0x2b11ef1cedf1036b -284, 0x6fc36ed305d27972 -285, 0x7e294e03a91eb01f -286, 0xbe16009d8b2f38a4 -287, 0x2bf69c7b54e60cea -288, 0x860079a07fade829 -289, 0x8f0ce6ae4c90d38a -290, 0xab10e5f8ab4835fc -291, 0x49ed43ddd4ca0a76 -292, 0x201eaa53b6df058c -293, 0x2d9a4fdb16f6c1c -294, 0xd3406193e1dd0760 -295, 0xad38857b542ddb6a -296, 0x52ec1e450363aad8 -297, 0x6e65469594331886 -298, 0x4b027ce344dd6660 -299, 0xbc801654b4a1ccad -300, 0x155be4bc51328b2c -301, 0xa9a1965f9b2b5bdb -302, 0x386b8dc34de0889 -303, 0xd60ee4b1b9cbb057 -304, 0x6c1e60b6914c4876 -305, 0xd07bf84dc30bf653 -306, 0x362d5b19b3f4f7e9 -307, 0xd145b8fef9a6a3d2 -308, 0x5c401126b505dd09 -309, 0x8f5d1d4446f9cb4c -310, 0x725618359f1a3e38 -311, 0xaedad9cf455de2e5 -312, 0x7f7e4e549b4bde1b -313, 0x35002b8e995f815 -314, 0x9aecaf8f393cade0 -315, 0xf346a49595886d86 -316, 0x459d5a9e92e9c149 -317, 0x60885682c3d6ff0d -318, 0x90f5e985e08bfc3d -319, 0xbf413a432e1a1b81 -320, 0x789503524aa48aa9 -321, 0x7880e5bb484bd49e -322, 0x7426535c324b7176 -323, 0x190ad37f84acba3 -324, 0xbd52510631d4f5d7 -325, 0x98f794ad565c986d -326, 0xa0ea374e66c0bf56 -327, 0xd683fe7102145335 -328, 0x9b3dac61db2f2930 -329, 0x470d31e3096c2450 -330, 0x1f445f8292f6f3dd -331, 0x1687ff432def56a7 -332, 0x887d4e6617525278 -333, 0xcd81ce8cc70b13ff -334, 0xaadbc4c3525c18e1 -335, 0x96d81490c362b621 -336, 0x128b95092e36796c -337, 0xffeffbed0980cdb7 -338, 0x3bcef6c52b36d07a -339, 0x400879c888eeabe2 -340, 0x373c9978059787d -341, 0x35979fef9e20050a -342, 0xf4581367f3fc43b -343, 0xcec7b91352ed0186 -344, 0xa7b06e92b765203 -345, 0x6713f0b11fb9f296 -346, 0x95c53b86deafbd95 -347, 0x3694844a5eca42df -348, 0xd0f334ea2c650574 -349, 0x5ae6771044110ddf -350, 0x9f61d9087e7d36e5 -351, 0x28f04e48625e3e5e -352, 0x6164d6b5445cf130 -353, 0xa36b5c2de27084be -354, 0xa099a43d5c5f21bb -355, 0x706edfb05fbe8b9e -356, 0x7aacffffc81ebc3b -357, 0x6f49121baebd0e6a -358, 0x41fda7ba6df8f4cb -359, 0x1bea4b596dbac5ac -360, 0x71dd0261d65b02c6 -361, 0xad7f50624c15e9c9 -362, 0xf7c4eeb84d4866b6 -363, 0xa5e23dd382f48bdb -364, 0xe6ffdf875d534bfa -365, 0x40104d8444f75a7c -366, 0x8218a42f24a88364 -367, 0x9d3f9382759cae86 -368, 0x101d7adffbd9ebde -369, 0xf9fe3578d6b739dd -370, 0xd23c47039e882eb2 -371, 0x37fc4fff590191b3 -372, 0x2a672fc8cd3e0cf7 -373, 0x995b8faabb4332c7 -374, 0xabc6117aa665a743 -375, 0x3fc49d11869352ea -376, 0x4ccc3cfa9540797f -377, 0x111c57f059fa3ef4 -378, 0x44a737bac79496bd -379, 0x37924823edfe0774 -380, 0xa4d8ee07ab241d02 -381, 0xbb0bf46c50f349ac -382, 0x4db0a8506e22199c -383, 0x93239f377c85ba51 -384, 0x56f51e3970e409f5 -385, 0xe82d51ebc177609e -386, 0xec866d8b473eaeb -387, 0x42f8018bb955abed -388, 0xf58ba8a916b04fa1 -389, 0xf12d2f0cb0a41cff -390, 0x8102b5f91923cc2a -391, 0x91d95fcb9cb1346d -392, 0x819ccf0d122537ac -393, 0x34646b1c3f9a8527 -394, 0x4a3a7df812ff79cb -395, 0xc3d0b50ed434ad24 -396, 0x3e6cd372b453b5f0 -397, 0x39101f6226c43c8c -398, 0xff41e5b6b7ff540c -399, 0x1e8d77bc3f12e0f4 -400, 0x748d0860be568eee -401, 0x5baac1f743bfeff3 -402, 0x8bdbd895b2eed2d8 -403, 0x5d3a01fa82bd88d4 -404, 0x577271d2de3e06f4 -405, 0xd4fccaeb0db61acb -406, 0xa088377ed2b1d841 -407, 0x6f2e9e1566f37b5b -408, 0xb8d85eef688c049a -409, 0x6b7c06c55078761 -410, 0x223cd94cad1e0c32 -411, 0xbf27c193ae5881e3 -412, 0x5b784893a36d57dc -413, 0xdc9fa53968c262dd -414, 0xd7e820c76855fb61 -415, 0x72260eb94f096e2a -416, 0x49144b5732ca1b94 -417, 0xba8d85a47582d428 -418, 0x558abe242dc84de2 -419, 0xc27b1d54557b9de5 -420, 0x80c1f06559385330 -421, 0x4a5c1d4252675c73 -422, 0x225e3a9f7b2da067 -423, 0x9ac95bac9d2234a1 -424, 0x696e500589e0e490 -425, 0xd0fe548d81c82185 -426, 0x68d8b783037b4743 -427, 0xbe1664f1a8d814f -428, 0x2304308b691ca712 -429, 0x68e680af6b7189c5 -430, 0x13abe6c989949072 -431, 0x4c209f5029a59d0b -432, 0x63361139df6fea7a -433, 0xf07c52d8272cbdb -434, 0x665023146f27fa7 -435, 0x7cb535c55ad7ad0e -436, 0x76e366c7317eb1b0 -437, 0xa7d9b80b51585e9b -438, 0x85f0bd60122198b9 -439, 0x34bc89d7e7827fd5 -440, 0xdfa1167988c85807 -441, 0xe78f45588bfdba02 -442, 0x172a023eba7357b2 -443, 0x7bc4c79e06ea755b -444, 0x8aace6120b766b95 -445, 0x17b43a5a81b0db26 -446, 0xbc2b95819d959ff6 -447, 0x1b8841f2fe9c4622 -448, 0xc094a747ec30d67a -449, 0xf5b93ec01484b937 -450, 0x659bbe8bdfd43f01 -451, 0x9d96c22bcf9c64c9 -452, 0xcf7df324fba052ec -453, 0x5e4acd4f9e048e0b -454, 0xe3a0e7e9869c5dd2 -455, 0x4eb444727e1c346e -456, 0x7f6cda1ca7b3eb67 -457, 0x72fccac63ca649e9 -458, 0x711bfbf79a093651 -459, 0x5d48599fae7fd6a3 -460, 0xcc640119a296b34e -461, 0x39acfb198b2b439 -462, 0xde759b50e2db66f9 -463, 0xe83bf8363827e06 -464, 0x484d50365017de87 -465, 0x4c3b5dbacd68394b -466, 0xbbe47788c079218c -467, 0xd44099290c25fe62 -468, 0x3b7d1bd6f91f3857 -469, 0xe7366a677d2b7eb3 -470, 0xfaa770590b197910 -471, 0x610b7a2fe8c4e80e -472, 0x13451e1bf520a796 -473, 0x7e3d18c47e821077 -474, 0x8fd3a77c86eb9804 -475, 0xf24be740c87eadab -476, 0xd5a52e6d0b58345 -477, 0xae386b5ca037a8d -478, 0xb59fd16baf160f26 -479, 0xd4a05b473f6e0a8a -480, 0x47ede6678c2c6420 -481, 0x8851ed397da6f850 -482, 0x1de775cdb392d89b -483, 0x74e6c8ec9513ea38 -484, 0x30ae39e04187a984 -485, 0x614cfd09d043d601 -486, 0x3e0173138f562ee1 -487, 0x822d415a26bdba96 -488, 0x432f6dec77edd9a8 -489, 0x47a3a179627546b8 -490, 0x845dd7ffb1fe6d78 -491, 0x9778d5782de13a48 -492, 0x760198319b3cacce -493, 0x420ee262d07dd7c -494, 0x847c7424c365df20 -495, 0x56b3b590fb83ba16 -496, 0x7cd2410390a3e797 -497, 0xbb0c21b47aab8857 -498, 0x2743883e70a36a18 -499, 0xff8b29cdc75ebb7 -500, 0xe1e04a0f0379686f -501, 0xcfdf3083b792f281 -502, 0x27392ca026b55e88 -503, 0xeeb195994fd56abb -504, 0x7cf210041345882c -505, 0x3ddca2b8951fea4e -506, 0x21c89d88a3833996 -507, 0xe7128bccc4b25c9b -508, 0xe39b0fb96a4c05ae -509, 0xedf5326550594554 -510, 0x4aa45fe66b575558 -511, 0x2799fc8d3b06f777 -512, 0x2824863087187501 -513, 0xa15fa00818118906 -514, 0x559fc9e9344a310 -515, 0x1682745f8d571671 -516, 0x80b54f29f47a28d0 -517, 0x38e28103ffd9f771 -518, 0xedb5f440dab80945 -519, 0xdb0b8d04cece6091 -520, 0x1f60a7cae5ae8412 -521, 0x6719c0405e92b31d -522, 0x56752def7d642302 -523, 0xa5b0900f93c352dd -524, 0x5b82baf53be8983d -525, 0x7726202ccee5cbb6 -526, 0x1641c84c7f87a765 -527, 0x835ae1a82be4265e -528, 0x5f9ccee69c1d9da -529, 0x3e2a2228e21039b7 -530, 0xa45873582866d005 -531, 0x7fbeffc99401e59e -532, 0xcf66a6a974057890 -533, 0xd53704a96af96fd -534, 0x1a8b5e3460704b64 -535, 0x6939b27bb32ba451 -536, 0x3c39293e637a0115 -537, 0x335a6e6b779b8c4e -538, 0x75235d767dfd3d00 -539, 0xbdf0b36936b17c90 -540, 0x982dc5e4915a3a3a -541, 0x74657ac256407f55 -542, 0x603a724457b796b6 -543, 0xf178694f7a3f98bd -544, 0xe712de12db2aba47 -545, 0x1ca272d99a3355d8 -546, 0x93e7054d3e8dafc7 -547, 0xa29597810eff04c1 -548, 0xade242c0ae4bcea3 -549, 0xbcd226e2bd9d0e64 -550, 0x2e02e5736f889a -551, 0x3622dc09f5fdd576 -552, 0x6e66bd2a10d78705 -553, 0x71d8f19110d5b4d0 -554, 0xacae934ab3d759f0 -555, 0x68d670d5f9272132 -556, 0x571fb09d082e7da7 -557, 0x154540c51b7d8b33 -558, 0x1e2f3710c0b6890 -559, 0xaf26a826ef444b30 -560, 0x9fc9fdbd9342be72 -561, 0x9b33b306d22a35e0 -562, 0xb6d5895f56d4197b -563, 0x92fef06c1353b2e3 -564, 0x804e3eb42e65b938 -565, 0x73d5cd4bb7270902 -566, 0x274b8ac4925da8fd -567, 0xa9a57999f5df2e2f -568, 0xa6000be059e088b -569, 0x57de4fc48c9e9e84 -570, 0x16727392e94ee9bf -571, 0x53c9032f62848c4d -572, 0x8a8ddd8fcf0676dd -573, 0x1436de7c1735087 -574, 0xfa93b7d1425e8667 -575, 0xec34ca5f3f84bb2f -576, 0x489ed44d0880c4c8 -577, 0xb3b6051de7a6f740 -578, 0x2f303cb0f4040f11 -579, 0x302c42a6adbcbcb2 -580, 0x28ed7b87695cd600 -581, 0xee78d3b782a2fcd0 -582, 0xc47a2441a1082032 -583, 0xec9965704a044f33 -584, 0xcb1563e968460dc -585, 0xfecbb4fa2b544f93 -586, 0x3f3d7437a6d29a3d -587, 0xe4bfaccd729414ca -588, 0xb741ed954572d172 -589, 0xf34b49bf10ae47b6 -590, 0x1fbd1f068f1b796d -591, 0xc1d556e64345b226 -592, 0x85bbfa50a899c7be -593, 0x5310045dcf0fea8 -594, 0xbc6f6fb7f00e5960 -595, 0xf8bdf4074f2b5f5e -596, 0x2a5817aa122dc97f -597, 0x6d5ef86d6b8ad0ce -598, 0x96e7ccc235abb79e -599, 0x8d531c4cea492f66 -600, 0xfc124a123b4ce02a -601, 0xc6087ffd9130c2ca -602, 0x3a724c46f0f06175 -603, 0x59980713cfe4fe92 -604, 0xecde418e64a11bd -605, 0x5c9b333a0f0337cc -606, 0xcf014d508fc8e83a -607, 0x83998bb2aa4e16ba -608, 0xde8f5167ac0a40d9 -609, 0xe93b1846914c0dc7 -610, 0x668831ca8fd50c25 -611, 0xec764b87e402c28e -612, 0xd0e1303e56f6b268 -613, 0xa6b9f3c4872dbcd5 -614, 0x12a89c116ad924f0 -615, 0x23857c375ae928c8 -616, 0x29b117f63f2e8c1b -617, 0x64ff6cce272aa46d -618, 0xd40fb15b38d59f70 -619, 0x6e5a6257c4cc0c66 -620, 0x7b54845e6e119a4e -621, 0x9d88bf3dd9fa0f0e -622, 0xb6687fd4980a5d43 -623, 0x4f2e3fef88b640b8 -624, 0xf07ac2f7e2df40fa -625, 0x24059bd0ecb6c6a9 -626, 0x6204a47cbd57453d -627, 0x8477fd1a13ea9678 -628, 0x4555083f5eada49f -629, 0x352443e5d984691c -630, 0x3e904f796a9c5ffa -631, 0x11e182bc43754609 -632, 0x608cdbe03699a5d4 -633, 0x2619146efbf59f0 -634, 0x9b852370063940ee -635, 0xa1d8e7e91e42a52b -636, 0x19179affce38fa3c -637, 0xf68ff1ccce70380c -638, 0x12103cb41741ab38 -639, 0xdca7902fa6d960b2 -640, 0xad46a2fc70025445 -641, 0xac92f0b2d150d716 -642, 0x5de115babb43326e -643, 0xf335366fd69e4bcd -644, 0xe9aecd1f88889cd -645, 0xbce60087987b51d1 -646, 0xcfd395a167103939 -647, 0x2fdcb12826ac806c -648, 0xbd5129970869ccd6 -649, 0x5e922b68030c2698 -650, 0x7ada02a56d17779a -651, 0x7a1254c652b99ccc -652, 0x8be78733623db772 -653, 0xc22439789b68f0a8 -654, 0xee51ad4ab1a9a6ed -655, 0x44b15fa27694d9be -656, 0xc5b93e6c57805153 -657, 0xcf03df495c283a89 -658, 0x5c2a41954bb44bb -659, 0x9e651cb8c650dd -660, 0x73a20ee82570d4a8 -661, 0x5f805cab085e971f -662, 0x5354410872a8f587 -663, 0x1b50ef4e9519338d -664, 0xdeb873412301a1ce -665, 0x3a286bb2f5f8db39 -666, 0xad117a0d4dc7f82e -667, 0xdd880d581169d989 -668, 0x8356be106382a704 -669, 0x7c684ad93e996ff3 -670, 0x6b2d09e61ac02c11 -671, 0x99ad8c074fe046dc -672, 0x4a9b4f0e7c4ffa24 -673, 0x38afdcb5893b466 -674, 0x7ad58ef97c3d35c -675, 0xdd7c17c0d67ab69 -676, 0x61c77caf27938c86 -677, 0x978fc491080c0cee -678, 0x4c1750f8684c1ca4 -679, 0x86b4c683d5fe657e -680, 0x720e2bd8ec76cffc -681, 0x73ca52b4a7dd3b85 -682, 0xeb10a691e12ea3ca -683, 0x90355e369297b259 -684, 0x6c6bc16f639678ca -685, 0xd989f4c724f8fba7 -686, 0xbb1ba7e2ca1c4391 -687, 0x81e4194500a0d267 -688, 0xbb25489c1dcbf93f -689, 0x74d26b75e9f57fd -690, 0x59c085fa99b6493d -691, 0x3359805b0fc3fef9 -692, 0x60ef0f3a85e60650 -693, 0xf1a3692c8591e8d6 -694, 0xd7c8d2e7f3d3546e -695, 0xe8fc8518c11ca881 -696, 0x3380ef12114d1818 -697, 0x87203c98ff21fcaf -698, 0xbc37f8e034002ef8 -699, 0x891b7c3f55d02300 -700, 0x814eec8ff8956f0a -701, 0xa370639852acceae -702, 0x6c566310b6b00f15 -703, 0xd69fe78b9c8a05a6 -704, 0xb7b0df518738419e -705, 0x2a0c1185b29ed965 -706, 0x636c841214c0a8cf -707, 0xbf56297859e9bb72 -708, 0x2b5b9d432d6d008f -709, 0x1ea586cf0f86f542 -710, 0x23a2a1af76cbc988 -711, 0x6c72c799b6ed93f3 -712, 0x2266785315f3bb13 -713, 0xb68cd6e87b94065a -714, 0x5d395704514bb808 -715, 0x334bde59d526ee4 -716, 0xc5a6d87f96f055fa -717, 0xd47001378b4dcf08 -718, 0x7305818a39057557 -719, 0x8f72c128eac6d32 -720, 0x4957ed799339bbdc -721, 0xeb47d505f61dd5fa -722, 0x8ce8817cd6acc93a -723, 0x84ef66e511a52f35 -724, 0xbf5aa34bbaef7e1f -725, 0xadaa5ba2a5ee660e -726, 0x6eec8ac924058eea -727, 0x8af63be4d1a1b202 -728, 0x88eccf85fd9fce32 -729, 0xf19a1122f394af05 -730, 0x8dcd15d1c14f5077 -731, 0x6c0f2e6135e36545 -732, 0xe58f89bec4d929c8 -733, 0x4eea88221d983ef9 -734, 0x51ae3956d53e1a80 -735, 0x40d8a172bf713bb6 -736, 0x3e33536e43ad4fa2 -737, 0xeff9938a179138fa -738, 0x3e372bff1f51df8b -739, 0x59b86a407817c86c -740, 0x947164c2c57f9bd8 -741, 0xd8e67bb799d84475 -742, 0x4d9ed254d8189595 -743, 0xa021d8d181328996 -744, 0xc703e402f8e4688b -745, 0xd1eb104c970dd5fe -746, 0xd5bf4683b9337f8e -747, 0x98f405a2d998f06 -748, 0x59c734ddd208e85c -749, 0xbd167be2d43fde24 -750, 0x70602daab163fbe2 -751, 0xeb2f2b37cbfe13e7 -752, 0x28baa8f3fc4c4666 -753, 0xe212ffe352ea5ce6 -754, 0x538b93d2285eda3a -755, 0x3a9482ac69a39e1b -756, 0x3a98983ed4367767 -757, 0x1dc851c69e35d601 -758, 0xac7f83e4b02e9bb8 -759, 0xa939f99c5615ef7b -760, 0x439437f129076339 -761, 0x79a251bb1d50ce25 -762, 0xaa7b6ff8f13a7424 -763, 0x1b244bd86404327b -764, 0xc84d99185ab2a7d6 -765, 0xf6dcde975493c40b -766, 0xdee46f4346cf6af -767, 0x739b75df1fe18712 -768, 0x3d05cb298311f3e9 -769, 0x1fba9d9c10dc7780 -770, 0x31637fc416267053 -771, 0x46694e36246b8be2 -772, 0x8c67095ae6eaf1e4 -773, 0xebe2a68c27963dca -774, 0x532d344b14306cf2 -775, 0x6a847c8f3ae2ac92 -776, 0x8034bcb5a50cbd6a -777, 0x7544766784261059 -778, 0xe641799652df63ca -779, 0xd8cacad7099c07de -780, 0x429e62da116e4876 -781, 0x4442c8b57a5b7ef5 -782, 0xa7ea9c348cbeebaa -783, 0xce1a34f57bb2a7fa -784, 0xbb29ef457c9509cc -785, 0x1ba1030b19a32c1c -786, 0x412d1eb07cee79b8 -787, 0x3627dd37c6b36848 -788, 0x45432b319f26a2a9 -789, 0xb9a12e188cee2a29 -790, 0xeee69e0f1b1efd66 -791, 0xd4ccd61bc3fb8837 -792, 0x1b600476917cbf62 -793, 0x522950ddce26c142 -794, 0x956d8a5dbe9aa431 -795, 0x31cfba73bb524b7d -796, 0xc3b709a56885a6ac -797, 0x7341d4e32fffcdf8 -798, 0x5ed87c5315e4775 -799, 0x60fa512183e3dad5 -800, 0x4df6df14e9c2935f -801, 0xdec2dc983ab42a9 -802, 0x28265e213fd6de41 -803, 0x2f85d825454add06 -804, 0xf18119191ac41aa -805, 0xf870e36e83f4face -806, 0x2a4b213d973d83c8 -807, 0x2c7094cde18ba8ec -808, 0xb5998e0a1914446b -809, 0xefcb960ff010503a -810, 0xa8d928b99104aef5 -811, 0xe7a6893116e383a8 -812, 0x552dbe180a51b6c9 -813, 0x16b73f3832c9990c -814, 0xfefee9504783e187 -815, 0xc12d3aa0c1f8608b -816, 0xd5232106c7adea7e -817, 0xb207e82667fb71ed -818, 0xe93c50ef54a791cf -819, 0x3099900fdf7b1750 -820, 0xaa2a46c352132ad0 -821, 0xf2414daa174335e4 -822, 0x33080f98c42bbad2 -823, 0x9df24fe0b5b13394 -824, 0x840eedf2eec5fdb6 -825, 0x3715e262efbc907d -826, 0xa70a8cccfbe8a11f -827, 0x4a57a6f16ea4c9f3 -828, 0xe03dbe2f1493e9e1 -829, 0xbd92759a7becd4e4 -830, 0x21a3d87c3766887e -831, 0x6414f570caa74ef1 -832, 0x4e27490fc3fc0234 -833, 0xd4c40310c6ab2eba -834, 0xfbe8acd168ffd62d -835, 0x30b19992f1975ac8 -836, 0xaf93d22a8561f631 -837, 0x4574ebab81bed3b1 -838, 0x5390c6026e3940c7 -839, 0x7a5154d076a8b504 -840, 0x9676f2495f742943 -841, 0x8cfdb9e11bdb4502 -842, 0x36af5c8754d9ca17 -843, 0x61477e76367296ee -844, 0xd6f5f40f66acc700 -845, 0xe62c2462e96af1b8 -846, 0x18029746ac09ef3e -847, 0x871bbe15da7e0176 -848, 0x2443e806f54d179 -849, 0x9103af1634f9d0ac -850, 0xe6e5358eaa0efa2b -851, 0xdff4859198244a67 -852, 0x6e48c357be6042b -853, 0x6bb9e8aeb24d656a -854, 0x1b89fbb05f8438cb -855, 0xe0cea835b4db045d -856, 0x4eafe5c195e29d47 -857, 0xd2f0a452be9163f0 -858, 0xa7ae1d0eee928fe6 -859, 0x42c7a26c82a062c4 -860, 0xa8e93bcd89c5704e -861, 0x73784be379f09c34 -862, 0x91f8e599342d013f -863, 0x79c20bc462215ccc -864, 0x6ee77bc91b3753a6 -865, 0xd2c116d1eb2650d0 -866, 0x388f9767cfe30ebe -867, 0xdde5d5966815e7ae -868, 0x459b838c87ca1dec -869, 0xdf96cdb2bc916a60 -870, 0x215c4195b935d5ca -871, 0x56c9f516528598e5 -872, 0x1d8492a9923640f3 -873, 0x97830ac45234686f -874, 0x67f75117a7c952bb -875, 0xf1939dc69391e65d -876, 0xfc44bb1162cb2868 -877, 0x92b33d9df8fc6925 -878, 0x6c4496920de0d558 -879, 0xa4616bb101e924aa -880, 0xa0afc9701ad83cdb -881, 0x62d555323b0494d2 -882, 0xf18b31447a2dfdc3 -883, 0xb2ece318c128d4f3 -884, 0x29efea45a76b9b8f -885, 0xae05362b365d9cd2 -886, 0x5c4d374ce6aefb44 -887, 0xb9cdc65eec94136e -888, 0xf0212f42e3d4f5dc -889, 0xcde7c5085f95d8d8 -890, 0x9cc3799673a644e8 -891, 0xf878d89199bead01 -892, 0xab684fb9666abf61 -893, 0x3070d399b7a07d3d -894, 0x6d8c51673eeeef73 -895, 0x9bf4062ff5471832 -896, 0x92774cd03c511d00 -897, 0xc1aad7c6980df547 -898, 0x3291e3a234d50cc0 -899, 0x75645079bbe9d34a -900, 0x7f28bab9eba28fae -901, 0xa84415684ed6d765 -902, 0x56d9d67653cd172 -903, 0xa7bfed939db93e91 -904, 0x92940e5162d50470 -905, 0xcd6bf601e08f07a9 -906, 0x2ea9104d785e35cb -907, 0xd771ddd541649214 -908, 0x352554afbf9258d -909, 0x9d855486b77c5bc3 -910, 0xdb03cd71e906e1df -911, 0x7c2621690aabc265 -912, 0x1dd4ac7369a04640 -913, 0x57796cbc93d4d854 -914, 0x42a373d152eca785 -915, 0xbe7389edb8b144d3 -916, 0x8b6245bf01d2e4df -917, 0xacd1f9fcca317652 -918, 0x84545ac79a3eb960 -919, 0x2d2f28e6a8459db3 -920, 0x42b3a2e26ddeccdd -921, 0xe858272777abcef6 -922, 0xd9b5be7340dec08d -923, 0xe991af3579ac4fb6 -924, 0x7c30699b349fa6c1 -925, 0xbb842be14f7b5b9a -926, 0x1d31e1ca791a1cf0 -927, 0xf2bd448ebb878bc0 -928, 0x26a6adf6709863cb -929, 0xb11aa978539e3a34 -930, 0xce554a11bbbedd1d -931, 0x553d3c012682a47b -932, 0xb3c90ed36715903 -933, 0xda3c5c706e39e395 -934, 0x4e7f66006d583c2a -935, 0x6424190e9d28ca3a -936, 0x9916685e7384f3bf -937, 0x1285e17347eb806d -938, 0x877f10baf13e6659 -939, 0x222700ed5086438d -940, 0xd2473d08396634b8 -941, 0xb6b68f3bc883a77d -942, 0x168a489b0b7f5f63 -943, 0xee34dcf1f93ad3fa -944, 0xd25ef824f614f65a -945, 0xe30981905354f477 -946, 0x9463ef623c5eb3f8 -947, 0x46657408ea66980d -948, 0xa2e58d51d6e8e7f9 -949, 0xd80d7df3007e9845 -950, 0xd90fa96f4fc0f7aa -951, 0xd2a6059d171bbb33 -952, 0xb8bacb8f11c65c2d -953, 0x401de84b6a8b1ac -954, 0xf8b6eed644c802d9 -955, 0x30c927749fdd8e6 -956, 0x17c2f4f9c4524e16 -957, 0xa9c677daae4acc7e -958, 0x82c78d9c6b10446f -959, 0x5e544188277da629 -960, 0x7c6e1bd3b861dcd7 -961, 0xd4b00871a7f67d0d -962, 0x6b66ee142821e6d5 -963, 0x176d5e39f3b22474 -964, 0x58ea746f62acf933 -965, 0xc61fabd9961c3a51 -966, 0xb27ce0f87b416e3d -967, 0xd3c82b525b000e70 -968, 0x99578704fb3ff4e4 -969, 0x747da52468875493 -970, 0x5c5bfab7a474465b -971, 0xd82276bdb30e3dbd -972, 0x1d758772eebffe2 -973, 0xfed9d1e3ca887a6e -974, 0x23dd5f7b3ff9472b -975, 0xae2e842b51c9c598 -976, 0xe851bc45531123d7 -977, 0x1a18d2777151c29 -978, 0x9e82f3be14b12a48 -979, 0xdf9fdb3abc3e72cf -980, 0xdbea56e918ccb176 -981, 0x47abbd896eb0ca1a -982, 0xe850ee3cef9334dd -983, 0x3d69fe95275e7f2e -984, 0x4fcb936c048d8812 -985, 0xc98f0f6bb9865a99 -986, 0xc951cdb73514709 -987, 0x3ca839c27ca26de9 -988, 0x1478848a311f9cc5 -989, 0x35d2244064967478 -990, 0xe71df2d9732ffdc0 -991, 0xa12417d7b7b9e0ce -992, 0xa1bb6da3f284f77c -993, 0xf551e1c3171575eb -994, 0x16083ac8a062747d -995, 0x866d6c3a630fd4da -996, 0x8a972ff46b3c5c4c -997, 0x70af3b475e4a3d5d -998, 0x2c143fd5c01d9cf5 -999, 0x68089ffadc8ea2b9 +0, 0xa30febcfd9c2825f +1, 0x4510bdf882d9d721 +2, 0xa7d3da94ecde8b8 +3, 0x43b27b61342f01d +4, 0xd0327a782cde513b +5, 0xe9aa5979a6401c4e +6, 0x9b4c7b7180edb27f +7, 0xbac0495ff8829a45 +8, 0x8b2b01e7a1dc7fbf +9, 0xef60e8078f56bfed +10, 0xd0dbc74d4700374c +11, 0xb37868abbe90b0 +12, 0xdb7ed8bf64e6f5f0 +13, 0x89910738de7951f +14, 0xbacab307c3cfd379 +15, 0x2cf7c449d8b927a6 +16, 0xdcf94b3a16db7f0e +17, 0x8a9d33d905a8792e +18, 0x4cb9eb2014951238 +19, 0x6c353acf7b26d6f1 +20, 0x73ff53d673aa30c +21, 0x1fd10760015eca68 +22, 0xabae0aa9021eeba8 +23, 0xa5ae363a868ee2bb +24, 0x9d89e0f041de6631 +25, 0x6238b133c3991a65 +26, 0xff49267d75fef51a +27, 0xfb180656ce13c53f +28, 0xaf7fadf36128712d +29, 0xa6847fc6f339c63e +30, 0xb03e0b80d71ea5bc +31, 0x63905abcb43969af +32, 0x2295af3ee00a3bba +33, 0xb8b375b994330415 +34, 0x867d9ef1d8716a3b +35, 0x4f6c02f5601b4e18 +36, 0x7c5fb4c16c470d18 +37, 0xe3b57986b804b343 +38, 0xef1d79d212aca692 +39, 0x5b98774c8806209c +40, 0x924fc76bac38a5d1 +41, 0x5266084c412ddeed +42, 0x98240bf9b831d6a3 +43, 0x5681599e81219442 +44, 0x6441248fc2ba92bc +45, 0xe3e9051a540349ea +46, 0x3a2700034390baa3 +47, 0x9f893155b6d402bc +48, 0x158207910c6d8aef +49, 0xd5282ab7608c2cbc +50, 0xc97f4651669dee4f +51, 0x3d4750d95103ed60 +52, 0xe0614542caac1f04 +53, 0xefe5092144cfc6c +54, 0x560bc486abd7e9ae +55, 0x2678b71392daa4b8 +56, 0x734970d3dc2ba416 +57, 0xcbdbe849e51e4aaf +58, 0x3b0b5e28b491556c +59, 0xd51449ac45abd88 +60, 0x6790b59991f1b7ab +61, 0x32d1c039ff2415bc +62, 0x173b9772f24f72e0 +63, 0x9490a9ca9f883b1b +64, 0x4c775989e6214222 +65, 0xac07db37e6ee6114 +66, 0x331371b2e3f10aee +67, 0xf12e5326c21c28e4 +68, 0x5d77dc280c70d614 +69, 0x1b01bd17a2f281ec +70, 0xa10d3b5882938487 +71, 0xed5a0033c394ae8f +72, 0x70bc8ea568ea44b4 +73, 0xf4600ae77965e730 +74, 0x7ff92c0b321ce233 +75, 0x6cdbc87d0cc1d670 +76, 0x9ec64f0cf2000eb1 +77, 0xfebea50259800f68 +78, 0xf2edf9019a8fd343 +79, 0x75c584ac042e5468 +80, 0xc1fa8481d5bf9a1d +81, 0x7f57180168514ac2 +82, 0x878100716b94f81e +83, 0xc929406e3af17fd2 +84, 0x6a26e2c013e4bf4d +85, 0xbc071d8848280955 +86, 0xb60d75abbfd1bdac +87, 0xee9b76afeca9fa69 +88, 0x1d6c399d2f452810 +89, 0xbaa0bc1621e25c83 +90, 0xed6ba792f8671ba5 +91, 0xf7ca02c2ab11d8d7 +92, 0x3c3cadadf0b21e3 +93, 0xdd1784571e864e9c +94, 0xfb2f992015157509 +95, 0xf50bb9f0d3ced743 +96, 0x261565f75c3e185f +97, 0xf8fe33b284513e60 +98, 0xe3d2d10b5e024664 +99, 0xd28717566242cf35 +100, 0x7ae07d133ac5b789 +101, 0x3b7ccaaa53ac338e +102, 0xcd480bace4871650 +103, 0xec6c78f923c080e9 +104, 0x44211d0ff8919d59 +105, 0x89f79af76d2a45fe +106, 0x71583fd8a837548b +107, 0xee57269c261511f5 +108, 0xa5ee8f3b128c5d1 +109, 0xbb64c20ed0765a17 +110, 0x9d4790ab2eeaf7e4 +111, 0x742f3db806d9e98 +112, 0xb81ec97aed6a0d1b +113, 0x41808b34f6a8a23 +114, 0xc20913af175dfd4d +115, 0x834427db263b22bb +116, 0xedd9c632e611828a +117, 0x10eac8524496f571 +118, 0xd76091b97eb00ab7 +119, 0x111298ae9fe95666 +120, 0x5824b2e2a6719c43 +121, 0x6e280ec539e934ed +122, 0xf74fd832df90083e +123, 0x8fee6d0f241c2e97 +124, 0x4244f331c2f19c3c +125, 0x3dde75a845cce97f +126, 0xe35bb8e635a9915b +127, 0x39d2943037f7932e +128, 0x1fe2d134201d0970 +129, 0x49d00b63c749b804 +130, 0x960c2942cd4e4e04 +131, 0x8dd8e009dbc0435f +132, 0xcf493495c3a055cd +133, 0x8f7b5a1c0f9fe9cd +134, 0x49d5f90374641a25 +135, 0x69b3932073d3524c +136, 0xd170603e7de84ee2 +137, 0xa062ba3ed3539948 +138, 0xf5861cc5b5d56c82 +139, 0x5e914998a30c7e76 +140, 0x8d77f2ad1503c0f1 +141, 0x980b6a9e3b4181fb +142, 0xd9299cd50694c084 +143, 0x253dc0f8f1cec4c5 +144, 0x68110fb9d1b3e695 +145, 0xe8f3120d0aabc461 +146, 0xb066e7df0dfb042 +147, 0xd29ce0f797e6b60b +148, 0x6a569bb7ca33bd42 +149, 0xd46e08b2dc2385f8 +150, 0x28c61d11d055767 +151, 0x5d73aa3d1a2bb725 +152, 0x1421191e1c14829a +153, 0xa711bfb6423df35e +154, 0x461af97a86308006 +155, 0xb3e1018ff3519367 +156, 0xf19cf866a268ef2b +157, 0x207715eac9199d1d +158, 0xdd621c410975b78c +159, 0xf390aea68683610 +160, 0x617a2d107a0047d9 +161, 0x6e05ac416e5bebf0 +162, 0x7d253e70506c1bed +163, 0xf9f96f4a7dd53810 +164, 0xc693b29cb1573f73 +165, 0x4f1146b0020ea544 +166, 0x45140608fbd40579 +167, 0xdcf57219828ce6be +168, 0xe19d58cca37b5b32 +169, 0x82bda95b2a161235 +170, 0x5823c3d8a2b6c9ba +171, 0xfeb2e74092fdf89a +172, 0x50e1ad1abc8f869d +173, 0x2ec63d0c105eb8da +174, 0xe14e1c4845a3264a +175, 0xcff53670455eb6aa +176, 0xaafaccd24619fa3e +177, 0xf55a988486e2422a +178, 0xecfba16a90ff4d04 +179, 0xbf8d36c2f644757a +180, 0xdc56ed75a0dd6249 +181, 0x3f45023eff17c3bb +182, 0x2428bbfe90023fab +183, 0xab892c611adcb70c +184, 0xb6f13d8c0c2b9d74 +185, 0x2ac3fb11d224f2a8 +186, 0x65433dcfae2d9351 +187, 0xe906859ae4b45f82 +188, 0x8fb7f5f093d76a3b +189, 0x940dd290b5e88d1a +190, 0x31b27d21bef116e7 +191, 0x86a964e2c83b5296 +192, 0x85ffd17bc079a9e8 +193, 0x16c47c724e7ab7f1 +194, 0xfb6098a9867e7d7f +195, 0x9246fb69092c6cb2 +196, 0x1a4033572760f32 +197, 0xc5cc568a8b273b84 +198, 0xfa6f9f2fbdd44abc +199, 0x9701b8e087718ba3 +200, 0x51d6a7dcf73f8f3a +201, 0x30008172cc6a972d +202, 0xac2ab49a5ca6ac81 +203, 0x31f28ef79461e54c +204, 0x93e35a8da8cc6132 +205, 0x9a2c58beeba3d5b9 +206, 0xf6615c1de266ac39 +207, 0x127ff9f8166b766b +208, 0x7ffe380e80a69556 +209, 0xbe7d2c228e1542f7 +210, 0x2d5ebb4e50ba1746 +211, 0x63585761ae1bf684 +212, 0x1019eb5cee022fea +213, 0xb9d3540ab58da30d +214, 0x1677f4cb45620eb9 +215, 0x6524baee51783822 +216, 0xdf9f2ddcfabb0adc +217, 0x78e8acc43b287935 +218, 0xe9a1974e999222b5 +219, 0xc41324ec2291e780 +220, 0xea52abc9ecdcbc9f +221, 0x209d7bcd46ec6b04 +222, 0x12d504c09803db2e +223, 0x1200e6bf21475d81 +224, 0xde6d3c2b35fd2cfc +225, 0xa2526900ac33bd3c +226, 0x7f1f5290fc432bc5 +227, 0x29ddfb380a3d69c8 +228, 0xac79cb6942a2909d +229, 0x516996685b67a92a +230, 0xb5fc39041cb828bb +231, 0x75d9d8ca0644a276 +232, 0x81e98b76be92a3e9 +233, 0xca27888fafe12179 +234, 0x17be2ae039925765 +235, 0x9429846c0e6d0342 +236, 0x327dfd50439815e9 +237, 0xcee20cd7bc254aeb +238, 0x7d250389f453f29e +239, 0xfd1b232a85c95569 +240, 0x2ed55fac80f3e9e9 +241, 0xf6886c20417a1be7 +242, 0xcd08e61f0b0fdfde +243, 0x7b33e34da5c27bff +244, 0xd043c4b7d5603dd5 +245, 0x9a544e4c70a3b686 +246, 0xa7b60398c381f771 +247, 0xe9e7a3487c4bd4f2 +248, 0x10b58fdfe1ff112c +249, 0xd5c1c9748c0f4ceb +250, 0x61be9d09159d54ff +251, 0x5356f51e8239f510 +252, 0xfe7889d9b202ecef +253, 0xc7fc19ca5d263d5d +254, 0x7c4c07e61dfd9f69 +255, 0x6c315fe5015f300a +256, 0xe0a5bc00039747b4 +257, 0x16397fdcf829ee80 +258, 0xb55aee80d16a5169 +259, 0xca0609944d007eea +260, 0xcc982249f65a02ce +261, 0x528161feb149c148 +262, 0xcbf08ba49b41c006 +263, 0x39af1ff0b6f14138 +264, 0x5cc036be69799aec +265, 0x6adde125b1db21c5 +266, 0x8a99d83d6b613b67 +267, 0x1cd43fca9451f74c +268, 0x682dbb26ecc96365 +269, 0x13b4be2ceb43e3 +270, 0xbe8fbc3b6f4f581e +271, 0xda148a2f4bda5719 +272, 0x239106ca3319f393 +273, 0xb42b4dde641f0dd5 +274, 0xd233cfdf4cb0af74 +275, 0xfb5919d905589afc +276, 0xd802a8860c10b66a +277, 0x6c923e1d00e7b5bc +278, 0xfacce1134f383b89 +279, 0xf9570abda7a6d553 +280, 0x80f0f9796a208f18 +281, 0xc0e1df5280951c57 +282, 0xe9f143f08257bbe0 +283, 0x79e4c6463123d588 +284, 0xdd2118583f2b1684 +285, 0xb399ff5f2329fa18 +286, 0x4b3e9ebae96f813c +287, 0xc484dbf247787384 +288, 0x921865eb97603f2c +289, 0x18063c68e257d300 +290, 0x643181f345e7fc26 +291, 0x12e0b0e8eadf9fa7 +292, 0x79e613fe73dfa354 +293, 0x6db4c59203b7217a +294, 0x6c7a0e9ba6139eaf +295, 0x9617c7ac4e3f6d97 +296, 0x1f68a7b4fb1b4b75 +297, 0xef0b7ab24944f466 +298, 0xaf1dee1f4be1bc89 +299, 0xd2e355c959f5fd8d +300, 0xe594c3fb95d96efc +301, 0x9554766ca3342906 +302, 0xa4bbdc77d12842c +303, 0xb62400211ee489a8 +304, 0x91abadaaa3bbe67c +305, 0xd371eeb91deb42bb +306, 0x883bab35cbd2b6e5 +307, 0xd030c3d9411a9041 +308, 0xff3c110a858ff000 +309, 0x59bdf5ca47d0bde7 +310, 0x2bc80fa3cdba1853 +311, 0x6444ccb652662cb8 +312, 0xc0c7e256b9e90339 +313, 0x70714ea9c9d72302 +314, 0x96a0142f9d897d27 +315, 0x209a9097c5a91ef7 +316, 0xb9e33afc5171e009 +317, 0x47b37af433a58d40 +318, 0x30cc4ffbfa831d26 +319, 0xdcea4a85ff815466 +320, 0x907d5bd027f2e5cc +321, 0x7c081f6852e04a4b +322, 0xe61950749c1d502b +323, 0x1604e937ee69834a +324, 0xb2372d952dd25309 +325, 0x53f6a5b834c72577 +326, 0x2ce7a74395e0b694 +327, 0xacbf9ab4fe91f225 +328, 0x5ce1e63d3a2bb90f +329, 0x54740da3a5ed139b +330, 0xf194ddb39f29880b +331, 0x3305374f5d8ec08b +332, 0x831dd0164927ff4a +333, 0x625baa78e4458cf +334, 0x29d27dc0a4a71152 +335, 0xe227bae9a1401034 +336, 0xca0c209831846b2b +337, 0x8e8cc54b08b5a411 +338, 0x38f2b4acaac27db6 +339, 0x8ec88baac814e86b +340, 0x31c08e46b007bde +341, 0xb686c02722794c09 +342, 0xb77cf8fc682e3907 +343, 0xa56334e7f606f4b2 +344, 0x9c80b127bddd5f4f +345, 0x12df14834cd858bf +346, 0x3f14762a9cf5fb9f +347, 0x930a70941ef5779e +348, 0x64e96c849c30c080 +349, 0xfdf53bfba1300484 +350, 0xec7a9363c21bc616 +351, 0x26e9fd6a115ecb47 +352, 0x9707a84b5bc77fbb +353, 0xb23b2737b20d5903 +354, 0x22f4825ae80f6501 +355, 0x500644b12be6a01b +356, 0xb746645b2af082db +357, 0xe6af051f697892f8 +358, 0x577c724248a1cfc6 +359, 0x3d2b6a434c84eed3 +360, 0xd260f5efd7328314 +361, 0x95c16cc84bb3f55c +362, 0x7a01b2e4e0e80ca7 +363, 0x41930c3ce70a0935 +364, 0x1299bccf39d4e110 +365, 0x494883ba1a8a87f +366, 0x9478ecfe2d918e60 +367, 0x30ec9a5670cda8af +368, 0xf9bc877e833e2b99 +369, 0x1b83a0acfbb4a8db +370, 0x73bc1740c0d18880 +371, 0x65086ca9773cb3e1 +372, 0x3b78c3ccd63cff2e +373, 0xbfae748795acfb31 +374, 0xa4c9d5d56a15ba20 +375, 0xb9cb41721e52b71e +376, 0x1532f15d4dc47748 +377, 0x5a4d647a4b9ee632 +378, 0x8513c7c5a50898d9 +379, 0x6d3d98ccd5461b2e +380, 0xa65e99be2fe98d6 +381, 0x31abc8855334a0e5 +382, 0xf1ed22a661dca5b8 +383, 0x299e2b63229e03be +384, 0xda201a06687bce48 +385, 0xd27794b302142c55 +386, 0x642bd3e1c7898a9d +387, 0x777f1ff00afa1a87 +388, 0xd2f1c84fb3877baa +389, 0xae417583289191fd +390, 0xd641f1d88e0e2d55 +391, 0xc1f1d98fb5d18ebf +392, 0xb0f72aecdadce97b +393, 0xe9b8abc764f6018a +394, 0xd2a37cff8e890594 +395, 0x2dd70d631a528771 +396, 0xbf8ba0478c18e336 +397, 0x1630bf47f372ce0a +398, 0x6d04ea20dc3f46b8 +399, 0x6591881bf34337f2 +400, 0x33c149c7eb5b4103 +401, 0xf01a8c9857c86748 +402, 0x184348cdfc16d215 +403, 0x141168b253d2ed7 +404, 0x52aaf012ef50a6f1 +405, 0xfda1722387e16f4c +406, 0x43c30f57d6c038fa +407, 0xd4a8611f5f96d214 +408, 0x2c512ce17e987f2c +409, 0x961ce450f0fa2822 +410, 0xf55a506ec6cea9cd +411, 0xb76d694d9c7f5ef6 +412, 0xfb029216dbd8e988 +413, 0x93162501896a0081 +414, 0xfbbbd2c5ab300f5c +415, 0xd648b6da7387d491 +416, 0xc73b4697471d9d98 +417, 0xe37412bf1c93ee76 +418, 0xa1a96d96570e6637 +419, 0x5b3ab4f82428f65c +420, 0x873d849b188aa36f +421, 0x39fbee0ffc9fa9ff +422, 0xc70d21b744d677fe +423, 0x2b8a43c23043d209 +424, 0x93c33eaa37370d16 +425, 0x8930ac1880f2b0ef +426, 0xac01d27707036af0 +427, 0xc2af3fee504343a0 +428, 0x1c1dae2ad5535d97 +429, 0x9ffc21804b76a480 +430, 0x69f903412cc13563 +431, 0x9d3c4e2759a0c47d +432, 0xb1a8f894be6302b9 +433, 0x95e1fd7951479506 +434, 0xbb9e6c03cd4ae8e3 +435, 0x85206010c9b737cf +436, 0x767e813694d6238c +437, 0x4969af329ccbb30a +438, 0x3aa9af1075aaea5c +439, 0xb1ff519e8118a993 +440, 0xb21a23a3c91180fe +441, 0x320b24582ca3fd88 +442, 0xf8ca56415fb4e453 +443, 0xabd0899c07205e77 +444, 0x87fdc7a44b4ad50f +445, 0xd75744911641a278 +446, 0x7c8c9a65df6fcb95 +447, 0x79d785e3c7a5b695 +448, 0x421e4565ba1f592f +449, 0x27f87eb2517835cf +450, 0xb62cc4297441c83e +451, 0xd817a80ac815ca6d +452, 0xad84388130df2aa8 +453, 0x5e6b1640452d6ac8 +454, 0x936285e15edce2a3 +455, 0x903bccc4969768e8 +456, 0xefc2cb7b109d3140 +457, 0x633e9dfdda2d903a +458, 0x2a2f3225925678a1 +459, 0xe07eac91a27f8547 +460, 0xe50ced40eda78cb3 +461, 0xc5b22500e1c7441 +462, 0x32becf61bca3aa72 +463, 0xa2e37c4b30671344 +464, 0xc9f1c1910f45d544 +465, 0x9b50333b2dcdf730 +466, 0x310bfd53a1684b94 +467, 0x1e1dc21e66ac6455 +468, 0x81876c2bfb1ed5a1 +469, 0xd0c54a3e25eadc7b +470, 0x3791b6fbbd5c7ba0 +471, 0x133be57356c599fc +472, 0x8d1148eb8e83fdea +473, 0x311aedba0d8b42cc +474, 0x1142ae52745f94bb +475, 0xc5f4ab2fbde8c4a3 +476, 0xd23be827b5b24f6d +477, 0x65f95194cd122715 +478, 0x4b48969d73125922 +479, 0x46f165052b8ff988 +480, 0x5c689f94b9275ff4 +481, 0x93b03823ff2d536b +482, 0x871f3775aa4e3523 +483, 0x5af829f7cc0f66a5 +484, 0xa32e05739cbeac8c +485, 0xacff1856ddace0fe +486, 0x8eeb5e7f991a5322 +487, 0x6325c2720e0dbdea +488, 0x9fb817bc4fdf5200 +489, 0x9786f0d850e43d78 +490, 0x571f76dd7f9fb77a +491, 0x4d9e94e181cbc63f +492, 0x8bb632d3376c547a +493, 0x9cc26d9efd1c88b9 +494, 0x9c5d49579df52b0b +495, 0x6201abf7e1cda07b +496, 0x90d68f0c6c884963 +497, 0xfc5b66188ef7f561 +498, 0x6d9303cf2e0e0f95 +499, 0xd7cfcff535f5ed07 +500, 0x14d1a1228daa4ac6 +501, 0xe00ef5762f66ae50 +502, 0xf113a79471582978 +503, 0x430985281785dc7a +504, 0x31914108c206ed5 +505, 0x7ba6707b6419971c +506, 0x2ec63b033ce112e5 +507, 0xf8bcd36ced3b41e3 +508, 0xe5cf908c8010414b +509, 0xf5ee224b7c703e30 +510, 0x9a9733af0b12338b +511, 0x83e18cc00ace34f8 +512, 0xd52cff39e23008b8 +513, 0xa700578136b9c0c5 +514, 0x3fa179d32ac51f99 +515, 0xef2d5eab6d4ad380 +516, 0x709024a5abd032df +517, 0xc607c7ee349ede87 +518, 0x803d784e9731eb5f +519, 0x2ef06f4ba769282d +520, 0x4bc1dca1e9f07eb9 +521, 0x930c958a7a72f94d +522, 0x249bc8db2cc7a3bf +523, 0x3845305798f9a5d +524, 0x6f137eca9ab6f948 +525, 0xc31f5a963d31bd67 +526, 0x9d39693d5383626f +527, 0x52fb41c335a8b98e +528, 0xb79d1a29a06006ec +529, 0x7c0926a7a3eda2cc +530, 0xffdf5214406fd53e +531, 0xc6aa02a7e94282b9 +532, 0xd4a4431b4aa301ee +533, 0x4271cc0f9420d3ab +534, 0x26fccd7cc7fc2485 +535, 0x330594bb945b8d5a +536, 0x6ea8eaad12e5cb8c +537, 0x831c3467726bede3 +538, 0x31d1eb10017eaa61 +539, 0xc7aa75e41508f5cb +540, 0xde51810f0cadd0b5 +541, 0x50e5b3e73692f80b +542, 0x82107ec55636e188 +543, 0x9828ef175d843ab4 +544, 0xb8edc6a860dd421e +545, 0x25c0c138fd537ac3 +546, 0x47e72a771e8eb563 +547, 0xbb0f8c5333f4a2cc +548, 0x91750d2fb9b2d479 +549, 0xe662d8f6fe38df36 +550, 0x72a6d879fb5619f0 +551, 0x6817c7878dcbf077 +552, 0x4e7741cb484661e8 +553, 0x3b3b3ba0be5711bf +554, 0xa6989f5d25868765 +555, 0x43c276398997e4e0 +556, 0xdcbe16a94da28870 +557, 0x454936980a699c99 +558, 0xac614bfa8f0266c6 +559, 0x9174841392e213d5 +560, 0xa0e2acffc5fc9d1f +561, 0xe53a08a7a0e6521a +562, 0x2b845cf7c24172e0 +563, 0x265a4fc5f7adec0d +564, 0x1f34fbe5f1e49420 +565, 0x139181f6fb647f20 +566, 0x88c35d46e2fcd05e +567, 0x2a6d5b55903c0459 +568, 0xcea28eb621ad7bf1 +569, 0x5c9cdc13e7aaa30 +570, 0x5fe63e14746e7103 +571, 0x7923e53d73835db9 +572, 0x376e661210bf1b06 +573, 0x5b1cab85450efdd5 +574, 0x3908dc096c70b452 +575, 0x4825e303cd1f396f +576, 0xed476bfd702957c3 +577, 0x6acc013aff5db743 +578, 0x62c80b776343d488 +579, 0x9c75edcd5b012697 +580, 0xaa053362a3b9770a +581, 0xa907e236c7c07e94 +582, 0x15b2c380451692c0 +583, 0x94f79142697bd61f +584, 0xbc657d31ea98d44f +585, 0xcbaa5e52517a1f5e +586, 0x96aa2e44a7c4a03f +587, 0x216d3c66db2b515d +588, 0x157001807e3ca88a +589, 0x52b3a596bdd3859a +590, 0xed747e7fc5e3adac +591, 0x78fd765ddb2c448d +592, 0xe53dc7299ed8614e +593, 0x75ad41fb1d7a790a +594, 0xc14f6b944b0e6cb1 +595, 0x7c314b69fce3df1c +596, 0xb56d82eb740d7abc +597, 0x5132a93c41251fdb +598, 0xe3ce35bd2a82f958 +599, 0x440571a981c722f2 +600, 0x194cdfd9f186bc9 +601, 0xb89e522a5db00939 +602, 0xad35f339f68df3c8 +603, 0xa82ab18420322293 +604, 0xaffa6df9b72b27c4 +605, 0x9615694d23beaa2c +606, 0x1d82ebe563abad91 +607, 0xab50ef65fbd94385 +608, 0x1b070dbd70a9a14 +609, 0x2ececa796abbadf0 +610, 0x6bbeafe9e81ab2a2 +611, 0x60dcd0d2a9b76914 +612, 0x1e748039ef05c33f +613, 0x6d4d17f2213ccdff +614, 0x9fa56132957bc987 +615, 0x60a17185de2428eb +616, 0xb56038ddf306479c +617, 0x3b1db5df92d06d8b +618, 0x24d1bba8bdedf580 +619, 0xbfb7e6740ebaa4d9 +620, 0xab31c4473e46f61d +621, 0x6deb3cdd8fd5869f +622, 0x23032e47746d72d6 +623, 0xa9e72d734e10f2e8 +624, 0xbffd199b6157bc23 +625, 0x29f8254df273fb62 +626, 0xb076142130ee55ec +627, 0x5b0b08374126c309 +628, 0xea4536aae979521f +629, 0xc064e7abec91a174 +630, 0x46133ef80c59d935 +631, 0xf0227e2da1b14160 +632, 0x675a76641e1af5a +633, 0x2f50a069b33d198c +634, 0x3ded5a65e1d657eb +635, 0xbb6999b020694f6b +636, 0x86b2f2b33487aed7 +637, 0x76e14e85f8bfb4cf +638, 0x38f7f1e44bd4e0db +639, 0xc1a7d41b7e80d4ae +640, 0x1dfaaf80bbceb42e +641, 0x3f51c11497720c2b +642, 0xce6da1415ddb8b80 +643, 0x7377d8bcd359b5f3 +644, 0xe077208f3f810aca +645, 0x9a06a8a2dacbffce +646, 0xca1f99156b09b735 +647, 0x2ff9a93064d91451 +648, 0x50f3ea93f351a7ef +649, 0x606fceccb07054de +650, 0x7e83d6d2f8f6685d +651, 0x78f3995291c5d407 +652, 0xd28d2460e22d0228 +653, 0x2c5636f68a0054dd +654, 0xd9fafb1c56c8f6cb +655, 0xe39889b5f9d74464 +656, 0x1355372bf5db2cc1 +657, 0x26768426b9ac323 +658, 0x4af1dbdc1111fd89 +659, 0x66973587943b927f +660, 0xf86f5f50684dfb1d +661, 0x1247d574ff79b534 +662, 0xc8039f3259210fe2 +663, 0x79b573235c92a9f5 +664, 0x213f642d8450e2f0 +665, 0x5db7706973376566 +666, 0x6182c12e69b373d7 +667, 0x3e5ac47300aec07f +668, 0x4b5b6c57b1574376 +669, 0x6b7fcceefd56b17c +670, 0xf656c3455cb9d4b8 +671, 0x7577e2e13329721f +672, 0xf33c0c53ce956e8d +673, 0x7d0f328ee356174 +674, 0x10ec9a168088686e +675, 0x71ef1776d062dfa +676, 0xaa7b590a488a6bc4 +677, 0x38612b6dd8049a1c +678, 0x939045e36874f731 +679, 0xcb9d1d74c56d5ac9 +680, 0x54f1c1c8fef1d8ff +681, 0x3ee4b85c8c7e939e +682, 0xb9b4608e019f352c +683, 0x79d4701275d12e6a +684, 0x2632a2d9835c7f19 +685, 0x1662cd9fba293692 +686, 0xbcb70265115ee944 +687, 0xdc43fb9761468604 +688, 0xe3eec4e7d3871352 +689, 0x829531753226989d +690, 0x2748cc67f540e074 +691, 0x39c4af25d607837d +692, 0x741a243f4cb5df99 +693, 0xda1353287e18b49a +694, 0xa6735689d751ea74 +695, 0x46326d587340ce0b +696, 0xc18531df4550012b +697, 0x6f7901e05dd4b818 +698, 0xfb966afc4c001d63 +699, 0x6dc10fca67a9cfdb +700, 0xd6527ffadf0feaae +701, 0x3b900172045e25d +702, 0xb7dd594cdded6a46 +703, 0x6602aee7ec1599fc +704, 0x7fbf12f23747546a +705, 0x32e63f662bd2de0d +706, 0xedf47770b67ed641 +707, 0x331bef83481c5c2a +708, 0x8fc4256fdf05158c +709, 0x98eba48dabccf5e0 +710, 0xdbc2f2cdb7b1c154 +711, 0x7777755616517ad3 +712, 0xd473c147d2628ac1 +713, 0x861e15d1d760b5a7 +714, 0xf4d25926405ecb07 +715, 0xb7739c69effff86e +716, 0xe97fbafa6f96830c +717, 0xf13e8a334e8bede1 +718, 0xcd60010cba4ee4f9 +719, 0x1f537ac2b82e6008 +720, 0x1fda8d781a89140a +721, 0x9dc204f3f4a463f0 +722, 0x456dcd18eb56a1ab +723, 0x629957bc87bd16a1 +724, 0x2c8000ddb8c75253 +725, 0xc31dae9ec8449284 +726, 0xdac05c8baa2b691a +727, 0x21ff7be9ffa3e7ac +728, 0x844f4b5ed4ee08d0 +729, 0x651f913fd636c994 +730, 0xca3e71a2110b2d49 +731, 0x7709bc42253ed09d +732, 0xbb164d45b6569d43 +733, 0x90ec2f040c20a112 +734, 0xfa6e77e9166f5be4 +735, 0x6b6d12c1842d587d +736, 0xfcd7ff8466e25e2a +737, 0x6a5a2ed8bd971297 +738, 0x2ec35f6bba5adcbc +739, 0xc83676e16651249a +740, 0x458f6064cefe10ba +741, 0x90d54d527e6cd028 +742, 0xa5613e88db27c388 +743, 0x331e0c7d85aa1abc +744, 0x8cee4977e210358 +745, 0xfcae379aa6cbff8e +746, 0xd1407afc97a57e86 +747, 0x1fab25c864f094ae +748, 0xd914864a63004552 +749, 0x4214d226a20f1384 +750, 0x3f4e0d80c488b715 +751, 0xc5ca2f654024b7c8 +752, 0xc1e27a124e7c821c +753, 0xd890a915ffc7918c +754, 0x22fba040ce51a9f8 +755, 0xbf61cebd8891617a +756, 0x7846609ee228e319 +757, 0x536d1854375509b8 +758, 0xbbfb45fc6e666f50 +759, 0xd85b4c0527f9d7d6 +760, 0x528cc9c7fa2a84c8 +761, 0x27a1baece647f2cb +762, 0xfddf0cb92fe09dc3 +763, 0xeb5008fe965d8d96 +764, 0x4a3307937eb2e5c8 +765, 0xd07d74c240c6c363 +766, 0x16f62290179d1bbf +767, 0xe99c9bcc9cb1ece7 +768, 0xc64f9be03c8a93be +769, 0x32659effaf666c1f +770, 0x4bb228cfb30b6672 +771, 0x98764870842068a5 +772, 0x5b12ef2d2cd8bdcc +773, 0xbc79d1c1b41f28b8 +774, 0x97a517cf3279fc9a +775, 0x34ffd46c1d4d6025 +776, 0x9c302307ee25c8f0 +777, 0x399604eed1f18a8 +778, 0x1c9b813c2043142a +779, 0x2944ea5e55267fe9 +780, 0x5a8a9f5e728ea667 +781, 0x30c8440adb804a0 +782, 0xee0e6b627099a937 +783, 0x3d50757ada3c52da +784, 0x4548916b32c813ab +785, 0x602a186fe5bf109b +786, 0xf0d440a2227ba304 +787, 0x5a10d4e0ca9ea32b +788, 0x6e5eb90da13ba64c +789, 0x4c6af8fd04241ab2 +790, 0xf9eb31d26e093006 +791, 0x5d674878839fe3ea +792, 0x1562b55b2484e47c +793, 0xa87188c099c1cb61 +794, 0xb7736b8aa02a3392 +795, 0x5f4b301125abb20f +796, 0x361d566984637f44 +797, 0x68c4b3feac8bd0c3 +798, 0x7066c634dd2503c1 +799, 0xfecbf7c9441eb6ea +800, 0xdbc26ae0fc81436b +801, 0x9ef3e2b48252e7a4 +802, 0x31a49b4c339b37c7 +803, 0xb01b2a83cf346cf4 +804, 0xc24dc2347f82fbe3 +805, 0x134cad272dcd410f +806, 0x61260742823ba59c +807, 0x53ac4c193a97c730 +808, 0x9207c9833af34b52 +809, 0xa72e7ee77078d1f5 +810, 0x2e6f6e1b05936885 +811, 0x783b99ce5dbf9464 +812, 0xfdfeb6f0d027bb44 +813, 0x40eeb27096f92b0 +814, 0x5ef96ff5d4a4521f +815, 0x5595806ae873718a +816, 0x67d449eecf4ca1c3 +817, 0xde837ab611364f3f +818, 0x7034c24d2b139be9 +819, 0xe21166603e0a9c86 +820, 0x935694435c1f0d51 +821, 0x6cb3bec90c126088 +822, 0x4096ef662b7a9f89 +823, 0xd2d85b8d238d8c15 +824, 0xa4ea533ce3ec59b2 +825, 0x3654729d80a2db29 +826, 0x214c4cc3906d29d4 +827, 0x201c447e7588e373 +828, 0xe8b8f0ae25f683eb +829, 0x6744aaf5754e38af +830, 0xd1ffb10d6f27a061 +831, 0xe536733a7b3a6c30 +832, 0x39f0f66e47cbf2c9 +833, 0x856a9593526fde2 +834, 0x2e2a817a0098ea4b +835, 0xc5e1eeb551a0e3d3 +836, 0x3f21e2f5e2d50b2 +837, 0x906af56c66dd9f8c +838, 0x30f6dbd70329fac8 +839, 0xc443dfddf3c01a60 +840, 0x7ab85d9aa9675470 +841, 0x8c9080bd39717bfc +842, 0x4b1ccdb3c3597f6f +843, 0x74e2542d70ab5d67 +844, 0xbb3d236aad00f74 +845, 0xcf3cadf9a2804774 +846, 0xe851d9750e42bd07 +847, 0xc0ad82029b1c371f +848, 0x7ee119eb552d6c07 +849, 0xd8024049bd1d784a +850, 0xfa67a899760363 +851, 0xaa7c2f438b178197 +852, 0xc473674a47ffe064 +853, 0x539fbe3fc674c270 +854, 0xdb48484748a76f3b +855, 0xc73b2b092060d +856, 0xa1d2a15345016f5d +857, 0x4d0fe8599f9bba47 +858, 0xa0edc275e6f8f1d1 +859, 0x40590a8655bc8d72 +860, 0x35b4223161f05f75 +861, 0xa04c0c0f616752dc +862, 0x7f371ed2ca45432d +863, 0x2ff1a08f75ac6438 +864, 0xe2dc5c3682282f48 +865, 0xe1e4179fa98d9013 +866, 0x8cb083d6843a73d5 +867, 0xb4c2b5921b706854 +868, 0x738e14c0e7352445 +869, 0xcd2b646f91afd8c7 +870, 0xd5779a5b57a264fd +871, 0xc39ff855586c7d07 +872, 0x3e3f0098c631a859 +873, 0x644e02fae032110 +874, 0xa8834613c0a45278 +875, 0x69482f2c08e10657 +876, 0xe4ee475bdb87e69a +877, 0xdc1ef7b25c0d0019 +878, 0x88a3fa2be18d8744 +879, 0x60a02e0b21c5bec7 +880, 0xb6867b88aa19bc1a +881, 0xb599409affcf10eb +882, 0xaeaa1778a5e59daa +883, 0xd7a91a52c16663e3 +884, 0x93cb269affe07b1c +885, 0x841b6ced3a4ba815 +886, 0x84541768e1540a5c +887, 0xe3943c84f83b3020 +888, 0x5de366fbd7b45258 +889, 0xd787cc3bde91a661 +890, 0x814071446edecb57 +891, 0x15d8c602a1141514 +892, 0x72f07bc8002d1d0d +893, 0x4a8bd8dc9a1f0f3e +894, 0x8723796ae0f20d35 +895, 0xda7283c2051f73b2 +896, 0x2df0cc247f90bd3b +897, 0x79a8522b968f990a +898, 0x951ede190c8b9d02 +899, 0xc512f1a5b14b018a +900, 0xf0e3ddc03b9a4259 +901, 0x8cf4a35ad312e15f +902, 0xebef28926b11094b +903, 0x5628ba687325921c +904, 0xc3aa75e57edc49c3 +905, 0xc38382fa98e762ba +906, 0x8d209e896285848e +907, 0x2c7d6adf592b4a3e +908, 0x62de48e36f8338f3 +909, 0x4a752741e00de30e +910, 0xf7855b70f1f6ec2b +911, 0xa505fa4428199e43 +912, 0xe8b6b423b826bbac +913, 0x4bd1206cf8786d05 +914, 0x6dcf040391fe3bf4 +915, 0x913f500f87e1bba3 +916, 0x5acf775aa180a5d5 +917, 0x74dd28d9432ce739 +918, 0x996c2ff2f0dc2495 +919, 0x73dbfe6c56effe4 +920, 0x56fddd25196f5e40 +921, 0xe87810158f5b7 +922, 0x7b8795e996383f1f +923, 0x9ba5ee7c777c4c82 +924, 0x17ce3908d270fe1c +925, 0x3df9e613c1aedfae +926, 0xcdd26871b32fc8e1 +927, 0xd71cb13afc633979 +928, 0x63427c8ea9b1c79e +929, 0xd070f7664d3b405d +930, 0x46f2a9e32d9fb769 +931, 0xb4c3822a45e9fe9b +932, 0x8ba30b97fe6f5ec7 +933, 0x70aa554ee2fc11f9 +934, 0xa80c99dbe0cfcfaf +935, 0x36d9250cb2d68ed +936, 0x2995e4b9e1cd1db4 +937, 0x4b3803ba57fc570f +938, 0xae3959e7d740eaa5 +939, 0xb4cbd6662adbae08 +940, 0xae46576446e8dbc4 +941, 0xc4828e008a9a8a54 +942, 0x145d7db8e6554b2f +943, 0x1b1b8916a730c371 +944, 0xdaf84b2bebe31963 +945, 0x5b59b80ef23a2403 +946, 0x9180c7e89cab6fd3 +947, 0x80e58f5411babf34 +948, 0xa06cf55185b9b005 +949, 0x13b2c798424173ad +950, 0xc510f8e706311d49 +951, 0x1f974b83b6046d3a +952, 0xae6e8e85e822d1c3 +953, 0x66f2c8dc3274a31a +954, 0x7e04dbcbf65bd377 +955, 0xabf41ede01ec20a4 +956, 0x5efa0948f6bbb2ea +957, 0xbc91c99d8592255 +958, 0xf6d6917911d86d75 +959, 0x85ce273d54e9097a +960, 0xbdfd30f2420fff92 +961, 0x8802f02f610b537c +962, 0xd1d70037ed543229 +963, 0x908aaf97f9693a46 +964, 0x1f6cfeaa0834d53a +965, 0xa453fd1648ce04d2 +966, 0x2c38bb85ebc64af9 +967, 0xd2daff551c90c4f8 +968, 0xae5a0d949797d784 +969, 0xf0974c8552ac9593 +970, 0xa10b70499f65c693 +971, 0x39a449ebd594ddff +972, 0x8ea090f2b17b9b49 +973, 0xc592de318090fd83 +974, 0xb63e4fbc467b6912 +975, 0x57a0c1c5ce0e4dcc +976, 0xa7c517cf3d436b35 +977, 0xef6dcb0f3fad038b +978, 0xaf4fb60315b91287 +979, 0x5e0776f67304f331 +980, 0xe927753b8e6f7932 +981, 0xd3df2dd92559e304 +982, 0xdaed52aa6af44413 +983, 0x1b59f4dac1e181f8 +984, 0x4a73c2293877ef39 +985, 0xca45d0d015fe44de +986, 0x4659c8b7853735a8 +987, 0x12de6466bdf8adeb +988, 0xaeea857a09bfec15 +989, 0xcc9cf4b3c0b88a23 +990, 0xa44ae52396a5e1bf +991, 0x5847a724305d137f +992, 0x8f4d4de223956182 +993, 0x58254dfada867a8 +994, 0x900a98222c2f339e +995, 0xdb575260935d51d5 +996, 0x13fb4bfbbc0d7b53 +997, 0x62213850186bb92b +998, 0x2a34823312c00388 +999, 0x6148329042f743b0 diff --git a/numpy/random/tests/data/philox-testset-1.csv b/numpy/random/tests/data/philox-testset-1.csv index 64c1516cb..e448cbf73 100644 --- a/numpy/random/tests/data/philox-testset-1.csv +++ b/numpy/random/tests/data/philox-testset-1.csv @@ -1,1001 +1,1001 @@ seed, 0xdeadbeaf -0, 0xa4016d3bd1adb1dc -1, 0xa554a8f84b75ce6e -2, 0x64aaf86f2a8b501a -3, 0xd1de65006998520b -4, 0x392794fdb78e642e -5, 0x13aba45f3ded2bc7 -6, 0x72953d6a6ed0ce9b -7, 0x81dc11fff0ade5e9 -8, 0x28c22fa622755161 -9, 0x2d0bf144d156bca8 -10, 0x88c67c8c249075ea -11, 0xaf979d9c3fa6a9f4 -12, 0x8351dedf59eda5c3 -13, 0xa597c60a8db6df19 -14, 0xbd22a90d6d81b032 -15, 0x3034c0d2086b8564 -16, 0x2879c4883a14c06 -17, 0x5a66f8a2208a94f5 -18, 0xcda7bf16739a6681 -19, 0x369b3461c902a66f -20, 0x14a3541487ef7613 -21, 0x60dc1cc40c854dba -22, 0xb8d6129bcbdf1894 -23, 0xddc1e842a5ce4b82 -24, 0xf5a5c000d4804841 -25, 0x29c1123be4c5a3 -26, 0x928197be48d100b -27, 0x9164d36b36459765 -28, 0xa5b361d3b9fe5094 -29, 0x966e6293e46a92e9 -30, 0x380b501fcd0e9e1b -31, 0x538c1834694cb627 -32, 0x68397c2b7e36891a -33, 0x569416ce7905efdc -34, 0xf58f21254316c4ce -35, 0x1e19d04d36f0446b -36, 0x4eab321b90c3059e -37, 0xf4eef8577ce3621e -38, 0x86aa30aad7e74bd7 -39, 0x46ad14d76a4e9edc -40, 0x9158798abc57ef60 -41, 0x54206b8453720f00 -42, 0x44e68b9350e349a4 -43, 0xfee4ef034f34ec46 -44, 0xd47125c4a5cd9a5d -45, 0x174e9bb06dab2e1b -46, 0xc6a3beafe03adf09 -47, 0x8a155bf8f077f2ff -48, 0xc037f7a702e0e091 -49, 0x7121788b47bb1f67 -50, 0xcc1e3035fd6cee3f -51, 0xf59ef1e37c98f033 -52, 0x54e5c5049de62701 -53, 0x46353528f1594539 -54, 0xb93695a2d9cf5a1c -55, 0x29e0dfdf2ce8cfa7 -56, 0x598f527bbe1f0abd -57, 0x7b1c84c93d833619 -58, 0xe05228837711bc0c -59, 0x1cb8fc3e70fd977a -60, 0x109d878184b67919 -61, 0x9f971fe0d44411b7 -62, 0x886c0994aaf201e1 -63, 0xc0dd321f1390b2e7 -64, 0x3fdef712372f8321 -65, 0xfa7c6d8918cd8a29 -66, 0x11c1eb4cb16252c4 -67, 0xbc57160901fbbc4e -68, 0x9035cb331c1c6032 -69, 0xa75b7195d844181d -70, 0xaee9b050676d9595 -71, 0x34d540b1d61818ca -72, 0x851885a79cfef55f -73, 0x2f5602c107a51176 -74, 0xf02cce653d94ae18 -75, 0x69703c81d7642c2e -76, 0xc37f35a3762bf75d -77, 0x584d48c1678ba110 -78, 0x214f883b77e43d91 -79, 0x32c9f2e834bc151e -80, 0xa25ec540319a0279 -81, 0xd0ef31b3a764dd1e -82, 0x413fc1760f4696b0 -83, 0x2ec088887c392c6e -84, 0x643e07972c0d7edf -85, 0x181da5ad37378493 -86, 0x7807a71aee267e7a -87, 0xc8251e8b6f84c9cc -88, 0xaecd92db4caa82db -89, 0xe6b737b621d0f5e4 -90, 0x74a594617dfd217a -91, 0xa167df989d02c069 -92, 0xea01be29eee2049f -93, 0xeee29b33c17d78a9 -94, 0x3491d38fb23f3fc8 -95, 0xeb4487ea874377e6 -96, 0x7997f3b9ba996313 -97, 0x8eb5bda3e878f439 -98, 0x1a17f0c4997b9dac -99, 0x449f4caa3e49d3bd -100, 0x1d6864b879e608b1 -101, 0x32c53c6d5e4e51ae -102, 0x508f8f76cf4660ec -103, 0x6c06057521c22c33 -104, 0x868a66b6414f4e2 -105, 0x5715002f33452e98 -106, 0x115fbd06a3ac4e8a -107, 0xfcac2badb17c901a -108, 0x4c44e1e868322197 -109, 0xeb8fa2d7d096a4fa -110, 0x5418a67b92163d7 -111, 0xd9c592de8e80a341 -112, 0x732a44e5218c1cf0 -113, 0xa9368ebfa3fe327 -114, 0xc5fea8642de21f5b -115, 0x8aa7606b2c790548 -116, 0xdc345a26c0b0d0be -117, 0xf3926ddb06d16b69 -118, 0x8221732a3335efcc -119, 0xf9617131e08d7747 -120, 0x99327d82da6c2710 -121, 0x489965f6c29fc095 -122, 0x489883ac61fbf8a5 -123, 0xf93180c072491e2d -124, 0xbc652ef0fb7fa413 -125, 0x26b645337e0f0151 -126, 0x221c4fd98d9d04a0 -127, 0xbf37f891d23b1a5a -128, 0xf895c9daa40736d4 -129, 0xce74ab4966a7df8b -130, 0xd2ede8866e13602a -131, 0x6f1c653376aed88c -132, 0x795f01d45d648320 -133, 0xe871c1ca660fb460 -134, 0x40ab3bbc97818d76 -135, 0x35d7ffca14a7ade7 -136, 0xc4e33deed96936a -137, 0x23e3678027f084a -138, 0xaca324e1826bc2bc -139, 0x912083410f2c9602 -140, 0xe60447c78d94dab8 -141, 0xccfa70966b894010 -142, 0xda52cf984a6fcecc -143, 0x4bd41ad2099c8555 -144, 0xd48a643116cbfdfb -145, 0xbf7fc5b1bc00ce08 -146, 0xada212b7bd53caf1 -147, 0xd6852e20e7ec8990 -148, 0x37334ee1ef839cb6 -149, 0x4cfcfdfb1210ba72 -150, 0x86621c6062cecdce -151, 0xaa81f5bd7dc7f04b -152, 0x6803d22953c928 -153, 0x25af4104ef0196bc -154, 0x3f43caa463f637f1 -155, 0x752c82a0d44e4276 -156, 0x564b16249685d0d6 -157, 0xba4752d6711744b -158, 0x78ff9b2d759bd294 -159, 0xb93c8b5b9ca0ab4f -160, 0x7a3b59e3c26e8aeb -161, 0x483b45671cc7a011 -162, 0x600055f7d0ab48b5 -163, 0xe83dfca027b30174 -164, 0x5283c2d730c533de -165, 0xf5ff0af35cc16bef -166, 0xe65e629ad63ace2 -167, 0x4599b59b43471c90 -168, 0x3b883221ddd0edbe -169, 0xd1bd681d7571586a -170, 0x2f76707a866652f4 -171, 0xfa431b2763618557 -172, 0xbb30fd01840f73fe -173, 0x4e05560dda8ff28 -174, 0x7d463765716205db -175, 0x6802d6a4c64bc942 -176, 0x23f97ab176fc38c7 -177, 0x6fa71a806a74e049 -178, 0x4f8c47e05d613085 -179, 0x1c62a84ea1a987c2 -180, 0xb985dd9fcfcbaf12 -181, 0xbfd1d96717312296 -182, 0xf7623c95eba45fef -183, 0x9aacb0d9d2bc45ed -184, 0xe479947525498f64 -185, 0x6fcef0ca0aca8a90 -186, 0x278894094d25783a -187, 0xdc02388636ed13d5 -188, 0xc62e48f5953cbcd7 -189, 0xe19a9fa5bed7628e -190, 0xdeb078ae8fe5dfb0 -191, 0x4e6860e046964ce5 -192, 0xd8cdb2898e2a30b4 -193, 0x635e6d7bf2d5ad3c -194, 0x382287d0bbc15096 -195, 0x4dce30919aaed075 -196, 0x91f2eeeb2e9d3bc0 -197, 0x8815aed14f2ce31a -198, 0xd1587cbd77a69435 -199, 0xf27ba7a7f17e068e -200, 0xc91ea6657949ca8a -201, 0x8fb304e0fd14e8aa -202, 0x20435550a23087b3 -203, 0x711f1c68e57b2b9a -204, 0xea6994cf0be86f7f -205, 0xd18c615acc777905 -206, 0xb90960bb87ffd1a0 -207, 0xac90e55e19311295 -208, 0x31659affc36aae91 -209, 0xd7d7e48ef29c958a -210, 0xaee7da2da84dc993 -211, 0xdc7dffa68e28f198 -212, 0x2a640b7dddf397ff -213, 0x96c8eb4f3eee1b5c -214, 0x783f85e380c37624 -215, 0xe03c5ffaab657342 -216, 0x699873d780917aa6 -217, 0xb19fdd3fdfe2195a -218, 0xe5ac242b8935d3d3 -219, 0x40fefd049828e9a2 -220, 0xc5376b89b3da4996 -221, 0x4a41f1092c5468bb -222, 0x2155cf97cbf75962 -223, 0xaa3ec3edde80ba66 -224, 0x1caec347492ffadd -225, 0xd80dc91a46a52d31 -226, 0x12f749bee8cd142b -227, 0x82212e1e4913e774 -228, 0x5746ee2f1e40f3c5 -229, 0x8e62e2276ac29cb6 -230, 0x267b7a85f83e8b95 -231, 0x3c6436ef222f439c -232, 0xb52ff729bf93362b -233, 0x169d41a9b76ad990 -234, 0xcffd92d5315e9a76 -235, 0x2b6596632a14e62b -236, 0x4b86680bf8d00375 -237, 0xe57684dbc26d0e4f -238, 0xd437041fa45a59f5 -239, 0x7e1f0aac84d7e4e2 -240, 0x1187ce212e5e7834 -241, 0x76f1c2154a2e3d50 -242, 0x712d0e28711856a9 -243, 0xd5f54dc83e5c12ad -244, 0xc24a17f46e4c418a -245, 0xc51e029ea6d4f2e2 -246, 0xc31a655846a16146 -247, 0xef88f4da62201b06 -248, 0xf33e2f9d0a8d91e0 -249, 0xdc679372436366b3 -250, 0x25c9763e8013baee -251, 0xd8aa69cdaac03261 -252, 0x57e8bde3bc84e10c -253, 0x21c8c1336d7f36e1 -254, 0xe8accbc264dab29 -255, 0xc98322f62b53cf6a -256, 0x8b83421277b969f -257, 0xb57131b80e2e277b -258, 0x444d7e89c60d71dd -259, 0xb0d9e46bb1c33e76 -260, 0x3d5a684c6113db38 -261, 0x2711e1981a992b2d -262, 0xf2d4db5c46a2ec57 -263, 0xed7b35c56ef6a104 -264, 0x83f3cdb9bc4ada6a -265, 0xe022709b7ea47148 -266, 0xb570382def08f207 -267, 0x1ff1a063da5e52e6 -268, 0x1431c8c76bfd271f -269, 0x36a3ae42d26ae46b -270, 0xe49797ad98a160ee -271, 0xd1facb5e688b3c6f -272, 0xa9080cfeb38b849c -273, 0x35e77aa7d3827d44 -274, 0x96d94f159c2bc6f5 -275, 0x9a1005b1aae0602c -276, 0xc12ba0bda081de45 -277, 0x12781e7aa9155495 -278, 0xbc8bf25c33eb784a -279, 0x2c59317df88aeaef -280, 0x712c3f6f0647fe7f -281, 0x6de6cc238b4334b4 -282, 0x5084214e6a6e8e44 -283, 0xfccf29c93e989fd2 -284, 0x908bd387fff422a4 -285, 0x1bea6614135216b5 -286, 0xfc77a0b775e22d6f -287, 0xe060b6e9fea8bc24 -288, 0x28efa8a899554d2 -289, 0x2472913e201c807d -290, 0x7105e53d38203b17 -291, 0xfd930d5b12f274af -292, 0xde103731a6b10d73 -293, 0x1abed9ae891a6fd5 -294, 0x2ac90b2b44327c6c -295, 0x8b2590bb2b05e83f -296, 0xfa1d4711c71d541f -297, 0xd4ca45335ac19253 -298, 0x8e1d05c7517e4e72 -299, 0x9c0902deb45e3f6e -300, 0xbaba37c175ce76b0 -301, 0x601af65183731007 -302, 0x7eb8587a2d4c135b -303, 0x20bb71c6e9199a23 -304, 0xc0ca4dc39757b5a6 -305, 0xcc6be1e1ed4d8273 -306, 0xcc74c8e5d18f5f7b -307, 0x86ce3a5781885ae9 -308, 0x7b62ce783ec46209 -309, 0xfb266311a6c0550c -310, 0x554773cccbec1559 -311, 0xa977c8205a4aae08 -312, 0x9ee5fc0c8fbf6dce -313, 0x4f5705626b4f2d17 -314, 0x22d88963961cbf4f -315, 0xfd6dc42eb7fcc0e -316, 0xf88e30d786e0ecbe -317, 0x78fe0f1b15436367 -318, 0x7499f2d214cb7268 -319, 0x913d1695a973ce15 -320, 0xb83d91cdf10b568f -321, 0x93dbc1f9fb7d1e0c -322, 0x7d7bc7061aad68ac -323, 0xaa0601e59a625056 -324, 0xa72cbfff7c7ff448 -325, 0x7318a8d3915ace11 -326, 0x36842549fb894417 -327, 0xb68ea7ad73e99b6a -328, 0xcbdf94cb59042237 -329, 0xa2a7fd9eddd13720 -330, 0x732dd9f06eb3c5fc -331, 0x4fb08823a37032ed -332, 0xe6c856ed41016c49 -333, 0x996c3d0e4f3b417 -334, 0x7b34a700117568fb -335, 0x199eefcf92de5f86 -336, 0xa3f4961be1c5b0d5 -337, 0x5f41b28cf7b244b5 -338, 0x312410aa5e2fb5f9 -339, 0x1586dba27b082c7e -340, 0x84ed5134c1917f33 -341, 0x59f4afdb3c49271a -342, 0x925d17fb348c7028 -343, 0xfc7d3c57ea5636b9 -344, 0x6d1171ae97fb0915 -345, 0x398f4cbc4e9c54fc -346, 0x1c2ebb92b1b504ef -347, 0x3b2328cb18c05023 -348, 0x8d9db4e20415c26f -349, 0x6a0a8a1b1845e93 -350, 0x8dc25082c60f2f7 -351, 0x717be0ac6519b0fc -352, 0x96b0e9458c83e3aa -353, 0x95672c97c1e1d811 -354, 0x38eeff8eaee7b86d -355, 0xfcaf43097da98c20 -356, 0x3c3e92583d27de30 -357, 0x9c497d64afc8474d -358, 0xd9490e6e4d69e245 -359, 0x659965798924d480 -360, 0x3fe6c83496d2e8a3 -361, 0x35f0e70b604c298b -362, 0x6b2b04775eabc4be -363, 0x91db116a3482d1f -364, 0x4530affe8ed6651b -365, 0xaeb91d6b34fac1ea -366, 0x84c7b10dbcb7c855 -367, 0xa484c7232eb07597 -368, 0xbc408d28ff7b549b -369, 0x59806824675e1397 -370, 0xd090322df3ed7160 -371, 0x98584fcfd0731210 -372, 0x72f1dfc286dac4c6 -373, 0xf19a3de3ac829f2d -374, 0xfded8b979c32a9c3 -375, 0x11183cf8e5fd735b -376, 0x1fd22c3a64e887aa -377, 0xf1ad39eaea361b09 -378, 0xca21672cc4c0afcf -379, 0xcf9ca801297c015d -380, 0xb58af039ca2132a9 -381, 0xb2c1cfebc559a4d3 -382, 0xe6aeeddc924fe174 -383, 0xa4ee5d69059f2a35 -384, 0xb4891d7ce04994fc -385, 0x2d86e4a3aebe4406 -386, 0xe0e37a9afe1410dd -387, 0x3fad3ef7713a378e -388, 0xe6546dc8f25626ce -389, 0x610065e43da6b067 -390, 0x246433cc66b2ae3 -391, 0x987f33b8819a1248 -392, 0xdef42b9ae3070ada -393, 0x372e29ed9ca79858 -394, 0xa77c59d5f963ad7a -395, 0xab30aad91674d0f8 -396, 0xdef9084c78c88b91 -397, 0xf43176d0a08831dd -398, 0x3c9199a67d636dae -399, 0x1c1740467f01f9d3 -400, 0x526f48081c053f81 -401, 0xfb3e2a79343e5e29 -402, 0x18c4950887faec3a -403, 0x8bc979d8a8985fa6 -404, 0xcf40e8843fd3059b -405, 0xb19676125f3f52f2 -406, 0x4a0a6b19170a7ad7 -407, 0xd34de55b18b57416 -408, 0xbdc1e59e8ec23c6e -409, 0x8ec4b1a49fecac44 -410, 0xfdc61f4b5c67d0b6 -411, 0xe2fe45308ec48888 -412, 0x14cdeaf1d4e6d7cd -413, 0xc3ba3ec042a56233 -414, 0x332da8b89898979c -415, 0xfba5de9a6658a159 -416, 0x6a8e39f8f9251c9 -417, 0x99de3f00ca6ac555 -418, 0x6b83762f9cde7610 -419, 0x2c9724e61be893d0 -420, 0x482951b5de7a8676 -421, 0x94c864bf7b7b3ce1 -422, 0xe7fb63eaa8034f7b -423, 0x3606766d32778e49 -424, 0x832fb6d1c1702fad -425, 0x231a34aa65f35f3 -426, 0x2dbbb19d5057dc11 -427, 0xadc96a7b0ec4d7c6 -428, 0xcedb950834baeeaf -429, 0x10454de5dd5b2b4c -430, 0xacb5218055b223a8 -431, 0xfc7935a53eef226a -432, 0x7ecfef66f3a0a28d -433, 0xa3c506354fdf354d -434, 0xbf718d5dc3f872f -435, 0x58a8cd40351434ff -436, 0xf4a5f71e6b8feb50 -437, 0x7c362e216ad9c96a -438, 0x2a6431ffce1c07ad -439, 0xae65a7b73a58f481 -440, 0x67653634cd12e61a -441, 0x6d1fcfb52e19bf3c -442, 0x91ad77d4053b6726 -443, 0xd945d1507c4924f2 -444, 0xf45ae9093c093257 -445, 0x64b2b6a4bac0adff -446, 0x5ff6f2b342d71de5 -447, 0x59925318c904944d -448, 0x95dbf54419fb4864 -449, 0xd55ba61f567a0a97 -450, 0xee563293f29b5750 -451, 0x5837051585cad45c -452, 0xfcf40f619994def9 -453, 0x5260f8ee6f748019 -454, 0x71764f26e092ad15 -455, 0x3ccbde223b20fea3 -456, 0xad863d51bde55140 -457, 0xc580fad0c3e9843 -458, 0xa5337a7858a6a49c -459, 0xc43e9199c2d296a7 -460, 0xa3172bc5d23744fb -461, 0x6fb2b18f90271d5a -462, 0x1061bd95c79f5218 -463, 0x38002aa34425849f -464, 0x4cefbbbc74ff719e -465, 0xcadbed5627af6154 -466, 0x7bebd30f09338836 -467, 0xba48fd224dbcf41f -468, 0x6fb65073938adfdd -469, 0x1c74e5ea63a196f -470, 0x6aa6af9b2f2c56b7 -471, 0xb34d1259dbc5283e -472, 0x4e31ff60e92e2d44 -473, 0xefe7fa9b9e3f35b5 -474, 0x980e16e5be4f7b63 -475, 0x750f9235268a94cc -476, 0x6007d403696373c2 -477, 0x13bcd1966ef5491c -478, 0xa10fd6a45986ae0f -479, 0x14bfd2c4cef77b84 -480, 0x9e337eaad201c664 -481, 0x87b8f2c4b3f086e -482, 0x5f70b6cdb796ed2 -483, 0x1982229ded0932a1 -484, 0x466663c9cff20aa3 -485, 0x3272c93bbfd9638b -486, 0xe403c4d56c483b55 -487, 0x93280ac4c48d7eec -488, 0x614d81b45505675 -489, 0xac26c793b1c92d2f -490, 0x98c856891490319b -491, 0xc860935122dddb3c -492, 0x4c8a4de8767c40bd -493, 0x2ff98c8c4470f390 -494, 0x2f1c72a213351fe3 -495, 0xda85b3af5a866362 -496, 0x791b0597c01db174 -497, 0xb57b6f82b8cb8538 -498, 0x66b967b6d6b78e1f -499, 0x10e25dff7fa9eb1 -500, 0xd7221749de25e2c4 -501, 0xe7de3dd12683afbc -502, 0x4fab8db8efc41caf -503, 0x55c69af11e357f2d -504, 0x819ae1c6dc834542 -505, 0x181feb56b1b09fea -506, 0x8c02b115f96e8a13 -507, 0xfcd520bd3bde3795 -508, 0xb8f13e1a17520781 -509, 0xc5077e62eb3455f6 -510, 0xb35be37dfe324f62 -511, 0x215c3528cfabaea2 -512, 0x4e8f73eb0ecfacba -513, 0xb53be656d283bc61 -514, 0xc84605b63da1659d -515, 0xdd14e6951ae728a9 -516, 0x23bf5133fcdb04bb -517, 0x635b0a6bf6d16290 -518, 0x69d3fce4b4da412b -519, 0xa7642708d4edf170 -520, 0xdfd18fcd236b3ada -521, 0xdee7ba05f5412891 -522, 0x4ef5da00ff54f4e0 -523, 0x7996c43afbd32752 -524, 0x9ab61401c8ed09d7 -525, 0x9f0cbb35ba418b5c -526, 0xcd335f0227cbb2e -527, 0xeeb415a10dc69acc -528, 0x8f306fd5fb98c8ce -529, 0x87d290a1e5a13313 -530, 0x73bb14ad65f03b8f -531, 0x1c38b0604e39eae2 -532, 0x6255e18db9d3f32f -533, 0x821de64507a248c4 -534, 0x43aa3f96160e265d -535, 0xb3933c53a37e8d6a -536, 0x40537d6206fce5a4 -537, 0x3d6562e600316952 -538, 0x853babe67dc6d5fc -539, 0xc9ec1b74c77a1be6 -540, 0xb17e8cba32fcb3b0 -541, 0x49acd5802328ad54 -542, 0x4f709402e925e357 -543, 0x17419c407e3c214 -544, 0x5e758c00e4ad3ff -545, 0x7fde5d319d81baeb -546, 0x979a20b570910f27 -547, 0x8f97c3b7bc9e2298 -548, 0x12e2ad36da1cc7f7 -549, 0xa236e7dca97e968f -550, 0x1f04cbca5bc0154 -551, 0x3d6f127682d12600 -552, 0xc804b6f9d73c745f -553, 0x46aa2378c21345cc -554, 0x5c22330d6f5a499b -555, 0xc4afed1b7326be94 -556, 0x1641ecf0c9a05ed2 -557, 0x1f78fcb51185438d -558, 0x4e9d044248ccc312 -559, 0xa2bb59525d96e061 -560, 0xd3b0cbbe755638eb -561, 0x8c8aa4004d6c679 -562, 0x7f8f8bedc781d3c0 -563, 0x80f49ed821a1a95f -564, 0x773058f8744da45 -565, 0x7ad50eacc2795e2 -566, 0xb9e5489a8c83b4f2 -567, 0xc69f139896eebc1f -568, 0x1e43056dd8930ca7 -569, 0x6f301a2edb56134a -570, 0x6c2317117ee73dec -571, 0xb2c8685976f265d9 -572, 0x16b2bde0a97af5a0 -573, 0x742f17525776cf92 -574, 0x1c61c4de2d9a2698 -575, 0x8c9af9dc2211b55d -576, 0xa3cedd5c5841f80a -577, 0xb59a544f559dc6a4 -578, 0xdf8fff92e4ee4db -579, 0x56b7366da8b55759 -580, 0xd8e36fe0d19f75ab -581, 0x23e355b5133d1b2d -582, 0x372dbbfd1a91bfa0 -583, 0xec3a5bfc17d9f90c -584, 0xda6fe7ef39ac4212 -585, 0xba4be9c5525834c1 -586, 0xd7fce5922edc81e2 -587, 0x601ea3b1ef2b295c -588, 0x7019d5f3f8590283 -589, 0xd335a01edc3f7cc5 -590, 0x561e4eec723f9a8f -591, 0x25d5c1063d9ce2f3 -592, 0xd92c0a861004228 -593, 0x4ced9cfa54381973 -594, 0x64575d21559fff7a -595, 0x9b9941185367da2b -596, 0x81bb1186ab30672f -597, 0x3e22dee929fae7cd -598, 0x9316d034a8d5f460 -599, 0x5544fa1e4ccfd6b6 -600, 0xb548fce22e15c29c -601, 0x4a0c0d2156cec5c4 -602, 0xaf626e963a3d720c -603, 0xa18ccb5d828344cd -604, 0xacb3dad256bd3927 -605, 0xd9415709dd1b9838 -606, 0x5c5b91e09865d9f -607, 0x916e81ea4277c555 -608, 0x47fd254a985abcb9 -609, 0xb4bf05873d1de57b -610, 0x78be8dbe976e57be -611, 0xe4497bee300305ad -612, 0xa35bc9c0b8790666 -613, 0x50e32823b12df325 -614, 0x2d2235134b876e43 -615, 0x4d11093673d2f723 -616, 0xba9a6386593bb306 -617, 0xff94de871ecb0f5b -618, 0xfa30dee676c84ad3 -619, 0x3deaa3f79a9c0e3e -620, 0xee5884952aa60b5 -621, 0xc785a19fdff41a34 -622, 0x8b0845fe5f10501 -623, 0xa152b0aa81b88df6 -624, 0xa19f3d7b2118d7e7 -625, 0xd85b2d1b42a29eb9 -626, 0xc9e3567083b1b07 -627, 0x173666e13a07198e -628, 0x5d523316500ff20e -629, 0x911ba2359d617b98 -630, 0x5e2e9d9033cb6c6e -631, 0x28d18aca1d7a2bc7 -632, 0xfd8b5c9ac51081bc -633, 0xae9791fd100e0e0a -634, 0x62bbcfdfac3357cd -635, 0xad0eb70d33a1528c -636, 0x3f6bf8f30c99a45f -637, 0xcef98adf350e59a7 -638, 0x42a3ce1618e864ea -639, 0xe593360a79499134 -640, 0xd2bd28c812adbd7b -641, 0x4ea00dde869a07c8 -642, 0xf0fa202e5de5c677 -643, 0x80e31fa27e0bf3 -644, 0xf6e3947034e63c80 -645, 0xd792c5bd89a9ed4d -646, 0xfab57bccb903c09e -647, 0xff018b3b5e307f5c -648, 0x9bfca67e7f2358d6 -649, 0xdec771cacfb0257e -650, 0xeeefd9fea081fda7 -651, 0x1076a0fbd79b2c07 -652, 0xf44113350dd482e8 -653, 0xf191e0fc45973564 -654, 0xc3e3444776e39e6a -655, 0xfdd317f3d4debba6 -656, 0x54ccec6719532a9b -657, 0x9a6e8ca48d8c1e7d -658, 0xc609af730bb6d832 -659, 0xa8b4c8470d968391 -660, 0x5cf64a7f47b204e6 -661, 0x5e965176dfa25003 -662, 0x66813628e15874bd -663, 0xd35f6b140e1878e0 -664, 0xaac7f75e4539ee5d -665, 0x39be402d139f7abe -666, 0x1cbe6759828a8ccd -667, 0xc670bbac7cb8211 -668, 0xb2c2d0f58e907080 -669, 0x93ef7a9684abfe0 -670, 0xceb30e0e22ed95a0 -671, 0x2c440668139c0076 -672, 0x32e60072a459bcea -673, 0xb0bc43bf10e8f79a -674, 0xa8531d49c980b58d -675, 0x45f37d8f1c93663 -676, 0xc9fd75750fdfe198 -677, 0xc36b9ce50aeeeae0 -678, 0xe8fc776625253cb3 -679, 0x70c77614d74d06bf -680, 0x51c1cad2d2f2badd -681, 0x66a4db21d7db02db -682, 0xfaf1271dee5b290f -683, 0xae86058acd20130f -684, 0x745443d08c22783a -685, 0x223143faa7c25250 -686, 0x5b1cde70be845cb4 -687, 0x4f0df398464d9edd -688, 0x6b20e39a68f7c30e -689, 0xd37f02c77f07e8f0 -690, 0xe1bf957b24c8b2a9 -691, 0x562dc0bf6f77d28c -692, 0x76c9f88dc50f60ae -693, 0x9702059e9c5919c9 -694, 0x281383e10e722801 -695, 0x171f956c8b0712b2 -696, 0x5eaf54175f8edeb -697, 0x7cc99560d2398c4f -698, 0xc4d69f843120e45 -699, 0xc941f10439e94167 -700, 0xb34086ca06e338c6 -701, 0xa01d149b929f36bd -702, 0xbd19942652a4afcf -703, 0x4722d03a7e6970ab -704, 0xc0e805aa2dc36bdd -705, 0x6e68e26fecfeee1c -706, 0x4aba8fbd1caf2a03 -707, 0xdebe09b8084c052d -708, 0xb332c6c54337d33f -709, 0x903cfa39f4899243 -710, 0xe688cd984e93f499 -711, 0x2c6ae72dc00fc910 -712, 0xde0d582c9957f91b -713, 0xebe5afa3d0c3d91b -714, 0x4fc2b36f2a137cc -715, 0xed2107ce829ed259 -716, 0x8ffeb322143a2190 -717, 0x8e53ef386fb835a0 -718, 0xc73496bdb11c7047 -719, 0x6ca8c4835c9c4f8c -720, 0x8ea4f4901f2e0265 -721, 0x644a3a28ff8560df -722, 0x8953e7fdf979ed19 -723, 0x43dc435a24a800a3 -724, 0x2f15b97ed169e6f8 -725, 0x3ce69e60d6bcd79d -726, 0x5a733285b92355f8 -727, 0x31606b5b067028be -728, 0x1b4f051f3664639e -729, 0x859f66e980f2a3a -730, 0x46572b5b026e4d99 -731, 0x3a8c3dbab89136e3 -732, 0x30fcbfb69d4e2045 -733, 0xc2001ffc2ee041da -734, 0xe2e789a7d6b5c353 -735, 0x20a6a29c6bc894a -736, 0xb9c75c4ffd10962 -737, 0x58de12481df29458 -738, 0xc3a269b0fcf75ec2 -739, 0xfaba5acbbc077e5e -740, 0x8c281f561efe477f -741, 0x61d8922c3b1e9f79 -742, 0xc92d49730840a9ba -743, 0x5ad9b3bd172d9804 -744, 0x4da50ea6a7a283b2 -745, 0x5e781612f5f1ca9f -746, 0xb6a3887cbb2c4080 -747, 0x2b2a7dc43c678866 -748, 0x5a556144413f6593 -749, 0x286ee3aa8819f92c -750, 0x45c169e82a919218 -751, 0x913f34ea9bf5d6e7 -752, 0x48d84f1aef099220 -753, 0x843e00085d83b19b -754, 0xe639c98005983b17 -755, 0x223f1d8680cfe4ed -756, 0x6b589d901b8e5ddb -757, 0xce43033319d740cd -758, 0xb400d5b22521cbd3 -759, 0x6b89f6ac56a9f684 -760, 0x21dc6e3bd591ee5 -761, 0xe062d33650fe9bac -762, 0x7d843bb328d65a27 -763, 0xc4ba63ee38e9d608 -764, 0xdefe72f65f0185dd -765, 0xfbcd7e2ef2ea79f9 -766, 0x514e2e715ce8f7d2 -767, 0x21af168dda65563 -768, 0xf0952635f1b9b8b6 -769, 0xcd098331c00eb2dc -770, 0x88d48ac80843c49a -771, 0x3fcef1cdf0cc92a -772, 0xea558fc018ffc6d4 -773, 0x53fe63708554d32b -774, 0x82a976d57ad79413 -775, 0x5671621e1cfcc958 -776, 0x9057b32b84fd54eb -777, 0xecf93fd1f073494 -778, 0x95e3be825c83bbea -779, 0x31f711958b37fcb3 -780, 0x7764e9c1b68905d5 -781, 0x19ff29bbe3450d1 -782, 0xbe9d66d0b7a63370 -783, 0xb90d94f54339e1c7 -784, 0xb86e7e4f983f5058 -785, 0xbb37df7a822c631d -786, 0x34d71226eddefe66 -787, 0x647b6f2dd0167b3d -788, 0x2964bea0cb5814b8 -789, 0x5111f6bf0575d9b0 -790, 0x598e941686def9ad -791, 0x541a6d6e840b4142 -792, 0x6a9ec878a98f32cf -793, 0x28e7a3598a6cbe38 -794, 0x22b0e914e1d9aad0 -795, 0x6e4f306af93619a8 -796, 0x62ad701e6072aafc -797, 0x20f304620a3e4459 -798, 0xd7217bc244bb9cc1 -799, 0xeb66fa201326ce9d -800, 0x60a8de18a022c5e2 -801, 0x31a14a91815a918b -802, 0xd90de92cb757c772 -803, 0x738a110b95e161f8 -804, 0x2ef5cf2da3e98788 -805, 0x76b0bb8ff3123517 -806, 0x4bef942413b602e9 -807, 0x1c90bd1e24c93bd9 -808, 0x20eba165958bac22 -809, 0xcd5639b3751988cf -810, 0x6fc8cc48b1dd184a -811, 0xfdf2eab5e428ac3 -812, 0x621d191371614b86 -813, 0x3977622fee6de38e -814, 0x501165fbcfb2a7bf -815, 0x3d117c309c6a11a2 -816, 0xf1f6a98f2d352d28 -817, 0xf7b0984596865aca -818, 0xb9eb071ad42bb21d -819, 0x19c555aeeaf0cf28 -820, 0x425c90febfcc526c -821, 0x8133e767f229ca4c -822, 0x50534af80dc7d238 -823, 0x4267194590c15804 -824, 0x5afc2d9d7a0692ea -825, 0x66feaa4a0443081 -826, 0x10f74efe039c5534 -827, 0xd79bc6e3e26cb0e -828, 0xfd511b94e4229f4d -829, 0x4b3735fb47ceecb5 -830, 0x7f3da62bb14a61d5 -831, 0xd92a4f2f534a654e -832, 0xb906bf6a9989e53b -833, 0x13018c2b34f999fa -834, 0x6590385a18c6a603 -835, 0x8fc8db59a2567498 -836, 0x3cc13cfa2306cc4f -837, 0xdd79e765006a327e -838, 0xcb3dbb849468b870 -839, 0x9932fe5f00ea0e19 -840, 0xdb36176dc85cc926 -841, 0xff36a852d77a76a2 -842, 0x7228cc6dc7a583dc -843, 0x3239f99e8c1e75bb -844, 0xcaebcc7ada26fb97 -845, 0x58695e996613ec7a -846, 0x2167b9da13f07e09 -847, 0xbe7bab67bb8bf660 -848, 0x22d605faa70bd9b -849, 0x4126e31a67fa20e4 -850, 0x9f5e1b0c6ce38bdc -851, 0xafdff88a50a87b2 -852, 0xcf22aadf30733a23 -853, 0x1fd9969ff955272d -854, 0x8f7488ef919369da -855, 0x9fc58576f9366b -856, 0xcd113f7c06d404ee -857, 0xf0c3dfbb77faa02 -858, 0xfa6b4df32e5b13cf -859, 0xfcdfd2ef4ed2901b -860, 0x2dc695fbefb81029 -861, 0x66cfcef096b1aa07 -862, 0xce6c9411a0a43c1e -863, 0x7ce97001b7b94086 -864, 0xa9e80966efa21989 -865, 0x9db01384e57130f2 -866, 0xb4c4481e7ea597ca -867, 0x1fc20274d0a21c7a -868, 0x4e23bbbeb9f83211 -869, 0xd8cad36baeec8333 -870, 0x8742502cb17ca60f -871, 0xd79d2dc157d5afd4 -872, 0xea1b2c00ffcf7ca0 -873, 0x1aa557af2fd43a1d -874, 0xe73708cc03d175ca -875, 0x6229a5af98522983 -876, 0xfa42c93d6b4f22f -877, 0x1e65a381061656e2 -878, 0x8933f33ef286b6b5 -879, 0x17c422cf0aff3638 -880, 0x66c1c8e8488bdded -881, 0x2d3c290f57f89df1 -882, 0x7be0a80f249572f1 -883, 0xe04b4abafd35f742 -884, 0xe7ae3420d1ae8262 -885, 0x7ac0a00e9418b10a -886, 0x2c459481c2268d1d -887, 0x4d83267be8955a75 -888, 0xdeac45087ce7e783 -889, 0x6ba80c634128a42c -890, 0xaccf8778cb440125 -891, 0xee610bb6dbe2316d -892, 0x4354e249ac02fd00 -893, 0x9d2fa76bc69ed31a -894, 0x3e6119655e632f1 -895, 0x94b9895001a11b04 -896, 0x2e24e88414b70981 -897, 0x68ada416de03c378 -898, 0xaa35f41451efd2cf -899, 0x28eb447c4d24bfe8 -900, 0xa5137e57245e7f9e -901, 0xc9b19572f5c16c79 -902, 0xc940ce6692436e95 -903, 0x67411f98ce32ad1 -904, 0x1d40e58013165af0 -905, 0x3cec810dd5b24273 -906, 0xa7c6bc87d530d864 -907, 0xfc43ba7ae1a3fe7a -908, 0x9d8794810bf47814 -909, 0xec8cddf1e0f9e93d -910, 0xa564bd558f2d6414 -911, 0xc5106bef612f55a2 -912, 0x7be0dce9a92ba80 -913, 0x2eb62f6a3f2074de -914, 0xc36ee0b068558f0d -915, 0xf5684163785c9867 -916, 0x338887da708650da -917, 0xbb716f53f9844869 -918, 0xdcfc496eecdda21 -919, 0xdf53415424439f94 -920, 0x3a05abd08e2d9ee4 -921, 0x18a6480a9399523f -922, 0x9cc0dab9dc1983b0 -923, 0xb375dcd416372e71 -924, 0xbd8d75af2b5984a3 -925, 0xe86d2b59f0e26c0e -926, 0xcb6b2f761c2c8fb6 -927, 0x2549bff97b63663c -928, 0xfd29bc4f73ab6a9a -929, 0xf690ba893bafe3c7 -930, 0x94c30c32da8d8ca2 -931, 0x44899149ffb1c95e -932, 0xc23549c093cdf753 -933, 0xe2029fe9cc90d5 -934, 0xb2c70637a91ce191 -935, 0xbcc0420e35bf6942 -936, 0xe108b087861a186e -937, 0x54a69c4b23f5f6b9 -938, 0x4ac1a35efeb13e67 -939, 0x39982383bf0173a1 -940, 0x9eb169c7613a5e48 -941, 0x848940fd0d654ff2 -942, 0xdb663c2c2718be99 -943, 0xe4b7a6ef4ca1cdf6 -944, 0xa560cffd62c75504 -945, 0x26ddb1df4420b2d0 -946, 0x980b3101000e3e29 -947, 0x2dd1445c80dbb8bf -948, 0x135c42daf949295b -949, 0xd19f5c74b895dae2 -950, 0xb690a628b77a9293 -951, 0xfe04f5a5928ab34d -952, 0x2df10dc128a516f0 -953, 0x89f79ab12e337c3b -954, 0xb98c589f33c1748b -955, 0x30df1793cd9f6b01 -956, 0x6538ad32fa56a9da -957, 0x93453d17e6ea27b -958, 0xe2a92ebb82c104ca -959, 0x2ce2b05ef3bc1404 -960, 0x1a327d3cdc07ed1f -961, 0xa7c4bed4e2c10779 -962, 0xfe9c13e0e6912c65 -963, 0x15ea29dc894638 -964, 0x887160de1f9f0149 -965, 0x13a80eb973cf8899 -966, 0xef27446cc86e47a6 -967, 0x8890e569d70fc03e -968, 0x1d0136f928ea9c40 -969, 0x99cb2f3b50431cbd -970, 0xbba687f34ac3061e -971, 0x23a9b639b2bb1a83 -972, 0xa93c79780f08e4da -973, 0x1b9f12f0c9997121 -974, 0x512ab00fd2ed5bb8 -975, 0x928815bf7a2288ad -976, 0xfb76b86de4b7f17a -977, 0x38513665d5c85718 -978, 0xa7af48360b80b6e1 -979, 0xc08b51b293e84a8 -980, 0x7f044ecd175afdf4 -981, 0x73e18a7f5c3efa06 -982, 0xf6ef1911e91f0c87 -983, 0xe09e6a85a182b1d1 -984, 0xeca0e6fcfa3d7c66 -985, 0x2466210516727cc0 -986, 0xb8cc106a4bffefda -987, 0x41ad3e2899041e58 -988, 0x4b5ba3abf6a9fec3 -989, 0x436fd42b29a1e822 -990, 0x9d9f29ada8a6b310 -991, 0xf9f066631426bda4 -992, 0x36660b826a0a1b8d -993, 0x26aee243162a41ea -994, 0x8c38cbfbf0d4b792 -995, 0xcda46557b68f0ae6 -996, 0x5900339a5e9132c1 -997, 0x6de1710051cdc7e8 -998, 0xb76aaba70884f776 -999, 0x297c27d0daac3c3c +0, 0xedc95200e2bd66a5 +1, 0x581d4e43b7682352 +2, 0x4be7278f5e373eab +3, 0xee47f17991a9e7ea +4, 0x38a7d2ae422f2e2c +5, 0xe2a6730a3b4a8a15 +6, 0x1588b7a841486442 +7, 0x13ad777246700504 +8, 0x14d157e0f5e18204 +9, 0xd87c22a7ee8c13f1 +10, 0x30cc389ce3542ba1 +11, 0xb8a53348955bb2e9 +12, 0xc08802e3c454f74f +13, 0xb444f627671a5780 +14, 0x4b6dd42b29cbf567 +15, 0x6109c7dc0bc5f7d5 +16, 0x85c954715d6b5b1e +17, 0x646178d3d9a3a5d5 +18, 0xebbde42b1cd83465 +19, 0x3d015102f6bc9c1a +20, 0x720fe2ec3798d5fd +21, 0x93120961289ceb2e +22, 0xc9207e960a56fae2 +23, 0xa7f042f31d991b98 +24, 0x5fac117415fae74b +25, 0xd0a970ba8dddc287 +26, 0x84b4e7e51b43106 +27, 0x6ad02bf525ea265f +28, 0xcdc7e5992b36ef8f +29, 0x44d4985209261d60 +30, 0x628c02d50f4b902e +31, 0xc7b1914922d1e76d +32, 0xfde99ff895cba51d +33, 0x175a0be050fa985f +34, 0x47297d3699e03228 +35, 0xccf1e9aeaa3339cd +36, 0x9fdd18ebeeaf15b1 +37, 0x7c94c9ab68747011 +38, 0x612d8ef22c1fa80f +39, 0x13f52b860de89ab5 +40, 0x81f264b8c139c43b +41, 0x8d017ba4ef1e85ba +42, 0x6d0556f46219951e +43, 0x8ee7b85663cf67b6 +44, 0x2432fc707645fe67 +45, 0xaf814046051e5941 +46, 0x4d432a83739ac76f +47, 0x59e5060d0983ccdd +48, 0xdd20e828b83d9b53 +49, 0x1b891800d7385f4c +50, 0x10e86a026c52ff5e +51, 0xb932f11723f7b90c +52, 0xb2413d0a1f3582d0 +53, 0xe7cd4edda65fc6b5 +54, 0x6d3808848d56593b +55, 0x192a727c3c7f47d9 +56, 0x9659d8aea5db8c16 +57, 0x4242c79fe2c77c16 +58, 0x605f90c913827cea +59, 0x53e153c8bfc2138a +60, 0xed2158fbdef5910e +61, 0xae9e6e29d4cb5060 +62, 0x7dd51afaad3b11ce +63, 0x2b9ba533d01a5453 +64, 0x7e0e9cf2b6c72c8 +65, 0x1cc8b3c7747ed147 +66, 0x9b102651e2e11b48 +67, 0x30b0b53cbaac33ea +68, 0x70c28aec39b99b85 +69, 0x5f1417ff536fdb75 +70, 0x3a1d91abd53acf58 +71, 0xba116a1772168259 +72, 0xf5369bc9bd284151 +73, 0x67bf11373bf183ca +74, 0xef0b2d44dbd33dc7 +75, 0xbfd567ee1a2953ed +76, 0x7d373f2579b5e5c6 +77, 0x756eeae7bcdd99be +78, 0x75f16eb9faa56f3b +79, 0x96d55ded2b54b9a5 +80, 0x94495191db692c24 +81, 0x32358bdd56bab38c +82, 0x3f6b64078576579 +83, 0x7177e7948bc064c9 +84, 0x2cbf23f09ba9bc91 +85, 0x9b97cc31c26645f5 +86, 0x5af2d239ff9028b1 +87, 0x316fa920e0332abe +88, 0x46535b7d1cae10a0 +89, 0x21f0a6869298022c +90, 0xf395c623b12deb14 +91, 0x8573995180675aa7 +92, 0xc3076509f4dc42d5 +93, 0x15e11e49760c6066 +94, 0xe8a6d311e67a021d +95, 0x7482f389c883339b +96, 0xda6f881573cba403 +97, 0xb110ffb847e42f07 +98, 0x2c3393140605ccf9 +99, 0xba1c8ba37d8bdc33 +100, 0x59adf43db7a86fe0 +101, 0xb4fcbf6aa585ca85 +102, 0xd794a93c18033fa6 +103, 0x6e839c01985f9d4 +104, 0x64065bf28222b2c7 +105, 0x6a6359b293fa0640 +106, 0x5ff610969e383e44 +107, 0xa8172c263f05c7f7 +108, 0x62a0172e8bd75d07 +109, 0x7be66e3c453b65ac +110, 0x6a3b8d5a14014292 +111, 0xa2583e6087450020 +112, 0xd5d3ecc480c627d2 +113, 0xa24e83f1eec8a27c +114, 0xa23febd2a99ee75a +115, 0x9a5fbf91c7310366 +116, 0x5b63156932e039b +117, 0x942af3c569908505 +118, 0x89a850f71ab6a912 +119, 0xfeadc803ac132fe9 +120, 0x67bf60e758250f3 +121, 0x533c25103466a697 +122, 0xb7deede3482f9769 +123, 0x325e043b53bba915 +124, 0x9e8d9e7fde132006 +125, 0x6bacc6860bbc436e +126, 0xb3ea0534c42b1c53 +127, 0xb2389334db583172 +128, 0xa74b1bfbf5242ee4 +129, 0x53a487e2dc51d15c +130, 0xe5a3b538d2c7a82e +131, 0x7b6c70bb0c4cadaf +132, 0xae20791b2081df1 +133, 0xc685c12e3c61d32c +134, 0x60110e6b0286e882 +135, 0x49682119c774045c +136, 0x53dc11a3bbd072e +137, 0xbdc87c6e732d9c2d +138, 0xcc4620861ebac8fd +139, 0x7e9c3558759350cc +140, 0x157408dee34891ba +141, 0x9bcad1855b80651b +142, 0xd81b29141d636908 +143, 0x1ed041a9f319c69d +144, 0x805b2f541208b490 +145, 0x484ef3bba2eb7c66 +146, 0xb6b5e37d50a99691 +147, 0xabc26a7d9e97e85f +148, 0xcba2a3cce0417c2f +149, 0xa030dfffd701993c +150, 0x2bf2dc50582ebf33 +151, 0xd9df13dd3eb9993e +152, 0x31ca28b757232ae5 +153, 0x614562a0ccf37263 +154, 0x44d635b01725afbb +155, 0x5ae230bc9ca9cd +156, 0xb23a124eb98705c6 +157, 0x6395675444981b11 +158, 0xd97314c34119f9ca +159, 0x9de61048327dd980 +160, 0x16bac6bded819707 +161, 0xcea3700e3e84b8c7 +162, 0xaa96955e2ee9c408 +163, 0x95361dcc93b5bc99 +164, 0x306921aed3713287 +165, 0x4df87f3130cd302a +166, 0x37c451daeb6a4af5 +167, 0x8dbbe35f911d5cc1 +168, 0x518157ce61cb10f9 +169, 0x669f577aebc7b35b +170, 0x4b0a5824a8786040 +171, 0x519bc3528de379f5 +172, 0x6128012516b54e02 +173, 0x98e4f165e5e6a6dd +174, 0x6404d03618a9b882 +175, 0x15b6aeb3d9cd8dc5 +176, 0x87ed2c1bae83c35b +177, 0x8377fc0252d41278 +178, 0x843f89d257a9ba02 +179, 0xcdda696ea95d0180 +180, 0xcfc4b23a50a89def +181, 0xf37fd270d5e29902 +182, 0xafe14418f76b7efa +183, 0xf984b81577076842 +184, 0xe8c60649ccb5458d +185, 0x3b7be8e50f8ff27b +186, 0xaa7506f25cef1464 +187, 0x5e513da59f106688 +188, 0x3c585e1f21a90d91 +189, 0x1df0e2075af292a +190, 0x29fdd36d4f72795f +191, 0xb162fe6c24cb4741 +192, 0x45073a8c02bd12c4 +193, 0xcbaaa395c2106f34 +194, 0x5db3c4c6011bc21c +195, 0x1b02aac4f752e377 +196, 0xa2dfb583eb7bec5 +197, 0xfe1d728805d34bb1 +198, 0xf647fb78bb4601ec +199, 0xd17be06f0d1f51ef +200, 0x39ec97c26e3d18a0 +201, 0xb7117c6037e142c8 +202, 0xe3a6ce6e6c71a028 +203, 0xe70a265e5db90bb2 +204, 0x24da4480530def1e +205, 0xfd82b28ce11d9a90 +206, 0x5bf61ead55074a1d +207, 0xbe9899c61dec480d +208, 0xae7d66d21e51ec9e +209, 0x384ee62c26a08419 +210, 0x6648dccb7c2f4abf +211, 0xc72aa0c2c708bdc9 +212, 0x205c5946b2b5ba71 +213, 0xd4d8d0b01890a812 +214, 0x56f185493625378d +215, 0x92f8072c81d39bd0 +216, 0xa60b3ceecb3e4979 +217, 0xfcf41d88b63b5896 +218, 0xf5a49aa845c14003 +219, 0xffcc7e99eee1e705 +220, 0xdd98312a7a43b32d +221, 0xa6339bd7730b004 +222, 0xdac7874ba7e30386 +223, 0xadf6f0b0d321c8 +224, 0x126a173ae4ffa39f +225, 0x5c854b137385c1e7 +226, 0x8173d471b1e69c00 +227, 0x23fa34de43581e27 +228, 0x343b373aef4507b1 +229, 0xa482d262b4ea919c +230, 0xf7fbef1b6f7fbba +231, 0xd8ce559487976613 +232, 0xbf3c8dd1e6ebc654 +233, 0xda41ed375451e988 +234, 0xf54906371fd4b9b3 +235, 0x5b6bb41231a04230 +236, 0x866d816482b29c17 +237, 0x11315b96941f27dc +238, 0xff95c79205c47d50 +239, 0x19c4fff96fbdac98 +240, 0xbfb1ae6e4131d0f4 +241, 0x9d20923f3cdb82c9 +242, 0x282175507c865dff +243, 0xdfd5e58a40fe29be +244, 0xedbd906ff40c8e4f +245, 0x11b04fc82614ccb3 +246, 0xeceb8afda76ae49f +247, 0xa4856913847c2cdf +248, 0x6f1425f15a627f2a +249, 0xdf144ffedf60349e +250, 0x392d7ecfd77cc65f +251, 0x72b8e2531049b2c6 +252, 0x5a7eb2bdb0ec9529 +253, 0xdcfd4306443e78c1 +254, 0x89ad67ed86cd7583 +255, 0x276b06c0779a6c8f +256, 0xb2dbb723196a0ac3 +257, 0x66c86a3b65906016 +258, 0x938348768a730b47 +259, 0x5f5282de938d1a96 +260, 0xa4d4588c4b473b1f +261, 0x8daed5962be4796f +262, 0x9dde8d796985a56e +263, 0x46be06dbd9ed9543 +264, 0xdf98286ceb9c5955 +265, 0xa1da1f52d7a7ca2b +266, 0x5a7f1449f24bbd62 +267, 0x3aedc4e324e525fd +268, 0xced62464cd0154e1 +269, 0x148fc035e7d88ce3 +270, 0x82f8878948f40d4c +271, 0x4c04d9cdd6135c17 +272, 0xdf046948d86b3b93 +273, 0x2f0dec84f403fe40 +274, 0xa61954fb71e63c0d +275, 0x616d8496f00382e8 +276, 0x162c622472746e27 +277, 0x43bcfe48731d2ceb +278, 0xff22432f9ff16d85 +279, 0xc033ed32bb0ad5a4 +280, 0x5d3717cc91c0ce09 +281, 0x7a39a4852d251075 +282, 0x61cd73d71d6e6a6 +283, 0xe37e2ea4783ab1a5 +284, 0x60e1882162579ea8 +285, 0x9258ec33f1a88e00 +286, 0x24b32acf029f0407 +287, 0x1410fc9aea6d3fac +288, 0x6054cf2a3c71d8f7 +289, 0x82f7605157a66183 +290, 0x3b34c1c0dff9eac5 +291, 0xfebe01b6d5c61819 +292, 0x7372187c68b777f2 +293, 0xc6923812cda479f0 +294, 0x386613be41b45156 +295, 0x92cfebe8cc4014b +296, 0x8e13c4595849828b +297, 0x90e47390d412291f +298, 0x6b21a1d93d285138 +299, 0xbf5b1f5922f04b12 +300, 0x21e65d1643b3cb69 +301, 0xf7683b131948ac3c +302, 0xe5d99fc926196ed2 +303, 0x7b138debbec90116 +304, 0x8a2650a75c2c2a5c +305, 0x20689a768f9b347b +306, 0xdfa2900cfb72dc6e +307, 0x98959c3855611cc2 +308, 0x5fdb71b89596cc7c +309, 0x1c14ac5c49568c7b +310, 0x958c4293016091fe +311, 0x7484522eb0087243 +312, 0xc4018dfb34fc190f +313, 0xca638567e9888860 +314, 0x102cd4805f0c0e89 +315, 0xcc3bc438e04548f8 +316, 0xb808944bb56ea5be +317, 0xffd4778dbf945c57 +318, 0xfe42617784c0233b +319, 0x3eccbfeae9b42d3c +320, 0xd9f1b585fd0bfa60 +321, 0x5c063d1b2705d5dd +322, 0x8e8bec3519941b64 +323, 0x9e94c36cbec2a42 +324, 0x1cd19f5b64ffd3ad +325, 0x9632e3aebfc68e66 +326, 0x98960c2d9da4ae45 +327, 0xb76994b1f2bbfc1f +328, 0xca184a737d3971cc +329, 0x964d31b07183adfb +330, 0xe9e0ff351cd276d4 +331, 0xb5747c860b05bbe4 +332, 0x5549ddc3bd3862e2 +333, 0x495496677b27873b +334, 0x53910baa26e3ea18 +335, 0xaa07a07ad0a688d3 +336, 0xbb43bd1f09ecdb1e +337, 0xe2ebc105699dd84 +338, 0x6e815a2729584035 +339, 0x2caab1713b17948a +340, 0x43d39d209fa41c90 +341, 0xfe3e71089d5d1c3a +342, 0xa778646c32f81177 +343, 0x8d42bfb86e6e92d5 +344, 0x175571f70b4fcfbe +345, 0x2a66a6fe10dc3b5b +346, 0xd9545e85235ca709 +347, 0x5642781c77ced48a +348, 0x24facc40b72ccd09 +349, 0xa800fbacce33f6f8 +350, 0x675f58a0ff19fba +351, 0x35aedf57bb5cde1b +352, 0xe5535a6b63f6d068 +353, 0x84dffd0102aaa85d +354, 0x621faad65467aaa7 +355, 0x596ad85b556b112f +356, 0x837545fff8894c7a +357, 0x3d9a4ae1356bc6a6 +358, 0xcd8b7153205d4ad0 +359, 0x98afdd40f1ed09a6 +360, 0xa38b2dc55a5cf87f +361, 0x484aecce2b6838bc +362, 0x6af05c26bdab18d9 +363, 0xf418b7399dcf2e4b +364, 0x1cfa38789b0d2445 +365, 0xfbed23c34166ee67 +366, 0x38e6820039e4912a +367, 0x1fe94911e963591e +368, 0x1291c79aee29ad70 +369, 0x65eccfc89506f963 +370, 0x7d14de3b2f55b1f6 +371, 0x82eb79c36cd2a739 +372, 0x41ffe3b75ea0def5 +373, 0x9eba9156470a51d9 +374, 0xd17c00b981db37d1 +375, 0xf688769a75601aa7 +376, 0xbcf738e9e03d571e +377, 0x14712e56df8f919b +378, 0xab14e227d156e310 +379, 0xf53d193e993e351e +380, 0x857fae46bd312141 +381, 0xc2dd71e41b639966 +382, 0x74f8b987a3d00ad1 +383, 0x5bce8526dc527981 +384, 0x94910926c172a379 +385, 0x503c45557688a9d5 +386, 0x244d03834e05807f +387, 0x6e014cbab9c7a31f +388, 0xae544c638530facf +389, 0x9b853aaaf9cbc22d +390, 0xfb42ab7024d060ed +391, 0x74cc3fba0dfd7ff2 +392, 0x24ec9e8f62144ad5 +393, 0x72f082954307bbe7 +394, 0x36feda21bbf67577 +395, 0x3222191611b832f1 +396, 0xd0584e81bcac8b0b +397, 0xdce8d793ef75e771 +398, 0x978824c6c2578fc +399, 0x6e8f77503b3c2ee4 +400, 0xc85d2d86fecf5d03 +401, 0x3d35b4a5d4d723c4 +402, 0xd3987dfd4727fff3 +403, 0xd3cde63fb6a31add +404, 0xf6699e86165bdaeb +405, 0x9d60ba158ec364c4 +406, 0x920c3c18b346bfc9 +407, 0x770fd1fdfbc236ca +408, 0x45998cfc5fc12ddd +409, 0xd74a3454e888834b +410, 0xbf2aa68081a4a28f +411, 0xea41b26a6f1da1b3 +412, 0x5560a2d24b9d5903 +413, 0xe3791f652a228d8b +414, 0x365116d3b5a8520c +415, 0xb1b2bd46528f8969 +416, 0xfcfe14943ef16ae7 +417, 0xf4d43425e8a535dc +418, 0xe6cf10a78782a7e0 +419, 0x9c7ac0de46556e3e +420, 0xc667ae0856eed9ef +421, 0x47dbb532e16f9c7e +422, 0xdf4785a5d89ee82e +423, 0xbd014925ce79dbcf +424, 0xea0d663fb58fa5be +425, 0x51af07d5cc3821fb +426, 0x27a1bdcdc4159a9d +427, 0x520c986c59b1e140 +428, 0x50b73fd9bacd5b39 +429, 0xae5240641f51e4f3 +430, 0x71faecc164ed9681 +431, 0xda95aa35529a7ee +432, 0xe25ba29b853c1c6d +433, 0x9871a925cda53735 +434, 0xde481ad8540e114d +435, 0xa2997f540e8abca0 +436, 0xc9683c5035e28185 +437, 0x1082471b57182bac +438, 0xbd3ecf0f0b788988 +439, 0xf479760776fbb342 +440, 0x3730929200d91f44 +441, 0xc1762d79ae72809c +442, 0xfaa0a4c7b1686cb3 +443, 0xd581e6d55afdafcd +444, 0x6cf57bdfba2dcf6d +445, 0xdef79d9fe6a5bcef +446, 0x13ed376e18132bd3 +447, 0xbe67efd72defa2a +448, 0x5acc176c468966ea +449, 0x8b35b626af139187 +450, 0x446de3fac0d973ac +451, 0xe1d49e06dc890317 +452, 0x817bc3fd21fc09b7 +453, 0xb71c3958a13d5579 +454, 0x8746e010f73d7148 +455, 0x1b61c06009922e83 +456, 0xba17e62e6b092316 +457, 0x1375fa23c4db8290 +458, 0x3f071230f51245a6 +459, 0x51c99a086a61cd13 +460, 0x5f0f2ae78589e1fd +461, 0x604834e114bbbc27 +462, 0x5eb2a7a34814e9a9 +463, 0x77a6907f386bf11e +464, 0x99525de2bd407eeb +465, 0xb818348c57b3b98f +466, 0x25f5f9e702fbe78d +467, 0x8f66669e6f884473 +468, 0x1e47d46e2af4f919 +469, 0xf6a19df846476833 +470, 0xff00c67bcd06621f +471, 0xe3dfe069795d72d8 +472, 0x8affc88b2fea4d73 +473, 0x66df747e5f827168 +474, 0xf368ec338d898a0e +475, 0x9e1f1a739c5984a2 +476, 0x46a1c90e1ca32cbc +477, 0xc261bc305ed8d762 +478, 0x754d7949f7da9e72 +479, 0x4c8fbbb14ef47b17 +480, 0xccbdc67a3848d80d +481, 0x3c25e6f58bae751d +482, 0x7078b163b936d9b6 +483, 0x440e27463c134ecf +484, 0x6c83ee39f324db0f +485, 0x27cf901b22aea535 +486, 0x57262dec79a3f366 +487, 0x91db09f1dbb524fb +488, 0xd7436eefba865df2 +489, 0x16c86b0a275a3f43 +490, 0x689493e6681deaa9 +491, 0x7e1dc536c1a9ac42 +492, 0x1145beac3ac7f5cc +493, 0x3d05e211a104b2b0 +494, 0x4f9e77ced3c52f44 +495, 0x53de1369354add72 +496, 0x1fb60f835f47cdeb +497, 0x6ab36f089e40c106 +498, 0xaabffcb0d3d04c7 +499, 0xaa399686d921bd25 +500, 0x2bf8dd8b6d6fa7f0 +501, 0x1ddbf4e124329613 +502, 0x466a740241466a72 +503, 0x98d7381eb68a761 +504, 0x817691510bc4857a +505, 0x8837622c0171fe33 +506, 0xcba078873179ee16 +507, 0x13adad1ab7b75af4 +508, 0x3bac3f502428840c +509, 0xbeb3cce138de9a91 +510, 0x30ef556e40b5f0b4 +511, 0x19c22abdf3bbb108 +512, 0x977e66ea4ddc7cf +513, 0x9f4a505f223d3bf3 +514, 0x6bc3f42ac79ec87b +515, 0x31e77712158d6c23 +516, 0x6d8de4295a28af0d +517, 0xee1807dbda72adb7 +518, 0xda54140179cd038f +519, 0x715aa5cdac38e062 +520, 0x5a7e55e99a22fa16 +521, 0xf190c36aa8edbe4f +522, 0xccadd93a82c1d044 +523, 0x7070e6d5012c3f15 +524, 0x50a83341a26c1ba5 +525, 0x11bca7cc634142e5 +526, 0x623a0d27867d8b04 +527, 0x75c18acff54fbf6e +528, 0x455ae7d933497a6f +529, 0xf624cf27d030c3d3 +530, 0x7a852716f8758bac +531, 0xe7a497ac1fa2b5b4 +532, 0xf84f097498f57562 +533, 0xc4bb392f87f65943 +534, 0x618e79a5d499fbfb +535, 0xb3c0b61d82b48b8 +536, 0x4750a10815c78ea7 +537, 0x9cf09cca3ddece69 +538, 0x2a69f1c94cc901a2 +539, 0x347a0e446e1ce86d +540, 0xb06f3a5a5ab37bb1 +541, 0x8035bd0713d591db +542, 0x539c9637042c3a1f +543, 0xd7ba4dc6b273cbd7 +544, 0x12f3f99933444f85 +545, 0x4a9517b9783fb9a4 +546, 0x6422b2ea95093bc5 +547, 0x3a5ecff0f996c2a6 +548, 0x31de504efc76a723 +549, 0x7ccb7c5233c21a9f +550, 0xc687d9e6ce4186e8 +551, 0x6e40769d6940376a +552, 0xf51207314f1f7528 +553, 0x67ee3acb190865e3 +554, 0xe08d586270588761 +555, 0xe387fa489af1a75c +556, 0x73414a52d29d8375 +557, 0x671a38191cf2a357 +558, 0xe00fb25b1aa54008 +559, 0x11a0610e22cf549b +560, 0xc90cc865d57c75be +561, 0x90d0863cc15f2b79 +562, 0x8b3e60d32ebcb856 +563, 0xb28cc55af621e04a +564, 0xcf60bd3cb2a5ab1d +565, 0x212cb5d421948f86 +566, 0xee297b96e0a3363f +567, 0x4e9392ff998760d1 +568, 0x61940c8d0105ba3e +569, 0x14ebcbae72a59a16 +570, 0xdf0f39a3d10c02af +571, 0xfc047b2b3c1c549d +572, 0x91718b5b98e3b286 +573, 0x9ea9539b1547d326 +574, 0x7a5a624a89a165e6 +575, 0x145b37dcaa8c4166 +576, 0x63814bbb90e5616c +577, 0xc4bc3ca6c38bb739 +578, 0x853c3a61ddc6626c +579, 0xa7ce8481c433829a +580, 0x8aff426941cc07b +581, 0x2dc3347ca68d8b95 +582, 0xce69f44f349e9917 +583, 0x2fa5cb8aca009b11 +584, 0xf26bb012115d9aca +585, 0xafa01c2f2d27235a +586, 0xabcba21f1b40305e +587, 0xfec20c896c0c1128 +588, 0xc5f7a71ebacadfa0 +589, 0xc8479ad14bab4eef +590, 0xad86ec9a3e7d3dc +591, 0xbbecd65292b915c5 +592, 0xb1f9e28149e67446 +593, 0x708d081c03dad352 +594, 0xaa8a84dbd1de916c +595, 0x9aa3efb29ba9480b +596, 0xd3c63969ff11443e +597, 0x1e9e9ac861315919 +598, 0x4fe227f91e66b41d +599, 0xefc0212d43d253ab +600, 0x98341437727c42d1 +601, 0x5ea85c0fe9008adc +602, 0x7891b15faa808613 +603, 0x32db2d63989aacfd +604, 0xc92f7f28e88fd7bc +605, 0x3513545eb6549475 +606, 0x49abe0082906fbf8 +607, 0xcee1e1a6551e729c +608, 0x38556672b592a28e +609, 0xc3e61409c4ec2d45 +610, 0x96c67ce2995a0fd4 +611, 0x9b9b0cada870293 +612, 0x82d6dd5dada48037 +613, 0xeea4f415299f1706 +614, 0x371107895f152ab3 +615, 0x2f6686159f4396bb +616, 0x61005a2ff3680089 +617, 0x9d2f2cafb595e6b6 +618, 0x4a812a920f011672 +619, 0x317554d3a77385d7 +620, 0x24c01086727eb74b +621, 0xa15ff76d618a3a9e +622, 0x2121bfd983859940 +623, 0x384d11577eea8114 +624, 0xab0f4299f3c44d88 +625, 0x136fd4b07cfa14d9 +626, 0x665fe45cbfaa972a +627, 0x76c5a23398a314e9 +628, 0x5507036357ccda98 +629, 0xd9b8c5ac9dce632b +630, 0x366bc71781da6e27 +631, 0xdd2b2ba1d6be6d15 +632, 0xf33ed0d50ea6f1a6 +633, 0xf05a9b1900174c18 +634, 0x3947e1419e2787cf +635, 0x6c742b1e029637d0 +636, 0x32aba12196a0d2e8 +637, 0x1b94aab2e82e7df +638, 0x68b617db19229d6 +639, 0x6c88a95ac0a33f98 +640, 0xdc9b95fd60c2d23e +641, 0x999e6971d3afc8b3 +642, 0x7071fc6ad8b60129 +643, 0x41a8184ef62485f6 +644, 0xb68e0605c7d5e713 +645, 0x272b961a1d1bbee +646, 0x23f04e76446187b0 +647, 0x999a7a8f6d33f260 +648, 0xdbd6318df4f168d +649, 0x8f5e74c84c40711e +650, 0x8ccc6b04393a19d6 +651, 0xadcd24b782dd8d3d +652, 0x1a966b4f80ef9499 +653, 0xcb6d4f9ff5a280f0 +654, 0x8095ff2b8484018a +655, 0xbfd3389611b8e771 +656, 0x278eb670b7d12d51 +657, 0x31df54ca8d65c20f +658, 0x121c7fb38af6985e +659, 0x84fb94f38fe1d0a +660, 0x15ae8af1a6d48f02 +661, 0x8d51e4a62cba1a28 +662, 0x58e6b6b3ae0f9e42 +663, 0x9365a0a85669cc99 +664, 0xe56e92f65a2106df +665, 0x68fa299c66b428fc +666, 0x55e51bb0b0a832c6 +667, 0x48b565293f9bc494 +668, 0x73d8132b1cbabb57 +669, 0x9178ac3926c36cbc +670, 0xe2f22c7b28ea5e0f +671, 0x6af45322a99afb12 +672, 0x59072fcb486a46f4 +673, 0x166b717b08d3d8e +674, 0xd4e627a2dfacc4ab +675, 0x33dad6f2921dedaa +676, 0x4b13b806834a6704 +677, 0xe5f7971b398ed54d +678, 0x20bfae65e3e6899b +679, 0x881dab45d2b4fc98 +680, 0x6f248126b5b885be +681, 0x7aeb39e986f9deee +682, 0xf819f9574b8c3a03 +683, 0xff3d93ed6bd9781a +684, 0x3a31e2e24a2f6385 +685, 0x7888a88f8944a5e +686, 0x4faee12f5de95537 +687, 0x7f3e4efccdb2ed67 +688, 0x91e0f2fc12593af5 +689, 0xb5be8a4b886a40d3 +690, 0x998e8288ac3a9b1b +691, 0x85c48fc8b1349e7b +692, 0xf03af25222d8fae5 +693, 0x45467e805b242c2e +694, 0xa2350db793dbebdc +695, 0xfebe5b61d2174553 +696, 0xa9a331f02c54ad0b +697, 0xe94e49a0f905aef3 +698, 0xe54b4c812b55e3da +699, 0xdc454114c6bc0278 +700, 0x99c7765ab476baa2 +701, 0xccd9590e47fdff7c +702, 0xfa2bcae7afd6cb71 +703, 0x2c1bf1a433a6f0f7 +704, 0x53882c62ff0aab28 +705, 0x80ac900f844dacc +706, 0x27ba8eb5c4a44d54 +707, 0x78f3dfb072a46004 +708, 0x34e00e6ec629edce +709, 0x5b88d19b552d1fbd +710, 0xe4df375dc79df432 +711, 0x37446312ff79c3b4 +712, 0xb72256900a95fa6d +713, 0x89f3171fbdff0bfc +714, 0xd37885b048687eba +715, 0xbb033213b283b60e +716, 0xcf10b523ee769030 +717, 0xbf8070b6cfd7bafb +718, 0xb7194da81fd1763b +719, 0xbfc303de88e68d24 +720, 0xb949c7a5aea8a072 +721, 0x844216e7bae90455 +722, 0xf1e7f20840049a33 +723, 0x96e3263ad0cae794 +724, 0x10772d51f6e9ba49 +725, 0xcea24fccae9d23b3 +726, 0xefd378add9dde040 +727, 0xba0c7c5275805976 +728, 0x2e2a04608f64fa8c +729, 0xafb42ec43aa0fa7 +730, 0x30444b84241ac465 +731, 0x19ef384bac4493ab +732, 0xfd1ac615d3ba5ab9 +733, 0x6cc781ba38643aff +734, 0x30ff27ebed875cfd +735, 0xee1a261aca97ae62 +736, 0xc5a92715202bc940 +737, 0x9e6ec76f93c657ff +738, 0x9b9fd55f55191ca5 +739, 0x654b13af008d8f03 +740, 0x1b7f030d9bd0719f +741, 0x6d622e277550cb7f +742, 0x3f8ee6b8830d0538 +743, 0x475462bcd0de190f +744, 0x21380e8a513bdbcd +745, 0x629bf3771b1bd7a4 +746, 0x3b5fd0b62c353709 +747, 0xf95634006ec3867e +748, 0x1be8bb584a6653c2 +749, 0x2e2d3cfa85320ce8 +750, 0x5b904b692252d11d +751, 0x4bfd76631d527990 +752, 0xc019571ca2bec4a0 +753, 0xf2eb730cea4cd751 +754, 0xd4571d709530191a +755, 0x3b5bd947061f5a7d +756, 0x56e2322cd2d1d1c0 +757, 0xa8830a5f62019f83 +758, 0x901d130c1b873cf3 +759, 0xb5dd29b363c61299 +760, 0xbb710bec3a17b26d +761, 0xc0c464daca0f2328 +762, 0x4dc8055df02650f5 +763, 0x3d3cd9bbe8b957af +764, 0xdb79612c2635b828 +765, 0xe25b3a8ad8fa3040 +766, 0xd5875c563cbf236b +767, 0x46861c1c3849c9bc +768, 0xf84bf1a2814dff43 +769, 0x6d8103902e0ad5e6 +770, 0x99f51c9be8af79e5 +771, 0xb0bfa8540ff94a96 +772, 0xaf45109a4e06f7d0 +773, 0x281df3e55aea9bfc +774, 0x6a1155ca8aa40e60 +775, 0x754d32c5de1f5da +776, 0xce1eafb1c6ca916f +777, 0xc4f2185fa8577bd1 +778, 0x4a188e9bdb5501d9 +779, 0xbb14107e99bd5550 +780, 0xf0381d8425ec2962 +781, 0x213dbfffc16ec4f6 +782, 0x7a999c5a28ea65bc +783, 0x23758c2aba7709ff +784, 0xea7e4bb205e93b44 +785, 0x9c5a31e53911c658 +786, 0x7f04d0bbdc689ddc +787, 0xe3ed89ab8d78dcb3 +788, 0x73c38bfb43986210 +789, 0x740c7d787eb8e158 +790, 0x5284fafdfb3fb9ec +791, 0x2e91a58ac1fb1409 +792, 0xb94a600bf0a09af3 +793, 0x533ea4dbe07d81dd +794, 0x48c3f1a736b3c5fd +795, 0x56ae3499fa8720ce +796, 0x526f2def663ca818 +797, 0x2f085759c65665c4 +798, 0xf715f042c69e0db4 +799, 0x110889c399231e60 +800, 0x64584a244866f3a0 +801, 0xf02ec101a39405d3 +802, 0xe73cd5e9a7f17283 +803, 0xfea64869e7028234 +804, 0x97559974ad877891 +805, 0xc8695aba1dc9f2e5 +806, 0x7b62b76ffc2264ec +807, 0xf5e1df172ec5ccd +808, 0xafaeb68765e443bd +809, 0xd3870eb2e8337623 +810, 0x4f944d684138fb39 +811, 0x6977c575038916ad +812, 0x8ada1a225df95a56 +813, 0xe4044c6c58d15e54 +814, 0x4e5121366681cf2 +815, 0xcf8640b079357b0d +816, 0xcd5b157d44106fa3 +817, 0x9d7a5481279e25a1 +818, 0xe10e9db41fb4b34f +819, 0x1052607be1eadff9 +820, 0x3403d67232fe2265 +821, 0xac9358f498c34afc +822, 0x820172da0dc39c9 +823, 0xe186e91a3b826b6a +824, 0x1a838e2a40284445 +825, 0x1870b617ebd7bce6 +826, 0xcb7cba4424be1ed7 +827, 0x6a2e56e40fdf9041 +828, 0xace93bbe108f97ee +829, 0xfeb9bc74ac41ca08 +830, 0x8cb2d05b0f6a1f51 +831, 0x73792309f3fac0a9 +832, 0x2507343d431308ca +833, 0xd0ea1197be615412 +834, 0xb1870812f1d2fa94 +835, 0x6d067b6935dcd23e +836, 0xaf161014e5492c31 +837, 0xd4be0dce97064be4 +838, 0xf8edfe3fc75c20f1 +839, 0x894751dc442d2d9c +840, 0xb4a95f6a6663456c +841, 0x74e93162e2d805db +842, 0x784bc5f3a7a2f645 +843, 0xd234d7c5b0582ea9 +844, 0x491f28d0ab6cb97c +845, 0xa79419e5cf4336c3 +846, 0x66b00141978c849 +847, 0xa7ddbd64698d563f +848, 0xefc33a4a5d97d4b2 +849, 0x95075514a65aebdc +850, 0x40eca5b3e28cd25e +851, 0x90ec7d00e9c9e35d +852, 0x63e84104d5af417a +853, 0xdaca0ea32df5744 +854, 0x7ed54f2587795881 +855, 0x5a73931760af4ee0 +856, 0x857d1a185a3081ec +857, 0x6eac2aabe67fb463 +858, 0xd1f86155d8bfc55f +859, 0x6d56398f3e7877ef +860, 0x7642f61dfc62bc17 +861, 0x1d76b12843246ffa +862, 0xde7817809b8a31d0 +863, 0xbcca9cd091198f9d +864, 0xf71ca566dddcdfd4 +865, 0xea4386ee8b61d082 +866, 0xe351729d6010bac4 +867, 0xfd685d8a49910dd6 +868, 0xa7a20ea6c686bd3 +869, 0x1cdaf82f4dbd5536 +870, 0xa3da1d1e77dda3e0 +871, 0x4f723b3818ff8b2a +872, 0x1290669eca152469 +873, 0xb54158b52d30651b +874, 0xc06b74f2c7f0fee +875, 0x7d5840bcbf702379 +876, 0x19fa4c1254a82ed +877, 0xcf5ce090ad0b38ea +878, 0xd4edd6ac9437e16d +879, 0xc6ebf25eb623b426 +880, 0xd2b6dbdf00d8fea2 +881, 0x949cf98391cc59e1 +882, 0x380a0c7d0356f7b3 +883, 0x8ffefe32465473bf +884, 0x637b6542d27c861e +885, 0x347d12ffc664ecd9 +886, 0xea66e3a0c75a6b37 +887, 0xc3aff6f34fb537a1 +888, 0x67bdf3579959bf49 +889, 0xa17a348e3a74b723 +890, 0x93c9ef26ddadd569 +891, 0x483909059a5ac0b2 +892, 0x26ec9074b56d5a0d +893, 0x6216000d9a48403a +894, 0x79b43909eab1ec05 +895, 0xe4a8e8d03649e0de +896, 0x1435d666f3ccdc08 +897, 0xb9e22ba902650a0e +898, 0x44dffcccc68b41f8 +899, 0x23e60dcc7a559a17 +900, 0x6fd1735eacd81266 +901, 0xf6bda0745ea20c8e +902, 0x85efcaefe271e07c +903, 0x9be996ee931cef42 +904, 0xe78b41c158611d64 +905, 0xd6201df605839830 +906, 0x702e8e47d2769fd3 +907, 0xb8dcf70e18cf14c +908, 0xac2690bab1bf5c17 +909, 0x92b166b71205d696 +910, 0xb0e73c795fc6df28 +911, 0x4bf2322c8b6b6f0d +912, 0xa842fbe67918cea0 +913, 0xb01a8675d9294e54 +914, 0xfbe3c94f03ca5af2 +915, 0x51a5c089600c441f +916, 0x60f0fd7512d85ded +917, 0xef3113d3bc2cadb0 +918, 0xe1ea128ade300d60 +919, 0xde413b7f8d92d746 +920, 0xfc32c6d43f47c5d8 +921, 0x69d551d8c2b54c68 +922, 0xb9bc68c175777943 +923, 0xb9c79c687f0dae90 +924, 0xd799421ef883c06e +925, 0xbff553ca95a29a3e +926, 0xfc9ffac46bd0aca1 +927, 0x4f6c3a30c80c3e5a +928, 0x8b7245bc6dc4a0a +929, 0xaf4e191a4575ff60 +930, 0x41218c4a76b90f0b +931, 0x986052aa51b8e89b +932, 0x284b464ed5622f9 +933, 0xba6bded912626b40 +934, 0x43cad3ed7443cb5c +935, 0x21641fa95725f328 +936, 0x6d99d6d09d755822 +937, 0x8246dfa2d4838492 +938, 0xd2ee70b9056f4726 +939, 0x87db515a786fbb8b +940, 0x7c63e4c1d7786e7d +941, 0xd1a9d548f10b3e88 +942, 0xa00856475f3b74c9 +943, 0x7f1964ce67148bf4 +944, 0x446650ec71e6018c +945, 0xb1805ca07d1b6345 +946, 0x869c0a1625b7271b +947, 0x79d6da06ce2ecfe2 +948, 0xec7b3cafc5e3c85f +949, 0x1745ce21e39f2c3d +950, 0xd9a0a7af6ee97825 +951, 0x680e0e52a6e11d5c +952, 0xd86b3f344ff7f4cd +953, 0xab56af117c840b9c +954, 0x5c5404c7e333a10e +955, 0x4f1eb462f35d990d +956, 0xf857605a5644458e +957, 0x3bb87cdf09262f86 +958, 0xd57295baf6da64b +959, 0xb5993f48472f2894 +960, 0x7d1a501608c060b2 +961, 0x45fabe2d0e54adf0 +962, 0xbb41c3806afb4efe +963, 0xbfbc506049424c8 +964, 0xb7dd6b67f2203344 +965, 0x389ce52eff883b81 +966, 0xe259c55c0cf6d000 +967, 0x70fb3e3824f7d213 +968, 0x9f36d5599ed55f4b +969, 0xd14cf6f12f83c4f7 +970, 0x570a09d56aaa0b66 +971, 0x8accafd527f4598 +972, 0xa42d64c62175adfd +973, 0xddb9c6a87b6e1558 +974, 0xd80b6c69fa1cde2a +975, 0x44ebaac10082207b +976, 0xf99be8889552fa1a +977, 0x38253cd4b38b5dc5 +978, 0x85356c8b02675791 +979, 0xbf91677b2ecdcf55 +980, 0x2316cb85e93f366e +981, 0x9abf35954db6b053 +982, 0xf49f7425e086b45a +983, 0x8f5b625e074afde2 +984, 0xe0d614559791b080 +985, 0xbf7b866afab2a525 +986, 0xde89d7e1641a6412 +987, 0x1d10687d8ae5b86f +988, 0x1f034caa0e904cbd +989, 0x2086357aec8a7a2c +990, 0x22dc476b80c56e1e +991, 0xbef5a73cc0e3a493 +992, 0xddfa3829b26ed797 +993, 0x8917a87ec3d4dc78 +994, 0xfeabe390628c365e +995, 0x581b0c4f6fb2d642 +996, 0x1ef8c590adbf5b9a +997, 0x4d8e13aac0cce879 +998, 0xfe38f71e5977fad0 +999, 0x1f83a32d4adfd2ed diff --git a/numpy/random/tests/data/philox-testset-2.csv b/numpy/random/tests/data/philox-testset-2.csv index 1c2d4eba0..69d24c38c 100644 --- a/numpy/random/tests/data/philox-testset-2.csv +++ b/numpy/random/tests/data/philox-testset-2.csv @@ -1,1001 +1,1001 @@ seed, 0x0 -0, 0x79969cc23abb91b4 -1, 0x5d45aaf4ec59c2d0 -2, 0x694e6df1b3048ed4 -3, 0x29caa3dbe7b3fad3 -4, 0x40de4437fb7c6391 -5, 0xced65c8c17cbd934 -6, 0x3a34149842e4c076 -7, 0x4bd68ff0459067c7 -8, 0x22a1cd386c044cb -9, 0x707d516e7b2321bb -10, 0xd31e9fbe226156b3 -11, 0x1e7c92b4a1111385 -12, 0x40b26d1e3ad54f68 -13, 0x2b512df2e2c7b340 -14, 0xbc566a77564902eb -15, 0x38019add5d6c49f2 -16, 0xabc12bede6d19b9f -17, 0x8ffda997c28b3314 -18, 0x7758a16e37aa29dd -19, 0xc75be56d772bbd45 -20, 0x7dd842b9b7ef652f -21, 0x874bb05dffe32330 -22, 0x6215b5d304389ab0 -23, 0x67b7659e0f6f074d -24, 0x3dee6f7f663aa80e -25, 0x35f1ebc3a43422e2 -26, 0x91ca84accba13894 -27, 0x19a82e52cf0a5aa5 -28, 0x99193ec846ff4752 -29, 0xaa85d8c7b98454eb -30, 0xdc9fd9a6cf639903 -31, 0x6a7f3a04051963e4 -32, 0xe6315de20fb99cc5 -33, 0xc6e64d30591ea5e4 -34, 0x2c3a032c8af3ea95 -35, 0x4a6ac2609731f163 -36, 0xd0075b64c816b32f -37, 0x6ba834fc94d46b11 -38, 0xce81c72980d4c0d5 -39, 0xe4527c390cd95d99 -40, 0x281a4f40fbef803a -41, 0x8b96b67ef65af945 -42, 0xd8228d14e17d995c -43, 0x822e355afd5a0708 -44, 0x76875e970f78780 -45, 0x1dd4625c16f578fa -46, 0xed94ce7d1cf6affd -47, 0xfd92c8d7728d9656 -48, 0x31da5185dee2c21f -49, 0x8cb0591af5c81267 -50, 0xfca589420074336f -51, 0x8521d19430fae019 -52, 0x20273ae3419daf9 -53, 0x27ee172bbae69340 -54, 0x98fce350defda2d6 -55, 0xbf8b350e4cc6c7ff -56, 0x30718006f3e0170b -57, 0xe06ba2542d7acd63 -58, 0xdd2af87a79df1722 -59, 0xd7fdadbfc51ac4fe -60, 0xbf5cac7b6b07e5cd -61, 0xead793949b8ed548 -62, 0x1840f7d95c0fcaa9 -63, 0x9abd3340d80c15af -64, 0xa287da079eb9a1d8 -65, 0x1f0f530858927e87 -66, 0x56abe10813899150 -67, 0xbe0182c8f2ab4575 -68, 0xf9e318a24d72471a -69, 0xca9fa810134e0866 -70, 0xd6f89ce5a65a0791 -71, 0x120528d7fc273c9f -72, 0xef0c8cfe4b167be9 -73, 0xef5d36463f4d8c7f -74, 0xa017cd944ee9c3d7 -75, 0x6c38f735847f9c65 -76, 0xafb6a0a5ced5e991 -77, 0x6d474406bcbfab26 -78, 0xa90b7997de0d58f3 -79, 0x1fed779ebc5d221a -80, 0x77a5fb8e08e9ae6d -81, 0x70150de0fda752f7 -82, 0x55a942db08ffdd56 -83, 0x6a79d3640b2e7d68 -84, 0xf74772c9926374c1 -85, 0x8f37888d12b4d52f -86, 0xe331da4eb3ede8d6 -87, 0x9a248bc67dbf1b35 -88, 0x35fb9ec1b8f35151 -89, 0xd55260d8fa30259c -90, 0xf2dc194b962d0dc3 -91, 0x7421accacb7612e4 -92, 0x84188c4b9af469a1 -93, 0x7dbf34d5fcc07b5b -94, 0x6814325ad6bd0142 -95, 0xe81c0fb52c978dc0 -96, 0x7383aeadf20cdad7 -97, 0xdf578a6544720b72 -98, 0x2bf78fa3ee23ee5d -99, 0x86de4a9a5d5b30ec -100, 0x5399499273ab2312 -101, 0xb7e56b49c81098ad -102, 0x545c46236115c503 -103, 0xbb1ebf762b9f6d50 -104, 0xfdf2aa180180f729 -105, 0x53cc5b07cfcbfe8c -106, 0xb83e28400cedb4e -107, 0x9c31e53a2e1d5692 -108, 0x3f0826e1d4354c85 -109, 0xf4fcfe401a637569 -110, 0x1efcd12f58dcbf87 -111, 0xa444a0c48c35221d -112, 0x72d1c01d6b6bd176 -113, 0xed0d5d536d32ac13 -114, 0xe954ce02b26a6059 -115, 0xde62023001249b9c -116, 0x841f789718400085 -117, 0xeec06a70d8c0621f -118, 0xd291a59fc833590b -119, 0xc6376fd2243fb8b -120, 0x28a87d88893881ce -121, 0x98d049b96c67da8a -122, 0x1aa980a3f10e9bbf -123, 0xe659d1a052cfa2f7 -124, 0xda413dc6222914da -125, 0x661e049b99b2056e -126, 0xe288cd7c76014e5e -127, 0x865d98946f3ca341 -128, 0xfd4a9504dc3c9481 -129, 0x68821b878bea1073 -130, 0x98a9ae702cca6f4d -131, 0xb02c218bd6ecf7be -132, 0xad9f2cc45e9f71b8 -133, 0x1a73edfde94ac922 -134, 0xad6e36771e49599b -135, 0x33132de3eae3b26b -136, 0xe38bf29f74c219c8 -137, 0x9a7d1bd6d6954dc -138, 0xfa0504aa41d2da3 -139, 0x18c2c0a825aa8c77 -140, 0x4575d335c5a52fee -141, 0xf8e12f4237ad2574 -142, 0x4da2b3d1a4b207a5 -143, 0xd483ee8735b0cd0e -144, 0x9b92d7e5650dce24 -145, 0x2e85af91423bab47 -146, 0xec285fc870875add -147, 0xc049f35180d0b26 -148, 0xbf9d3486b1510d3e -149, 0x6136b10aa8cd75a -150, 0xf4a468c92c6b01c7 -151, 0xe6d7ac00bee004aa -152, 0x5a060bd23d3d6a16 -153, 0xaf68b049fb08130 -154, 0x188cde6b2e6d18fb -155, 0x913aa1123363a9d -156, 0xb35a584b6899fbb -157, 0x1a0b2cfcc7002419 -158, 0x51a6f914a1436297 -159, 0xae5af7e12493c9fa -160, 0xd5a4a33453104298 -161, 0xd46c795e6ced12dd -162, 0x24578f112e9896e5 -163, 0x3879bc9d1d1c79df -164, 0x38d21818a9044427 -165, 0x1489a65967bbd74c -166, 0xf004d910e27d5453 -167, 0xacae738e2b4a1b7c -168, 0xee8dfe42955be33 -169, 0xd9d5d1ecb7524335 -170, 0xaceab4d48e8eb2a0 -171, 0x7747bb87ea6f47e5 -172, 0xfd1b1bab29e1a5b1 -173, 0x2f4b6b0f9300b44 -174, 0xdab086094510e334 -175, 0xa571c54824e95668 -176, 0xfc5108b22f0c15e -177, 0x9989597611a00527 -178, 0x6ef24f0f951b29c8 -179, 0x5824eef87de85c1a -180, 0x78a35def7f709c63 -181, 0xfdfac9f100645cef -182, 0x1f0027accbd50b57 -183, 0xf4379eb0e470a43 -184, 0xe108523693012b4d -185, 0x1dbcaa15e104e367 -186, 0x91a01715bfa8f4a2 -187, 0x90b12f2dc6612875 -188, 0x3a0c81439df90067 -189, 0x92bcce47af32a0cb -190, 0xf1f8ec01579f0749 -191, 0x656fe00e45f73d01 -192, 0x66b3ce57b8a63a03 -193, 0x7f711c6efceb22f6 -194, 0xcf6c2d639062aea0 -195, 0xddc95dcbe9455707 -196, 0xe24dbe6495077239 -197, 0x7d02e17fba62ea00 -198, 0x84d60e07638b79c5 -199, 0x767bd78a1e45e41f -200, 0xfe3fe1d74008b0c6 -201, 0x4b98deab82ab23a9 -202, 0xdb104f1846592508 -203, 0x23086e881366ad53 -204, 0x64c16b00fbf72cd6 -205, 0xb19eb55587ad61e3 -206, 0xfdb8caa9ab6dfe07 -207, 0x125b0675253c081b -208, 0xbd8ca76e7797a1d5 -209, 0x6fa2177be1444f15 -210, 0x23c4388e40529ab0 -211, 0xf3ad977faf5aee04 -212, 0xb1ca87d8c64c3bf2 -213, 0xa68ee8636f7a4f7 -214, 0xa40199a2bec23e46 -215, 0x5fcae2801e7e0b4e -216, 0x2e1260c7c7afef8a -217, 0xaeb347f6912b9cf3 -218, 0x2702e2510b9b4e4e -219, 0xd281ab9c087c1401 -220, 0x7d73d1c89ec1ecc3 -221, 0xfaf594c2b9bd6355 -222, 0x78641e1415fadd6f -223, 0x6bcbc45443f34f98 -224, 0xc5ea1bbd7ad47fc1 -225, 0x21a6bde64e7934f0 -226, 0xe48d5c1eac30eae -227, 0x7645dd59feeee713 -228, 0x236dc6e399a0f8b -229, 0x7d47bb3105e270d0 -230, 0x5c30af0f8e670624 -231, 0xd77864a3d3eedbaf -232, 0xa8ce734357f09a67 -233, 0xa5848bf5de97769a -234, 0x197e3bd0511be793 -235, 0xf1797421fced9f11 -236, 0xab395568cdb296d5 -237, 0x2c163053937c4e5c -238, 0x88aab0204548c66c -239, 0x59e43e9ee50ccf47 -240, 0x5646ec79dc2b8717 -241, 0xdd21d5fe2594e739 -242, 0xe3b36b715e030f2c -243, 0x72b9c7dc781ee215 -244, 0x3928edaa51d23161 -245, 0x18072b29ad229306 -246, 0x5a6e1a7146df0219 -247, 0x44fa2420a3a521e5 -248, 0x26c8c4d7e48e49c7 -249, 0x19829824d9ab3d0f -250, 0x208e2308990de3ca -251, 0x644d4c7725308bb -252, 0xbcd356813965c89e -253, 0x7cc4a5d0629a09c6 -254, 0x78ecec3f9f660e71 -255, 0x4c5017c2cc05d260 -256, 0x1a630b52a53d5d4c -257, 0xaad6058d6091bddb -258, 0x42310f01d0dec7ba -259, 0x352501f1bf98692c -260, 0x5b32220790b2eef9 -261, 0x9cec92f85a3ad24a -262, 0x392bed113812b6a7 -263, 0x2c4a91bc9a27b61d -264, 0xa3ddb8a73a00331 -265, 0x71564f4cc1ff38b6 -266, 0x3bf1cdb52f7d6121 -267, 0x317f2427d4ece2ff -268, 0x61b510f62d30c1d1 -269, 0xf3118eb3bc72b4db -270, 0x6cf9e03844d59394 -271, 0x9a48891e9593372c -272, 0xe6f07884178198e2 -273, 0xdb8d7ffb3f7b48e7 -274, 0xd843287403436ab2 -275, 0x281067329d659944 -276, 0xa9be89389e933e98 -277, 0xa559f1b2c64d698b -278, 0x177c147eecc213a0 -279, 0xb60d1b8907f932b6 -280, 0xbf3dfd3933f22dde -281, 0xc97688e8fc9e974a -282, 0xf10b069f84d5a0bb -283, 0x30aef0a063e9948e -284, 0x149d4526e4606eef -285, 0x3d47374e3f68d21d -286, 0xa8ec81fb5259d900 -287, 0xa8a2f4cdf3ea7a0 -288, 0x15bcdb63f1092d6b -289, 0xec827b483fa8d1f0 -290, 0x31fa9b0586f00970 -291, 0xdbe7d320cf2931a3 -292, 0x1b11cccdc34368d1 -293, 0x1fe27662861788f4 -294, 0xf709d76eb49bd879 -295, 0x2450c5dc16476c8 -296, 0x7a0a7d863198b16d -297, 0x5d1f6c9563f68aa5 -298, 0x36c7d7757e74eb02 -299, 0xc0656a90d456269c -300, 0xeff66ab0f6d035d0 -301, 0x27afcd4b473c8f6e -302, 0xadfc46fa3ee6ce03 -303, 0xd8096465daf41c99 -304, 0x602ddafb5eaa9460 -305, 0xd731e659599d021d -306, 0x33c3a32355ab4e63 -307, 0x974e3554d7bcc0c3 -308, 0x249dceb9428a7bd4 -309, 0x378eb9b47abb256f -310, 0xedbce8679ab00480 -311, 0xd1746d7de7777fdb -312, 0x14a30aa451c0f7b7 -313, 0x1d28baed82fd8b04 -314, 0x714174c401e78e26 -315, 0xf1788905ecb84469 -316, 0x22eff71d89f9be8c -317, 0x6b2819eb724b4e74 -318, 0x1636191b8000b39e -319, 0x73ea3d60587f3cfe -320, 0xe7ed97702c468226 -321, 0xe10824982050c4f2 -322, 0xfc2749ffbc81d160 -323, 0x5cdf3c2d78f56706 -324, 0xc01c94db79631370 -325, 0xc5f5776c2840747a -326, 0xada78ed21449a7f9 -327, 0xe987713c3d87e4f2 -328, 0x7b8e12fcf69b7ab -329, 0xd596a488c255523e -330, 0x9e9b813baca7c51e -331, 0xa624b911e58175a2 -332, 0x3c832b46e35fa5c7 -333, 0x515825156be5fb3b -334, 0xe91c83a0fc6c7f4d -335, 0x907e8ed6e7d67004 -336, 0x7de3df361f634d83 -337, 0x1ccf96f2394200c2 -338, 0x845175395e3598e1 -339, 0x4905098c8b06775a -340, 0x4424d6e6a10c0c02 -341, 0x820010ef3887713f -342, 0x2d918fc9225aaa82 -343, 0x32eba0dd41ce9092 -344, 0x1b66fe6dbc525c20 -345, 0x394b67ad8a323e4a -346, 0x5e696185a5c86bd9 -347, 0x69b12c2752514602 -348, 0x1ff9214a510255cb -349, 0x2bc5a0ca899aad12 -350, 0xb57d6e14b16a7718 -351, 0x79beb7612a6fd6e7 -352, 0xbc79c45b1f8e7f8d -353, 0x44d32a278b964fcd -354, 0x2e483a22ca7de50b -355, 0xf5ceabc566b350f1 -356, 0x7b582ffc4b9d5e43 -357, 0x42ab9492574ac3ab -358, 0x3a8a1fec1ab3e71d -359, 0x75478c52e0efb094 -360, 0xaf1377c197c720e7 -361, 0xd1be85afc6bd298e -362, 0x9a4e6e8660a4d81 -363, 0x1a4bb91a268e65be -364, 0x3a10b0755792f8dd -365, 0xe95153d3eec0c19d -366, 0xf3036b6f8e02be83 -367, 0xdffc9d3fdc293619 -368, 0xfad8ee79745a8a9a -369, 0xa9a8062d64f3dc61 -370, 0x7ddb3f6012d81dd8 -371, 0x623856260cae9962 -372, 0x35d0e6eb91622fa5 -373, 0xe3fcfa2208a3b5a8 -374, 0xcc8ec36185748ebf -375, 0x762cd35896ae6777 -376, 0x5e529053ce500de2 -377, 0x6545fcfc0da9a2c -378, 0x8cb156892a6669be -379, 0x96f80d4770f396a7 -380, 0xbd99a1ca2c8d3e41 -381, 0xd6297cf0b8e5eb63 -382, 0xb522d18d7b34c41e -383, 0x4c76d7b243817c1 -384, 0x733337cba2e74d55 -385, 0x769ee9acdce2279a -386, 0x158fe92000a829d6 -387, 0x2de70d67481a26ee -388, 0x481a32f89f48bbf -389, 0x7910c1fd5b66cbcb -390, 0x40e915445d6794ba -391, 0x694dd31fc3616af4 -392, 0xf66a0f17f6ca78a -393, 0xd09055d52155dd27 -394, 0xd0e4a5654cb1f0d3 -395, 0x27a33f6e7976580 -396, 0x2bc002e93ea14a88 -397, 0x8163bbc9277dfc50 -398, 0xd74612f9829a45e4 -399, 0x492779facb39266a -400, 0x2b4a269c9d211e86 -401, 0xdc88f4805b8abb5c -402, 0xdb8cb18b5beef640 -403, 0x14effaf6271aeae5 -404, 0x133fdf95232daaf4 -405, 0x9811dd5ee80ef423 -406, 0xe80815ce0f365122 -407, 0xe5a983ff40008d1 -408, 0xc22f3249a950a7a3 -409, 0x2d6a29c7daeebc71 -410, 0x7271a3a40d1734d5 -411, 0xb5efee15c4c99160 -412, 0x7d7c2efe86ddaf7c -413, 0x928ad499a4d85e9e -414, 0xddcef9fd941e988a -415, 0xb57daba38cc70276 -416, 0x164b60673494c318 -417, 0x2af60e897eae1cb3 -418, 0x74181074bff82452 -419, 0xe7afe1452aca2b1e -420, 0xbcee4075ee5e82f9 -421, 0xdeb277d596122a61 -422, 0xad4ec522ed5fcbca -423, 0x7ae8d97528caa837 -424, 0x96f5bcd5902002ba -425, 0x77127d87f69da6f3 -426, 0x5ebf71761fcb9e16 -427, 0x79c817f24b4acca9 -428, 0x21ad1662937a31a5 -429, 0x69e3ea5a65934f93 -430, 0x1b96b0d05b7f12f9 -431, 0xf1a68375ae6e350 -432, 0xbce495ba788c1f93 -433, 0x35281fc46a1ed6e4 -434, 0x38db141e96c2fb20 -435, 0x55d11f14ea71953f -436, 0x2c00398cffff67e8 -437, 0xb16dabaa263e92a2 -438, 0x9f21e025912c81a7 -439, 0x67865a4fd348f4e3 -440, 0x8b37f5aa1d953557 -441, 0xf972409a9231da99 -442, 0xdceb2001f7ae4f3 -443, 0x8f840ed0e94b642 -444, 0x7fb486ac9cf23354 -445, 0xbf0731eb9fb2f26f -446, 0x64f6a87eb3ad3997 -447, 0x2efaf458ab38b3af -448, 0xb0a84922ae63a985 -449, 0xa6e4ad47f5a8bed -450, 0x78ea04257180c6ea -451, 0xdab32fcc7935f61f -452, 0x81c51b7fc2702c1c -453, 0x63fb80362df72986 -454, 0xb672007383cbe435 -455, 0x3c2795c9fd489191 -456, 0x382fba5fdbbd0d1d -457, 0x5b7c398dd14c7819 -458, 0x62f0b67bf107ac7d -459, 0xe064c5f9f54201e9 -460, 0x176eba949b66b75c -461, 0x82678f7ce2748a4f -462, 0x43ea9b0b4852476e -463, 0xa7f9cf3569313631 -464, 0xc0833878700008d7 -465, 0x140e34c3d600d7f8 -466, 0xe0bfa1eba68fec03 -467, 0x4e3ae5e387d3f283 -468, 0xb799c08bac503857 -469, 0x217b43c04870ab8e -470, 0xe5e845d2fd3bcfc5 -471, 0xb335c469515e740e -472, 0xc2e3c4de7a47050c -473, 0x817b2e6751cfc87b -474, 0x59eb6cd8266ed00f -475, 0x61719b760716f1af -476, 0xc632bab8a5379b7d -477, 0x3fd80526456a4087 -478, 0xce5ef34e009a09a4 -479, 0x4da72557a2c81e6d -480, 0x45035c138cf0a07f -481, 0x2e0e2c65cf2fd15a -482, 0x5526e0f129feb1bc -483, 0xf970fd5e145bb284 -484, 0x4ca7ada616378b04 -485, 0xa8f8ccaf6fe721f3 -486, 0x1b69aca028dec51a -487, 0xc646b9db8f01cde6 -488, 0x77d8bc4b328434e9 -489, 0x5b8c1bd76c5d361 -490, 0x998199eb58998641 -491, 0xacae79454a30f83a -492, 0xd1456bd45a42152c -493, 0x1a7aee80e3e170f -494, 0x5d611e45c9446edf -495, 0x8c681b0c3daa09bf -496, 0x91affbbcf9c1e020 -497, 0x7fa4f3756b231b2a -498, 0xd2c13c5a29826810 -499, 0x993830f7fa0d51ae -500, 0x80636484c971d447 -501, 0xbe32c99bfecf878c -502, 0xf1880b2dc3e4f7e1 -503, 0x4b8fa1cc8fe57b65 -504, 0xdebafe0f90ad1b5a -505, 0x1d11dd9200f8b4b8 -506, 0x75042aaa397d9a99 -507, 0xc9ee367b527e2a09 -508, 0xdecdd82920560b63 -509, 0x64dfc74fd7f2bfe -510, 0x6ab0b966bc6fcb9b -511, 0xeb0199bf8f8a3816 -512, 0x7d603f5a0fdf7616 -513, 0xbf0177f27b06e799 -514, 0x83a5a1dd75b536c0 -515, 0xf898601d81b9d989 -516, 0x264944efd59443dd -517, 0x8e93bfdffb880aba -518, 0x697561a56735dd59 -519, 0x4377f57af134b8cd -520, 0xb84884431d02a53d -521, 0xfcf3b5efbdf216c8 -522, 0xbca95d7a8ad81290 -523, 0x3320c204d5e92a49 -524, 0x5e19b0ec2072b07e -525, 0x3ac2c56483ec19fd -526, 0xbccad8ee0f613b5d -527, 0xd351c964ab750837 -528, 0x4b46de746194625a -529, 0xbcc0a7cbaca03293 -530, 0xe35955fded6f2276 -531, 0x21aef4fb23229559 -532, 0x38c67966f1aa2296 -533, 0x2313034e68aad3a6 -534, 0xe79c154be56b5576 -535, 0xe8313f229a85e811 -536, 0x32ce60d1f50fd321 -537, 0x47713272c46d00b -538, 0x16c9165c6f10d24a -539, 0x30e39109e3275951 -540, 0x885b243b1a057c75 -541, 0xea6743a2c6a384af -542, 0x4a7270162f8329c8 -543, 0x6ecbc6ad90ade794 -544, 0x8f5e8dd3a37e94e0 -545, 0x91d2ad50e044c382 -546, 0x8b6bb0b7f6ac61db -547, 0x324b36acdaab4457 -548, 0x59ed97721860509d -549, 0xc45924166bfb2ea2 -550, 0x7cbb46bd01b1ca53 -551, 0xa41d17a5456d70f7 -552, 0x22d26eb275d0440f -553, 0x74bc05ce1bb10c2e -554, 0xd4ed1084eb81c707 -555, 0x75e936d690b1c4e9 -556, 0x94dca2299e381e0f -557, 0x7f7ae722fe2f3642 -558, 0xa72d301ef5d62837 -559, 0x1bc5cde83663d558 -560, 0x36d21d07bf182d05 -561, 0x37bf7daa7282720b -562, 0xa8f37c56dac3d1fe -563, 0x8a973e5fdca1418a -564, 0x3e4fa296626fc6eb -565, 0xb00b0d0baa75d0a8 -566, 0x2bbf9c70cdf0f0b2 -567, 0x41a8ca894eb8dae5 -568, 0xfaf4d210bddc32d9 -569, 0x1e317a055a699e1f -570, 0xc01d715dc83689b7 -571, 0x32008479d35b9d3f -572, 0x16bfea67573f8517 -573, 0xdd1418e1ca46d5a5 -574, 0xb3f330c663a20f9a -575, 0x5bd1c898e9611e78 -576, 0xf6df66445155ec97 -577, 0xc905ee3a15b83c9d -578, 0x50797ef789745157 -579, 0x1330d937a4856523 -580, 0x1001c0e08524c59d -581, 0x95b258cac211f178 -582, 0x2e61f6778ba53029 -583, 0x7e35c5afb3b67215 -584, 0x4a966942b4ce407e -585, 0x63c0fa981400623d -586, 0x2788e6c96c1826bb -587, 0x1d58691c7e579526 -588, 0x554a15ef02ac25be -589, 0x310310aa113cd278 -590, 0x932347c64ef37cfd -591, 0x3480e6062a9de198 -592, 0x3df126e84fed6094 -593, 0xeb1b2d9f2f7faab4 -594, 0x79305ff41717170e -595, 0xd16dd9d121ed79a6 -596, 0x380bf103a818f05c -597, 0x6d4ead6c20945455 -598, 0x358c06a132638a3c -599, 0x8a31c49306807c4f -600, 0x8348dcc031129070 -601, 0xadf66bfd4278f38a -602, 0xcd95d2350db96365 -603, 0x81d71916ebbefa43 -604, 0x1a0623944ba56e2c -605, 0xd1bcefa9d4e7bfd3 -606, 0xdbdefc03acdec398 -607, 0xfde9fa4617ef7ddd -608, 0xfb1e9e696648bb26 -609, 0xbf88b7580d5927e9 -610, 0x4da178dcc3a89aea -611, 0x94db8b1d876087e4 -612, 0xecfcf60f47c79854 -613, 0x9ef7d0d251da35a7 -614, 0x453f774fa09a8d10 -615, 0x8c31c57925b239fd -616, 0x8e580a43a3bff5ff -617, 0x9af792c383b7395d -618, 0x9df36c3bbcd3bf55 -619, 0x93579179eb304881 -620, 0x2502bfcd7d85a7fc -621, 0x7145b93f7f91133c -622, 0x24d943ff68afb6a2 -623, 0x7ed7322e9d26161e -624, 0x98d58e67dc211d3f -625, 0x606e6eda3d49e928 -626, 0x91ff5582f2e126bc -627, 0x32c18cbe9f068fa1 -628, 0x158fb0b7b1cbb0f -629, 0xb8efba4e9e18aa84 -630, 0x73042bf5836dae0e -631, 0xb08db72716e1547a -632, 0xa77c6291e0bc43cf -633, 0xc32a216129c65832 -634, 0x9ba8c3a6e28320c3 -635, 0x68a860b0460f4d7a -636, 0xb2d6acaad96ad2b8 -637, 0x7e99ec06a1b12969 -638, 0x4e73072434778be5 -639, 0x45c738380472436f -640, 0xacc1dc0cb1671a1d -641, 0xe2b3a601c8028dd2 -642, 0x4f9011640c0cb086 -643, 0xc6424d085d77f7d8 -644, 0x4be1e01ddc4931ab -645, 0x7cc90d0d28c27c95 -646, 0x74769cbb87388666 -647, 0xd09b8c57ab2ab780 -648, 0x9e37e07f5b413afb -649, 0xe2a4dfc86e985dd4 -650, 0xbcebd68950a62876 -651, 0xe61186758e286164 -652, 0x5be83633e0653215 -653, 0x60f5f3346f1e7a63 -654, 0x90be5b5bd3e71f3c -655, 0xd873686587fbaf23 -656, 0x56a78bdda770ffb9 -657, 0x10ac45a16daa49f3 -658, 0xb8df2a1dd5781cc2 -659, 0x7b2ed0fc9abf7e9b -660, 0xbea9373bd4d879ec -661, 0x130c660f2edbf5b -662, 0x5d3f614bbf3204f -663, 0xf328a315e9d0b932 -664, 0x7cbe580281817508 -665, 0x3b7ae752ef5de9ea -666, 0xd88a2f398c8e195d -667, 0x2db535bba7ba7358 -668, 0x762e4bf7fe733a9e -669, 0x126f629c46663b0 -670, 0x91bb6e238a5a9669 -671, 0xeea8827b9c3f2e5 -672, 0xe86738844c67fe4 -673, 0xed15fd801bb9d73f -674, 0x157517cf2091af44 -675, 0xa73e89c3d7bbf546 -676, 0xb56f610a41176770 -677, 0xeb33707d25578bf6 -678, 0x1b89e1301a46663f -679, 0x75ddc343b67f1ea7 -680, 0xe2da07af36f0448d -681, 0xb5567854075a0f6 -682, 0x6247afc791977380 -683, 0x824b342ef7df201e -684, 0xd72654ce78b69f06 -685, 0xa81b601c56d7cb9c -686, 0x721c4b5d80932ead -687, 0xc99bba379d154c88 -688, 0xb12e74cabfb084de -689, 0x182d98bf2d14d5b6 -690, 0xabd6445ca6180320 -691, 0x61bd348533393374 -692, 0x8b24cce3636ee185 -693, 0x9d9092316dbb7960 -694, 0x46b005f6176cea5d -695, 0xf07c167b80eeb610 -696, 0x589f0fa902170da5 -697, 0x96cb5756946a309c -698, 0x8a8eaeb00cc65201 -699, 0xb283c55de49423be -700, 0x67f5595dcba6dbb1 -701, 0xd9776bfbf6065931 -702, 0x6e10ca882deba83a -703, 0x6102d62102809372 -704, 0xdfeeeb5a115e8703 -705, 0x9b2320c4d818be3e -706, 0x9168936a8d01a485 -707, 0x22d3744fea4f78dc -708, 0xd40b836aa128a062 -709, 0x6c61a41c6d65f12d -710, 0x55730397d9510398 -711, 0x7dee61ad38acc6d9 -712, 0xda1912bf3de3e557 -713, 0xbfe6c019850006f3 -714, 0xe845fb0710682483 -715, 0xcdf60b34c368e5d7 -716, 0xd6e7dc0e6c3df1b1 -717, 0xfeb190e94f30088d -718, 0x4476cfcd6c9bca02 -719, 0x2977673195da3490 -720, 0x96c568ec008e2df4 -721, 0x817d59faea6f872c -722, 0x2bc4e7547b5e1381 -723, 0x25c7680da190b93f -724, 0x2dd815c2e3716198 -725, 0x85bbefcc5b6d1f6d -726, 0x5ec31ffbefc3056 -727, 0xc29d2756e13c1449 -728, 0x25b61ddfdeaa3182 -729, 0x2365b4967dc141de -730, 0xe275f2a9be026689 -731, 0xf30d1c218692aff5 -732, 0xb48fe560af269c01 -733, 0x9852c4e3dfa37603 -734, 0xe5a1de23fcc3f727 -735, 0x22fdaf11989cd063 -736, 0xe397e17c8392a847 -737, 0x7529eaad7a530992 -738, 0x5f3f32fd3dfb3320 -739, 0xfc9f4b0bfb548db9 -740, 0x1471cf6df6e134ab -741, 0x873db4bb386fc282 -742, 0xbc94c6a3780f79ba -743, 0x4bd508d98988c251 -744, 0xd1a817a879c8923 -745, 0x12a350db356edaab -746, 0xd3257e02fe6faddf -747, 0xdc09eecdbc32c2b5 -748, 0xde18b15a13a8dc6 -749, 0x753c4c30f7c35e2e -750, 0x596d3436a834d6a0 -751, 0xf3319db462c1b9c7 -752, 0xb73715d61ffdb26d -753, 0x5330c9d08115e44 -754, 0xc008a119c220cfa9 -755, 0x1f624f431b83ed39 -756, 0x6d1130e066efd112 -757, 0xfd3eff082f54c839 -758, 0x1b31da85da96c5a0 -759, 0x849e94a219c2b71b -760, 0xe1b772ea1fb31ec4 -761, 0x67db72a68f2ced9e -762, 0x99426581623fba83 -763, 0x7a6b306ed67cb4dc -764, 0xc18f42740fa62dd9 -765, 0xce90428779eeed7d -766, 0x9d1c7db3d6c3491 -767, 0xb26a8c31ab6f277b -768, 0xd31845885962e222 -769, 0x83aaeff5e24f551c -770, 0x5a73fbc17f10d179 -771, 0x5cc19c3807d48a2f -772, 0xc8e6f01324d0bf9e -773, 0x404f95c06aacef62 -774, 0xfbd0e7a11580e337 -775, 0xe35a206927cad6e4 -776, 0x79a7b1b6c80142e5 -777, 0x81a28a97d7110959 -778, 0xa22d612df01a16b -779, 0xbed9dbcaf3d82bd9 -780, 0xd3e5b22df6fcca95 -781, 0xcf4626d3739b65d2 -782, 0x3bea29bf8bcb3439 -783, 0x3e8f7021bb137dcc -784, 0x2fdd4faa44a68574 -785, 0xbd830ac3f0be7750 -786, 0x7a3e6f39eb05d5c4 -787, 0xaf229fb1db175bc5 -788, 0x7295e47bfccfb76e -789, 0x62695e99d0a25e7b -790, 0x30cd8850c858838d -791, 0xaff09ffcea838e89 -792, 0x4e9d0b99386dbf42 -793, 0x9eac0e6b0025bfb8 -794, 0x383465e3b1a6fffe -795, 0x5b6c0c45aaf4ce5d -796, 0xe5cfe9da80e4348e -797, 0xb1157c89a7d97df -798, 0x1c27501515138d47 -799, 0xd4f4a083e3d14728 -800, 0xdf69ff0a7982ab61 -801, 0xc376eafe88dc182e -802, 0xf93ab7882723b2dd -803, 0x89b8a08615a7aaf6 -804, 0x2b6cdf2f80adbdef -805, 0x2d57a9420550aa14 -806, 0xe9c1ad378ee6612d -807, 0xb48e3b9ca52568c9 -808, 0x9e67310a9b7ad7c2 -809, 0x24f74c637b7fd180 -810, 0x8956247efecfb1db -811, 0xc0a17f81a8a93104 -812, 0xaa2226f0ff5ef2b9 -813, 0x6aac7d569a285253 -814, 0x642982be37a0a179 -815, 0x1da6f2b46c5eb14b -816, 0x146eb12f17563cb7 -817, 0x490e0fe4d69695db -818, 0x50f6bb32abf00166 -819, 0xc78be77c8e1a7b3f -820, 0x130b147b093c659a -821, 0x8a28c321e9df8c19 -822, 0xbd81ea9f26c58a93 -823, 0x786c73446361dc31 -824, 0xfeb7d2a60d500f73 -825, 0x84b0e0368a98bd73 -826, 0xc944c636fb4f2ad1 -827, 0x64dff6c2acc378b -828, 0xe26a5b23e5f2bf96 -829, 0x86dee0cf9f52dedc -830, 0x13f40d996945e7cb -831, 0x9965d35d76866320 -832, 0x55169e779bc4403f -833, 0x5453e9e5d6399943 -834, 0x7ae5cce348460939 -835, 0x206be2007941abff -836, 0x59a1fc9441a2c060 -837, 0xd65e845fdc736883 -838, 0x2d9411da47dc596f -839, 0x3f8bcba4fd0f03d -840, 0x533895c1b19c6262 -841, 0x9cc38eac5006493 -842, 0x2244a1f903232422 -843, 0x8c7eba4b9893e04f -844, 0x8b669e0537581368 -845, 0x48aa4ce1b62dea35 -846, 0x98a789136697266f -847, 0xf087571d08796c39 -848, 0xeff986fba7345e0f -849, 0xd0d667be7bb85237 -850, 0xe83dbf0bc699feb1 -851, 0x8501ff412116d9ae -852, 0x4d2c06d690a13e80 -853, 0xf64b077cba13b5d0 -854, 0xb166fee2ada390fa -855, 0x3bc475043c332873 -856, 0xe21b6d7da7e9ee13 -857, 0xac6c3264958b1f6b -858, 0x701c1df185e6fddd -859, 0xaf7e8501f7445559 -860, 0xe34e79719b3c2367 -861, 0xa75d03f5b049c044 -862, 0x7b1fed41fbb62155 -863, 0xdc98215140275e6a -864, 0xb593660fe8bf00df -865, 0x499f416dfea8a062 -866, 0x2463b217bffaf042 -867, 0xde955f615e68a961 -868, 0x9db7cab1b500249 -869, 0xc4e0c255193f8d3c -870, 0x3a220f4068fe8189 -871, 0x310f311d1151affd -872, 0x9d2723448ff8a1bc -873, 0x219c5f555182f8ad -874, 0xcc6a54b756154997 -875, 0xa9894b81e72d03b4 -876, 0x1c489f42758b4008 -877, 0xc57737e1fff628da -878, 0x752e08a04dbb3654 -879, 0x397ef980659aeefe -880, 0x6da11abffcbf51df -881, 0xb28f6931d8425ccc -882, 0xb2589acc6764a5a4 -883, 0x6e7caeb3edf4c9ae -884, 0x3333bef1c33d3648 -885, 0x50b975012e7f0d58 -886, 0x4c24195a5576d9e5 -887, 0x5fb697e515523d4c -888, 0x4c25e6146105725c -889, 0xcade882dd4674db0 -890, 0xe0f1cba246c94df6 -891, 0xc7ccf728811bf9a2 -892, 0xce2b631b55492ed6 -893, 0x9ca2e1c4fd5080d1 -894, 0x5c99b44ca03cba57 -895, 0xc12a90a937b45e7b -896, 0xd97f8d5d4c44db88 -897, 0x54077ccf8ba0193b -898, 0xe1ce544f328b8d8d -899, 0x8a322880b5237d01 -900, 0x286a178d86ff3d49 -901, 0x211a8e5021074880 -902, 0x3be20d7210e4a91 -903, 0xb7c35a62c4f646dc -904, 0x2b409ad4e03b7290 -905, 0xac3087c5382e7e58 -906, 0xa3748972b982ce4a -907, 0xb340ca0dcdd4fc46 -908, 0x92a567cc37525316 -909, 0x32ab0e108dd31e1a -910, 0x9cc564c8306fe4d4 -911, 0x2f30238d788e4aa4 -912, 0x5d7b2d5a1cfb3ca6 -913, 0x3d7c7cfb5c3dac2a -914, 0x68a2fcc7c90bc67c -915, 0x93c931b07c7bcaaa -916, 0xb07e858c5f6804fa -917, 0xf34487568770d540 -918, 0x92d0c14ac66fc693 -919, 0x1df3edf3172dbe1f -920, 0x99dd6452e5beb2a3 -921, 0xe38aa3644a74fde1 -922, 0xc049af84d1206652 -923, 0x45ac2398eaf40225 -924, 0xd12607b558ef0006 -925, 0x1e7381c46a70f619 -926, 0xdb7c30532160e472 -927, 0x73ef892949f375f6 -928, 0x19ffd06c4ab2173f -929, 0x5d36078951fde0ab -930, 0xa1dd5b24e3e82ebe -931, 0xa007a426d0f94cb -932, 0x927ab34a8d844365 -933, 0x8a3e93aae579f9c9 -934, 0xfab14d979a048f4f -935, 0x91a360f46855dcf2 -936, 0x76466996b49f4705 -937, 0x12d4f323c1a88644 -938, 0x5505395519967856 -939, 0xfa64fc82da5d6486 -940, 0x1bd1dc97bd219e89 -941, 0xaf41e0011c68d69c -942, 0xf1851e78d15d95a0 -943, 0xc00178a6f4449839 -944, 0xf74517746fee73d0 -945, 0x14e21fb6693e2dd5 -946, 0x30fe5c4d988342c4 -947, 0x9981d1554e52001c -948, 0x164e36540569db94 -949, 0x711c12fa1f32de8d -950, 0xe43201111f3e1990 -951, 0xd3f5395b84e4d93d -952, 0x40319e5870e18ea -953, 0x7a45fee8655d707f -954, 0x3610639f0564fd3a -955, 0xac97da399634ec25 -956, 0x5cc8615a764d8cee -957, 0x82463c24e8b3e5a1 -958, 0x3af60e152b97a91d -959, 0xefcaa0964723b3ff -960, 0xd5979b8da2b0875b -961, 0xd718909a9cfd5aef -962, 0x985995c251b18b56 -963, 0x2c7c126f9a0eabe2 -964, 0xb4ebcd9ab305d7e1 -965, 0x28fd69e0a7bb4846 -966, 0x2af7b43ea9164e56 -967, 0x9f72bdc5fe1ec72b -968, 0xf1a884206bb1559c -969, 0x5caea3abafc00777 -970, 0x2e5901b394a13b22 -971, 0xdd4281ace415ef7b -972, 0x1e421afa2c23a9ee -973, 0x64942a448f2a61f7 -974, 0x32475573b78af5e0 -975, 0x348602ab7221 -976, 0xda1cf48b3c778ac9 -977, 0x202730803de016c -978, 0x7f07500a97253303 -979, 0x912df89c5702453b -980, 0x7a483f96506f7e2e -981, 0xb0331694db0d3557 -982, 0x244b924fd11c49ac -983, 0x5d1097770b6f4740 -984, 0xb227f8cb5f5ae045 -985, 0xc66e1b71c02fb86a -986, 0xe08b547dbee66315 -987, 0x4e7e2986cce8bbff -988, 0x96f7bfe16d59aa73 -989, 0x82f97f418750013e -990, 0x1329bc356103905b -991, 0x82183603b406408d -992, 0x3818107e93ac9397 -993, 0x3b477193a3f61669 -994, 0xf4e443832f9e886f -995, 0x466becfe7debd82c -996, 0xe32937bc5daaf7c7 -997, 0x90bd4530b0e0574a -998, 0xb78055db48f56255 -999, 0x78829570b3775e14 +0, 0x399e5b222b82fa9 +1, 0x41fd08c1f00f3bc5 +2, 0x78b8824162ee4d04 +3, 0x176747919e02739d +4, 0xfaa88f002a8d3596 +5, 0x418eb6f592e6c227 +6, 0xef83020b8344dd45 +7, 0x30a74a1a6eaa064b +8, 0x93d43bf97a490c3 +9, 0xe4ba28b442194cc +10, 0xc829083a168a8656 +11, 0x73f45d50f8e22849 +12, 0xf912db57352824cc +13, 0xf524216927b12ada +14, 0x22b7697473b1dfda +15, 0x311e2a936414b39f +16, 0xb905abfdcc425be6 +17, 0x4b14630d031eac9c +18, 0x1cf0c4ae01222bc8 +19, 0xa6c33efc6e82ef3 +20, 0x43b3576937ba0948 +21, 0x1e483d17cdde108a +22, 0x6722784cac11ac88 +23, 0xee87569a48fc45d7 +24, 0xb821dcbe74d18661 +25, 0xa5d1876ef3da1a81 +26, 0xe4121c2af72a483 +27, 0x2d747e355a52cf43 +28, 0x609059957bd03725 +29, 0xc3327244b49e16c5 +30, 0xb5ae6cb000dde769 +31, 0x774315003209017 +32, 0xa2013397ba8db605 +33, 0x73b228945dbcd957 +34, 0x801af7190375d3c0 +35, 0xae6dca29f24c9c67 +36, 0xd1cc0bcb1ca26249 +37, 0x1defa62a5bd853be +38, 0x67c2f5557fa89462 +39, 0xf1729b58122fab02 +40, 0xb67eb71949ec6c42 +41, 0x5456366ec1f8f7d7 +42, 0x44492b32eb7966f5 +43, 0xa801804159f175f1 +44, 0x5a416f23cac70d84 +45, 0x186f55293302303d +46, 0x7339d5d7b6a43639 +47, 0xfc6df38d6a566121 +48, 0xed2fe018f150b39e +49, 0x508e0b04a781fa1b +50, 0x8bee9d50f32eaf50 +51, 0x9870015d37e63cc +52, 0x93c6b12309c14f2d +53, 0xb571cf798abe93ff +54, 0x85c35a297a88ae6e +55, 0x9b1b79afe497a2ae +56, 0x1ca02e5b95d96b8d +57, 0x5bb695a666c0a94a +58, 0x4e3caf9bbab0b208 +59, 0x44a44be1a89f2dc1 +60, 0x4ff37c33445758d1 +61, 0xd0e02875322f35da +62, 0xfd449a91fb92646b +63, 0xbe0b49096b95db4d +64, 0xffa3647cad13ef5d +65, 0x75c127a61acd10c8 +66, 0xd65f697756f5f98e +67, 0x3ced84be93d94434 +68, 0x4da3095c2fc46d68 +69, 0x67564e2a771ee9ac +70, 0x36944775180644a9 +71, 0xf458db1c177cdb60 +72, 0x5b58406dcd034c8 +73, 0x793301a3fdab2a73 +74, 0x1c2a1a16d6db6128 +75, 0xc2dacd4ddddbe56c +76, 0x2e7d15be2301a111 +77, 0xd4f4a6341b3bcd18 +78, 0x3622996bbe6a9e3b +79, 0xaf29aa9a7d6d47da +80, 0x6d7dbb74a4cd68ae +81, 0xc260a17e0f39f841 +82, 0xdee0170f2af66f0d +83, 0xf84ae780d7b5a06e +84, 0x8326247b73f43c3a +85, 0xd44eef44b4f98b84 +86, 0x3d10aee62ec895e3 +87, 0x4f23fef01bf703b3 +88, 0xf8e50aa57d888df6 +89, 0x7da67411e3bef261 +90, 0x1d00f2769b2f96d7 +91, 0x7ef9a15b7444b84e +92, 0xcfa16436cc2b7e21 +93, 0x29ab8cfac00460ff +94, 0x23613de8608b0e70 +95, 0xb1aa0980625798a8 +96, 0xb9256fd29db7df99 +97, 0xdacf311bf3e7fa18 +98, 0xa013c8f9fada20d8 +99, 0xaf5fd4fe8230fe3e +100, 0xd3d59ca55102bc5c +101, 0x9d08e2aa5242767f +102, 0x40278fe131e83b53 +103, 0x56397d03c7c14c98 +104, 0xe874b77b119359b3 +105, 0x926a1ba4304ab19f +106, 0x1e115d5aa695a91d +107, 0xc6a459df441f2fe3 +108, 0x2ca842bc1b0b3c6a +109, 0x24c804cf8e5eed16 +110, 0x7ca00fc4a4c3ebd3 +111, 0x546af7cecc4a4ba6 +112, 0x8faae1fa18fd6e3 +113, 0x40420b0089641a6a +114, 0x88175a35d9abcb83 +115, 0xf7d746d1b8b1357c +116, 0x7dae771a651be970 +117, 0x2f6485247ee4df84 +118, 0x6883702fab2d8ec5 +119, 0xeb7eea829a67f9a6 +120, 0x60d5880b485562ed +121, 0x7d4ca3d7e41a4e7e +122, 0xbb7fef961ab8de18 +123, 0x3b92452fb810c164 +124, 0x5f4b4755348b338 +125, 0xca45a715a7539806 +126, 0xc33efd9da5399dd +127, 0x593d665a51d4aedd +128, 0x75d6b8636563036b +129, 0x7b57caa55e262082 +130, 0x4ede7427969e0dd5 +131, 0xc3f19b6f78ea00b +132, 0xeea7bab9be2181ea +133, 0x652c45fe9c420c04 +134, 0x14ba9e3d175670ee +135, 0xd2ad156ba6490474 +136, 0x4d65ae41065f614 +137, 0x6ff911c8afa28eb1 +138, 0xedc2b33588f3cb68 +139, 0x437c8bc324666a2f +140, 0x828cee25457a3f0 +141, 0x530c986091f31b9b +142, 0x2f34671e8326ade7 +143, 0x4f686a8f4d77f6da +144, 0xa4c1987083498895 +145, 0xbce5a88b672b0fb1 +146, 0x8476115a9e6a00cc +147, 0x16de18a55dd2c238 +148, 0xdf38cf4c416232bc +149, 0x2cb837924e7559f3 +150, 0xfad4727484e982ed +151, 0x32a55d4b7801e4f +152, 0x8b9ef96804bd10a5 +153, 0xa1fd422c9b5cf2a9 +154, 0xf46ddb122eb7e442 +155, 0x6e3842547afa3b33 +156, 0x863dee1c34afe5c4 +157, 0x6a43a1935b6db171 +158, 0x1060a5c2f8145821 +159, 0xf783ec9ed34c4607 +160, 0x1da4a86bf5f8c0b0 +161, 0x4c7714041ba12af8 +162, 0x580da7010be2f192 +163, 0xad682fe795a7ea7a +164, 0x6687b6cb88a9ed2c +165, 0x3c8d4b175517cd18 +166, 0xe9247c3a524a6b6b +167, 0x337ca9cfaa02658 +168, 0xed95399481c6feec +169, 0x58726a088e606062 +170, 0xfe7588a5b4ee342a +171, 0xee434c7ed146fdee +172, 0xe2ade8b60fdc4ba5 +173, 0xd57e4c155de4eaab +174, 0xdefeae12de1137cb +175, 0xb7a276a241316ac1 +176, 0xeb838b1b1df4ca15 +177, 0x6f78965edea32f6f +178, 0x18bebd264d7a5d53 +179, 0x3641c691d77005ec +180, 0xbe70ed7efea8c24c +181, 0x33047fa8d03ca560 +182, 0x3bed0d2221ff0f87 +183, 0x23083a6ffbcf38a2 +184, 0xc23eb827073d3fa5 +185, 0xc873bb3415e9fb9b +186, 0xa4645179e54147fe +187, 0x2c72fb443f66e207 +188, 0x98084915dd89d8f4 +189, 0x88baa2de12c99037 +190, 0x85c74ab238cb795f +191, 0xe122186469ea3a26 +192, 0x4c3bba99b3249292 +193, 0x85d6845d9a015234 +194, 0x147ddd69c13e6a31 +195, 0x255f4d678c9a570b +196, 0x2d7c0c410bf962b4 +197, 0x58eb7649e0aa16ca +198, 0x9d240bf662fe0783 +199, 0x5f74f6fa32d293cc +200, 0x4928e52f0f79d9b9 +201, 0xe61c2b87146b706d +202, 0xcfcd90d100cf5431 +203, 0xf15ea8138e6aa178 +204, 0x6ab8287024f9a819 +205, 0xed8942593db74e01 +206, 0xefc00e4ec2ae36dd +207, 0xc21429fb9387f334 +208, 0xf9a3389e285a9bce +209, 0xacdee8c43aae49b3 +210, 0xefc382f02ad55c25 +211, 0x1153b50e8d406b72 +212, 0xb00d39ebcc2f89d8 +213, 0xde62f0b9831c8850 +214, 0xc076994662eef6c7 +215, 0x66f08f4752f1e3ef +216, 0x283b90619796249a +217, 0x4e4869bc4227499e +218, 0xb45ad78a49efd7ed +219, 0xffe19aa77abf5f4b +220, 0xfce11a0daf913aef +221, 0x7e4e64450d5cdceb +222, 0xe9621997cfd62762 +223, 0x4d2c9e156868081 +224, 0x4e2d96eb7cc9a08 +225, 0xda74849bba6e3bd3 +226, 0x6f4621da935e7fde +227, 0xb94b914aa0497259 +228, 0xd50d03e8b8db1563 +229, 0x1a45c1ce5dca422e +230, 0xc8d30d33276f843f +231, 0xb57245774e4176b4 +232, 0x8d36342c05abbbb1 +233, 0x3591ad893ecf9e78 +234, 0x62f4717239ee0ac8 +235, 0x9b71148a1a1d4200 +236, 0x65f8e0f56dd94463 +237, 0x453b1fcfd4fac8c2 +238, 0x4c25e48e54a55865 +239, 0xa866baa05112ace2 +240, 0x7741d3c69c6e79c5 +241, 0x7deb375e8f4f7a8a +242, 0xc242087ede42abd8 +243, 0x2fa9d1d488750c4b +244, 0xe8940137a935d3d3 +245, 0x1dab4918ca24b2f2 +246, 0xe2368c782168fe3e +247, 0x6e8b2d1d73695909 +248, 0x70455ebea268b33e +249, 0x656a919202e28da1 +250, 0x5a5a8935647da999 +251, 0x428c6f77e118c13c +252, 0xa87aee2b675bb083 +253, 0x3873a6412b239969 +254, 0x5f72c1e91cb8a2ee +255, 0xa25af80a1beb5679 +256, 0x1af65d27c7b4abc3 +257, 0x133437060670e067 +258, 0xb1990fa39a97d32e +259, 0x724adc89ae10ed17 +260, 0x3f682a3f2363a240 +261, 0x29198f8dbd343499 +262, 0xdfaeeaa42bc51105 +263, 0x5baff3901b9480c2 +264, 0x3f760a67043e77f5 +265, 0x610fa7aa355a43ba +266, 0x394856ac09c4f7a7 +267, 0x1d9229d058aee82e +268, 0x19c674804c41aeec +269, 0x74cf12372012f4aa +270, 0xa5d89b353fa2f6ca +271, 0x697e4f672ac363dd +272, 0xde6f55ba73df5af9 +273, 0x679cf537510bd68f +274, 0x3dc916114ae9ef7e +275, 0xd7e31a66ec2ee7ba +276, 0xc21bebb968728495 +277, 0xc5e0781414e2adfd +278, 0x71147b5412ddd4bd +279, 0x3b864b410625cca9 +280, 0x433d67c0036cdc6 +281, 0x48083afa0ae20b1b +282, 0x2d80beecd64ac4e8 +283, 0x2a753c27c3a3ee3e +284, 0xb2c5e6afd1fe051a +285, 0xea677930cd66c46b +286, 0x4c3960932f92810a +287, 0xf1b367a9e527eaba +288, 0xb7d92a8a9a69a98e +289, 0x9f9ad3210bd6b453 +290, 0x817f2889db2dcbd8 +291, 0x4270a665ac15813c +292, 0x90b85353bd2be4dd +293, 0x10c0460f7b2d68d +294, 0x11cef32b94f947f5 +295, 0x3cf29ed8e7d477e8 +296, 0x793aaa9bd50599ef +297, 0xbac15d1190014aad +298, 0x987944ae80b5cb13 +299, 0x460aa51f8d57c484 +300, 0xc77df0385f97c2d3 +301, 0x92e743b7293a3822 +302, 0xbc3458bcfbcbb8c0 +303, 0xe277bcf3d04b4ed7 +304, 0xa537ae5cf1c9a31c +305, 0x95eb00d30bd8cfb2 +306, 0x6376361c24e4f2dd +307, 0x374477fe87b9ea8e +308, 0x8210f1a9a039902e +309, 0xe7628f7031321f68 +310, 0x8b8e9c0888fc1d3d +311, 0x306be461fdc9e0ed +312, 0x510009372f9b56f5 +313, 0xa6e6fa486b7a027a +314, 0x9d3f002025203b5a +315, 0x7a46e0e81ecbef86 +316, 0x41e280c611d04df0 +317, 0xedcec10418a99e8a +318, 0x5c27b6327e0b9dbd +319, 0xa81ed2035b509f07 +320, 0x3581e855983a4cc4 +321, 0x4744594b25e9809d +322, 0xc737ac7c27fbd0ed +323, 0x1b523a307045433a +324, 0x8b4ce9171076f1d9 +325, 0x2db02d817cd5eec0 +326, 0x24a1f1229af50288 +327, 0x5550c0dcf583ff16 +328, 0x3587baaa122ec422 +329, 0xf9d3dc894229e510 +330, 0xf3100430d5cf8e87 +331, 0xc31af79862f8e2fb +332, 0xd20582063b9f3537 +333, 0xac5e90ac95fcc7ad +334, 0x107c4c704d5109d4 +335, 0xebc8628906dbfd70 +336, 0x215242776da8c531 +337, 0xa98002f1dcf08b51 +338, 0xbc3bdc07f3b09718 +339, 0x238677062495b512 +340, 0x53b4796f2a3c49e8 +341, 0x6424286467e22f0e +342, 0x14d0952a11a71bac +343, 0x2f97098149b82514 +344, 0x3777f2fdc425ad2 +345, 0xa32f2382938876d4 +346, 0xda8a39a021f20ae3 +347, 0x364361ef0a6ac32c +348, 0x4413eede008ff05a +349, 0x8dda8ace851aa327 +350, 0x4303cabbdcecd1ee +351, 0x2e69f06d74aa549f +352, 0x4797079cd4d9275c +353, 0xc7b1890917e98307 +354, 0x34031b0e822a4b4c +355, 0xfc79f76b566303ea +356, 0x77014adbe255a930 +357, 0xab6c43dd162f3be5 +358, 0xa430041f3463f6b9 +359, 0x5c191a32ada3f84a +360, 0xe8674a0781645a31 +361, 0x3a11cb667b8d0916 +362, 0xaedc73e80c39fd8a +363, 0xfde12c1b42328765 +364, 0x97abb7dcccdc1a0b +365, 0x52475c14d2167bc8 +366, 0x540e8811196d5aff +367, 0xa867e4ccdb2b4b77 +368, 0x2be04af61e5bcfb9 +369, 0x81b645102bfc5dfd +370, 0x96a52c9a66c6450f +371, 0x632ec2d136889234 +372, 0x4ed530c0b36a6c25 +373, 0x6f4851225546b75 +374, 0x2c065d6ba46a1144 +375, 0xf8a3613ff416551d +376, 0xb5f0fd60e9c971a9 +377, 0x339011a03bb4be65 +378, 0x9439f72b6995ded6 +379, 0xc1b03f3ef3b2292d +380, 0xad12fd221daab3ae +381, 0xf615b770f2cf996f +382, 0x269d0fdcb764172 +383, 0x67837025e8039256 +384, 0x6402831fc823fafa +385, 0x22854146a4abb964 +386, 0x7b5ad9b5a1bad7a8 +387, 0x67170e7beb6ac935 +388, 0xfc2d1e8e24adfaaa +389, 0x7ded4395345ff40d +390, 0x418981760a80dd07 +391, 0xc03bef38022c1d2 +392, 0x3a11850b26eade29 +393, 0xaa56d02c7175c5f4 +394, 0xd83b7917b9bfbff5 +395, 0x3c1df2f8fa6fced3 +396, 0xf3d6e2999c0bb760 +397, 0xc66d683a59a950e3 +398, 0x8e3972a9d73ffabf +399, 0x97720a0443edffd9 +400, 0xa85f5d2fe198444a +401, 0xfc5f0458e1b0de5e +402, 0xe3973f03df632b87 +403, 0xe151073c84c594b3 +404, 0x68eb4e22e7ff8ecf +405, 0x274f36eaed7cae27 +406, 0x3b87b1eb60896b13 +407, 0xbe0b2f831442d70a +408, 0x2782ed7a48a1b328 +409, 0xb3619d890310f704 +410, 0xb03926b11b55921a +411, 0xdb46fc44aa6a0ce4 +412, 0x4b063e2ef2e9453a +413, 0xe1584f1aeec60fb5 +414, 0x7092bd6a879c5a49 +415, 0xb84e1e7c7d52b0e6 +416, 0x29d09ca48db64dfb +417, 0x8f6c4a402066e905 +418, 0x77390795eabc36b +419, 0xcc2dc2e4141cc69f +420, 0x2727f83beb9e3c7c +421, 0x1b29868619331de0 +422, 0xd38c571e192c246f +423, 0x535327479fe37b6f +424, 0xaff9ce5758617eb3 +425, 0x5658539e9288a4e4 +426, 0x8df91d87126c4c6d +427, 0xe931cf8fdba6e255 +428, 0x815dfdf25fbee9e8 +429, 0x5c61f4c7cba91697 +430, 0xdd5f5512fe2313a1 +431, 0x499dd918a92a53cd +432, 0xa7e969d007c97dfd +433, 0xb8d39c6fc81ac0bb +434, 0x1d646983def5746c +435, 0x44d4b3b17432a60c +436, 0x65664232a14db1e3 +437, 0xda8fae6433e7500b +438, 0xbe51b94ff2a3fe94 +439, 0xe9b1bd9a9098ef9f +440, 0xfe47d54176297ef5 +441, 0xb8ab99bc03bb7135 +442, 0xcfad97f608565b38 +443, 0xf05da71f6760d9c1 +444, 0xef8da40a7c70e7b +445, 0xe0465d58dbd5d138 +446, 0xb54a2d70eb1a938 +447, 0xfdd50c905958f2d8 +448, 0x3c41933c90a57d43 +449, 0x678f6d894c6ad0bb +450, 0x403e8f4582274e8 +451, 0x5cbbe975668df6b0 +452, 0x297e6520a7902f03 +453, 0x8f6dded33cd1efd7 +454, 0x8e903c97be8d783b +455, 0x10bd015577e30f77 +456, 0x3fcd69d1c36eab0c +457, 0xb45989f3ca198d3 +458, 0x507655ce02b491a9 +459, 0xa92cf99bb78602ce +460, 0xebfb82055fbc2f0f +461, 0x3334256279289b7a +462, 0xc19d2a0f740ee0ac +463, 0x8bb070dea3934905 +464, 0xa4ab57d3a8d1b3eb +465, 0xfee1b09bcacf7ff4 +466, 0xccc7fb41ceec41fa +467, 0xd4da49094eb5a74d +468, 0xed5c693770af02ed +469, 0x369dabc9bbfaa8e4 +470, 0x7eab9f360d054199 +471, 0xe36dbebf5ee94076 +472, 0xd30840e499b23d7 +473, 0x8678e6cb545015ff +474, 0x3a47932ca0b336e +475, 0xeb7c742b6e93d6fe +476, 0x1404ea51fe5a62a9 +477, 0xa72cd49db978e288 +478, 0xfd7bada020173dcf +479, 0xc9e74fc7abe50054 +480, 0x93197847bb66808d +481, 0x25fd5f053dce5698 +482, 0xe198a9b18cc21f4 +483, 0x5cc27b1689452d5d +484, 0x8b3657af955a98dc +485, 0xc17f7584f54aa1c0 +486, 0xe821b088246b1427 +487, 0x32b5a9f6b45b6fa0 +488, 0x2aef7c315c2bae0c +489, 0xe1af8129846b705a +490, 0x4123b4c091b34614 +491, 0x6999d61ec341c073 +492, 0x14b9a8fcf86831ea +493, 0xfd4cff6548f46c9f +494, 0x350c3b7e6cc8d7d6 +495, 0x202a5047fecafcd5 +496, 0xa82509fe496bb57d +497, 0x835e4b2608b575fe +498, 0xf3abe3da919f54ec +499, 0x8705a21e2c9b8796 +500, 0xfd02d1427005c314 +501, 0xa38458faa637f49b +502, 0x61622f2360e7622a +503, 0xe89335a773c2963b +504, 0x481264b659b0e0d0 +505, 0x1e82ae94ebf62f15 +506, 0x8ea7812de49209d4 +507, 0xff963d764680584 +508, 0x418a68bef717f4af +509, 0x581f0e7621a8ab91 +510, 0x840337e9a0ec4150 +511, 0x951ef61b344be505 +512, 0xc8b1b899feb61ec2 +513, 0x8b78ca13c56f6ed9 +514, 0x3d2fd793715a946f +515, 0xf1c04fabcd0f4084 +516, 0x92b602614a9a9fcc +517, 0x7991bd7a94a65be7 +518, 0x5dead10b06cad2d7 +519, 0xda7719b33f722f06 +520, 0x9d87a722b7bff71e +521, 0xb038e479071409e9 +522, 0xf4e8bbec48054775 +523, 0x4fec2cd7a28a88ea +524, 0x839e28526aad3e56 +525, 0xd37ec57852a98bf0 +526, 0xdef2cbbe00f3a02d +527, 0x1aecfe01a9e4d801 +528, 0x59018d3c8beaf067 +529, 0x892753e6ac8bf3cd +530, 0xefdd3437023d2d1c +531, 0x447bfbd148c8cb88 +532, 0x282380221bd442b8 +533, 0xfce8658d1347384a +534, 0x60b211a7ec6bfa8 +535, 0xd21729cfcc692974 +536, 0x162087ecd5038a47 +537, 0x2b17000c4bce39d2 +538, 0x3a1f75ff6adcdce0 +539, 0x721a411d312f1a2c +540, 0x9c13b6133f66934d +541, 0xaa975d14978980e5 +542, 0x9403dbd4754203fa +543, 0x588c15762fdd643 +544, 0xdd1290f8d0ada73a +545, 0xd9b77380936103f4 +546, 0xb2e2047a356eb829 +547, 0x7019e5e7f76f7a47 +548, 0x3c29a461f62b001d +549, 0xa07dc6cfab59c116 +550, 0x9b97e278433f8eb +551, 0x6affc714e7236588 +552, 0x36170aeb32911a73 +553, 0x4a665104d364a789 +554, 0x4be01464ec276c9c +555, 0x71bb10271a8b4ecf +556, 0xbf62e1d068bc018 +557, 0xc9ada5db2cbbb413 +558, 0x2bded75e726650e5 +559, 0x33d5a7af2f34385d +560, 0x8179c46661d85657 +561, 0x324ebcfd29267359 +562, 0xac4c9311dc9f9110 +563, 0xc14bb6a52f9f9c0 +564, 0xc430abe15e7fb9db +565, 0xf1cce5c14df91c38 +566, 0x651e3efa2c0750d3 +567, 0x38a33604a8be5c75 +568, 0x7aaf77fe7ff56a49 +569, 0xc0d1cc56bbf27706 +570, 0x887aa47324e156c6 +571, 0x12547c004b085e8d +572, 0xd86a8d6fbbbfd011 +573, 0x57c860188c92d7b4 +574, 0xcd5d3843d361b8ca +575, 0x8f586ef05a9cb3ef +576, 0x174456e1ba6267d5 +577, 0xf5dc302c62fe583c +578, 0xa349442fabcdb71 +579, 0xe5123c1a8b6fd08e +580, 0x80681552aa318593 +581, 0xb295396deaef1e31 +582, 0xabb626e0b900e32b +583, 0xf024db8d3f19c15e +584, 0x1d04bb9548e2fb6c +585, 0xd8ed2b2214936c2b +586, 0x618ca1e430a52bc9 +587, 0xccbca44a6088136b +588, 0xd0481855c8b9ccbe +589, 0x3c92a2fade28bdf7 +590, 0x855e9fefc38c0816 +591, 0x1269bbfe55a7b27c +592, 0x1d6c853d83726d43 +593, 0xc8655511cc7fcafc +594, 0x301503eb125a9b0e +595, 0xb3108e4532016b11 +596, 0xbb7ab6245da9cb3d +597, 0x18004c49116d85eb +598, 0x3480849c20f61129 +599, 0xe28f45157463937b +600, 0x8e85e61060f2ce1 +601, 0x1673da4ec589ba5e +602, 0x74b9a6bd1b194712 +603, 0xed39e147fa8b7601 +604, 0x28ce54019102ca77 +605, 0x42e0347f6d7a2f30 +606, 0xb6a908d1c4814731 +607, 0x16c3435e4e9a126d +608, 0x8880190514c1ad54 +609, 0xfffd86229a6f773c +610, 0x4f2420cdb0aa1a93 +611, 0xf8e1acb4120fc1fa +612, 0x63a8c553ab36a2f2 +613, 0x86b88cf3c0a6a190 +614, 0x44d8b2801622c792 +615, 0xf6eae14e93082ff1 +616, 0xd9ed4f5d1b8fac61 +617, 0x1808ce17f4e1f70 +618, 0x446e83ea336f262f +619, 0xc7c802b04c0917b7 +620, 0x626f45fd64968b73 +621, 0x9ffa540edc9b2c5c +622, 0xa96a1e219e486af8 +623, 0x2bb8963884e887a1 +624, 0xba7f68a5d029e3c4 +625, 0xefc45f44392d9ca0 +626, 0x98d77762503c5eab +627, 0xd89bcf62f2da627c +628, 0xa3cab8347f833151 +629, 0xa095b7595907d5c7 +630, 0x3b3041274286181 +631, 0xb518db8919eb71fa +632, 0x187036c14fdc9a36 +633, 0xd06e28301e696f5d +634, 0xdbc71184e0c56492 +635, 0xfe51e9cae6125bfd +636, 0x3b12d17cd014df24 +637, 0x3b95e4e2c986ac1a +638, 0x29c1cce59fb2dea2 +639, 0x58c05793182a49d6 +640, 0xc016477e330d8c00 +641, 0x79ef335133ada5d +642, 0x168e2cad941203f3 +643, 0xf99d0f219d702ef0 +644, 0x655628068f8f135b +645, 0xdcdea51910ae3f92 +646, 0x8e4505039c567892 +647, 0x91a9ec7e947c89ae +648, 0x8717172530f93949 +649, 0x1c80aba9a440171a +650, 0x9c8f83f6ebe7441e +651, 0x6c05e1efea4aa7f9 +652, 0x10af696b777c01b +653, 0x5892e9d9a92fc309 +654, 0xd2ba7da71e709432 +655, 0x46378c7c3269a466 +656, 0x942c63dfe18e772c +657, 0x6245cf02ef2476f +658, 0x6f265b2759ea2aea +659, 0x5aa757f17d17f4a6 +660, 0x1ad6a3c44fa09be6 +661, 0xe861af14e7015fb8 +662, 0x86be2e7db388c77 +663, 0x5c7bba32b519e9a0 +664, 0x3feb314850c4437b +665, 0x97955add60cfb45b +666, 0xfdb536230a540bdc +667, 0xdac9d7bf6e58512e +668, 0x4894c00e474e8120 +669, 0xa1918a37739da366 +670, 0xa8097f2096532807 +671, 0x592afe50e6c5e643 +672, 0xd69050ee6dcb33dc +673, 0xa6956b262dd3c561 +674, 0x1a55c815555e63f7 +675, 0x2ec7fd37516de2bb +676, 0x8ec251d9c70e76ba +677, 0x9b76e4abafd2689 +678, 0x9ce3f5c751a57df1 +679, 0x915c4818bf287bc7 +680, 0x2293a0d1fe07c735 +681, 0x7627dcd5d5a66d3d +682, 0xb5e4f92cc49c7138 +683, 0x6fc51298731d268c +684, 0xd19800aa95441f87 +685, 0x14f70f31162fa115 +686, 0x41a3da3752936f59 +687, 0xbec0652be95652ee +688, 0x7aa4bdb1020a290f +689, 0x4382d0d9bee899ef +690, 0xe6d988ae4277d6ff +691, 0xe618088ccb2a32d1 +692, 0x411669dfaa899e90 +693, 0x234e2bf4ba76d9f +694, 0xe109fe4cb7828687 +695, 0x1fb96b5022b0b360 +696, 0x6b24ad76c061a716 +697, 0x7e1781d4d7ecee15 +698, 0xf20c2dbe82ba38ba +699, 0xeda8e8ae1d943655 +700, 0xa58d196e2a77eaec +701, 0x44564765a5995a0b +702, 0x11902fe871ecae21 +703, 0x2ea60279900e675d +704, 0x38427227c18a9a96 +705, 0xe0af01490a1b1b48 +706, 0x826f91997e057824 +707, 0x1e57308e6e50451 +708, 0xb42d469bbbfdc350 +709, 0xb9734cff1109c49b +710, 0x98967559bb9d364f +711, 0xd6be360041907c12 +712, 0xa86a1279122a1e21 +713, 0x26f99a8527bfc698 +714, 0xfa8b85758f28f5d6 +715, 0xe3057429940806ae +716, 0x4bee2d7e84f93b2b +717, 0x948350a76ea506f4 +718, 0xa139154488045e74 +719, 0x8893579ba5e78085 +720, 0x5f21c215c6a9e397 +721, 0x456134f3a59641dc +722, 0x92c0273f8e97a9c6 +723, 0xd2936c9c3f0c6936 +724, 0xcfa4221e752c4735 +725, 0x28cd5a7457355dca +726, 0xecdfdde23d90999f +727, 0x60631b2d494d032b +728, 0xf67289df269a827f +729, 0xcbe8011ef0f5b7ef +730, 0x20eea973c70a84f5 +731, 0xbe1fd200398557ce +732, 0xd2279ee030191bba +733, 0xf2bd4291dedaf819 +734, 0xfc6d167dbe8c402 +735, 0x39ac298da5d0044b +736, 0xceac026f5f561ce +737, 0x10a5b0bdd8ad60e6 +738, 0xdeb3c626df6d4bcb +739, 0x3c128962e77ff6ca +740, 0xc786262e9c67a0e5 +741, 0x4332855b3febcdc0 +742, 0x7bda9724d1c0e020 +743, 0x6a8c93399bc4df22 +744, 0xa9b20100ac707396 +745, 0xa11a3458502c4eb5 +746, 0xb185461c60478941 +747, 0x13131d56195b7ff6 +748, 0x8d55875ddbd4aa1c +749, 0xc09b67425f469aa5 +750, 0x39e33786cc7594c4 +751, 0x75e96db8e4b08b93 +752, 0xda01cd12a3275d1e +753, 0x2c49e7822344fab5 +754, 0x9bd5f10612514ca7 +755, 0x1c801a5c828e7332 +756, 0x29797d3f4f6c7b4c +757, 0xac992715e21e4e53 +758, 0xe40e89ee887ddb37 +759, 0x15189a2b265a783b +760, 0xa854159a52af5c5 +761, 0xb9d8a5a81c12bead +762, 0x3240cdc9d59e2a58 +763, 0x1d0b872234cf8e23 +764, 0xc01224cf6ce12cff +765, 0x2601e9f3905c8663 +766, 0xd4ecf9890168d6b4 +767, 0xa45db796d89bfdd5 +768, 0x9f389406dad64ab4 +769, 0xa5a851adce43ffe3 +770, 0xd0962c41c26e5aa9 +771, 0x8a671679e48510a4 +772, 0xc196dc0924a6bfeb +773, 0x3ead661043b549cb +774, 0x51af4ca737d405ac +775, 0xf4425b5c62275fb6 +776, 0x71e69d1f818c10f5 +777, 0xacaf4af2d3c70162 +778, 0x2e1f1d4fd7524244 +779, 0xe54fdd8f388890e8 +780, 0xfda0d33e84eb2b83 +781, 0x53965c5e392b81da +782, 0x5c92288267263097 +783, 0xcac1b431c878c66c +784, 0x36c0e1cf417241c6 +785, 0x5cc4d9cd1a36bf2c +786, 0x32e4257bb5d3e470 +787, 0x4aecff904adb44fb +788, 0x4d91a8e0d1d60cac +789, 0xa3b478388385b038 +790, 0x48d955f24eba70be +791, 0x310e4deb07f24f68 +792, 0x8853e73b1f30a5a +793, 0x278aee45c2a65c5 +794, 0xf6932eedbd62fb0b +795, 0xafb95958c82fafad +796, 0x78e807c18616c16c +797, 0xd7abadda7488ed9f +798, 0x2dd72e2572aa2ae6 +799, 0x6ec3791982c2be09 +800, 0x6865bb314fac478f +801, 0xa14dc0ce09000d1a +802, 0xb8081ad134da10f2 +803, 0xc4ac1534aa825ef5 +804, 0xd83aeb48ae2d538f +805, 0x38052027e3074be4 +806, 0xa9833e06ef136582 +807, 0x4f02d790ec9fd78 +808, 0xec2f60bc711c5bdc +809, 0x9253b0d12268e561 +810, 0xa8ac607fdd62c206 +811, 0x895e28ebc920289f +812, 0xe2fd42b154243ac7 +813, 0xc69cac2f776eee19 +814, 0xf4d4ac11db56d0dc +815, 0xa8d37049b9f39833 +816, 0x75abbf8a196c337c +817, 0xb115bb76750d27b8 +818, 0x39426d187839154 +819, 0xd488423e7f38bf83 +820, 0xbb92e0c76ecb6a62 +821, 0x3055a018ce39f4e3 +822, 0xc93fe0e907729bfb +823, 0x65985d17c5863340 +824, 0x2088ae081b2028e1 +825, 0x6e628de873314057 +826, 0x864377cccf573f0e +827, 0xae03f4c9aa63d132 +828, 0xb1db766d6404c66d +829, 0xdce5a22414a374b +830, 0x622155b777819997 +831, 0x69fe96e620371f3c +832, 0xa9c67dbc326d94fc +833, 0x932a84ae5dd43bab +834, 0xe2301a20f6c48c3f +835, 0x795d2e79c6477300 +836, 0xd8e3e631289521e7 +837, 0xae2684979002dfd6 +838, 0xc9c2392377550f89 +839, 0xa1b0c99d508ef7ec +840, 0x593aef3c5a5272ec +841, 0xe32e511a4b7162cd +842, 0xab3b81655f5a2857 +843, 0x1b535e1a0aaf053e +844, 0x5b33f56c1b6a07e2 +845, 0x782dc8cfcac4ef36 +846, 0xb3d4f256eecfd202 +847, 0xf73a6598f58c4f7e +848, 0xd5722189524870ae +849, 0x707878de6b995fc0 +850, 0xc3eb6ba73e3d7e8a +851, 0xca75c017655b75a7 +852, 0x1b29369ea3541e5f +853, 0x352e98858bdb58a3 +854, 0x1e4412d184b6b27d +855, 0x2d375ba0304b2d17 +856, 0x56c30fce69a5d08e +857, 0x6b8c2b0c06584bda +858, 0xde4dfff228c8c91f +859, 0xb7c9edd574e6287f +860, 0xf6078281c9fca2b2 +861, 0xb9b9a51de02a2f1e +862, 0xa411bef31c0103b0 +863, 0xc5facd8fc5e1d7a3 +864, 0x54e631c05ddf7359 +865, 0x815b42b3fd06c474 +866, 0xc9ac07566fda18ec +867, 0xd84ea62957bd8e15 +868, 0x5575f74b5cfd8803 +869, 0x5779a8d460c2e304 +870, 0xfd6e87e264a85587 +871, 0xa1d674daa320b26d +872, 0x2c3c3ec64b35afc4 +873, 0x393a274ff03e6935 +874, 0x1f40ecbac52c50ea +875, 0xc3de64fa324ffc0c +876, 0x56ae828b7f9deb04 +877, 0xe7c1a77b5c1f2cb3 +878, 0xa4c4aab19ea921cc +879, 0xec164c238825822c +880, 0xa6a3304770c03b03 +881, 0x3a63641d5b1e8123 +882, 0x42677be3a54617ef +883, 0xa2680423e3a200c0 +884, 0x8b17cf75f3f37277 +885, 0xe7ce65a49242be3d +886, 0x7f85934271323e4b +887, 0xcfb0f431f79a4fab +888, 0x392e4041a8505b65 +889, 0xd3e5daf0d8b25ea6 +890, 0x9447eff675d80f53 +891, 0xea27a9d53cfaeea8 +892, 0xe3f2335945a83ba +893, 0x8875a43ce216413b +894, 0xe49941f9eabce33e +895, 0x9357c1296683a5b1 +896, 0xf0f16439e81ee701 +897, 0x3181515295ffd79a +898, 0x9d7150fffd169ed8 +899, 0x2d6a1d281e255a72 +900, 0x81bf1286fb3a92b6 +901, 0x566d3079b499e279 +902, 0xc7939ca8f047341 +903, 0xb1f8050e7c2d59f6 +904, 0x605701045e7be192 +905, 0x51b73360e8e31a1c +906, 0x9f4ad54483ba9fe0 +907, 0xd3085b8fcf69d1c8 +908, 0xc3e7475026dc5f0b +909, 0x5800f8554b157354 +910, 0x37dfdf858cfcd963 +911, 0x3a1fce05ce385072 +912, 0xf495c062645c20c3 +913, 0xdcbeec2c3492c773 +914, 0xc38f427589d1d0b4 +915, 0x681ead60216a8184 +916, 0x4bd569c40cc88c41 +917, 0x49b0d442e130b7a2 +918, 0xee349156b7d1fa3f +919, 0x2bde2d2db055135b +920, 0xc6a460d2fbcb2378 +921, 0xd0f170494ff3dbb +922, 0xb294422492528a23 +923, 0xfc95873c854e7b86 +924, 0x6c9c3ad1797bb19c +925, 0xe0c06f2aab65062d +926, 0x58e32ce0f11e3a81 +927, 0xa745fcd729ff5036 +928, 0x599b249b2fc2cdb2 +929, 0x78f23b5b0dd5b082 +930, 0x6de3e957f549ecfc +931, 0x9d0712fa6d878756 +932, 0x9076e8554e4a413a +933, 0xf3185818c0294de8 +934, 0x5de7cdf4b455b9b6 +935, 0xb15f6908ed703f7d +936, 0x98c654dfedc6818 +937, 0x120502ab0e93ae42 +938, 0x67966a98a58dc120 +939, 0x1caa0fc628989482 +940, 0xd8b2c3cd480a8625 +941, 0x85c70071b3aed671 +942, 0xff385f8473714662 +943, 0xe2868e4bf3773b63 +944, 0x96cf8019b279298e +945, 0x8511cc930bd74800 +946, 0x5312e48fdd55f5ab +947, 0xfcdae564b52df78d +948, 0x9eee48373e652176 +949, 0x953788f6bcbc56b0 +950, 0xd1a3855dbd2f6b37 +951, 0x3ad32acf77f4d1e9 +952, 0x917c7be81b003e30 +953, 0x9ce817da1e2e9dfb +954, 0x2968983db162d44d +955, 0x1e005decef5828ad +956, 0xc38fe59d1aa4f3d5 +957, 0xf357f1710dc02f1d +958, 0x2613912a4c83ec67 +959, 0x832a11470b9a17cb +960, 0x5e85508a611f0dad +961, 0x2781131677f59d56 +962, 0xa82358d7d4b0237f +963, 0xfbf8b3cc030c3af6 +964, 0x68b2f68ac8a55adb +965, 0x3b6fcf353add0ada +966, 0xd1956049bcd15bd5 +967, 0x95b76f31c7f98b6d +968, 0x814b6690df971a84 +969, 0xdcf7959cddd819e4 +970, 0xcf8c72c5d804fc88 +971, 0x56883769c8945a22 +972, 0x1f034652f658cf46 +973, 0x41df1324cda235a1 +974, 0xeccd32524504a054 +975, 0x974e0910a04ec02c +976, 0x72104507b821f6db +977, 0x791f8d089f273044 +978, 0xe0f79a4f567f73c3 +979, 0x52fe5bea3997f024 +980, 0x5f8b9b446494f78 +981, 0xfd9f511947059190 +982, 0x3aea9dac6063bce3 +983, 0xbfdae4dfc24aee60 +984, 0xa82cdbbf0a280318 +985, 0xf460aae18d70aa9d +986, 0x997367cb204a57c4 +987, 0x616e21ab95ba05ef +988, 0x9bfc93bec116769f +989, 0x2b2ee27c37a3fa5b +990, 0xb25c6ed54006ee38 +991, 0xab04d4a5c69e69a5 +992, 0x6d2f6b45f2d8438f +993, 0x4ad2f32afc82f092 +994, 0x513d718908f709c0 +995, 0x5272aadc4fffca51 +996, 0xeb3f87e66156ef5d +997, 0xf8a3d5a46a86ba85 +998, 0xdb4548a86f27abfd +999, 0x57c05f47ff62380d diff --git a/numpy/random/tests/data/sfc64-testset-1.csv b/numpy/random/tests/data/sfc64-testset-1.csv new file mode 100644 index 000000000..4fffe6959 --- /dev/null +++ b/numpy/random/tests/data/sfc64-testset-1.csv @@ -0,0 +1,1001 @@ +seed, 0xdeadbeaf +0, 0xa475f55fbb6bc638 +1, 0xb2d594b6c29d971c +2, 0x275bc4ece4484fb1 +3, 0x569be72d9b3492fb +4, 0x89a5bb9b206a670c +5, 0xd951bfa06afdc3f9 +6, 0x7ee2e1029d52a265 +7, 0x12ef1d4de0cb4d4c +8, 0x41658ba8f0ef0280 +9, 0x5b650c82e4fe09c5 +10, 0x638a9f3e30ec4e94 +11, 0x147487fb2ba9233e +12, 0x89ef035603d2d1fb +13, 0xe66ca57a190e6cbe +14, 0x330f673740dd61fc +15, 0xc71d3dce2f8bb34e +16, 0x3c07c39ff150b185 +17, 0x5df952b6cae8f099 +18, 0x9f09f2b1f0ceac80 +19, 0x19598eee2d0c4c67 +20, 0x64e06483702e0ebd +21, 0xda04d1fdb545f7fa +22, 0xf2cf53b61a0c4f9b +23, 0xf0bb724ce196f66e +24, 0x71cefde55d9cf0f +25, 0x6323f62824a20048 +26, 0x1e93604680f14b4e +27, 0xd9d8fad1d4654025 +28, 0xf4ee25af2e76ca08 +29, 0x6af3325896befa98 +30, 0xad9e43abf5e04053 +31, 0xbf930e318ce09de3 +32, 0x61f9583b4f9ffe76 +33, 0x9b69d0b3d5ec8958 +34, 0xa608f250f9b2ca41 +35, 0x6fdba7073dc2bb5d +36, 0xa9d57601efea6d26 +37, 0xc24a88a994954105 +38, 0xc728b1f78d88fe5b +39, 0x88da88c2b083b3b2 +40, 0xa9e27f7303c76cfd +41, 0xc4c24608c29176eb +42, 0x5420b58466b972fd +43, 0xd2018a661b6756c8 +44, 0x7caed83d9573fc7 +45, 0x562a3d81b849a06a +46, 0x16588af120c21f2c +47, 0x658109a7e0eb4837 +48, 0x877aabb14d3822e1 +49, 0x95704c342c3745fe +50, 0xeeb8a0dc81603616 +51, 0x431bf94889290419 +52, 0xe4a9410ab92a5863 +53, 0xbc6be64ea60f12ba +54, 0x328a2da920015063 +55, 0x40f6b3bf8271ae07 +56, 0x4068ff00a0e854f8 +57, 0x1b287572ca13fa78 +58, 0xa11624a600490b99 +59, 0x4a04ef29eb7150fa +60, 0xcc9469ab5ffb739 +61, 0x99a6a9f8d95e782 +62, 0x8e90356573e7a070 +63, 0xa740b8fb415c81c4 +64, 0x47eccef67447f3da +65, 0x2c720afe3a62a49b +66, 0xe2a747f0a43eacf4 +67, 0xba063a87ab165576 +68, 0xbc1c78ed27feb5a3 +69, 0x285a19fa3974f9d +70, 0x489c61e704f5f0e3 +71, 0xf5ab04f6b03f238b +72, 0x7e25f88138a110dd +73, 0xc3d1cef3d7c1f1d1 +74, 0xc3de6ec64d0d8e00 +75, 0x73682a15b6cc5088 +76, 0x6fecbeb319163dc5 +77, 0x7e100d5defe570a1 +78, 0xad2af9af076dce57 +79, 0x3c65100e23cd3a9a +80, 0x4b442cc6cfe521bb +81, 0xe89dc50f8ab1ef75 +82, 0x8b3c6fdc2496566 +83, 0xdfc50042bc2c308c +84, 0xe39c5f158b33d2b2 +85, 0x92f6adefdfeb0ac +86, 0xdf5808a949c85b3e +87, 0x437384021c9dace9 +88, 0xa7b5ed0d3d67d8f +89, 0xe1408f8b21da3c34 +90, 0xa1bba125c1e80522 +91, 0x7611dc4710385264 +92, 0xb00a46ea84082917 +93, 0x51bf8002ffa87cef +94, 0x9bb81013e9810adc +95, 0xd28f6600013541cd +96, 0xc2ca3b1fa7791c1f +97, 0x47f9ad58f099c82c +98, 0x4d1bb9458469caf9 +99, 0xca0b165b2844257 +100, 0xc3b2e667d075dc66 +101, 0xde22f71136a3dbb1 +102, 0x23b4e3b6f219e4c3 +103, 0x327e0db4c9782f66 +104, 0x9365506a6c7a1807 +105, 0x3e868382dedd3be7 +106, 0xff04fa6534bcaa99 +107, 0x96621a8862995305 +108, 0x81bf39cb5f8e1df7 +109, 0x79b684bb8c37af7a +110, 0xae3bc073c3cde33c +111, 0x7805674112c899ac +112, 0xd95a27995abb20f2 +113, 0x71a503c57b105c40 +114, 0x5ff00d6a73ec8acc +115, 0x12f96391d91e47c2 +116, 0xd55ca097b3bd4947 +117, 0x794d79d20468b04 +118, 0x35d814efb0d7a07d +119, 0xfa9ac9bd0aae76d3 +120, 0xa77b8a3711e175cd +121, 0xe6694fbf421f9489 +122, 0xd8f1756525a1a0aa +123, 0xe38dfa8426277433 +124, 0x16b640c269bbcd44 +125, 0x2a7a5a67ca24cfeb +126, 0x669039c28d5344b4 +127, 0x2a445ee81fd596bb +128, 0x600df94cf25607e0 +129, 0x9358561a7579abff +130, 0xee1d52ea179fc274 +131, 0x21a8b325e89d31be +132, 0x36fc0917486eec0a +133, 0x3d99f40717a6be9f +134, 0x39ac140051ca55ff +135, 0xcef7447c26711575 +136, 0xf22666870eff441d +137, 0x4a53c6134e1c7268 +138, 0xd26de518ad6bdb1b +139, 0x1a736bf75b8b0e55 +140, 0xef1523f4e6bd0219 +141, 0xb287b32fd615ad92 +142, 0x2583d6af5e841dd5 +143, 0x4b9294aae7ca670c +144, 0xf5aa4a84174f3ca9 +145, 0x886300f9e0dc6376 +146, 0x3611401e475ef130 +147, 0x69b56432b367e1ac +148, 0x30c330e9ab36b7c4 +149, 0x1e0e73079a85b8d5 +150, 0x40fdfc7a5bfaecf +151, 0xd7760f3e8e75a085 +152, 0x1cc1891f7f625313 +153, 0xeece1fe6165b4272 +154, 0xe61111b0c166a3c1 +155, 0x2f1201563312f185 +156, 0xfd10e8ecdd2a57cb +157, 0x51cdc8c9dd3a89bf +158, 0xed13cc93938b5496 +159, 0x843816129750526b +160, 0xd09995cd6819ada +161, 0x4601e778d40607df +162, 0xef9df06bd66c2ea0 +163, 0xae0bdecd3db65d69 +164, 0xbb921a3c65a4ae9a +165, 0xd66698ce8e9361be +166, 0xacdc91647b6068f4 +167, 0xe505ef68f2a5c1c0 +168, 0xd6e62fd27c6ab137 +169, 0x6a2ba2c6a4641d86 +170, 0x9c89143715c3b81 +171, 0xe408c4e00362601a +172, 0x986155cbf5d4bd9d +173, 0xb9e6831728c893a7 +174, 0xb985497c3bf88d8c +175, 0xd0d729214b727bec +176, 0x4e557f75fece38a +177, 0x6572067fdfd623ca +178, 0x178d49bb4d5cd794 +179, 0xe6baf59f60445d82 +180, 0x5607d53518e3a8d2 +181, 0xba7931adb6ebbd61 +182, 0xe853576172611329 +183, 0xe945daff96000c44 +184, 0x565b9ba3d952a176 +185, 0xcdb54d4f88c584c8 +186, 0x482a7499bee9b5e5 +187, 0x76560dd0affe825b +188, 0x2a56221faa5ca22c +189, 0x7729be5b361f5a25 +190, 0xd6f2195795764876 +191, 0x59ef7f8f423f18c5 +192, 0x7ebefed6d02adde1 +193, 0xcfec7265329c73e5 +194, 0x4fd8606a5e59881c +195, 0x95860982ae370b73 +196, 0xdecfa33b1f902acc +197, 0xf9b8a57400b7c0a6 +198, 0xd20b822672ec857b +199, 0x4eb81084096c7364 +200, 0xe535c29a44d9b6ad +201, 0xdef8b48ebacb2e29 +202, 0x1063bc2b8ba0e915 +203, 0xe4e837fb53d76d02 +204, 0x4df935db53579fb8 +205, 0xa30a0c8053869a89 +206, 0xe891ee58a388a7b5 +207, 0x17931a0c64b8a985 +208, 0xaf2d350b494ce1b3 +209, 0x2ab9345ffbcfed82 +210, 0x7de3fe628a2592f0 +211, 0x85cf54fab8b7e79d +212, 0x42d221520edab71b +213, 0x17b695b3af36c233 +214, 0xa4ffe50fe53eb485 +215, 0x1102d242db800e4d +216, 0xc8dc01f0233b3b6 +217, 0x984a030321053d36 +218, 0x27fa8dc7b7112c0e +219, 0xba634dd8294e177f +220, 0xe67ce34b36332eb +221, 0x8f1351e1894fb41a +222, 0xb522a3048761fd30 +223, 0xc350ad9bc6729edc +224, 0xe0ed105bd3c805e1 +225, 0xa14043d2b0825aa7 +226, 0xee7779ce7fc11fdf +227, 0xc0fa8ba23a60ab25 +228, 0xb596d1ce259afbad +229, 0xaa9b8445537fdf62 +230, 0x770ab2c700762e13 +231, 0xe812f1183e40cc1 +232, 0x44bc898e57aefbbd +233, 0xdd8a871df785c996 +234, 0x88836a5e371eb36b +235, 0xb6081c9152623f27 +236, 0x895acbcd6528ca96 +237, 0xfb67e33ddfbed435 +238, 0xaf7af47d323ce26 +239, 0xe354a510c3c39b2d +240, 0x5cacdedda0672ba3 +241, 0xa440d9a2c6c22b09 +242, 0x6395099f48d64304 +243, 0xc11cf04c75f655b5 +244, 0x1c4e054d144ddb30 +245, 0x3e0c2db89d336636 +246, 0x127ecf18a5b0b9a7 +247, 0x3b50551a88ea7a73 +248, 0xbd27003e47f1f684 +249, 0xf32d657782baac9b +250, 0x727f5cabf020bc9 +251, 0x39c1c1c226197dc7 +252, 0x5552c87b35deeb69 +253, 0x64d54067b5ce493f +254, 0x3494b091fe28dda0 +255, 0xdf0278bc85ee2965 +256, 0xdef16fec25efbd66 +257, 0xe2be09f578c4ce28 +258, 0xd27a9271979d3019 +259, 0x427f6fcd71845e3 +260, 0x26b52c5f81ec142b +261, 0x98267efc3986ad46 +262, 0x7bf4165ddb7e4374 +263, 0xd05f7996d7941010 +264, 0x3b3991de97b45f14 +265, 0x9068217fb4f27a30 +266, 0xd8fe295160afc7f3 +267, 0x8a159fab4c3bc06f +268, 0x57855506d19080b6 +269, 0x7636df6b3f2367a4 +270, 0x2844ee3abd1d5ec9 +271, 0xe5788de061f51c16 +272, 0x69e78cc9132a164 +273, 0xacd53cde6d8cd421 +274, 0xb23f3100068e91da +275, 0x4140070a47f53891 +276, 0xe4a422225a96e53a +277, 0xb82a8925a272a2ac +278, 0x7c2f9573590fe3b7 +279, 0xbaf80764db170575 +280, 0x955abffa54358368 +281, 0x355ce7460614a869 +282, 0x3700ede779a4afbf +283, 0x10a6ec01d92d68cd +284, 0x3308f5a0a4c0afef +285, 0x97b892d7601136c9 +286, 0x4955c3b941b8552e +287, 0xca85aa67e941961d +288, 0xb1859ae5db28e9d2 +289, 0x305d072ac1521fbd +290, 0xed52a868996085bb +291, 0x723bfa6a76358852 +292, 0x78d946ecd97c5fb3 +293, 0x39205b30a8e23e79 +294, 0xb927e3d086baadbe +295, 0xa18d6946136e1ff5 +296, 0xdab6f0b51c1eb5ff +297, 0xf0a640bf7a1af60c +298, 0xf0e81db09004d0d4 +299, 0xfe76cebdbe5a4dde +300, 0x2dafe9cc3decc376 +301, 0x4c871fdf1af34205 +302, 0xe79617d0c8fa893b +303, 0xee658aaad3a141f7 +304, 0xfd91aa74863e19f1 +305, 0x841b8f55c103cc22 +306, 0x22766ed65444ad5d +307, 0x56d03d1beca6c17a +308, 0x5fd4c112c92036ae +309, 0x75466ae58a5616dc +310, 0xfbf98b1081e802a9 +311, 0xdc325e957bf6d8f5 +312, 0xb08da7015ebd19b7 +313, 0xf25a9c0944f0c073 +314, 0xf4625bafa0ced718 +315, 0x4349c9e093a9e692 +316, 0x75a9ccd4dd8935cb +317, 0x7e6cf9e539361e91 +318, 0x20fdd22fb6edd475 +319, 0x5973021b57c2311f +320, 0x75392403667edc15 +321, 0xed9b2156ea70d9f1 +322, 0xf40c114db50b64a0 +323, 0xe26bb2c9eef20c62 +324, 0x409c1e3037869f03 +325, 0xcdfd71fdda3b7f91 +326, 0xa0dfae46816777d6 +327, 0xde060a8f61a8deb8 +328, 0x890e082a8b0ca4fc +329, 0xb9f2958eddf2d0db +330, 0xd17c148020d20e30 +331, 0xffdc9cc176fe7201 +332, 0xffb83d925b764c1 +333, 0x817ea639e313da8d +334, 0xa4dd335dd891ca91 +335, 0x1342d25a5e81f488 +336, 0xfa7eb9c3cf466b03 +337, 0xfe0a423d44b185d0 +338, 0x101cfd430ab96049 +339, 0x7b5d3eda9c4504b +340, 0xe20ccc006e0193f1 +341, 0xf54ccddedebc5df0 +342, 0xc0edd142bd58f1db +343, 0x3831f40d378d2430 +344, 0x80132353f0a88289 +345, 0x688f23c419d03ef8 +346, 0x4c6837e697884066 +347, 0x699387bb2e9a3a8f +348, 0x8996f860342448d8 +349, 0xb0f80dff99bfa5cc +350, 0x3e927a7f9ea12c8e +351, 0xd7e498d1e5f9dff3 +352, 0x78ecb97bb3f864cc +353, 0x3c4ffd069a014d38 +354, 0xf8d5073a1e09b4d4 +355, 0x8717e854f9faef23 +356, 0xfbcc5478d8d0ad7 +357, 0xd3cd8b233ca274ff +358, 0x8bd8f11f79beb265 +359, 0xf64498a832d8fd0e +360, 0xb01bba75112131ec +361, 0x55572445a7869781 +362, 0x7b56622f18cb3d7a +363, 0x7f192c9e075bdb83 +364, 0xd9a112f836b83ff3 +365, 0x68673b37269653dc +366, 0xe46a9433fb6a0879 +367, 0x127d756ca4779001 +368, 0xc1378e8b1e8eab94 +369, 0x1006edb0f51d078c +370, 0xc6dd53961232d926 +371, 0x9a4aeef44038256d +372, 0xd357f4fa652d4f5f +373, 0x59f3d2cc3378598 +374, 0xe76e6207a824a7fc +375, 0x5fc5e33712ceffef +376, 0x77d24aeb0ccb1adc +377, 0x5be4b2826805659e +378, 0x257c69d787e64634 +379, 0x58dd52ca6bc727b1 +380, 0x3ab997767235ea33 +381, 0x986a2a7a966fad14 +382, 0xc900f8b27761dcc4 +383, 0x44991bdb13795700 +384, 0xe5c145a4fe733b2 +385, 0x56f041b56bffe0d3 +386, 0x5779c4fef8067996 +387, 0xa0fe8748e829532d +388, 0x840c1277d78d9dd4 +389, 0x37ebcb315432acbc +390, 0xf4bc8738433ba3be +391, 0x8b122993f2e10062 +392, 0xe1fe8481f2681ed5 +393, 0x8e23f1630d9f494a +394, 0xda24661a01b7d0b3 +395, 0x7a02942a179cee36 +396, 0xf1e08a3c09b71ac +397, 0x3dec2cc7ee0bd8fd +398, 0x1f3e480113d805d4 +399, 0xc061b973ad4e3f2c +400, 0x6bea750f17a66836 +401, 0xbc2add72eac84c25 +402, 0xcff058d3f97934ca +403, 0x54ccc30987778ec2 +404, 0x93449ec1e1469558 +405, 0xe2ff369eb0c6836 +406, 0x41c2df2d63bf8e55 +407, 0xf9302629b6c71be2 +408, 0xdd30376b8e5ab29a +409, 0x12db9e04f911d754 +410, 0x8d03d6cd359f1b97 +411, 0xe15956511abf1cee +412, 0x9b68e10e2c2fd940 +413, 0x2e28de6491c1ce53 +414, 0x52b329b72d0c109d +415, 0xc2c0b115f9da2a60 +416, 0x6ca084105271bbff +417, 0x49b92b8676058c1e +418, 0x767fc92a70f7e5a3 +419, 0x87ba4ed4b65a6aa0 +420, 0xf70b052e0a3975e9 +421, 0x3e925c3306db9eec +422, 0x43253f1d96ac9513 +423, 0xe3e04f1a1ea454c4 +424, 0x763e3f4cc81ba0c8 +425, 0x2a2721ac69265705 +426, 0xdf3b0ac6416ea214 +427, 0xa6a6b57450f3e000 +428, 0xc3d3b1ac7dbfe6ac +429, 0xb66e5e6f7d2e4ec0 +430, 0x43c65296f98f0f04 +431, 0xdb0f6e3ff974d842 +432, 0x3d6b48e02ebb203b +433, 0xd74674ebf09d8f27 +434, 0xbe65243c58fc1200 +435, 0x55eb210a68d42625 +436, 0x87badab097dbe883 +437, 0xada3fda85a53824f +438, 0xef2791e8f48cd37a +439, 0x3fe7fceb927a641a +440, 0xd3bffd3ff031ac78 +441, 0xb94efe03da4d18fb +442, 0x162a0ad8da65ea68 +443, 0x300f234ef5b7e4a6 +444, 0xa2a8b4c77024e4fb +445, 0x5950f095ddd7b109 +446, 0xded66dd2b1bb02ba +447, 0x8ec24b7fa509bcb6 +448, 0x9bede53d924bdad6 +449, 0xa9c3f46423be1930 +450, 0x6dfc90597f8de8b4 +451, 0xb7419ebc65b434f0 +452, 0xa6596949238f58b9 +453, 0x966cbade640829b8 +454, 0x58c74877bdcbf65e +455, 0xaa103b8f89b0c453 +456, 0x219f0a86e41179a4 +457, 0x90f534fc06ddc57f +458, 0x8db7cdd644f1affa +459, 0x38f91de0167127ac +460, 0xdcd2a65e4df43daa +461, 0x3e04f34a7e01f834 +462, 0x5b237eea68007768 +463, 0x7ff4d2b015921768 +464, 0xf786b286549d3d51 +465, 0xaefa053fc2c3884c +466, 0x8e6a8ff381515d36 +467, 0x35b94f3d0a1fce3c +468, 0x165266d19e9abb64 +469, 0x1deb5caa5f9d8076 +470, 0x13ab91290c7cfe9d +471, 0x3651ca9856be3e05 +472, 0xe7b705f6e9cccc19 +473, 0xd6e7f79668c127ed +474, 0xa9faf37154896f92 +475, 0x89fbf190603e0ab1 +476, 0xb34d155a86f942d0 +477, 0xb2d4400a78bfdd76 +478, 0x7c0946aca8cfb3f0 +479, 0x7492771591c9d0e8 +480, 0xd084d95c5ca2eb28 +481, 0xb18d12bd3a6023e +482, 0xea217ed7b864d80b +483, 0xe52f69a755dd5c6f +484, 0x127133993d81c4aa +485, 0xe07188fcf1670bfb +486, 0x178fbfe668e4661d +487, 0x1c9ee14bb0cda154 +488, 0x8d043b96b6668f98 +489, 0xbc858986ec96ca2b +490, 0x7660f779d528b6b7 +491, 0xd448c6a1f74ae1d3 +492, 0x178e122cfc2a6862 +493, 0x236f000abaf2d23b +494, 0x171b27f3f0921915 +495, 0x4c3ff07652f50a70 +496, 0x18663e5e7d3a66ca +497, 0xb38c97946c750cc9 +498, 0xc5031aae6f78f909 +499, 0x4d1514e2925e95c1 +500, 0x4c2184a741dabfbb +501, 0xfd410364edf77182 +502, 0xc228157f863ee873 +503, 0x9856fdc735cc09fc +504, 0x660496cd1e41d60e +505, 0x2edf1d7e01954c32 +506, 0xd32e94639bdd98cf +507, 0x8e153f48709a77d +508, 0x89357f332d2d6561 +509, 0x1840d512c97085e6 +510, 0x2f18d035c9e26a85 +511, 0x77b88b1448b26d5b +512, 0xc1ca6ef4cdae0799 +513, 0xcc203f9e4508165f +514, 0xeaf762fbc9e0cbbe +515, 0xc070c687f3c4a290 +516, 0xd49ed321068d5c15 +517, 0x84a55eec17ee64ee +518, 0x4d8ee685298a8871 +519, 0x9ff5f17d7e029793 +520, 0x791d7d0d62e46302 +521, 0xab218b9114e22bc6 +522, 0x4902b7ab3f7119a7 +523, 0x694930f2e29b049e +524, 0x1a3c90650848999f +525, 0x79f1b9d8499c932b +526, 0xfacb6d3d55e3c92f +527, 0x8fd8b4f25a5da9f5 +528, 0xd037dcc3a7e62ae7 +529, 0xfecf57300d8f84f4 +530, 0x32079b1e1dc12d48 +531, 0xe5f8f1e62b288f54 +532, 0x97feba3a9c108894 +533, 0xd279a51e1899a9a0 +534, 0xd68eea8e8e363fa8 +535, 0x7394cf2deeca9386 +536, 0x5f70b0c80f1dbf10 +537, 0x8d646916ed40462 +538, 0xd253bb1c8a12bbb6 +539, 0x38f399a821fbd73e +540, 0x947523a26333ac90 +541, 0xb52e90affbc52a37 +542, 0xcf899cd964654da4 +543, 0xdf66ae9cca8d99e7 +544, 0x6051478e57c21b6a +545, 0xffa7dc975af3c1da +546, 0x195c7bff2d1a8f5 +547, 0x64f12b6575cf984d +548, 0x536034cb842cf9e1 +549, 0x180f247ce5bbfad +550, 0x8ced45081b134867 +551, 0x532bbfdf426710f3 +552, 0x4747933e74c4f54d +553, 0x197a890dc4793401 +554, 0x76c7cc2bd42fae2 +555, 0xdabfd67f69675dd0 +556, 0x85c690a68cdb3197 +557, 0xe482cec89ce8f92 +558, 0x20bc9fb7797011b1 +559, 0x76dc85a2185782ad +560, 0x3df37c164422117a +561, 0x99211f5d231e0ab0 +562, 0xef7fd794a0a91f4 +563, 0x419577151915f5fe +564, 0x3ce14a0a7135dae3 +565, 0x389b57598a075d6a +566, 0x8cc2a9d51b5af9aa +567, 0xe80a9beffbd13f13 +568, 0x65e96b22ea8a54d8 +569, 0x79f38c4164138ede +570, 0xd1955846cba03d81 +571, 0x60359fe58e4f26d6 +572, 0x4ea724f585f8d13e +573, 0x316dfdbadc801a3c +574, 0x20aa29b7c6dd66fe +575, 0x65eaf83a6a008caa +576, 0x407000aff1b9e8cb +577, 0xb4d49bfb2b268c40 +578, 0xd4e6fe8a7a0f14a9 +579, 0xe34afef924e8f58e +580, 0xe377b0c891844824 +581, 0x29c2e20c112d30c8 +582, 0x906aad1fe0c18a95 +583, 0x308385f0efbb6474 +584, 0xf23900481bf70445 +585, 0xfdfe3ade7f937a55 +586, 0xf37aae71c33c4f97 +587, 0x1c81e3775a8bed85 +588, 0x7eb5013882ce35ea +589, 0x37a1c1692495818d +590, 0x3f90ae118622a0ba +591, 0x58e4fe6fea29b037 +592, 0xd10ff1d269808825 +593, 0xbce30edb60c21bba +594, 0x123732329afd6fee +595, 0x429b4059f797d840 +596, 0x421166568a8c4be1 +597, 0x88f895c424c1bd7f +598, 0x2adaf7a7b9f781cb +599, 0xa425644b26cb698 +600, 0x8cc44d2486cc5743 +601, 0xdb9f357a33abf6ba +602, 0x1a57c4ea77a4d70c +603, 0x1dea29be75239e44 +604, 0x463141a137121a06 +605, 0x8fecfbbe0b8a9517 +606, 0x92c83984b3566123 +607, 0x3b1c69180ed28665 +608, 0x14a6073425ea8717 +609, 0x71f4c2b3283238d7 +610, 0xb3d491e3152f19f +611, 0x3a0ba3a11ebac5d2 +612, 0xddb4d1dd4c0f54ac +613, 0xdb8f36fe02414035 +614, 0x1cf5df5031b1902c +615, 0x23a20ed12ef95870 +616, 0xf113e573b2dedcbb +617, 0x308e2395cde0a9fa +618, 0xd377a22581c3a7da +619, 0xe0ced97a947a66fb +620, 0xe44f4de9cd754b00 +621, 0x2344943337d9d1bf +622, 0x4b5ae5e2ea6e749c +623, 0x9b8d2e3ef41d1c01 +624, 0x59a5a53ebbd24c6b +625, 0x4f7611bf9e8a06fb +626, 0xea38c7b61361cd06 +627, 0xf125a2bfdd2c0c7 +628, 0x2df8dcb5926b9ebb +629, 0x233e18720cc56988 +630, 0x974c61379b4aa95e +631, 0xc7fe24c1c868910b +632, 0x818fd1affc82a842 +633, 0xcee92a952a26d38e +634, 0x8962f575ebcbf43 +635, 0x7770687e3678c460 +636, 0xdfb1db4ed1298117 +637, 0xb9db54cb03d434d3 +638, 0x34aebbf2244257ad +639, 0xd836db0cb210c490 +640, 0x935daed7138957cd +641, 0x3cd914b14e7948fd +642, 0xd0472e9ed0a0f7f0 +643, 0xa9df33dca697f75e +644, 0x15e9ea259398721a +645, 0x23eeba0f970abd60 +646, 0x2217fdf8bbe99a12 +647, 0x5ea490a95717b198 +648, 0xf4e2bfc28280b639 +649, 0x9d19916072d6f05c +650, 0x5e0387cab1734c6a +651, 0x93c2c8ac26e5f01e +652, 0xb0d934354d957eb1 +653, 0xee5099a1eef3188c +654, 0x8be0abca8edc1115 +655, 0x989a60845dbf5aa3 +656, 0x181c7ed964eee892 +657, 0x49838ea07481288d +658, 0x17dbc75d66116b2e +659, 0xa4cafb7a87c0117e +660, 0xab2d0ae44cdc2e6e +661, 0xdf802f2457e7da6 +662, 0x4b966c4b9187e124 +663, 0x62de9db6f4811e1a +664, 0x1e20485968bc62 +665, 0xe9ac288265caca94 +666, 0xc5c694d349aa8c1a +667, 0x3d67f2083d9bdf10 +668, 0x9a2468e503085486 +669, 0x9d6acd3dc152d1a3 +670, 0xca951e2aeee8df77 +671, 0x2707371af9cdd7b0 +672, 0x2347ae6a4eb5ecbd +673, 0x16abe5582cb426f +674, 0x523af4ff980bbccb +675, 0xb07a0f043e3694aa +676, 0x14d7c3da81b2de7 +677, 0xf471f1b8ac22305b +678, 0xdb087ffff9e18520 +679, 0x1a352db3574359e8 +680, 0x48d5431502cc7476 +681, 0x7c9b7e7003dfd1bf +682, 0x4f43a48aae987169 +683, 0x9a5d3eb66dedb3e9 +684, 0xa7b331af76a9f817 +685, 0xba440154b118ab2d +686, 0x64d22344ce24c9c6 +687, 0xa22377bd52bd043 +688, 0x9dfa1bb18ca6c5f7 +689, 0xdccf44a92f644c8b +690, 0xf623d0a49fd18145 +691, 0x556d5c37978e28b3 +692, 0xad96e32ce9d2bb8b +693, 0x2e479c120be52798 +694, 0x7501cf871af7b2f7 +695, 0xd02536a5d026a5b8 +696, 0x4b37ff53e76ab5a4 +697, 0xdb3a4039caaeab13 +698, 0x6cbd65e3b700c7be +699, 0x7367abd98761a147 +700, 0xf4f9ba216a35aa77 +701, 0xf88ca25ce921eb86 +702, 0xb211de082ec2cbf2 +703, 0xdd94aa46ec57e12e +704, 0xa967d74ad8210240 +705, 0xdaa1fada8cfa887 +706, 0x85901d081c4488ee +707, 0xcf67f79a699ef06 +708, 0x7f2f1f0de921ee14 +709, 0x28bc61e9d3f2328b +710, 0x3332f2963faf18e5 +711, 0x4167ac71fcf43a6 +712, 0x843c1746b0160b74 +713, 0xd9be80070c578a5e +714, 0xbd7250c9af1473e7 +715, 0x43f78afaa3647899 +716, 0x91c6b5dd715a75a5 +717, 0x29cc66c8a07bfef3 +718, 0x3f5c667311dc22be +719, 0x4f49cd47958260cd +720, 0xbef8be43d920b64e +721, 0x7a892a5f13061d8b +722, 0x9532f40125c819b1 +723, 0x924fca3045f8a564 +724, 0x9b2c6442453b0c20 +725, 0x7e21009085b8e793 +726, 0x9b98c17e17af59d2 +727, 0xba61acb73e3ae89a +728, 0xb9d61a710555c138 +729, 0xc2a425d80978974b +730, 0xa275e13592da7d67 +731, 0xe962103202d9ad0f +732, 0xbdf8367a4d6f33fd +733, 0xe59beb2f8648bdc8 +734, 0xb4c387d8fbc4ac1c +735, 0x5e3f276b63054b75 +736, 0xf27e616aa54d8464 +737, 0x3f271661d1cd7426 +738, 0x43a69dbee7502c78 +739, 0x8066fcea6df059a1 +740, 0x3c10f19409bdc993 +741, 0x6ba6f43fb21f23e0 +742, 0x9e182d70a5bccf09 +743, 0x1520783d2a63a199 +744, 0xba1dcc0c70b9cace +745, 0x1009e1e9b1032d8 +746, 0xf632f6a95fb0315 +747, 0x48e711c7114cbfff +748, 0xef281dcec67debf7 +749, 0x33789894d6abf59b +750, 0x6c8e541fffbe7f9c +751, 0x85417f13b08e0a88 +752, 0x9a581e36d589608f +753, 0x461dca50b1befd35 +754, 0x5a3231680dde6462 +755, 0xcc57acf729780b97 +756, 0x50301efef62e1054 +757, 0x675d042cd4f6bbc9 +758, 0x1652fdd3794384c9 +759, 0x1c93bbeeb763cd4d +760, 0x44b7240c4b105242 +761, 0x4c6af2a1b606ccfb +762, 0x18fc43ece2ec1a40 +763, 0x859a5511aeae8acb +764, 0x2f56826f1996ad2f +765, 0xa8e95ce8bb363bdf +766, 0xf4da396054e50e4b +767, 0x5493865e9895883c +768, 0x768e4c8b332ac0e3 +769, 0x32195d2aa583fca5 +770, 0xf2f353f21266bc15 +771, 0x43cddf1d021307d +772, 0x6031e3aa30300e4a +773, 0x4f1298469ac6088f +774, 0x4b4d450bafac574e +775, 0x23e1cf9c0582a22b +776, 0x2e9036980db49cd0 +777, 0xe4e228b113c411b2 +778, 0x8bddcdb82b51706 +779, 0xd2a7ea8288593629 +780, 0x67fe90e98fdda61 +781, 0x7b63494dba95717b +782, 0x105625904510d782 +783, 0xdf4aa2242454e50a +784, 0x32541d6cd7d6c7e3 +785, 0x5661fb432591cf3b +786, 0xce920a5ed047bce7 +787, 0xed4178a3c96eea8f +788, 0xe378cd996e39863b +789, 0x169e1fdc8e2b05e1 +790, 0xaee1812ef7149a96 +791, 0x648571c7453d12c5 +792, 0xb7b6bc9328573c43 +793, 0xe7fb969078e270d7 +794, 0xdfc2b1b8985f6e6f +795, 0x862b6527ee39a1aa +796, 0x1ee329aea91d7882 +797, 0x20d25324f2fe704 +798, 0xbfcc47401fc3bbfd +799, 0x1515cdc8d48b2904 +800, 0xbd6eefe86284261c +801, 0x9b1f28e3b35f22ee +802, 0x842a29d35e5aecda +803, 0xf2346109ad370765 +804, 0x24d68add5a71afd9 +805, 0x4a691421613d91e2 +806, 0x60e3058b3c244051 +807, 0x79194905cdaa5de8 +808, 0xe0e2df35c01e8987 +809, 0xe29b78beffbb5e4a +810, 0xcdcdbc020218c19e +811, 0x5ae0af8c16feae43 +812, 0x8109292feeaf14fa +813, 0x34113f7508dfa521 +814, 0xc062ac163f56730a +815, 0xf1660e66ec6d4c4c +816, 0x5966c55f60151c80 +817, 0x3865ae8ec934b17 +818, 0x472a7314afb055ec +819, 0x7a24277309a44a44 +820, 0x556e02dd35d38baa +821, 0x9849611a1bc96ec1 +822, 0xd176f5d5a8eb0843 +823, 0x44db12ec60510030 +824, 0x272e3a06a0030078 +825, 0x7c4764dbefc075ea +826, 0x910712f3735c1183 +827, 0xd49a2da74ae7aff6 +828, 0xcf9b3e6e8f776d71 +829, 0x27789fe3ec481a02 +830, 0x86659f82c6b5912b +831, 0xe044b3dbf339158c +832, 0x99d81f6bb62a37b0 +833, 0x5f5830c246fada9a +834, 0xe68abab1eeb432cb +835, 0x49c5c5ace04e104 +836, 0x1ac3871b3fc6771b +837, 0x773b39f32d070652 +838, 0x9c4138c2ae58b1f3 +839, 0xac41c63d7452ac60 +840, 0x9248826b245359e1 +841, 0x99bba1c7a64f1670 +842, 0xe0dc99ff4ebb92f2 +843, 0x113638652740f87c +844, 0xebf51e94da88cfc +845, 0x5441c344b81b2585 +846, 0xe1e69e0bc2de652a +847, 0xe9ab6d64ae42ed1e +848, 0x879af8730e305f31 +849, 0x36b9ad912c7e00d6 +850, 0x83ef5e9fca853886 +851, 0xda54d48bb20ea974 +852, 0x32c6d93aefa92aa2 +853, 0x4e887b2c3391847d +854, 0x50966e815f42b1b8 +855, 0x53411ac087832837 +856, 0x46f64fef79df4f29 +857, 0xb34aae3924cd272c +858, 0xf5ad455869a0adbe +859, 0x8351ded7144edac8 +860, 0xeb558af089677494 +861, 0x36ed71d69293a8d6 +862, 0x659f90bf5431b254 +863, 0x53349102b7519949 +864, 0x3db83e20b1713610 +865, 0x6d63f96090556254 +866, 0x4cc0467e8f45c645 +867, 0xb8840c4bd5cd4091 +868, 0xbd381463cc93d584 +869, 0x203410d878c2066d +870, 0x2ebea06213cf71c8 +871, 0x598e8fb75e3fceb4 +872, 0xdcca41ceba0fce02 +873, 0x61bf69212b56aae5 +874, 0x97eed7f70c9114fa +875, 0xf46f37a8b7a063f9 +876, 0x66c8f4ffe5bd6efa +877, 0xe43fd6efda2d4e32 +878, 0x12d6c799e5ad01de +879, 0x9ac83e7f8b709360 +880, 0xbbb7bb3c1957513d +881, 0x7f87c08d4b3796b0 +882, 0x9a7d1d74b6aa4a5c +883, 0xa4314530ff741b6f +884, 0x99a80c6b6f15fca8 +885, 0xd2fec81d6d5fc3ce +886, 0x15a98be1cc40cea +887, 0x98693eb7719366f3 +888, 0x36ccdc2a9e9d4de8 +889, 0x3c8208f63d77df25 +890, 0xca2e376e2343df6 +891, 0xcc9b17cbb54420c6 +892, 0x8724c44a64d7dcb8 +893, 0x9d00c6949ff33869 +894, 0xf4f8e584d2699372 +895, 0x88f4748cdd5a2d53 +896, 0xe215072a1205bc6d +897, 0x190934fe6d740442 +898, 0x7fac5c0ab2af106d +899, 0x1b86633a0bd84fa1 +900, 0x1293e54318492dfb +901, 0x433324fd390f34b9 +902, 0x4c5eb2c67a44643b +903, 0x59a6e281c388b0dd +904, 0xe78e03f9c44623b7 +905, 0x91307a93c768fc3d +906, 0xde8867b004d8e3ff +907, 0xdf52c3f57b7c5862 +908, 0x993f3e1d10358a92 +909, 0x9ccb10bc3e18662d +910, 0x45093ce48a114c73 +911, 0xd59d05979d26330a +912, 0x417c0e03300119a9 +913, 0x1c336500f90cde81 +914, 0x1c8ccd29ead9b85b +915, 0xb76baf3e55d4d950 +916, 0x133ad6196c75fd7e +917, 0x34200b0cde7ed560 +918, 0x9c7c3dacb213c8d9 +919, 0xd97563c4fd9bf1b6 +920, 0x5d910e871835b6cb +921, 0x7d46c4733a16bdf9 +922, 0xe41d73194ddc87b2 +923, 0x7d3d8a0855a465a9 +924, 0x70c2a8b5d3f90c0f +925, 0x9e7565ca5dccfe12 +926, 0x2c0acb4577aa51b1 +927, 0x3d2cd211145b79c7 +928, 0x15a7b17aa6da7732 +929, 0xab44a3730c27d780 +930, 0xf008bd6c802bde3a +931, 0x82ed86ddf3619f77 +932, 0xaabe982ab15c49f9 +933, 0x9bcad8fa6d8e58a4 +934, 0x8f39ed8243718aa1 +935, 0xe9489340e03e3cb6 +936, 0xc722314f5eefb8d0 +937, 0x870e8869a436df59 +938, 0x4dae75b8087a8204 +939, 0xe1d790f6ec6e425b +940, 0xafd39ea1b1d0ed09 +941, 0xdf2c99e464ddf08f +942, 0x74936d859ab9644d +943, 0x3871302164250e73 +944, 0x764b68921e911886 +945, 0x2a1d024b26bb9d66 +946, 0x797fba43918e75b4 +947, 0x62ec6d24ccca335b +948, 0xf4bd8b951762b520 +949, 0x9d450dede9119397 +950, 0x5393a26d10f8c124 +951, 0x6b74769392896b57 +952, 0x7f61dbcc0e328581 +953, 0x64e1df3884d0d94 +954, 0xba77dcdf23738c37 +955, 0xf8e288bc0a177475 +956, 0x4a8abfd1702ecb7d +957, 0x53f22886694736a7 +958, 0x8fc982597ced3e3 +959, 0x1bc46090f820fff7 +960, 0x8bd31f965d02229f +961, 0x65cd0cb29996ee53 +962, 0x702e0f4fcf8c2e9f +963, 0x293b77bff307a9a0 +964, 0x125a986b8b305788 +965, 0x416b0eea428ebf3c +966, 0xeac85421ab0e8469 +967, 0x7f5496095019aa68 +968, 0x1a96d7afbc708e0 +969, 0xb91262e6766e01e1 +970, 0xd0a549cc4ccc6954 +971, 0x75a9a073f50c8a0d +972, 0xae275d2c1c6cd23c +973, 0xcf159b5ec5d28fd4 +974, 0x75d0838ce9b92b +975, 0xd4eddcee6dc4677f +976, 0x6a0a8ad5df6b75b8 +977, 0x6f3fd0ef0f13ecc4 +978, 0xb75a5826c1a8f8a8 +979, 0xd47098bbc7943766 +980, 0x3d4ddd62d5f23dd1 +981, 0x760a904e4583841c +982, 0x2afeb5022b4cf1f +983, 0x66d5f653729f0a13 +984, 0x9a6a5ab62980d30f +985, 0xc332f5643bbf8d5b +986, 0x848fb702e4056a90 +987, 0xa057beaf3f9e8c5f +988, 0x6cc603e4560a6c6a +989, 0xec761811a7b23211 +990, 0xb14aa4090a82aaa5 +991, 0xe29d9d028a5b2dbb +992, 0x5564e53738d68f97 +993, 0xfabca36542eaaf3b +994, 0xb9912fcb782020a2 +995, 0xe865e01b349284fd +996, 0x540b5ff11c5f9274 +997, 0x3463f64e1e7451dc +998, 0xe15d3e2f33b735f8 +999, 0xf5433336eadef6e diff --git a/numpy/random/tests/data/sfc64-testset-2.csv b/numpy/random/tests/data/sfc64-testset-2.csv new file mode 100644 index 000000000..70aebd5d5 --- /dev/null +++ b/numpy/random/tests/data/sfc64-testset-2.csv @@ -0,0 +1,1001 @@ +seed, 0x0 +0, 0x91959e5fb96a6332 +1, 0x3c1dd8a25a7e9f21 +2, 0x657bdffc99798d9e +3, 0x1a04de320b19e022 +4, 0x65b92af0e5f3c61c +5, 0x9c84070ce8f743c0 +6, 0xbb10e573693cdb25 +7, 0xd65ea9e76b37fb6b +8, 0x503efd0e76c8ae66 +9, 0xd711dcd04c26d0f +10, 0x12f53f435814ac8c +11, 0xb392cd402cfc82bd +12, 0x461764550e06c889 +13, 0x716a48b3514e6979 +14, 0xdd0a322213c18ad7 +15, 0x6673a8ca0a05c4d7 +16, 0x2992ef333437f844 +17, 0xc4aaf7e8240b2aad +18, 0x6ab0a1af1f41474f +19, 0xb0bae400c226941d +20, 0xe5f80c2eeeab48c6 +21, 0x3832c6a93a4024bf +22, 0x280bd824fabe8368 +23, 0x66b626228321e5ff +24, 0xe0bdfba5325a307e +25, 0x3a5f65c6ef254e05 +26, 0x99ea12503cb02f94 +27, 0x5d01fd2db77d420b +28, 0x6959bf5f36b2368d +29, 0xd856e30c62b5f5be +30, 0xe33233e1d8140e66 +31, 0xb78be619d415fa8d +32, 0x4f943bb2cc63d3b +33, 0x9b1460b290952d81 +34, 0x19205d794826740e +35, 0x64617bd9d7a6a1ff +36, 0x30442124b55ea76a +37, 0xebbbc3b29d0333fc +38, 0x39235a0fe359751c +39, 0xf9629768891121aa +40, 0x32052f53f366e05a +41, 0x60cc5b412c925bc8 +42, 0xf8b7ecda1c0e5a9 +43, 0x195f036e170a2568 +44, 0xfe06d0381a9ca782 +45, 0x919d89e8b88eebbf +46, 0xa47fb30148cf0d43 +47, 0x5c983e99d5f9fd56 +48, 0xe7492cdb6a1d42cd +49, 0xf9cfe5c865b0cfd8 +50, 0x35b653367bbc3b99 +51, 0xb1d92f6f4d4e440b +52, 0x737e1d5bd87ed9c0 +53, 0x7a880ca1498f8e17 +54, 0x687dae8494f9a3f7 +55, 0x6bae1989f441d5d7 +56, 0x71ad3fa5a9195c2e +57, 0x16b3969779f5d03 +58, 0xd1bce2ac973f15b3 +59, 0xa114b1ee2ce0dcdd +60, 0x270d75c11eb1b8d5 +61, 0xc48ffa087c0a7bc +62, 0xaaf9dc48cda9848d +63, 0x8111cf10ef6e584d +64, 0x6736df6af40ee6f4 +65, 0x1a1a111682fbf98d +66, 0xeb217658e1cb3b5d +67, 0xcaf58a8b79de9dec +68, 0x25d0ffd63c88d7a1 +69, 0x4c498cd871b7f176 +70, 0x4069a6156eb0cf3c +71, 0xdf012f12edcdd867 +72, 0x7734c0ac8edb1689 +73, 0xed6960ac53dbc245 +74, 0x305e20da8868c661 +75, 0x5f0c7a3719956f95 +76, 0x66842bbe3b28895 +77, 0xb608bc9a31eac410 +78, 0xfcb17d5529503abd +79, 0x829ae5cbc29b92ee +80, 0x17f2f0027bc24f3a +81, 0x435926c33d8f44cc +82, 0x3ab899327098dbec +83, 0xaf78573b27f8ead8 +84, 0xa8b334fabcf8dc60 +85, 0xcdf3b366a6a303db +86, 0x8da9379dd62b34c8 +87, 0xb0ba511955f264a7 +88, 0x9d72e21a644f961d +89, 0xfac28382e2e7e710 +90, 0xd457065f048410aa +91, 0x1cae57d952563969 +92, 0x5a160a6223253e03 +93, 0x2c45df736d73c8bd +94, 0x7f651ebc6ad9cec5 +95, 0x77a6be96c7d2e7e7 +96, 0x1721fb1dbfd6546a +97, 0xf73f433ecff3c997 +98, 0xed1e80f680965bfe +99, 0x6705ad67a3003b30 +100, 0xac21134efcadb9f7 +101, 0x4d2ba0a91d456ac +102, 0x59da7b59434eb52b +103, 0x26c1d070fd414b5f +104, 0xed7079ddfce83d9a +105, 0x9277d21f88e0fb7a +106, 0xfae16b9a8d53d282 +107, 0xb08a0e2e405fdf7d +108, 0x2ea20df44229d6ec +109, 0x80e4634cd3612825 +110, 0xbe62e8aeba8f8a1a +111, 0x4981209769c190fb +112, 0xcec96ef14c7e1f65 +113, 0x73fe4457b47e7b53 +114, 0x1d66300677315c31 +115, 0xe26821290498c4cc +116, 0xf6110248fd8fb1c5 +117, 0x30fd7fe32dbd8be3 +118, 0x534ec9b910a2bd72 +119, 0x8f9bfe878bbf7382 +120, 0x4f4eb5295c0c2193 +121, 0xdeb22f03a913be9e +122, 0x40f716f8e2a8886c +123, 0xc65007d0e386cdb1 +124, 0x9bdd26d92b143a14 +125, 0xf644b0b77ea44625 +126, 0x75f5a53f6b01993a +127, 0xfe803e347bf41010 +128, 0x594bff5fa17bc360 +129, 0x3551edfb450373c7 +130, 0x898f9dad433615db +131, 0x923d2406daa26d49 +132, 0x99e07faccbc33426 +133, 0x7389f9ff4470f807 +134, 0xdc2a25957c6df90b +135, 0x33c6d8965ef3053f +136, 0x51a8f07e838f1ab +137, 0x91c5db369380274f +138, 0xc37de65ac56b207e +139, 0xfcc6d2375dde7f14 +140, 0xa4e6418bff505958 +141, 0x4b8b9f78e46953c4 +142, 0x255ab2e0f93cf278 +143, 0xdf650717af3d96ef +144, 0x2caa21cba3aae2b2 +145, 0xce7e46c6f393daa4 +146, 0x1d5b3573f9997ac7 +147, 0x5280c556e850847d +148, 0x32edc31bef920ad7 +149, 0xefaa6b0b08cf2c6 +150, 0x5151c99d97b111c5 +151, 0x35ccf4bf53d17590 +152, 0xa210d7bd8697b385 +153, 0xa9419f95738fbe61 +154, 0xdeccf93a1a4fdc90 +155, 0xd0ea3365b18e7a05 +156, 0x84122df6dcd31b9a +157, 0x33040a2125cea5f5 +158, 0xfe18306a862f6d86 +159, 0xdb97c8392e5c4457 +160, 0xc3e0fa735e80e422 +161, 0x7d106ff36467a0c1 +162, 0xb9825eecc720a76d +163, 0x7fefc6f771647081 +164, 0xf5df3f5b3977bf13 +165, 0x18fb22736d36f1e0 +166, 0xadc4637b4953abfc +167, 0x174e66d3e17974bd +168, 0xf1614c51df4db5db +169, 0x6664ecde5717b293 +170, 0xd5bc5b6839265c26 +171, 0xf6ca9ce1af3f1832 +172, 0xca696789a9d506ea +173, 0x7399c246c8f9d53 +174, 0xadf49049626417e2 +175, 0xbcd84af37d09ab91 +176, 0xbb41c177f3a3fa45 +177, 0x592becc814d55302 +178, 0xa88b4e65f6cfe5f7 +179, 0xa0a55e34ff879426 +180, 0x3c2ea6aa725b42b7 +181, 0x65ac4a407b1f9521 +182, 0xde63d53f7e88b556 +183, 0x18bc76696d015f40 +184, 0xd1363f2cd4c116a8 +185, 0x2fe859be19a48e4a +186, 0x83d6099b1415e656 +187, 0x43f2cbc1a4ee6410 +188, 0xb2eca3d3421c533d +189, 0xc52b98ea3f031f5d +190, 0xfe57eb01da07e9d1 +191, 0xf9377883537a6031 +192, 0x364030c05dac7add +193, 0x6815cb06b35d4404 +194, 0xceae2d4ce31894be +195, 0xc602bcdf6062bf6a +196, 0xc8e4bd8dcc6062e3 +197, 0x9c29e87b92a1a791 +198, 0x41e626b871ca9651 +199, 0x325c3d1fb8efbcd8 +200, 0x7dbbacf8e3419fb3 +201, 0x3602e72516bb7319 +202, 0x537a008ebd94d24b +203, 0xda7714fc9d4d161d +204, 0x1c8c73700e1b621b +205, 0x2749b80937d6c939 +206, 0x76ee6abac5b14d33 +207, 0xf18d1e92cb6a8b5c +208, 0x6ce9579d9291c721 +209, 0x60523c745a40e58 +210, 0x637f837fcc901757 +211, 0x2ff71b19661dc5b3 +212, 0x393ab586326ad16f +213, 0xa0970ea30fe742b7 +214, 0x570222d7f27fe5ae +215, 0x3b5806d43fd38629 +216, 0x129a0ad7420180c5 +217, 0x1c4726355778d52c +218, 0x7c1459cf77656499 +219, 0xfe038a0932132069 +220, 0x4c4cc317a937483a +221, 0xa333d24067e926ba +222, 0x401d9b6ab37f6ef2 +223, 0x87ad0e491ebe4a2a +224, 0xfc02f312e72d121d +225, 0xfde715b3b99767b2 +226, 0xd111c342ba521c92 +227, 0x83b221b10879c617 +228, 0x6a1bf5c01fdf4277 +229, 0x166bfc0c3f5892ee +230, 0x4608d556d7c57856 +231, 0x8d786857c95ece49 +232, 0x2d357445a1aca4ac +233, 0x79620dae28ecd796 +234, 0x90e715dc0f2201c4 +235, 0x173b68b4c9f4b665 +236, 0x4e14d040ebac4eef +237, 0xbd25960b4b892e +238, 0x911a199db6f1989d +239, 0xfe822d7c601fd2e0 +240, 0x9b4c1d58d8223a69 +241, 0x907c1891283843b0 +242, 0xf4868bf54061c4b2 +243, 0x17f8cd1fc24efd85 +244, 0xd44253f9af14c3aa +245, 0x16d0da0cb911d43c +246, 0x3c6a46615828e79a +247, 0x498591c1138e11a5 +248, 0xcc0f26336d0d6141 +249, 0x4d3ebc873212309a +250, 0x16bad7792d5c2c6a +251, 0x474215a80b2bbd11 +252, 0x7159848abd8492fc +253, 0x359341c50973685f +254, 0x27512ee7bf784a4a +255, 0x45228ea080f70447 +256, 0x880cab616500d50e +257, 0x12fae93f9830d56e +258, 0x6744ee64348d9acd +259, 0x484dada28cd2a828 +260, 0x98491d0729e41863 +261, 0x2f15aac43c2863b0 +262, 0x5727a34d77a1da0f +263, 0xa435cebef6a62eed +264, 0xd211697d57b053b0 +265, 0x65aa757b68bd557 +266, 0xe3a1b7a2d8a3e06a +267, 0x2adf64e67252a7a9 +268, 0xadadcb75cadee276 +269, 0x7934bc57ac8d97bf +270, 0xccff0d0f412e0606 +271, 0x101a82aa3e8f3db9 +272, 0xb0f2498094b4575c +273, 0xba2561d9ef26ed8a +274, 0xfbcd1268fc3febe1 +275, 0x9aa10bb19eb152e0 +276, 0xf496217a601a6d72 +277, 0xe4be1e4f2fa91363 +278, 0x473a602bf3dd68eb +279, 0xfe8ed2a48c26f4b5 +280, 0x20e94b1a00159476 +281, 0x93e1cb1c6af86ec7 +282, 0x4fcba3898f7442ba +283, 0x5150c3a3d94891df +284, 0x91cfce6c85b033ea +285, 0x625e8a832a806491 +286, 0x28c97ba72e3ec0b2 +287, 0x8e172de217c71ea1 +288, 0x926b80216c732639 +289, 0x28b19431a649ae3d +290, 0x57c039a6e95a3795 +291, 0xfbc354182fe52718 +292, 0x819dfd7c7d534cef +293, 0xabb4093a619ed44f +294, 0xe785b7ac6f656745 +295, 0xb647b4588b2f942f +296, 0x64cf870a14c72d27 +297, 0x6d4a4a2a0ba9b37e +298, 0x78bfb0427d7ce6b0 +299, 0x8dcc72b8bfc79ac6 +300, 0x1c14d915d5e76c99 +301, 0xaf48ddea6f096d79 +302, 0x51b39b67aa130d8 +303, 0x1aeeb39d4def06de +304, 0xd678092ffedfdd27 +305, 0x8f54787f325111d3 +306, 0xf2ca2e827beaa6bc +307, 0x339d134099e98545 +308, 0x1f6a8a7b33942e43 +309, 0x952c8065dbef669a +310, 0xe066aeb6690147f7 +311, 0xed25aa92cf58ebb6 +312, 0x7601edce215ef521 +313, 0xed1c5b396abd9434 +314, 0x4fd1e407535de9d5 +315, 0xccc8315a0d4d1441 +316, 0x85753e250bb86976 +317, 0xf232e469378761c3 +318, 0x81d691b8e9aef3c6 +319, 0x224a2f9cab0ad0e +320, 0x978f3d3e50007f4e +321, 0xd3713e6a6c0cbe60 +322, 0xcce8f1eadd41f80d +323, 0x34bda028a97d469 +324, 0x90e242fdf0f59183 +325, 0x4d749754fbc5f092 +326, 0x4399f5b7851cc87b +327, 0xcb921a5f25f6c5d7 +328, 0x120bf5d0162101 +329, 0x1304cc2aa352735a +330, 0xf7236c5d0d5d417b +331, 0xc31b320fc1654306 +332, 0xb468c6b23f3fb4e7 +333, 0xb5985b5bfaca4166 +334, 0x898285a1cd2f8375 +335, 0xa13493da372aa7c9 +336, 0x15c80c09c12634e7 +337, 0x9b765c5cc9d438bd +338, 0xee7da816a9201dcb +339, 0x92e269f73b5a248e +340, 0xa8086c5de81400ce +341, 0xe0053901853d42be +342, 0x821df32c012f433e +343, 0x17a6d69ca37387c7 +344, 0x2b10044bfba3501f +345, 0x8dfd262afc2e8515 +346, 0xd68c2c7b60226371 +347, 0xe81ac114e4416774 +348, 0x5896d60061ebc471 +349, 0xa996e3147811dbd1 +350, 0xa819c7b80ecb3661 +351, 0x982ad71b38afbc01 +352, 0xab152b65aa17b7fe +353, 0x4582bc282ef187ef +354, 0xab5a17fe8d9bc669 +355, 0x83664fa9cb0284b7 +356, 0x234c4b0091968f52 +357, 0x8ab5f51805688d37 +358, 0xe9e11186e0c53eda +359, 0x10df37ef1de2eccf +360, 0x780f1b0d52db968f +361, 0x50bd4ff292872cd5 +362, 0x51e681c265f5ad0 +363, 0x842c49660a527566 +364, 0x6e56ee026e9eda87 +365, 0x4cf39e40d8c80393 +366, 0x13e466df371f7e1f +367, 0xf2ce1799f38e028e +368, 0x833c8db7adc6ff0e +369, 0xc6e189abc2ec98f +370, 0xafebb3721283fec5 +371, 0xb49bc1eb5cc17bdc +372, 0xf1d02e818f5e4488 +373, 0xe5e9d5b41a1dd815 +374, 0xce8aca6573b1bfe5 +375, 0x9b0a5d70e268b1d5 +376, 0xf3c0503a8358f4de +377, 0x2681605dd755669d +378, 0xea265ca7601efc70 +379, 0xa93747f0a159439f +380, 0x62a86ede78a23e50 +381, 0xac8a18935c3d063c +382, 0x729c0a298f5059f5 +383, 0xbbf195e5b54399f4 +384, 0x38aa9d551f968900 +385, 0x3b3e700c58778caa +386, 0x68e6e33c4443957a +387, 0x7c56fc13eb269815 +388, 0xaf7daca39711804a +389, 0x50fde6d10f9544b3 +390, 0xf3d37159f6f6c03d +391, 0x82d298f5c1a71685 +392, 0x478661ac54c5002c +393, 0x6053768e1a324ae0 +394, 0xde8fb4a7e56707ea +395, 0xaa2809301faa8cf4 +396, 0x690a8d49fedd0722 +397, 0xe17c481b9c217de9 +398, 0x60d1d8a2b57288e3 +399, 0x149adfaadc6b0886 +400, 0xa3c18b6eb79cd5fa +401, 0x5774e3a091af5f58 +402, 0x2acca57ff30e5712 +403, 0x94454d67367c4b0c +404, 0x581b2985ac2df5ca +405, 0x71618e50744f3e70 +406, 0x270a7f3bd9a94ae6 +407, 0x3ef81af9bb36cd7b +408, 0x8a4a2592875254aa +409, 0x704ac6086fbb414a +410, 0xda774d5d3f57414d +411, 0xe20d3358b918ae9e +412, 0x934a6b9f7b91e247 +413, 0xf91649cde87ec42c +414, 0x248cec5f9b6ced30 +415, 0x56791809fd8d64ba +416, 0xf502b2765c1395f +417, 0x6b04ec973d75aa7f +418, 0xb0339f2794bb26f +419, 0x4c524636efbaea49 +420, 0x6bbf3876e9738748 +421, 0xf686524e754e9e24 +422, 0x8dafa05a42d19cd3 +423, 0xc5f069ab2434008e +424, 0x4fd64cc713cba76 +425, 0xdbf93450c881ed5f +426, 0x492e278ebabb59a2 +427, 0x993fddfde4542642 +428, 0xecde68a72c8d4e52 +429, 0xe0760b3074c311fd +430, 0x68dc0e7e06528707 +431, 0x52b50edf49c0fdc7 +432, 0xb2bd4185c138f412 +433, 0x431496d7e1d86f3 +434, 0xa4e605b037e26c44 +435, 0x58236ae1f0aca2b5 +436, 0x26c72c420fc314d8 +437, 0x20134e982ab99a2b +438, 0x544b59b8b211374b +439, 0x1301c42f3a14d993 +440, 0x52a6ea740f763b0f +441, 0xf209d70c2bebf119 +442, 0xac66a4ebc2aa1be +443, 0x683713ed35878788 +444, 0x2b5578acec06b80c +445, 0x86428efa11c45b36 +446, 0xb49010adb17d291e +447, 0x73b686bd8664b6be +448, 0x6d28ebf57b6884cc +449, 0x9712091230ff58d9 +450, 0xc9c91f74c38b286 +451, 0x776310ac41dc008e +452, 0x2f3739df0bf6a88e +453, 0x5792dc62b94db675 +454, 0x5715910d024b06af +455, 0xeb1dd745458da08 +456, 0xfce7b07ccfa851a7 +457, 0xc305f1e983ac368 +458, 0x485aa9519ac00bb0 +459, 0xa5354f6589fb0ea0 +460, 0x32fee02dfdbf4454 +461, 0x4d1ddc304bbefaaa +462, 0x789a270a1737e57e +463, 0x9f3072f4b1ed8156 +464, 0x4de3c00e89058120 +465, 0xb00a02529e0a86fa +466, 0x539f6f0edd845d9a +467, 0x85e578fe15a8c001 +468, 0xa12c8e1a72cce7d8 +469, 0xc6908abbc2b1828 +470, 0xcf70090774cbb38c +471, 0x3b636a6977b45d4a +472, 0xf0a731b220680b57 +473, 0x18973929f51443a8 +474, 0xe93e1fbe7eadabe +475, 0x8233730f0a6dfa02 +476, 0x66e50b6919b0ab74 +477, 0xb1aba87c97fd08a2 +478, 0xd4dffc1fbc117ad6 +479, 0x6f7fa65724b96e6a +480, 0x4bd5800dee92e0fa +481, 0xe18a959db6256da +482, 0xe53a291bc66df487 +483, 0xb7ec306a08651806 +484, 0x1847a6b80d2821e1 +485, 0xda50391283b14d39 +486, 0xacc4d3cd7cceb97a +487, 0x57f70185165b7bc6 +488, 0x302b6d597c3aaba7 +489, 0xa47f32d037eab51e +490, 0xe1509b4408abc559 +491, 0x4f30a1d7c2934157 +492, 0x2ad03e6c60b650b2 +493, 0x334d9c337b0a9064 +494, 0xc7f442821e7aac12 +495, 0xbcdeb09298694cdd +496, 0xe42402389f8f0fb4 +497, 0xe5de56af539df727 +498, 0x7017f9b2101ee240 +499, 0x1ee5e68d5b10001d +500, 0x436229051836387a +501, 0xcd532d6d6ec38fb7 +502, 0x30a66606fdf38272 +503, 0xfdaa2ab9cf798496 +504, 0x4277b4adec70e7df +505, 0x72cfc30256e0eaef +506, 0x3c3359fd9bd34917 +507, 0xb7aa89598856efb0 +508, 0xf72226f8bf299ef5 +509, 0x258c499275a4356f +510, 0x999a56bfc7f20d76 +511, 0x2b3e7432e20c18b +512, 0x2d1251332f760cb5 +513, 0x7420e0eea62157c5 +514, 0xe85c895aa27cec3d +515, 0x27a0545c7020d57c +516, 0xc68638a65b4fff0d +517, 0xfda473983a4ea747 +518, 0xd19fe65fb4c06062 +519, 0x6b1374e050ee15e4 +520, 0x80065ecd49bc4bef +521, 0x4ee655954bc838de +522, 0xe8fb777504a72299 +523, 0x86b652ea70f4bdde +524, 0xcdc9e0fbde7e4f33 +525, 0x352c0a50cd3ac56 +526, 0x4b8605d368be75dc +527, 0x1ac9ea8129efbc37 +528, 0x470325faa99f39c5 +529, 0x25dd7ef9adccf7a1 +530, 0x5ae2c7a03e965816 +531, 0xf733d2df59dacc7d +532, 0xa05bbf0a8a1a7a70 +533, 0xe8aa3f102846ef5f +534, 0xc9b85ec49ae71789 +535, 0xb904c14ed1cb1936 +536, 0x5ae618230b5f0444 +537, 0x97987fe47b5d7467 +538, 0xabb3aca8865ca761 +539, 0x38bfdf29d4508228 +540, 0x353654f408353330 +541, 0xeb7e92930ae4ef0d +542, 0xec50f1a7ca526b96 +543, 0xd5e2dc08b5697544 +544, 0x24c7fd69d5ec32df +545, 0x6f7e1095568b8620 +546, 0x6ed9c16ca13b3c8 +547, 0xe676ef460002130f +548, 0xa3a01a3992c4b430 +549, 0xe2130406c3b1f202 +550, 0xa8f7263e2aedcd20 +551, 0xc45d71ef2e35f507 +552, 0x37155594021da7ba +553, 0x22dc94f19de73159 +554, 0x7969fc6bffc5443f +555, 0x97def7e44faa6bfe +556, 0x8b940f5e8931d71f +557, 0xd95b1dd3f1a3fdd5 +558, 0x1c83bfdca615701a +559, 0xb7fcb56279ceca6b +560, 0xd84f8950f20dcd0 +561, 0xb03343698de3cbe0 +562, 0xf64565d448d71f71 +563, 0xda52b4676e0ae662 +564, 0xda39c2c05b4ffb91 +565, 0xb35e2560421f6a85 +566, 0x1a7b108d48ac3646 +567, 0xc4e264dc390d79ed +568, 0xa10727dfd9813256 +569, 0x40d23154e720e4f7 +570, 0xd9fa7cd7e313e119 +571, 0xcbf29107859e6013 +572, 0xc357338553d940b7 +573, 0x2641b7ab0bdfcbaa +574, 0xd12f2b6060533ae7 +575, 0xd0435aa626411c56 +576, 0x44af4a488a9cec72 +577, 0xb934232ea8fa5696 +578, 0x760a8b12072b572d +579, 0xfab18f9942cfa9b3 +580, 0x5676834c1fe84d16 +581, 0x9c54e4fddb353236 +582, 0xab49edfc9551f293 +583, 0x567f1fb45a871d +584, 0x32a967c873998834 +585, 0x99240aad380ef8d1 +586, 0x7f66cbd432859a64 +587, 0x4cdc8a4658166822 +588, 0x984e3984a5766492 +589, 0xa3b2d0a3d64d3d94 +590, 0x177f667172f2affc +591, 0xb1a90607a73a303f +592, 0xe600b6c36427f878 +593, 0xf758f9834cb7f466 +594, 0x8ee9fce4a3f36449 +595, 0xcb8f11533e7da347 +596, 0xe7cf647794dabd7c +597, 0xc9d92cfe6110806 +598, 0xea1335fa9145a1ec +599, 0xbc6c29821d094552 +600, 0x37b9d6a858cc8bc3 +601, 0xf24e4c694929893e +602, 0x55d025ce2d7d0004 +603, 0xccdc69acccf4267b +604, 0xc491c04340c222eb +605, 0xba50f75ecec9befb +606, 0x1ec7bd85b8fe3bb9 +607, 0xe4de66498c59ae8a +608, 0x38aa9e912712c889 +609, 0xcee0e43c5cc31566 +610, 0x72b69aa708fc7ed +611, 0xdff70b7f6fa96679 +612, 0xd6d71d82112aadc3 +613, 0x365177892cb78531 +614, 0xa54852b39de4f72c +615, 0x11dd5832bf16dd59 +616, 0x248a0f3369c97097 +617, 0xa14cec0260e26792 +618, 0x3517616ff142bed1 +619, 0x9b693ad39dab7636 +620, 0x739dff825e994434 +621, 0x67711e7356098c9 +622, 0xa81f8515d2fdf458 +623, 0xdac2908113fe568e +624, 0xe99944ebc6e2806a +625, 0x671728ca5b030975 +626, 0xfdad20edb2b4a789 +627, 0xedc6e466bd0369d2 +628, 0x88b5d469821f7e1b +629, 0x2eabf94049a522a5 +630, 0x247794b7a2f5a8e3 +631, 0x278942bdbe02c649 +632, 0xbe5a9a9196ab99c1 +633, 0x75955060866da1b5 +634, 0xdedcfa149273c0b5 +635, 0xdbeb7a57758f3867 +636, 0x7b9053347a2c8d5a +637, 0xa059b3f2eed338a5 +638, 0x59401a46ded3b79f +639, 0x38044ba56a6d19fb +640, 0x72c7221b4e77e779 +641, 0x526df3491a3a34da +642, 0xc3b31184ba16c0c2 +643, 0xd94c7144488624af +644, 0xcf966ee4dc373f91 +645, 0x62049e65dd416266 +646, 0x7c2adccb925bf8f +647, 0xd5fa5c22ed4ef8e1 +648, 0xd00134ebd11f2cd1 +649, 0xfbdf81767bed3634 +650, 0x62e8cc8ff66b6e26 +651, 0x3a72d6bcd4f2dcf7 +652, 0xf1cd45b1b46a86ed +653, 0x1271f98e0938bb9a +654, 0x82e6927e83dc31fa +655, 0x7b9b0e0acb67b92d +656, 0x6df503e397b2e701 +657, 0x93888f6fb561e0c3 +658, 0x393fb6069a40291 +659, 0x967a7d894cc0754d +660, 0x6e298996ad866333 +661, 0x5ff3cf5559d6ab46 +662, 0xd0d70508c40349f5 +663, 0xc64c66c0dd426b33 +664, 0x8fea340ee35c64dd +665, 0xf9cd381eb3060005 +666, 0xfcc37c2799fc0b11 +667, 0x6a37c91d65b489fa +668, 0x57231000fa0a0c9d +669, 0x55f6e292c6703f9a +670, 0xd0508ffbfa55a7a6 +671, 0x885db543276bdac8 +672, 0xc26dbe6a26b0e704 +673, 0x21f884874ebd709e +674, 0x711f0b6c8f732220 +675, 0x354d0a361eaee195 +676, 0x721344d8d30b006a +677, 0xa0e090a0d3a56f07 +678, 0x16b3d5d823a4952b +679, 0x59d7874bc9eae7b6 +680, 0x9bbb32710076455f +681, 0xd4fb22242ffabafd +682, 0xe1d4ac6770be1d89 +683, 0xb259cedebc73dc8a +684, 0x35faaa3b4246ab69 +685, 0x5d26addefdaee89 +686, 0x8e7ec350da0f3545 +687, 0xd0f316eed9f8fc79 +688, 0x98b2a52c9bf291b2 +689, 0xe4d294a8aca6a314 +690, 0x25bd554e6aa7673c +691, 0xcfde5dcba5be2a6c +692, 0xb5e01fb48d2d2107 +693, 0xe1caf28948028536 +694, 0xd434aa0a26f3ee9b +695, 0xd17723381641b8f6 +696, 0xfe73bd1f3f3768a2 +697, 0x1cc6b1abd08d67e9 +698, 0x247e328371a28de0 +699, 0x502e7942e5a9104a +700, 0x6a030fd242eb4502 +701, 0xa2ffe02744014ce8 +702, 0x59290763b18fe04e +703, 0xcf14241564271436 +704, 0xb0fb73c3c1503aff +705, 0x94e27c622f82137a +706, 0x747a5b406ac3e1f0 +707, 0x9a914e96a732031d +708, 0x59f68c6c8f078835 +709, 0x809d012c73eb4724 +710, 0x5b3c3b73e1b37d74 +711, 0xdde60ef3ba49cdf7 +712, 0x87a14e1f9c761986 +713, 0x4109b960604522af +714, 0x122d0e1ed0eb6bb9 +715, 0xadc0d29e80bfe33 +716, 0xa25b1b44f5fc8e4e +717, 0xbab85d8a9b793f20 +718, 0x825f4cbced0e7d1e +719, 0x2d6ae8807acb37ea +720, 0x8234420adce2e39 +721, 0x4a8ad4da6b804807 +722, 0x1e19f9bc215e5245 +723, 0x1d6f4848a916dd5e +724, 0x9ac40dfcdc2d39cc +725, 0x9f3524e3086155ec +726, 0x861fffc43124b2ef +727, 0xe640e3b756396372 +728, 0x41cb0f0c5e149669 +729, 0xe0bd37e1192e4205 +730, 0x62917d3858f4ce47 +731, 0xa36e7eb4d855820a +732, 0x204b90255a3bf724 +733, 0x66ee83a0175535bc +734, 0x2c14ce7c6b0c1423 +735, 0x85d9495fa514f70d +736, 0x5a4fe45ead874dbc +737, 0xe72248dcb8cfc863 +738, 0xfc21ff2932ed98cd +739, 0xcbba1edd735b5cad +740, 0x91ddc32809679bf5 +741, 0x192cdf2c7631ea1f +742, 0xbbc451ddf2ea286f +743, 0xad9e80cae2397a64 +744, 0x6918f0119b95d0e5 +745, 0xa40379017a27d70a +746, 0x1aaeddb600e61e1 +747, 0x15afd93cbd7adda9 +748, 0x156719bc2b757ff4 +749, 0x13d9a59e2b2df49d +750, 0x9a490986eaddf0a +751, 0xef9a350f0b3eb6b4 +752, 0x5de7f6295ba4fa4d +753, 0x7f37fd087c3fdb49 +754, 0xa9fe3749d6f3f209 +755, 0x50912ac036d9bfb +756, 0x982cb4d726a441f8 +757, 0x8ca8d8af59b872d0 +758, 0x7f8adfb0ceeade8a +759, 0xdad390ec742be44 +760, 0xa637944d0045be5b +761, 0x3569a3b3af807061 +762, 0x9599da8eae14511d +763, 0xc333e8d19589b01a +764, 0xfb9b524a20b571e1 +765, 0xbd9dc8b37ce5c3e1 +766, 0x142333005fa389ac +767, 0x1368bc37cd5bcce1 +768, 0x16094907ad6ecf73 +769, 0xb32c90dbba4c1130 +770, 0x82761d97c1747dd0 +771, 0x599f9f267ae3444d +772, 0x79ad3382994852e1 +773, 0x2511f06d9ef06e54 +774, 0xb35e6ab7d5bbddae +775, 0xfca9fa83a2988732 +776, 0x7d4350f0394ac3ba +777, 0xa52a9527bb176ea3 +778, 0xb49fa0ceb2aa8353 +779, 0x1f62e504d1468cc0 +780, 0xe1a77bfccce6efc3 +781, 0x776cdff4dc0d6797 +782, 0x56612e39b652c1f2 +783, 0x5f096a29294eda04 +784, 0x7978abc3aabd8b23 +785, 0x79dd875e0485b979 +786, 0x8a98aa4d5735d778 +787, 0xcca43940f69d2388 +788, 0xb2d4b156f144f93a +789, 0xbd528a676e9a862 +790, 0x2a394939c8e7ec5e +791, 0xb1da900c6efe4abc +792, 0x9869af479de4c034 +793, 0x78dbdfb88ac7c1db +794, 0x18cb169143088041 +795, 0xe69e5461c51a3e13 +796, 0x5389fa16ea98183c +797, 0xed7c80d1be1ea520 +798, 0x87246fc359758ced +799, 0xab323eba95fae4ed +800, 0xbc4c0dde7f8a1828 +801, 0xdb739f7955610b1a +802, 0xecd8c68c3434cc +803, 0x138c2eb88c477f44 +804, 0x28a65f96727aae41 +805, 0xdee879f2cf5629d +806, 0x684f0c90ef20070f +807, 0xa24a819ef5621800 +808, 0x8d0054f870e4fdcb +809, 0x99e8c6e695b600b +810, 0x50b705245891f7c3 +811, 0xc02eed3a6e58e51a +812, 0x443d64e95443606c +813, 0xca24959cfbd2d120 +814, 0xe072609ea48815bc +815, 0xbcc715026590315b +816, 0x3e76df24d7aa5938 +817, 0xd8ff04940d9b79ae +818, 0x54474ce790059bcd +819, 0x278390dd6aa70e81 +820, 0xf4df619fe35414e4 +821, 0x757d71270264e615 +822, 0x1e8a373699c11b23 +823, 0xef68c82046e67dd6 +824, 0xe280006599972620 +825, 0x234e095183b0f4d6 +826, 0xe3b7560ed9839749 +827, 0xcd5ec4086572332e +828, 0xc41c0d4aaa279108 +829, 0x4b9cd6126bc16a6d +830, 0x4a7252734f3e3dd0 +831, 0xb3132df156cc103a +832, 0xf9e4abbf7b64464a +833, 0xf936df27fb3c47b7 +834, 0x9142960873f6d71a +835, 0x4ba6aa3235cdb10d +836, 0x3237a2e765ba7766 +837, 0xd62f0b94c8e99e54 +838, 0x26b682f90a3ae41b +839, 0x40ad5e82072b6f81 +840, 0xd0198101f5484000 +841, 0xe4fac60ba11c332 +842, 0x472d0b0a95ef9d38 +843, 0x8512557aec5a3d8f +844, 0xef83169d3efd4de9 +845, 0x53fe89283e7a7676 +846, 0x2f50933053d69fc4 +847, 0x76f5e4362e2e53a2 +848, 0x8676fdccce28874a +849, 0x2737764c1fb1f821 +850, 0x4a6f70afc066ab55 +851, 0x27f8e151e310fca4 +852, 0xd606960ccbe85161 +853, 0xcce51d7ddd270a32 +854, 0xb4235999794875c2 +855, 0x580084e358e884 +856, 0x2159d5e6dc8586d7 +857, 0x87bd54d8599b3ba4 +858, 0x3e9ade6a2181664 +859, 0x5e6e140406d97623 +860, 0x511545d5aa0080a2 +861, 0xf49d78ed219aac57 +862, 0xbece1f9c90b8ea87 +863, 0x1c741cac36a2c514 +864, 0x7453c141047db967 +865, 0xd751832a5037eba2 +866, 0x71370a3f30ada1f7 +867, 0x7c01cf2dcb408631 +868, 0x1052a4fbdccc0fa1 +869, 0x13d525c9df3fb6c +870, 0xa3aa8dbfee760c55 +871, 0xc0288d200f5155cf +872, 0x79f4bcd12af567c3 +873, 0x8160d163bb548755 +874, 0x5cf2995fb69fd2df +875, 0xcc98ed01396639df +876, 0xad95f1d9cfc8256e +877, 0xa3df27d9fbdbfb9d +878, 0x83e5f5dda4d52929 +879, 0x9adc05043009f55b +880, 0xdfe8329dfde1c001 +881, 0x9980ccdd5298e6a2 +882, 0x636a7bd134f6ef56 +883, 0xef5ff780c4be6ba4 +884, 0x290d71dc77a56d16 +885, 0x6d65db9ff58de1e6 +886, 0x944b063b3805a696 +887, 0xce468ca2cce33008 +888, 0x5ba1ccb840f80f48 +889, 0x28ddce36fc9ad268 +890, 0x4f77ef254d507a21 +891, 0xce9b4057fadf3ab +892, 0xb518bc68298730e6 +893, 0xd2eb5b8e2ec665b0 +894, 0xe1583303a4f87344 +895, 0x9d5a0df4fbe1bed5 +896, 0x2ba9bc03ec8cfd07 +897, 0x479ed880a96ca669 +898, 0xcedf96338324771a +899, 0x312f4fc2da41ffaa +900, 0xa0eb9cf23b5e1ed8 +901, 0xf8f88f975dc3f539 +902, 0x4a37e185d0e96e0f +903, 0xf829654a5c0b46f9 +904, 0x3909cca7a7f8c7fb +905, 0x4c2e1d66ceb45105 +906, 0xaffaa19e1db8af87 +907, 0x9ec498246bd18c76 +908, 0x21d51558edc089da +909, 0xe8984112cd1b1561 +910, 0x7de1d2cf54b0c0e1 +911, 0xa06729aed50bfb9d +912, 0xcf19f733e5db19e1 +913, 0x70edf2624ab777cd +914, 0x46685becad10e078 +915, 0x825e0f6add46785 +916, 0x66d4af3b15f70de4 +917, 0xc676614b0666b21 +918, 0x282a916c864f5cb7 +919, 0x2707283a3f512167 +920, 0x37ff3afda7461623 +921, 0xc767eb1205e4ca86 +922, 0x46b359aecc4ea25b +923, 0x67fbbb797a16dbb1 +924, 0x64fd4ba57122290e +925, 0x8acc2a8ae59d8fac +926, 0x64a49298599acc67 +927, 0xedf00de67177ce30 +928, 0x1ea9d8d7e76d2d2c +929, 0x363fcac323f70eb2 +930, 0x19e6e3ec8a9712eb +931, 0xca541e96b0961f09 +932, 0x4d8fd34c2822ec46 +933, 0x2fdd56a50b32f705 +934, 0xaac2fcf251e3fd3 +935, 0xb0c600299e57045c +936, 0xd951ec589e909e38 +937, 0x4dc8414390cae508 +938, 0x537ef9d5e2321344 +939, 0xa57bc21fd31aa2dc +940, 0xa3a60df564183750 +941, 0xbe69a5ce2e369fb6 +942, 0x7744601f4c053ec8 +943, 0x3838452af42f2612 +944, 0xd4f0dad7115a54e9 +945, 0x629cf68d8009a624 +946, 0x2211c8fa34cb98cb +947, 0x8040b19e2213db83 +948, 0xb2a86d3ba2384fd +949, 0x4b85cec4f93f0dab +950, 0xc8d212d21ea6845d +951, 0x5b271a03a4fe2be0 +952, 0xff4f671319ad8434 +953, 0x8e615a919d5afa96 +954, 0xea7f47c53161160a +955, 0x33273930b13c6efc +956, 0x98eedda27fb59c3c +957, 0x188dc5e92e939677 +958, 0x9dbd0fa0911430f1 +959, 0x5b3dcf3fa75dfd2b +960, 0x3f03846febdb275d +961, 0x20cc24faea9e9cf6 +962, 0x854f3ac66199ff5d +963, 0x31169ac99d341e6f +964, 0xa85daed3c0bc1bbe +965, 0x64633711e71ba5dd +966, 0x530e79978dc73334 +967, 0x636f2ee6e20aef13 +968, 0xf6220f8b6d9a58fb +969, 0x425db8fa32141a7b +970, 0xac7c210f4b02be95 +971, 0x5fe8cfbe197a7754 +972, 0xfff7d40c79420ea +973, 0x5f8bab9ef4697b77 +974, 0xaf6fe54e45b23fe8 +975, 0xce79456ccc70bbce +976, 0x645ef680f48f1c00 +977, 0xa4dfac46e2028595 +978, 0x6bece4c41effc5df +979, 0xd316df886442641f +980, 0xa4f6ff994edd2a6 +981, 0x30281ae3cc49abe4 +982, 0x39acb7b663dea974 +983, 0x5e8829b01a7c06fb +984, 0x87bdb08cf027f13e +985, 0xdfa5ede784e802f6 +986, 0x46d03d55711c38cc +987, 0xa55a961fc9788306 +988, 0xbf09ded495a2e57a +989, 0xcd601b29a639cc16 +990, 0x2193ce026bfd1085 +991, 0x25ba27f3f225be13 +992, 0x6f685be82f64f2fe +993, 0xec8454108229c450 +994, 0x6e79d8d205447a44 +995, 0x9ed7b6a96b9ccd68 +996, 0xae7134b3b7f8ee37 +997, 0x66963de0e5ebcc02 +998, 0x29c8dcd0d17c423f +999, 0xfb8482c827eb90bc diff --git a/numpy/random/tests/data/threefry-testset-1.csv b/numpy/random/tests/data/threefry-testset-1.csv deleted file mode 100644 index ddfa736dc..000000000 --- a/numpy/random/tests/data/threefry-testset-1.csv +++ /dev/null @@ -1,1001 +0,0 @@ -seed, 0xdeadbeaf -0, 0x8dfd999efc587d2e -1, 0x3bf6c47ed872597f -2, 0xd82537743662be19 -3, 0x46103c1408067361 -4, 0x7346b65b404eb9fe -5, 0x4b83687af205cda8 -6, 0xc9cccc1fc1c330 -7, 0xf1998771158a2109 -8, 0xda5dc10ad259dbda -9, 0x4646e487520d8e1 -10, 0x159fc0e3e691e0af -11, 0xe2776a537d1a14db -12, 0xc1c7a9c84e1ebeae -13, 0x884ac2384b510f2 -14, 0x4884b09c9a60131 -15, 0xb13a1cda0d508af4 -16, 0xc3d21a2f212bfce4 -17, 0xa3b801d11d523597 -18, 0x1032f052626e5c62 -19, 0xd3b97f4372f6b7d8 -20, 0xd2982ca1c2af2372 -21, 0x13be3d71202f619 -22, 0xdace9f84ef1ddfa6 -23, 0x111bf9b9cd36c31a -24, 0x1ccc5e5be7281a26 -25, 0xa4cd1aa57030bafd -26, 0x99e30fc07a8990a3 -27, 0x9bfa5257d8e64ba2 -28, 0xfab6cdc7f1ed5221 -29, 0x85a4cf41ee744f97 -30, 0x1bfa09917b2906ae -31, 0xda161ec1288b8909 -32, 0x6b1b3ca2bd91573 -33, 0xcef3a71775de82e9 -34, 0xe8ca72781abf1c22 -35, 0x5b8b673b060631ad -36, 0x6658737a84dfe2a7 -37, 0x65a2254b602bb09f -38, 0x5ee6bfeadda0b432 -39, 0x8f3e8af494aeb36f -40, 0xd1c29d016aa72890 -41, 0xfd96891840f0e51d -42, 0x6103cebcf8398a46 -43, 0x7d899055702823a0 -44, 0xf9597bb3dce6d7e0 -45, 0x85b3bf105f26219 -46, 0xedfe4b32a28e4386 -47, 0x74f2415ce2908181 -48, 0x7de6c2f16372ca16 -49, 0xe2b29d517e17feb5 -50, 0x30d7ffc292038441 -51, 0xad4522ce80cf4c1b -52, 0xa9c79bfa1f31b5d -53, 0xc2f17eaf6c6fb057 -54, 0x27938c6a95a6663b -55, 0x239db1ec714acc17 -56, 0x8df60daf4949f4bd -57, 0xb2f6b97d127209d4 -58, 0xad58961f74c8596b -59, 0x6e920c60d6460627 -60, 0xc3839f29e9ce8be0 -61, 0x339161e608237aa3 -62, 0xf148b8d4fef7386d -63, 0x2cf8bd6438b2a52 -64, 0xa1e432e4a618e741 -65, 0x56e1e56517151ed5 -66, 0x61e528b5a3f6d4ce -67, 0xcddea3f49d6ded23 -68, 0xf966618d29452959 -69, 0x5d4fb65eb30e8f28 -70, 0x4a913ea38620fee5 -71, 0xa00f4c5528a3b760 -72, 0x1ac5a2ce0486d8ab -73, 0x521ca18c998b8d5 -74, 0xb0779142f4d0bd69 -75, 0x22f054d9131f1fe8 -76, 0x8c45b6c48016430d -77, 0xbefe70d6c6f8727e -78, 0xc581436cc4c2c0ea -79, 0x5864d0268e18ee15 -80, 0xca47fe47d22aa5e6 -81, 0xdffdbbc0db7ad425 -82, 0x2ae423bd73de5d15 -83, 0xb83b4651838308bc -84, 0x16fa5f72b53c5d6 -85, 0xa0b6cb353724ac01 -86, 0x64d4dc2db97a7d36 -87, 0x79ccd3dd98b33cdb -88, 0xadda2d6132e73ebe -89, 0x7d1a82eff9dba6ce -90, 0xc27defdc4f9c42a7 -91, 0xe12bcf2300cc0585 -92, 0xdbc65c0ee8511e31 -93, 0xaa9a1edff55c22cc -94, 0xc007f355f38dc50c -95, 0x4fbed1aca4bf4222 -96, 0xf137a501255f8852 -97, 0x416ce22d2c6b8e4d -98, 0x5f9fc6ca7a7e9000 -99, 0x9133f67a9222cbf -100, 0xb5fad01321365bfe -101, 0xe3e971e5481249d1 -102, 0xb2950204c847bc0a -103, 0x7ea97815ffa7d45a -104, 0x482c5be26c8bdf3b -105, 0xe42e7e3114197d0a -106, 0x3b74ae3e10f20ae7 -107, 0x92a5e6eca6ce4c38 -108, 0x951ef146ac76378 -109, 0x282f71a81cf08455 -110, 0x3f267412ad1483a5 -111, 0xa5b91846efa301ef -112, 0xaa31cdcfd08603b5 -113, 0x2e16b10730082c4f -114, 0xbdf14631f750e96 -115, 0xd008abe07ede91b6 -116, 0x994ee56c08ff60bd -117, 0x53f0ce17c7c350b9 -118, 0x4c6f01008b3f93 -119, 0x575ee5e7fa184714 -120, 0x83ef0302e14bdc0d -121, 0x5bf2a34323954dab -122, 0xb489e8c4c51a8683 -123, 0x4c9e9801a6acaa07 -124, 0xe9d2e19c20612fe0 -125, 0x2ee2ca0a4d83aa46 -126, 0x19d3a90895d7773c -127, 0x4130367c3abf9b1a -128, 0x1163968e394a67a1 -129, 0x67ffcbbfe478276c -130, 0xd57b578ec019ce0c -131, 0xb455156a987ea010 -132, 0xa9b429ce5f337432 -133, 0xff84cf0f673cc4c4 -134, 0xf034b32b302d0953 -135, 0x9bb6bc59375bbf53 -136, 0x44a2d4bc278da710 -137, 0x78023c9fc08e6247 -138, 0x6b27a1397bd5d278 -139, 0x193758c805b28105 -140, 0x28b88044af4b5313 -141, 0xdf32108c3da9cbc9 -142, 0x6cdb5ffbc5b589e1 -143, 0x702d9691e509de76 -144, 0x405cba179f3db3b5 -145, 0x73d44e0be3ac8048 -146, 0xf9d578eed861f37d -147, 0x9d04541aaacab238 -148, 0xce4507880b30adca -149, 0xaec02613164bec9a -150, 0x346180904e9beade -151, 0x624adb9e18bf4dca -152, 0x3ad2ab92b1f11b23 -153, 0x7d5ae064eee4f228 -154, 0x4e2bb6e3851953c2 -155, 0x55bedadf90ddfa04 -156, 0x4f9422b9142c837b -157, 0xeb5592fb0a763ead -158, 0x3ecb85424422c74a -159, 0x119bbfa61eb2222d -160, 0x6505a8c9e46616bf -161, 0x57bb55ae533b24c5 -162, 0xd6cee34b85233f67 -163, 0x7ea146f8a6edccf3 -164, 0x76615fab897424c1 -165, 0x6d79fe83053e2769 -166, 0xa2759466a39a899d -167, 0xc71216f7edc5fa52 -168, 0xbad1fec86d6684f6 -169, 0xd461ed7882597a5b -170, 0xa437d1518e84a43d -171, 0x5f7d08235e202553 -172, 0xdd87bf84dd2ee070 -173, 0xf2be8b7cda72f89d -174, 0xb221c206f95bb237 -175, 0xbf0643fe5b908171 -176, 0x6bf7c1606a106580 -177, 0xdb356bbb10ea4eda -178, 0xe237835dd0d4690 -179, 0xe6c2fff624891ed0 -180, 0xe08936b04987ce88 -181, 0x2837dbe9582a2658 -182, 0x51d176aba32aba6b -183, 0x5e84cf73553b7d65 -184, 0x65ae1e2bfd16072a -185, 0xf1e5ba1a331380bc -186, 0xd635cc846b72af5 -187, 0x5b0ebda48c952d27 -188, 0x5e05122799559b71 -189, 0x58636876eda68987 -190, 0xbd7af40a48bec96e -191, 0x85c640b51a9f45f1 -192, 0x204a037b8e6e312c -193, 0x961e7967c267be6f -194, 0xa638d40cdc30c59c -195, 0x5a39715f059bdc4d -196, 0x672b41e8c97af455 -197, 0xd30fed911bba090f -198, 0x491a830b50c133b5 -199, 0xa17c651d10ef18d4 -200, 0x18c5ed30299ca860 -201, 0x422b896bb244bf22 -202, 0xc5f46ffd55ef2588 -203, 0x709cc6441b029ef2 -204, 0xf253dfa120c336c1 -205, 0xecaa82e7fbe74f55 -206, 0x2fd810efb17f6736 -207, 0xe7a25ab84fb25ed2 -208, 0xaf7193b55b4f2c68 -209, 0x2a759a4ee4a1ce66 -210, 0x16996f2d902284bb -211, 0x87d8c6d1879f76fd -212, 0xdc966392468278dc -213, 0xe41e4051d267adfe -214, 0x381a17ee5c0be0bf -215, 0x92f27f7e4d3316a8 -216, 0xcfc791e85c47d026 -217, 0xd3fdbf29fc4b3b9a -218, 0x42e5919e80dbe10 -219, 0xab84a06c93add70a -220, 0x4f09d5438a9cf6ed -221, 0x60e5a77f3e81cc62 -222, 0x86e0c8b80336e771 -223, 0x899c3c4372b18cd8 -224, 0x8e4b3213708a89e1 -225, 0x265ed6061b84ce2 -226, 0x80770e2169b55299 -227, 0x39fccaaf318d18b2 -228, 0xf1b996ca0a6b8dcb -229, 0x2d5a2497533e1bbf -230, 0x82e8bdbea5fd4825 -231, 0x96beae4bc404d6a3 -232, 0x6bd730a492452ec8 -233, 0xb64ebc3e1342d159 -234, 0xb1632475806f1236 -235, 0x2e753cfda372774b -236, 0xa071f3cfac5af1c2 -237, 0x2cf0268115fca199 -238, 0x79255186612c0e7b -239, 0x2ddda40d56bcea5d -240, 0xcae06b8e382dc2f3 -241, 0x4c4eeb5a29713cb9 -242, 0x9094b57b8a7d48e0 -243, 0xc770e33c1203b229 -244, 0x86d82971c2c93900 -245, 0x890e721300b7c4d3 -246, 0x3060aab5f8cac918 -247, 0xbe1eb72ed892942e -248, 0x7c9dd3cb08d8b96c -249, 0x5fd00ae5885d5de9 -250, 0x4417cce0c28a8c3f -251, 0x43cd3a2dc30b89de -252, 0xc2cb18532d9530fe -253, 0x28abfd68d23173ec -254, 0xc4d76303811fce07 -255, 0x59bd12a60ec03a -256, 0x34d7ccec03c71605 -257, 0x8b75d9264501f015 -258, 0x7cd57fab83c4a0a0 -259, 0x8da871dc3cbc9eab -260, 0xb584498a027618eb -261, 0xc6e40e951710b610 -262, 0x41178da78714af7e -263, 0xd23bf6c5d4f72956 -264, 0x96a7e56e7cd445aa -265, 0x9a0c33f1026bc110 -266, 0xa9e827283fabfb28 -267, 0xc5db920653ca6532 -268, 0x7d7c2798440bf4fa -269, 0x29c67ba6461f747a -270, 0xb8714cd0b123302c -271, 0xd3dbfaad42155417 -272, 0xbf7a42afb38e35b2 -273, 0xc68987e460f75e2b -274, 0xc1870d0d8b3749d1 -275, 0xedd865f6c4742810 -276, 0x97257a657fb3cabe -277, 0x7481e43145a8d41 -278, 0xd5bf38b5e9dafc7f -279, 0xd79afc7b1005e7a -280, 0x6ad40d65e9b5a5ad -281, 0x65075c2e32fff49d -282, 0xd1be9510a7f3b969 -283, 0xd07acc1e3f6eb257 -284, 0x41dfff9ffb08776b -285, 0x2521ba1b48ef458c -286, 0x178fdba8b65a61c5 -287, 0xf72679d974b82e5b -288, 0x723c29de610d0b12 -289, 0x84726f3e749c0c1 -290, 0x7316136529dbbb9d -291, 0x62d5c6fcfdd7b104 -292, 0x5ed0a981f49819f -293, 0xedc777d4f5085908 -294, 0xd1758061e06720f3 -295, 0xccdf37b1a089e664 -296, 0x4c7eccdfcc38b22e -297, 0x3af579b044760f54 -298, 0x4ebb096a5a14053d -299, 0xf84f1e6aea913534 -300, 0xab8187a201171f -301, 0x2fdd889a5b23ab70 -302, 0xae0894fe8c9356ce -303, 0x3c98be30e5ac171f -304, 0x566953af2a7a305d -305, 0xb15bb69ebd40f8bf -306, 0xeefca1ec57e47780 -307, 0x88e3d9a3377cd873 -308, 0x39ed63117f8e1ba5 -309, 0xeee20fabef374e5f -310, 0x836c24fbfe91a231 -311, 0x9de79447cb2301de -312, 0x8e3028226501f563 -313, 0xede195f88a8976fe -314, 0xfa67e7f210a9ea65 -315, 0x33a9286c9cc0519c -316, 0xf293cfc77d255e0 -317, 0xcfd8e6a385302439 -318, 0xf801e78f6bad9935 -319, 0x831bb783f70bac85 -320, 0xb85b9b1e1dcdf06 -321, 0xa41009e83579efac -322, 0x9095c71cf018e4d -323, 0x2ec789714277148c -324, 0x46067636a9ed2f33 -325, 0xd9385c2b49db3d95 -326, 0x69102374c36463aa -327, 0x94dec24132bb3042 -328, 0x81c5ff32132d8a4b -329, 0xa9cf7ef654a14c5c -330, 0xcea3e704414db905 -331, 0x9b8ad73d3cecbe73 -332, 0x59c3613f1f59c91f -333, 0x96becdd5d3d6eb7e -334, 0xe532174a0e32c691 -335, 0x52f9ef72eb3a0e0 -336, 0xc47812f381b1034d -337, 0x112ff07cbc1d95d7 -338, 0x8af49fc2e11d14e9 -339, 0x5f0bb0c8e6d38f37 -340, 0x5c92bc8be957afbd -341, 0xe8f175d0f89fd52c -342, 0x76223aa3b45638b3 -343, 0x3e68dc64b3402203 -344, 0x7a1da1d307e31444 -345, 0xd0eb8f54e2fab68c -346, 0x44182e518700331f -347, 0xf149093ac30a395c -348, 0xfd23f8f75c25fcfb -349, 0xfcf727ca90f9e4b7 -350, 0x85dc5c47fd81b61d -351, 0x72b726cf22d2f20e -352, 0x3f57ccd8f6a33bce -353, 0xe363ae312c97ec06 -354, 0xfde8b0a33423ee87 -355, 0xe8c89d34bb501e9d -356, 0xbd4d8774ebaf9046 -357, 0x40333dcde4e889d0 -358, 0x5c31d5695aaf7a18 -359, 0xc168172eafb6021b -360, 0x1bed01cec3613e8d -361, 0xdeb623f4effcfd6 -362, 0xd02f73c698f24935 -363, 0xbae9cb97df30d4b -364, 0x2c8dfe769edc25ee -365, 0x768041adc56396be -366, 0xf11f31e14bcc8f86 -367, 0x1cc1ac84b5a5eef8 -368, 0x7cd911d41054b0f8 -369, 0x60228e0c35106ce9 -370, 0xa92ac07cfd218b7a -371, 0x6e0ce56984fd6817 -372, 0x780b1c87423fef3f -373, 0x677be089b5bd8fd9 -374, 0x2454954f7e5c8c0d -375, 0xea1d3e8e67934975 -376, 0xd0199f2ad1c5b0bc -377, 0xa7961b7893a67372 -378, 0x28517fd857003446 -379, 0x69cfc7298d4f2aab -380, 0x14e673667c3a9c31 -381, 0x3d2326c751b57454 -382, 0x323f62bc000f68f6 -383, 0x58c1b8561f61d24 -384, 0xf4cb934358649f62 -385, 0xa4268dd0327460a4 -386, 0x922dcda4b4062a54 -387, 0xe1c77cc9775004a5 -388, 0x4d6648be23d1aae3 -389, 0x36e66b76d509f22f -390, 0x98a79de81ada9683 -391, 0x911308910ad0d0e6 -392, 0xa78a75232eb9c534 -393, 0xd1620acff1293f3b -394, 0xc2564f1312d27a65 -395, 0x70d5a4d369a56e95 -396, 0xa27a741994153da7 -397, 0x3fd84f4095c66967 -398, 0x8370c9ea207fa4dc -399, 0xffef37922d7c15d3 -400, 0x10bc39f6a7575b21 -401, 0x6ae92a96b97e1f1f -402, 0x8adfba7ab6ca7a72 -403, 0xdf1b40629ce3a3b -404, 0x55d0451d15de716f -405, 0x2bd54462ff147e0 -406, 0x676723dc7af24d1c -407, 0xc3a7f70b34988a83 -408, 0xe716a0967a8c69d6 -409, 0xaf124e06fc7cac59 -410, 0x7951c1b7294d532a -411, 0x543e87364c521abc -412, 0xff5c44c50d4ee584 -413, 0x4a20724584833ef2 -414, 0xf605912a8c86b52e -415, 0x58e76b9dfd4da8db -416, 0x2279cf8b4a4f8894 -417, 0x99e4535e58af23e3 -418, 0x98b357e92d197aec -419, 0xb665faf7ec3c5892 -420, 0x74ff68056822f96c -421, 0x2443b541f675a9fd -422, 0x2ddb1042d52c00ae -423, 0x53bce4d472853bbd -424, 0xddd12064af825de -425, 0xd9e451ebb7871b0b -426, 0x284e8b62b5140d39 -427, 0x392f6f741ec18b5c -428, 0x53c1471d27c62d28 -429, 0x957c668aaa12dcab -430, 0x905899dcc9c8d748 -431, 0x85b9cdbb0195492 -432, 0x3285475338298b0 -433, 0x362aec5454354816 -434, 0xaffcafd1179a163c -435, 0xe7303efbbc4f41fc -436, 0xe5bef7dc443e92f4 -437, 0xc30a00527a65fcad -438, 0x10f35ee768a411c5 -439, 0x46ab523cfd6f019f -440, 0xf96997ee80420b3c -441, 0xd6bd882bc6334bce -442, 0xce8082585fcccb74 -443, 0x10a585df3e216780 -444, 0x8bef43483e7359bb -445, 0xb88fc9f0de92ebab -446, 0x8f9f9ec7e1bcdc7f -447, 0xec0da8b08dbf8ab7 -448, 0x8967d7116f0ca59b -449, 0x3ec612e1c87c23ff -450, 0x5f4c5e66476f3c37 -451, 0x536d0ddad6830a22 -452, 0xce05b606110b2ff2 -453, 0xbc06b0392b8db2f4 -454, 0x109feccc811d2237 -455, 0x1c6d58cbd3717d5e -456, 0x4bf990f210d7046 -457, 0x98c0e58f2e655da2 -458, 0xe71155da62d7207f -459, 0xe619955157476acd -460, 0x5484ce353c85962d -461, 0x4f30e140971d815e -462, 0x1aee57fec03675c1 -463, 0x9d6ac96b29e5236d -464, 0xa8bc59565b8d58f9 -465, 0x888f185056d1ef52 -466, 0x32bf6f97834d5f3e -467, 0x4fda3ca53a0aad5e -468, 0xb06670f7d65dc538 -469, 0x3394e29fd0a067d1 -470, 0x29f7c702dcaa4d6b -471, 0xafc0eb498bafddbe -472, 0x5002c13e14be570 -473, 0x11b62a54a56e7468 -474, 0x15ae967503c5b445 -475, 0xa1282117755e25e4 -476, 0x247ae0993e30d491 -477, 0x328f519e2974c09d -478, 0x963e0c8c57e3a4e1 -479, 0xfd2d1a916eb9def2 -480, 0xa4625165c4cd23b6 -481, 0x935663b351deb205 -482, 0x4ec13ee6fd28c2ce -483, 0x57365950d55bcfeb -484, 0x36d56e4c073cb9a2 -485, 0xa3deb42d6419e3c7 -486, 0xc0a6b68eadab9a81 -487, 0xf99a94679e32a1e5 -488, 0xc42d64e664eb0375 -489, 0x323de13c4da53f9e -490, 0x548e4376950c3229 -491, 0x5d53452624beda53 -492, 0xdb8dbdc4d06fcbde -493, 0xcfae0fedb5744805 -494, 0x8d093170690f3ac5 -495, 0x31ad2ff1c80c20ac -496, 0x40c7570d7660805e -497, 0xdfc383cd341cc5fe -498, 0xa571fa523e56de7e -499, 0x5fe751124076e6aa -500, 0x6696c91142c1a338 -501, 0x5c2295e731cc37e4 -502, 0xea4759143aeafa7f -503, 0xf51103c2360f23d8 -504, 0x58a0e754c23434a0 -505, 0xc81291121fdac698 -506, 0x8679b3dc92d444dd -507, 0x9ec6662d4aecb616 -508, 0xb508daa350249f07 -509, 0xdaf489538ed15145 -510, 0xcb6bd65b1c81a90c -511, 0x7f5492214c7c11e8 -512, 0x875effe96d081ca9 -513, 0x1e35d4b75f19369 -514, 0x49029232ba45725b -515, 0xa73202231bebe958 -516, 0x8011e084a420d3fa -517, 0xe7ff845074367c35 -518, 0x3a9e9ddb2ff812c -519, 0x6f5e47f4aa71a356 -520, 0x91e5a3a77e5b008c -521, 0xad173c173829519f -522, 0xadf0a51b9dfe9e97 -523, 0xa8fb30c571be5e92 -524, 0xb78e79d25ff80064 -525, 0x120eeaa9accedc7c -526, 0x81020045a1ff2669 -527, 0x66a50f790048fefc -528, 0x933c1efb74bbabfd -529, 0xc5fc20f210302719 -530, 0x8151dec3094fabde -531, 0xd2213b923bf407aa -532, 0x78da0fc0b44771eb -533, 0xd3a628d7eaf1f5d0 -534, 0xf7e444d35eaaaea4 -535, 0x2e5a8469332422c0 -536, 0xc4e9e4166203bdc0 -537, 0x68b11509577357cc -538, 0x1c22ba556358f1a5 -539, 0x1130c889b5c71f31 -540, 0x68fd0def61e6a4d3 -541, 0xd91797bb9243ba7e -542, 0xa2230c8c22e607b4 -543, 0x777331fadde75233 -544, 0x5a10baebd665287c -545, 0xc6e37c206f8ef53f -546, 0x2153e16620a7a26f -547, 0x7c044870163ebd66 -548, 0x2a78dbc7b40026b5 -549, 0xe1b372326f13f738 -550, 0x1bd9ed17eb120bf8 -551, 0xd69aa5ce828d6f6a -552, 0xedb21795bc2fe078 -553, 0x9424cee925d04cb0 -554, 0x1487a67127236306 -555, 0xbb04e7bc49c9e892 -556, 0x7d2cb1fef10eb638 -557, 0xb2165be14331dfee -558, 0x608b006694436407 -559, 0xde51a803f31ecf58 -560, 0x2baad9e91021165 -561, 0xc5fdebb7bfe058d6 -562, 0x7d70f942899e39d0 -563, 0x6125c0830f211474 -564, 0x2b63c71b5e2257b0 -565, 0x38162d3452ce5a43 -566, 0x47d92f8500ecfe89 -567, 0xb4b0e8e986835907 -568, 0x64024e226440fdd3 -569, 0xef14e5e470056074 -570, 0xbd98e6483f249d13 -571, 0xb772dcbc1a4c59f3 -572, 0x39f88aee50df9b -573, 0xe1284ee3b725f8bc -574, 0x30b997b194c75fe4 -575, 0xcb8830869e416d6d -576, 0x96dda63deae7dd5f -577, 0x250cbc3004548474 -578, 0xd386e14eb6612f48 -579, 0x516613a018bc41ec -580, 0x3d38173562501913 -581, 0x8f95bbd2fe704484 -582, 0xeea5bc9616a584ec -583, 0x35a6ab8de8843dac -584, 0x9df0a94962efbd1 -585, 0xfdb0bd56c87735c2 -586, 0x8cfc1e372a8368f5 -587, 0x8b23d5fd3b5591d5 -588, 0xa67e55c12bf454d5 -589, 0xc1de05db8c87c9a7 -590, 0xc922075e71b9a176 -591, 0xb8411ab83c539350 -592, 0x6e3e5390e04bf51f -593, 0x265f5f4efd50c24b -594, 0xda4a0b190ed7e4bb -595, 0xe3b9badfb5f149f1 -596, 0x96b3c82ae413d007 -597, 0x6f0ad7739a6c754a -598, 0x8356ae17125221d -599, 0x7f54dbfd1bed2149 -600, 0x1db3446564c48acf -601, 0xeab66293c35e8bb3 -602, 0xec71de5e82111496 -603, 0x307d1ffb851f3ea3 -604, 0xe7763576290aa70a -605, 0xb54df18f36ec2901 -606, 0x1274c4c6b71070dc -607, 0xd5427bfaa1046f0 -608, 0x779d99339f644b2f -609, 0x408c3b4b6a634b96 -610, 0x1735ee7f87bb6851 -611, 0xa5780777c5f4d916 -612, 0x5bf9f4d091ee8ac -613, 0x72a16b375faacbed -614, 0x1cbcdedec43afe95 -615, 0x969f6bb71211f0d6 -616, 0x16205de04f90e353 -617, 0x3d8383b3ebca6fb0 -618, 0x10fdeba49ed28dc7 -619, 0x7db0d19d648a705b -620, 0x58e3c21bdcabf3d -621, 0x62a3082250cb2532 -622, 0xb253b1030f0b10ee -623, 0x83050c560043946 -624, 0xde988add6676546 -625, 0x40ff1d99d7afa3e5 -626, 0x2949dcd8f797c0d0 -627, 0x85b3588ea7d06109 -628, 0xe6158241a7818a08 -629, 0x874c0e4d8f133e8a -630, 0x802ef6fade0787ff -631, 0xc8f4c96631fd13bd -632, 0x1cc53ceabaae0621 -633, 0xa3a8215bac5844d0 -634, 0x3e9a46365495fca9 -635, 0x5b1a8b67d0cfff39 -636, 0xa4c00a256a7528d8 -637, 0xdb0dcabfeec2f50c -638, 0xb4b11e407e0ce53d -639, 0xf0290a216960acb5 -640, 0x647c256bc27149c1 -641, 0xa4c65fa3a1b3a384 -642, 0xcfc3a91aabff01f5 -643, 0x56af49b0be94e98d -644, 0x78192db16ba970bf -645, 0x8be6ab828ca60453 -646, 0xaec8783f7b08389f -647, 0xbf60b1a0a05822e9 -648, 0x773dcad583ad616a -649, 0x66c7c2accfe05b5e -650, 0xeaf428e3f8a86013 -651, 0xbafafbbea503ca83 -652, 0x12fbfe395a53b22 -653, 0x5b0803a9835dc747 -654, 0x6c104a7da8b0bb27 -655, 0xa8b88e467c4c4264 -656, 0xaf921baa5bf05a3b -657, 0x65ba0568bee94c6f -658, 0x20e4f7d26ae8126b -659, 0x1a21cdcb32a11571 -660, 0xb54cc85ddabf7169 -661, 0x7a96f253742c7ad -662, 0x6232ed42c7776d82 -663, 0x28617c73281c3332 -664, 0xdeb63b98b7f96fc0 -665, 0xa99b062863e06102 -666, 0xebf044bcefed86f0 -667, 0x6e3c394a7dcf0654 -668, 0xa8010615532d4185 -669, 0x7a848c300193a6c0 -670, 0x24cd4460125dc3ac -671, 0xcb7855b33cca6b82 -672, 0xcec13cf78f398d29 -673, 0x8ad170d6a9b257dd -674, 0x974e175bcd30d07d -675, 0xd354ce50f8f40865 -676, 0x4b28bba40a25dde4 -677, 0x6e7e9d53b8842846 -678, 0xa1a7effae10190df -679, 0xd04d564e0c0df5d5 -680, 0xffde7841dc21b687 -681, 0x9b1860198d2e41aa -682, 0x24a7d92cbcd7782d -683, 0xe87352efade1fe66 -684, 0x5f302e85b504b68f -685, 0xee93d343f09d8749 -686, 0xbfd683a06d5944ca -687, 0x325743a5a7dc38c7 -688, 0x7e96fe56f6884304 -689, 0x9bee81fb0adafed4 -690, 0x35e5b7dabf13f87f -691, 0xecb4fe689d3f2d62 -692, 0xc98df0a573051cca -693, 0x31344816b051aba -694, 0x6b74db489de2aeac -695, 0xbae6b717869cd684 -696, 0x9dbd5b6a5263c332 -697, 0xd2a84a6af9dd66dd -698, 0x6ec0ed649d6c0423 -699, 0x4fb425d69c495aa6 -700, 0x5f3c4bb82c849352 -701, 0xf936695a6db83ecf -702, 0x1850bca22a80a0e5 -703, 0xd682f6ac9f78d35f -704, 0x739ed6e0627599b8 -705, 0x2d1c3113339984bc -706, 0x1677a16b08764c69 -707, 0x1a46fe6b943eb342 -708, 0x45bc46da8e1ae218 -709, 0x6b899e934ca545d3 -710, 0xa49c7d04a14f01a -711, 0xf6cc946f76aee8f9 -712, 0xd57765ce52bc2626 -713, 0x9d5a611be45e54f8 -714, 0xc4e943fd1d93c8e8 -715, 0xf8bf900e053ae678 -716, 0x35fd93a2d3ca3ad0 -717, 0x28da11b273ad9626 -718, 0x4046bf1292aa4736 -719, 0xad2edd82a440e376 -720, 0x2d2e469cc5815e02 -721, 0x2bbdb981bd3477e1 -722, 0xf7e1ab492ae78b50 -723, 0xd8e8a2f1deb35bd3 -724, 0x38648d4e5ef1f775 -725, 0x66db82d34d00b6f -726, 0x29d9f8ee57bc77b0 -727, 0xdbd37997c9496231 -728, 0x99da76ed64137b55 -729, 0x41e94018a92a92af -730, 0xe9444b859466bc63 -731, 0x139ea8ec0363ec81 -732, 0xe5573db463b521eb -733, 0x91ee2c97612ff6ab -734, 0x17038e62d8d5547e -735, 0xdae84fda26485133 -736, 0xf32ca23f5fb0a2d9 -737, 0x874a456ee5fb95c2 -738, 0xdd0e839b975e3475 -739, 0x1d45382adaf65c68 -740, 0xe98fb57275e4f06b -741, 0x5680ec280f703935 -742, 0xeddec081cf938ff4 -743, 0xf6e156698ddc7f3f -744, 0x5653fb5f9493628d -745, 0x31128e4f1bb7abbc -746, 0x966392eb3ab3d294 -747, 0xc18f506c9bd5727f -748, 0x33f3861681488c3 -749, 0x88eea94d91f3ec4f -750, 0xc07df01a897cfcbe -751, 0x1273a8b06bb1a271 -752, 0x92eceeb94ee16b54 -753, 0x2372a2660388f673 -754, 0x12f0f9c80ae16123 -755, 0x192880a152ad8fd3 -756, 0x67ddde771ec9e527 -757, 0x29ef5b708626c4fa -758, 0xdf65824bc7e2f5d1 -759, 0xed186a843266c66d -760, 0x82bcae004f3c0011 -761, 0x3a00ac4e2aa8f1b8 -762, 0x14542fa617647e91 -763, 0xab833973b418a788 -764, 0xfff24c07ee1e1a8e -765, 0xc9483de3fa539f39 -766, 0x3ac2fe43b2865dd0 -767, 0x3fa95781cd250f59 -768, 0x306e75a4e686b37d -769, 0x6590018fe7123137 -770, 0x29fa6de7fe953978 -771, 0x235a7778eb3defcb -772, 0x4866fd1cbb1de581 -773, 0x66294fb38c3a4d1b -774, 0x2eba0e0b6a16a3a -775, 0xc416b8fce537f10e -776, 0x11b40b753610cf -777, 0xa800cb9afe30a55d -778, 0xc7843d545c02d7ae -779, 0x19d74191419fd649 -780, 0xed8d718b6f8c05bf -781, 0x321b3469a3b9f8dc -782, 0x558799f6b55c0ae0 -783, 0xb289b9140c769381 -784, 0xc96bb650d7a5d3e0 -785, 0xc2e92e33b8559b77 -786, 0xf4f5f6ae13188205 -787, 0x2ee80f197ec22d18 -788, 0x6d87c2241c3e6d63 -789, 0xd145a7a0a2e7b011 -790, 0xc62cd586690015a0 -791, 0x9f58724c6bb22eb5 -792, 0x1f4d76cccba65f65 -793, 0x2c8ef48d0ed3f00a -794, 0x4100357f24318944 -795, 0x99f50ea3b1e806b7 -796, 0x80b0b55abef2e2ba -797, 0x728eaa6f3dea3ff2 -798, 0xb9fe60138d05628a -799, 0x4670c98cb3b1c59a -800, 0xed88e42657806925 -801, 0xa5f002df4a0fccb8 -802, 0xec8c1a342c98136f -803, 0xa356077ed340cc9c -804, 0xe87cc8ce72c844df -805, 0x663b6b98d1b215f5 -806, 0xe8ad0986f0a51b9f -807, 0xf77e0dd6396d98ca -808, 0x16d0284cc96530d2 -809, 0x21dca6308157182d -810, 0x4e80e0e6a0023ddd -811, 0xec147ee76408744f -812, 0x7772e8a51336d259 -813, 0x5e951007cd864259 -814, 0x9921dd15ebef245d -815, 0xa094b493f836ae35 -816, 0xd7fab52dd503383 -817, 0x2b7f2d67820bfedf -818, 0x15a2ab3bb9a269eb -819, 0x92f10dfb889b32af -820, 0x38fd566d1787da48 -821, 0x2b1f206adf06f0f2 -822, 0x998729e56a03596b -823, 0x9caa4041b8b8284e -824, 0xfe10ef8016e923f2 -825, 0x5181ba35c1a28b42 -826, 0xeb61ed1495837bcc -827, 0x3a320559880e1a29 -828, 0xac1edb5359dd9260 -829, 0xd2ce3b57da95c407 -830, 0x4375b7b9f6fbba1d -831, 0x446ec944796ff6bb -832, 0xaec4b78b5e828092 -833, 0x58004da5a0c153e8 -834, 0x5a2a2fad35215a5b -835, 0xeaf28165ff768948 -836, 0xc082d63ddad8c91f -837, 0x283d10a4300609d2 -838, 0xd2b4552391560573 -839, 0x4fdbefb9e342f858 -840, 0xa43906a7198f7ef4 -841, 0xcef94695a5d3cd88 -842, 0x8296bafa49c5cea3 -843, 0x351e0421b7ce8812 -844, 0x81d394848a445647 -845, 0xbfda8ffeba72599d -846, 0x823c00f90918421d -847, 0x2bad7eceb840b4b3 -848, 0xed9ca1321e8475f2 -849, 0x33ca86b7634608f7 -850, 0x3351c775ea252a18 -851, 0x6ad518a58bbb6469 -852, 0x2114c295e612cd6 -853, 0x18ba78ee3c710e1b -854, 0xfef3c2f9abae434a -855, 0x2f2033652e9eeeb5 -856, 0xfa5baabf35fa10fc -857, 0x38f160d51e3019b -858, 0x455cbd400f87e960 -859, 0x942f1352c9b1445c -860, 0xc61f0edd263951da -861, 0xa447110dcc7921fd -862, 0x4c811f5af4e0cbb0 -863, 0xe997fff7a5939781 -864, 0x1224dbad82b23c97 -865, 0x65cdec93d671a0cd -866, 0x22990c95303470c8 -867, 0x40e6e0c576b97f56 -868, 0x53bf25c3c12b43fd -869, 0x1992bafa30093644 -870, 0xc80b6626b1b3084d -871, 0x46e018183031721c -872, 0x10b23bc65323effb -873, 0x176c121f9bd81f23 -874, 0x19047376d9ddd242 -875, 0x47c0b554263ae3d4 -876, 0x7d6c14c2e40bf7ce -877, 0xeb3c30a640d082fe -878, 0x5155bd10f1818c38 -879, 0x24ca5ce343390351 -880, 0xb9d7a5dfc4f89d34 -881, 0x1b8f0b8c3a3bd8b7 -882, 0x708ab95c219a2ffa -883, 0x1cf3befb2776fec4 -884, 0xece471e68eb13a0a -885, 0xcd9e646295c6ad1f -886, 0x63a5a97e805b58c3 -887, 0x6bdd3bc818330ba5 -888, 0x642a2e1992d481d9 -889, 0x60362b11bbb1cc44 -890, 0x5c10e85acb9ad8f5 -891, 0xb8ceba6af37425d6 -892, 0x855bdea1d7415466 -893, 0x108bec5b41275d30 -894, 0xb0fce44c3caed15e -895, 0x6e1d44a82e34b3f4 -896, 0x698ed735e1db5220 -897, 0xe4d427dcfba23857 -898, 0x85ad0edc6ebbccc7 -899, 0x7c9cd7bc58fa5ff6 -900, 0xc2f19c0d76f53615 -901, 0x773385c16db8f379 -902, 0x2bb9120cfa435e1f -903, 0x295961649184169e -904, 0x20de31c807978633 -905, 0xd36701dbda31b982 -906, 0x5551feb741996e9a -907, 0xf8aaad4d0c52434b -908, 0xce6f4b0dcaef6cfd -909, 0xdacbbb33921fd85c -910, 0x587a5cb0cf051eda -911, 0x42124bd99d594fa9 -912, 0x9ad4a203e1ba3c84 -913, 0x775b758d4944c2e5 -914, 0xa7276e35b33e62a2 -915, 0xf5657d537c6271fc -916, 0x69b45cfd145b352d -917, 0x8672a0e552f7dfaa -918, 0xd5c0b8f929f63c84 -919, 0x1062b14c01bf1560 -920, 0x3ae6927a61dc70e6 -921, 0x2ed5f06dc3ceef22 -922, 0xf79f417a63f1dbf2 -923, 0xf6a74c03f7ab1744 -924, 0xf2a8523818bb492a -925, 0x8db8ec62b7262a19 -926, 0x4ac507b9aa8ac0d6 -927, 0xe1db6db360091041 -928, 0x97205197883ee213 -929, 0xc83c6265be4a8612 -930, 0x99e84f3f743ec327 -931, 0x931ab84b78b922f -932, 0x900ebb02329a6201 -933, 0xdb720a24d6d93400 -934, 0xdd0de802d3780399 -935, 0x177fac072d4ff0d3 -936, 0x95f5688bd75ec33d -937, 0xce19d334b40b7c45 -938, 0x780c71636ca880c7 -939, 0xf8188c0626e3ddbb -940, 0x32ef96e74be5a76e -941, 0x8f9adc11e6ee08c7 -942, 0x860a6c1d95bd01f3 -943, 0xb19d517b4a3054d7 -944, 0x196cb745dc3a674b -945, 0xf611c20fecc9b445 -946, 0xdb0f8f14fbb237c4 -947, 0xfafc6fc52d7b483e -948, 0xcffd5779f52badef -949, 0x8a626e983ccfd9e8 -950, 0x8f2ccac91dfaaad0 -951, 0xbda4bdb3cc57689d -952, 0x2a8af26a1d17c1c3 -953, 0x9feab9b49105010f -954, 0xe2a9046372fe5c04 -955, 0xd55195108d63dd4d -956, 0x4702e92922745d80 -957, 0x423c590b3ef222da -958, 0x2b56e611f1272bbe -959, 0x90d65326f9c21b6d -960, 0x56777609cd5360db -961, 0xa35a55eabfc4d9c0 -962, 0xf6134f2e8cf2a92f -963, 0xfe7864a5510c499f -964, 0xb205f42b43d89001 -965, 0x2618c3eb687e9050 -966, 0x1c85ebb7eafb6c1b -967, 0xfe47cb43ba8f5e02 -968, 0xceed09f98fe493b4 -969, 0xe7e51b4e51c5e0bf -970, 0x53343be07ce85327 -971, 0x816a17136951159c -972, 0x92adfb8807d45418 -973, 0xd6eaf3cef3390e14 -974, 0x6d7c2adefcdd411f -975, 0xdcde0a6376ecb43f -976, 0x47d162d5a140ea78 -977, 0xf55fdc7283476df5 -978, 0x2f66d5d029982dfe -979, 0x56a94f1fdf81fb24 -980, 0x46eeed06237aa921 -981, 0xb5f585d18b026038 -982, 0x29e12cba3b5a03a1 -983, 0xb8433a70685341e3 -984, 0x4e86f031c2bf4939 -985, 0x7167c51db1d096e1 -986, 0xa300693a1ce05ff7 -987, 0xddf7f5ef8994b6f6 -988, 0x5c99ebf9a1eff32 -989, 0x441bbc76e92979b5 -990, 0x7724f07eaaf30a94 -991, 0xd9946d64346a0d59 -992, 0x3d49489a6a952877 -993, 0x2b4846d1c8f4bc56 -994, 0x1d5f7891a6caaf50 -995, 0x7f9f458f479c6677 -996, 0x9177526a634cac18 -997, 0x82b316c3ba3cea55 -998, 0x84d769b6ffd7a5d6 -999, 0xa1230c54cf6f4b5e diff --git a/numpy/random/tests/data/threefry-testset-2.csv b/numpy/random/tests/data/threefry-testset-2.csv deleted file mode 100644 index 275604557..000000000 --- a/numpy/random/tests/data/threefry-testset-2.csv +++ /dev/null @@ -1,1001 +0,0 @@ -seed, 0x0 -0, 0x6dc04d22e096eea4 -1, 0xb8c023f98cd7ada0 -2, 0xa7efe930de644973 -3, 0xe05ea045a0add077 -4, 0x404ab9dfd366d169 -5, 0x4d42fb74611bbd30 -6, 0x9343a758211b6d70 -7, 0x4dab40877197665c -8, 0xaa7b143cf838b109 -9, 0xcad1f00ed5cea835 -10, 0xf7c7d7d6c9a824a8 -11, 0xf20b64a5b42100f3 -12, 0xe155fec329e4ff46 -13, 0xe9db5c878d78e4c5 -14, 0xe96ecf5f3d8434fb -15, 0xa4a5369e8b676159 -16, 0x26f540900462fdc3 -17, 0x805e684c0bf0600d -18, 0x950c55250dcb9322 -19, 0x1df00ab0d9a5f9fb -20, 0x2e75b8e9fb48b88f -21, 0x8982e680b983b07e -22, 0x7c730288ec003204 -23, 0x8d4a42efba070902 -24, 0xcae4317a285d026e -25, 0x587af8ba811a8883 -26, 0x236cb94da85e9409 -27, 0xf4d25c2e0d7b2bd4 -28, 0xd51e53d74420f649 -29, 0x29f9ad48909f580d -30, 0x39e2a46d5962fc7e -31, 0xd40bb4045f9288fc -32, 0x86d6d29c0a126484 -33, 0x198289c6d8589ec8 -34, 0x5c4ffb186e8f69c2 -35, 0xeaa9fe626ca6f961 -36, 0x58816ea059f6b7ef -37, 0x9a636de4086ed493 -38, 0xe5a2b327a52f6500 -39, 0xa6d200345a8c4135 -40, 0x8ad50053fae7c70c -41, 0x1afd6de09771e167 -42, 0x7372d8a4cfe85c9d -43, 0xe2a99f3770165e93 -44, 0x193e99ffd7b45a30 -45, 0x4af13faae1f4ee8f -46, 0xe799ae38aea2a54a -47, 0x19bc5efb105b9b55 -48, 0x428799856ed8d2b5 -49, 0xc7e1c76dfb93b581 -50, 0x1c8000fb2afbe108 -51, 0x5d217734dc6fdcb2 -52, 0x4f9b436f2fa7b5d -53, 0x6c6a8e841f5f7f2b -54, 0xf7af258a895489e7 -55, 0xd4afe725c6deee -56, 0x11959dd7c1a0e56e -57, 0xa82b5a575ba9234d -58, 0x356bb807c17fe67f -59, 0x4113ba7ea9234d28 -60, 0x87c7fef17934c764 -61, 0xed5d2e29701db2ce -62, 0x4b4bf08b62160f5f -63, 0x32057a60eda862a5 -64, 0x446b5409b56a9311 -65, 0x31e84acfaf48c9f7 -66, 0x8951479289443c2c -67, 0xff84ec0fff1b3d23 -68, 0x3db2e8a284e2cee5 -69, 0x2c8aca76f7caab8e -70, 0xfe8ff095676417ee -71, 0xbb7d6ed0c641e84a -72, 0xd862d2552159e272 -73, 0xd320d329cd2b0419 -74, 0x41bd59f68a0fc99a -75, 0x1adb5cf5cc0462d9 -76, 0xaa152c0b16d38826 -77, 0x1358fc52142b5523 -78, 0xdc29465d24a25fc2 -79, 0xda86700b570eaa33 -80, 0x461c6b79f1aea5da -81, 0x4dcbf7406497da6b -82, 0x5f9d552eef82e555 -83, 0x27261b525e6c02df -84, 0x75076fe041440603 -85, 0x7cb47c620018a06 -86, 0xd7b7d17c3d1ee39a -87, 0xbc7eada7c2ebc70 -88, 0xcac816c1d36ebb7e -89, 0xbe1fd6bcb3d795a9 -90, 0xbd822d8f1edd205b -91, 0x5c0ebf018ade95fb -92, 0x9c6ee7cca010ad02 -93, 0xa210e3829a0b1b62 -94, 0xf5b25b53e25dba71 -95, 0xa4a69d9d6e73b9a2 -96, 0x2718cf614f82e185 -97, 0xf5aaf0eefd4f29cc -98, 0x343f41179d6056be -99, 0xc897506f84b7a9bc -100, 0x547ce04e8810e66f -101, 0xf61f6f95782be285 -102, 0x522e0fa1964a631f -103, 0x500fe922b3a102ca -104, 0xd39b38e1ae6f8218 -105, 0xce6079eafb932dc9 -106, 0x2896e00f1fdb8c46 -107, 0xe5719f1535cd23b4 -108, 0xc4d4dc27f6393389 -109, 0x95b3c17025e7ea85 -110, 0xcea3f280dae8ebbe -111, 0x6d91c862fbf2fda2 -112, 0x99c5197b21f1f444 -113, 0x9ddb59c15db5411d -114, 0xd6ed4ec1b494f92e -115, 0x3270a479f7e1fcd7 -116, 0x79e8d185e02ad6e -117, 0xe548786a4c6309fc -118, 0x1dd3bf9d9f3fc9ed -119, 0xe52ba084f8713b48 -120, 0xbd6c473054430deb -121, 0xaedf39aa96279c3e -122, 0xaa3a7bbe2fd381cb -123, 0xa087544796e01cef -124, 0x6596602a719be04c -125, 0x282a96eaaa790ee1 -126, 0x313b3f42aa9ce4 -127, 0x9998a73e798ea881 -128, 0xf51dc8e618571e13 -129, 0x1df638afa23f4d8d -130, 0x26385330319db8d5 -131, 0x1e1912386c519544 -132, 0x46c42a55ab556cdd -133, 0xc049b83a6f04efa2 -134, 0xecd2d18baafa8af3 -135, 0xc1108f82d1765b42 -136, 0x7dcd72d9f729db44 -137, 0xfa73627c9a20cf11 -138, 0x9ac69ccfda0ee7a8 -139, 0xd02f2c2c1776c62c -140, 0x75b4da786706ddeb -141, 0xeebe6ece4a516bdf -142, 0xf274b3ee4fb7ff3d -143, 0xd4b1093bd35d25c8 -144, 0xc341c37b9cfe28c9 -145, 0x32c4fb8e8e6aea6 -146, 0x4adefc5712ca8606 -147, 0x750302d8f108d3f -148, 0x76e6e3259264f240 -149, 0x31c6db85c206dc2d -150, 0xda47cf5e8d07c49 -151, 0xc5939dd565786002 -152, 0xa02e5128b7f04e77 -153, 0xea2e5fa9ffdad0fe -154, 0x7b1f9bcb5578cc5e -155, 0x3fe776dc8398e6a3 -156, 0x31b97c4a0973fc4d -157, 0x29a985a2bb602d89 -158, 0xe6a76cfb1a5c0faf -159, 0x4f9f62edb1e6d19a -160, 0xa589097a26f2b615 -161, 0x6bca21ae81e149ad -162, 0xa6570f8fdbf98af4 -163, 0xa740f226d53bc40f -164, 0xf0a4fe08ab331d24 -165, 0xdc1eaaff2c67c65d -166, 0xf227a9a3e89a7271 -167, 0x1f539a105ac9a7dc -168, 0xdf2fc18d2f4004ba -169, 0xc36711f5ef877b67 -170, 0x29e30f4b30ad39a9 -171, 0x3af92a16534fad9e -172, 0xf66e30d65df7faf1 -173, 0x2594f6d925228c49 -174, 0x8b8b3d9f20fa8a67 -175, 0x88e8d38366cb411b -176, 0xe881af89393b5a8d -177, 0x2f190890e152d243 -178, 0xbca3c2b43bd2e2ce -179, 0xaecb17f2dceb2ed1 -180, 0xa07f556a40d4dab4 -181, 0x59c729c94cb2b4c1 -182, 0x5364cee304495a05 -183, 0xa628681d16e0c604 -184, 0x40e2f3e0d9124851 -185, 0xb3da737ef7918179 -186, 0xb946e59c4905271d -187, 0xc079b7dd74752ccd -188, 0xfce4f9ef02e73130 -189, 0x86baa280d2d9aff6 -190, 0x778ae7465aca2696 -191, 0xcb1f60b74f32078b -192, 0x71bf826587c2c1f3 -193, 0x7ad5d51794ccc972 -194, 0x4b6ae15708464071 -195, 0x86c6829137a4110 -196, 0xc002aa2f64a5283b -197, 0xcef3ae65b916b6bb -198, 0x1e691414155bd2ad -199, 0x9fc613bcc3a961a0 -200, 0xf55caa38c2b7866f -201, 0x3aa6008a705ea431 -202, 0xc1587b4c3d3e6146 -203, 0x56e5eb96d0556293 -204, 0x796730a5bde01777 -205, 0xf4b5de3097e501a3 -206, 0xb5a2d840b9e7737 -207, 0x9059674f6dc9db07 -208, 0xddaa8f7b09773c74 -209, 0xce2e4850507c2b27 -210, 0x2d1dc2977de11249 -211, 0x335e7ef86408ea2d -212, 0xde7bc6f22af7ad0e -213, 0x4a36bd6edb976e6d -214, 0x8eaef966a64aeb94 -215, 0x7689476d2572797a -216, 0x4635219f62159d76 -217, 0xfe9958903e4d4ae6 -218, 0x288d7f77642371c4 -219, 0x2f17b9477da7c2e4 -220, 0x4a987e3814cbcb5 -221, 0xcc2ddf12905e9c9f -222, 0xf5cba7330c86853 -223, 0xc646ecb698e336ce -224, 0xc05d862c10b83e50 -225, 0xa673040049fdc79d -226, 0x52871df3f523fb29 -227, 0xeae829e337d8a5cc -228, 0xb17d70979ea53cd4 -229, 0x253a9e29eef246dc -230, 0xdc09f4831946ef53 -231, 0x15a4034a8917e29 -232, 0x57246ff6c9594b8 -233, 0xd80620e906fd1cf4 -234, 0x861bec5cd30c08ad -235, 0xc58f38b68714ccf0 -236, 0xd21c19157efdd920 -237, 0x51e1b8f40b8045a5 -238, 0xfd56fa4ceebbd2e3 -239, 0xcee1959a7f9d12be -240, 0x75f22e1dfb5ade8c -241, 0x3b87a61bcd763482 -242, 0x4018fbdbadcc95e7 -243, 0x3ff57380e846b8ab -244, 0x7e44c8a4005515ed -245, 0x824c847c6767640e -246, 0x2b34ef279cdcf5d1 -247, 0xfd0bfc2786afed92 -248, 0x7faeff889a39834a -249, 0x37a6cbda4f00e6c7 -250, 0x4214fd32c40b0894 -251, 0x4320e334bfd18ed6 -252, 0x74b1f0c2812db646 -253, 0xf48232c0988ea643 -254, 0x5841c46c56967a29 -255, 0xb08204c4c9e83fca -256, 0x2a0bbd0b42a4a708 -257, 0xfe76573ec821c87f -258, 0xbd2e46ac0feeb0d9 -259, 0x3552a2cfc1bdca32 -260, 0xfbdc96046c1020a5 -261, 0xd5d79356b52560d4 -262, 0xaffee5796b293a6b -263, 0x5ef4dd67d2cc9042 -264, 0x7204094f6053ba36 -265, 0x1a89384fd317d01a -266, 0x68129e5eaa1d4a28 -267, 0xcd2a9c8b6938cb65 -268, 0x434bb1bd9872647a -269, 0xeaa17b0b5fa27832 -270, 0x442e1c5fa8113c44 -271, 0x38bcc81ea8386d97 -272, 0xa653c2f1f13a54f8 -273, 0x82d74e165850f5a6 -274, 0xf4b9d5dce18bd047 -275, 0x2666dba219ea409e -276, 0x8ada69aa37a215b1 -277, 0x2cdaa0dc42ba5b64 -278, 0xfa7b44675ef531ad -279, 0xd87d4bc750795b22 -280, 0x562fa1b77f3c52b0 -281, 0xaec092b6afa4b7f2 -282, 0xc2dcf8735598f14f -283, 0xc65a4e439f790832 -284, 0x73fca9d888e184f0 -285, 0xaf38a6918896df93 -286, 0xeddbfe61d62902db -287, 0x2e8e831abd28891b -288, 0xdfea332c8ba5e7c7 -289, 0xb980b3ea4806e11 -290, 0x37f771e71cd26079 -291, 0x65b880af5cf288c3 -292, 0x69bef58494777df0 -293, 0x207706d3b013c1c6 -294, 0xe9b4014efb64e6e7 -295, 0xece0298dfad7da0b -296, 0xcfed2f0d392af845 -297, 0xfbb1407059436788 -298, 0x74e9d65370ea5662 -299, 0x6e8bce550b2c36a2 -300, 0xf38d767f77abe8de -301, 0xc6befbfbf4c57ddb -302, 0x9fffced31abe51b8 -303, 0x761beb850b4659e7 -304, 0x5af78afae250836b -305, 0xbe64a1bb37c08d0 -306, 0x5dd328d85327ba3d -307, 0xa43238b39aae76ec -308, 0x1f58743f079a14a -309, 0x8f2b1a8cbe77f565 -310, 0x47526c74521adf72 -311, 0x542062d916e30f3d -312, 0x2f3f86a12c7561eb -313, 0x725a6f82106fd202 -314, 0x5939d692a6203676 -315, 0xcd607e13aeae5717 -316, 0x12a76dd01d4e46d -317, 0xddc96ae023be007e -318, 0x71341b774bace597 -319, 0xf69db6a379f38d34 -320, 0x87cd1ea3a6629c70 -321, 0xadc8798060e39c27 -322, 0x532982fe9d77655b -323, 0x1c49d24a1bb2fb83 -324, 0xdcba3b57f87cf725 -325, 0x62b96a90dcaa0a3 -326, 0x89d704a4512cefe0 -327, 0x41685667b144aec0 -328, 0x49395424e7982bce -329, 0xb493878ae98f87f -330, 0x2b2a23e3696a5588 -331, 0x2bbb82d12da62157 -332, 0x98092e701b17da7 -333, 0xb55d717ca8a4d039 -334, 0xf4547583b84a03a6 -335, 0x9609c10b7e68759a -336, 0x2a60eea68cdb7812 -337, 0x15146ffa8acbe5ed -338, 0x521e3b2ca6e16844 -339, 0x27528ffae94c01c2 -340, 0xc5df652e08db6be8 -341, 0xba1275ce0594c2f4 -342, 0x9c66fc6882ac8cf1 -343, 0xfcc5c3e413a7dad6 -344, 0x8309532dc68a36c1 -345, 0x7f9351a45e66c50b -346, 0xa70e6b123bdbad47 -347, 0xad49d29da3a694b0 -348, 0xf198452973eefdaf -349, 0x53b7951ab7b24800 -350, 0xb226c827c5cf8233 -351, 0xea184af7dc0cece3 -352, 0x77d5dc22579d919a -353, 0x583ec0e8d8295fa3 -354, 0xac35b75b4dd17e0d -355, 0x7d273f1ef4ec8df2 -356, 0x85665ea56b49b5e3 -357, 0x7cc0ee21b59ec57a -358, 0xae595b1cf72dc292 -359, 0x4eaf57e8e6880fb5 -360, 0xe51931811683e382 -361, 0xdb29479871fc8dc9 -362, 0x9b2f9c40c6506d91 -363, 0x35ee0dbbf239bb06 -364, 0x40aa630242bc7e2d -365, 0xf3a3d9b2f5839a26 -366, 0x17e920c38a2e329 -367, 0xae28a796412706f9 -368, 0x3327dbcbf0cee5e -369, 0xdbca13ee810f8546 -370, 0x390f9a7560cd1a23 -371, 0x444085fe4b30b123 -372, 0x4a1dea59c8ffa505 -373, 0xc12708a6534b7424 -374, 0xc331d65b7dd17bdc -375, 0x4d1a64113fb84526 -376, 0x7af40a24916e7ba9 -377, 0xefc466d746e83001 -378, 0x631fb61962533374 -379, 0x355629ff71ec6c69 -380, 0x89e5c7e5a2b6b82b -381, 0x307fc816d73c725e -382, 0x3c7c2fad16ee2808 -383, 0x3db362fd0d93dc47 -384, 0x7c7d9b1ecc6bbc7e -385, 0xcdab8413e0b594bd -386, 0x3e45d66baf972abd -387, 0xbd8bdc23f1926e70 -388, 0xfbc61c9f0b6c1a71 -389, 0x68b9e52b65d64f9c -390, 0x5b371b49f49af63 -391, 0xdab60623156c1ebc -392, 0x14ed99c617db324b -393, 0x5c7f7b5f6db77c0e -394, 0xeae562127e55128 -395, 0xf5ff71155fca2c5c -396, 0x8271b2d1ad93bd4c -397, 0x1ca96341dd5b034 -398, 0x49265a39bf18e8d6 -399, 0x5bbe70cdacf51f1 -400, 0xbf198a70b59ff062 -401, 0x41058370f356a21 -402, 0x47e8c7127044ea -403, 0x3a031703f1e98d83 -404, 0x63db42df128a9d7b -405, 0x67360bba6d058db6 -406, 0x2cb06097a2bdcc21 -407, 0x9e69d402ec5ce471 -408, 0xef55f0fa21cde5b0 -409, 0x2ce15bd742eb7acc -410, 0x2f29a82fc4076787 -411, 0x312992a6d3fb93ec -412, 0xd9abccb15b2535bb -413, 0xdfcc55a43bad4c90 -414, 0x51ca5637dd4ea18e -415, 0x9be4b1911b1ae9f7 -416, 0xb835b284b26d4057 -417, 0xca26765b4414729f -418, 0x211fd5e340cd6f9a -419, 0x64984a44077081d2 -420, 0x859ea6fc92cbf37d -421, 0x99f190ca3756084b -422, 0x38549b8f8b5a7201 -423, 0xc3940c2807d34ed8 -424, 0xbcbcf498fa77d02e -425, 0x2c24b6360e1033d2 -426, 0x9602edbde8d9a850 -427, 0xbf4ce69ab0e00203 -428, 0xd479d334b0c716f3 -429, 0xeebd6ba9a827a3e1 -430, 0xea0b5cec6b42e089 -431, 0xded6e289584813bc -432, 0x9894568e6a3f4ab8 -433, 0x73ee7a9acd6f667 -434, 0x4c849a0da094f2f5 -435, 0x4fe6f5fe0f90f786 -436, 0x9887c17ea5f92327 -437, 0x318df65aa9a53d5 -438, 0x70a7bc8178292fd1 -439, 0x612a38a535b8e3d2 -440, 0x15a79aa16d0228e1 -441, 0xd3288c336eb0b33a -442, 0xf84e2fd1e4db070c -443, 0xa2efb0e34d0114d5 -444, 0xc528e890e7fa6409 -445, 0x4b837fde84319af1 -446, 0x632edec918b02d23 -447, 0xce980f566494c149 -448, 0xe54e204d31452188 -449, 0x9ca51e2e7fe3a3b0 -450, 0xb0a7183126df963c -451, 0x2de5fd96c125669a -452, 0x17ab43849b96549e -453, 0x49850d9bb767cfd8 -454, 0x632d44d7add93bf0 -455, 0x3fba66506af7b132 -456, 0xc06c6bdeaec6d733 -457, 0x3e7795ace33e8cd1 -458, 0x8f522c2f76ae3bd7 -459, 0xec883650a2d2b2d1 -460, 0xccb11ad5bff431bf -461, 0x936d66262607c537 -462, 0x3102298a92f643fc -463, 0x76078e8357fd5e15 -464, 0xf22a64a885d7e7ac -465, 0xe111261b30caa160 -466, 0xed2c2d728a8ced12 -467, 0x64e659163f8d1d71 -468, 0x8c7c5f696f55dbe7 -469, 0xf0bdb7e3168a82d4 -470, 0x1eea602c6df9464f -471, 0xa10d1d8502d43304 -472, 0x824245afbf95950c -473, 0x7b4a64e619e29d10 -474, 0x73d4d21a8f412218 -475, 0x3ee5be3d8af0bc17 -476, 0x78979eebb7bb7b9c -477, 0xe2acf9a6f17cb00d -478, 0x77d8f02baea98694 -479, 0xba80648f6872987a -480, 0x1cc1fa8be28d090c -481, 0x9df7f91ded8fb4d9 -482, 0xd5bc13c3dad13991 -483, 0xa57c268e5153f06d -484, 0x662f2e1fdc97ca36 -485, 0x1242a97a1148c369 -486, 0xa85178a88b821450 -487, 0x32fa270cddccdc1 -488, 0xd52af3c8d3d9ccbf -489, 0x105d4ee4420a2035 -490, 0x8ccec92b29bb6f3a -491, 0x7330a89b0ec713b8 -492, 0x712f7f946a661b8c -493, 0xdd11f248be047eab -494, 0x15aab9e558d04865 -495, 0x791b42bd188d3042 -496, 0x571a03a98b08d2c2 -497, 0xe8362e466304c2e0 -498, 0x690bcf82d6f7e815 -499, 0xf387d12b216e039e -500, 0xa1a0e6721cadf720 -501, 0xc238cd658c3c48b6 -502, 0x303d33d956cd19b7 -503, 0xb91002fb2c06523c -504, 0x3fd6c979ecc9e53a -505, 0xe709a011bbd9684c -506, 0x9f9730e4466b178a -507, 0x5d6a951a17dea6de -508, 0x8ad48c770be7ff5c -509, 0x840349738f1840ef -510, 0x62b71fa4d4713278 -511, 0xb54bc131be88e301 -512, 0xcd360f29092f1b48 -513, 0x51e2d80a7974e018 -514, 0x4716923492cb7c11 -515, 0xc5a3426512ccf92e -516, 0xa29da51d76692ec2 -517, 0x7760e22a2a966fa6 -518, 0x17027bb9ebea4f10 -519, 0x1cbfeb90083c7472 -520, 0x21df956d73e46 -521, 0x3d3f98cec3a0f9c5 -522, 0xcbb44f6843e8f84b -523, 0x5387cf5c8dc08f09 -524, 0x9874b020a7cd16eb -525, 0xb26656f3d0e54b45 -526, 0xf7535314e62cc2b1 -527, 0x9d98c18c8b832a78 -528, 0x4782e4a90afa6bb0 -529, 0x98a5b50793977e75 -530, 0x699bfd767f3c1fb6 -531, 0x2b0c137df6bff06d -532, 0x1dcf680df83ac493 -533, 0x41433da3b84a308e -534, 0xaa5b2dab82fd7a7c -535, 0xd35f4a2331f962c -536, 0xfed4b74303c0ee4d -537, 0xf9a9dcb35118765a -538, 0x4d09906765751e55 -539, 0x96f997988dbaa2ba -540, 0x761968dfdcee7a25 -541, 0x942f82665a09c18e -542, 0xa630ee4197ab0e0b -543, 0x68bfe324bbe3b7b1 -544, 0x8613dd09e8566784 -545, 0x3738178b0a67bae9 -546, 0x78678e656aa91115 -547, 0x6d182cdb34ba7a53 -548, 0x46749ef4e5670d88 -549, 0x2cddc1808c4018e -550, 0x22b2aae091c52f90 -551, 0xa4709bcfefd0d6fd -552, 0xade8916af4dd85f -553, 0x763c7e7df0416c26 -554, 0x78b365ba6d6416e5 -555, 0xadba0adf9c5b5e3a -556, 0x5a146cb126d32c3d -557, 0xa5f2f65ef03145c4 -558, 0x2708930e062a88a5 -559, 0xfc94da4d17e4d4fa -560, 0x78b500b283574f39 -561, 0xdb657f35be884f22 -562, 0x1de17d2450338525 -563, 0xc602ad9d8fe83980 -564, 0xc731d0497705a493 -565, 0xc3e443ea6c794843 -566, 0xb946fc377698953d -567, 0x98ad8f7f193cee5c -568, 0xa8da8ecd4301cb4f -569, 0x99ff5cc72e206b24 -570, 0x2422ef61bb3c9be4 -571, 0xea62c83986a29b61 -572, 0xcbcfb5a9953d1a6a -573, 0x229f258aac962310 -574, 0x8730e2f36b1fbf6b -575, 0xc3d6ddbe26ead961 -576, 0x814fc47c7edcbae0 -577, 0x23af1859cb36c99d -578, 0xeadfaf827ee1de0c -579, 0x15ac2339684c36d2 -580, 0x54c617fd9b17d56f -581, 0x8b88689c24920b0d -582, 0x5294092543a1f59b -583, 0xbcf7fadb518fad77 -584, 0x8e784c0359e6349d -585, 0xa45831bb0c97d3d7 -586, 0x1d0b8d79ab84847e -587, 0xd7f23d7e384fb139 -588, 0x8fc7ee55f1d37f0d -589, 0xc44dc853b1913765 -590, 0x20d40baab760366a -591, 0x6067cee1fc99a47b -592, 0x7927a7b24ecb93bc -593, 0x26819db47e3cd94 -594, 0x236853cd14a54aec -595, 0x36e7a2f60284be9b -596, 0xb11accb3a708d6e0 -597, 0x98c7651be6436342 -598, 0xaf27f94af527010 -599, 0x4ad2ef538542349c -600, 0x63becd7dc3d6fc6a -601, 0x8dfd8f874d18f093 -602, 0x2401cad63eaeaff3 -603, 0x7be4a82015531b1e -604, 0xfca36bc859cff476 -605, 0xbd3f9383a20e1fac -606, 0xee9e7e4bf1c444f6 -607, 0x4ad8b91ea66cd1fe -608, 0x85ffa6d1cafcc553 -609, 0x665f66043e6bf320 -610, 0x4d409c2d9cb23e6a -611, 0x1815b94fcb2e85bd -612, 0xbbb8439e003579a2 -613, 0x16dbe31fced48255 -614, 0xf4f7079142a17040 -615, 0x96df1c5c35e5c231 -616, 0x41fc7faaa1bd8cd4 -617, 0x6a51ef3658d4bd38 -618, 0x31e64c6ff2d1598e -619, 0x20f2f339395fec58 -620, 0xf329aaa477f87f9f -621, 0xfe461c3073c63ad4 -622, 0xa60ce6531c0ab64a -623, 0x527eff919a0305ac -624, 0x7708978a5d010a53 -625, 0x2ab687dab81f0ca -626, 0xa7af71e850497d34 -627, 0x8edba42a07e35155 -628, 0x45b4f3ae5e07472e -629, 0x29e3636e047b7c5e -630, 0x6ddd57807c1830a3 -631, 0x800e6743648c9cb5 -632, 0x921389557585d720 -633, 0xf2fa96f5bbdcafbd -634, 0x4f1634ad80d0bdcf -635, 0x7125668667218b0d -636, 0x23373d9919906087 -637, 0xa27ea3fbff83bd41 -638, 0x871cbab37176d63c -639, 0xe6939db32970f816 -640, 0xf3484c2ce0dd0481 -641, 0x76e8298b27b9d68e -642, 0xf966f9fb426c1950 -643, 0x4066c4f62c307e4d -644, 0x187ddce6f94afb2 -645, 0x656f00e6a70fbfef -646, 0x2ef17886ec419448 -647, 0xbd748ea59342e5d2 -648, 0x1f204c5d3c9428a1 -649, 0xc08854fa8992794c -650, 0x17d0f325121fc218 -651, 0x34c63c258a663b88 -652, 0x60f94e4cf248344c -653, 0xf9ffcbcdce936a7a -654, 0x93ac50ca4456c69d -655, 0xb9039b4d7dd82c9a -656, 0x117e3c6d6891e836 -657, 0xff6289aedb2ab5f0 -658, 0xd5f695f19d6786f6 -659, 0x8bab970181c86e97 -660, 0xee6be4ee832333fa -661, 0x648ea0623082ae36 -662, 0x972b001b4b4d4431 -663, 0x92fb47b9ff9b1ee4 -664, 0x792ed2bd14f8896a -665, 0xc98e2723d55b08d7 -666, 0x2a4f0b7da6210c89 -667, 0x19a1fb785fec7a64 -668, 0x937a44924b337455 -669, 0x26802ce94caeaefa -670, 0x604539849b56a532 -671, 0xccf6eeb0a664d39a -672, 0x545584db524a2307 -673, 0x8ce4edbc37515d8e -674, 0x1d548ba9281312b5 -675, 0xd0c51f891244ed57 -676, 0x3b464ba79600dd6c -677, 0xc28ae0f8c4db373 -678, 0x938e49fcbbe8941 -679, 0xf084e4c8d9799dcd -680, 0x61ca52d24bdd1083 -681, 0x536d617222724841 -682, 0x506cd8085d16a6bb -683, 0x422158a96747781d -684, 0xbd13ded440c16bb6 -685, 0x97913b1b8c2077ca -686, 0x5ab588aab438e8b4 -687, 0xf4c6831523402b4f -688, 0x91e962c39ccbbac6 -689, 0x861c95ffeeb7b7ad -690, 0x6b318a9abb0eb7a2 -691, 0xac4164b45978ce20 -692, 0x71d64942f1d72b40 -693, 0x1675fe85018ea357 -694, 0xe19ef9073183417f -695, 0x3e057316b3a37a7c -696, 0xaccd00b688c8fb36 -697, 0x8c2d1b84d24b89d5 -698, 0x4cc97086400b2631 -699, 0x38c2cb4daafa93b5 -700, 0xd44e889f968a38af -701, 0x53cf738410523792 -702, 0x487b1b84bd6f0ee3 -703, 0x1824ae549bfadd6b -704, 0x7b6654bfe0f085d2 -705, 0xa289e4fa5b2f971b -706, 0x24c971b485491f26 -707, 0x8827b700bb7136a -708, 0xe2871794cd6f7a2b -709, 0xa21bfa8e0e237703 -710, 0x8447f083c77d1be -711, 0x1b1d926efb334728 -712, 0x8dd2d4fed543c38d -713, 0xe69ba3c162cd489f -714, 0x3f9659c66b35acc3 -715, 0x45ac347675850ebe -716, 0x8e572a9ea7ec6b12 -717, 0xd3a11284b37761b9 -718, 0x8e276c1c9616b7ee -719, 0x7a03569e90501954 -720, 0x4ddd0afb9d3f2605 -721, 0x9342896d66482c8c -722, 0x9edca50722c69db6 -723, 0x3dff88b2257e3ae0 -724, 0xad92c2d56ccd8d11 -725, 0x81e6dc441c0b6df4 -726, 0x1a8a0d10f7326b8d -727, 0x8382991eb90958b -728, 0x9570d9b1a0527ba7 -729, 0xa1820138d6f96490 -730, 0x1c8c678ebb2aeb4c -731, 0xd782fddd578fc4ec -732, 0xc78d60cf41e509fa -733, 0x82dfbe4d435f747e -734, 0xd9a410610e4b3dca -735, 0x2d687c7a90220751 -736, 0x6838c5d233cff81c -737, 0xe2e64ef24f7b004b -738, 0x65c11d97293f0da1 -739, 0x53e2016d79145a35 -740, 0x3ebd6882b1de3c7c -741, 0xb1b47458c2b31ac5 -742, 0x4321907da2d2df2e -743, 0x57f211e1521e0eb9 -744, 0x25798e7fa3227f0 -745, 0x9e696273f7255ec6 -746, 0x784755cb23c3190 -747, 0xd4e82b43d8eb119a -748, 0x894047215bf58241 -749, 0x71545bb714d43bba -750, 0x3eb48187007c99a2 -751, 0xd3a03fe5a57dde89 -752, 0xe336d1bfc90141f -753, 0x13e5b11c8ab27b7f -754, 0x476e5d1c3f5ddb41 -755, 0x7e0987fb7ea434ca -756, 0xa7af6d90f6868d59 -757, 0x16be8514db2ba69b -758, 0x9358b7eb6b64161d -759, 0xc6e6e49346403b75 -760, 0xb8738eaf21cb369c -761, 0x65a2a7d3ad804624 -762, 0xf49f135e789969d4 -763, 0xf20a963cbeeaae3a -764, 0xd17e058559753d56 -765, 0x8e8bf41d9c4916ec -766, 0xe48ef68e5aa23dd3 -767, 0xe2f0001eda60c8bc -768, 0x5b99e00b24f1aa8f -769, 0x4ad710b2a99b14c8 -770, 0xd3aa3920af73ddd7 -771, 0x3d76e216667d1382 -772, 0xa8c330ec75317940 -773, 0x12534fc207bb29a9 -774, 0xd15c55c83b4a35e6 -775, 0x535e26026622714d -776, 0xb56782cf34123bc1 -777, 0xbd925db7098d6155 -778, 0x682df0f1e54e2d9d -779, 0xb330167f33195b63 -780, 0xe9658f089aea3987 -781, 0x2b095fe8bc8fb610 -782, 0x204269c3aa0af463 -783, 0xd1c858c4a6b68013 -784, 0xe2f281cf9ef91e34 -785, 0xc29a55f11e4479c6 -786, 0x12a8e1df7d6166 -787, 0xfa0b4dd7d67c578 -788, 0x6db2b74e2e42db1 -789, 0x478694b16b033d71 -790, 0x47a79614736e8c3f -791, 0x247e0e4d132cf874 -792, 0x22845b7634d0e71f -793, 0x9942faa26a68bb81 -794, 0x381aeeee89549313 -795, 0x2052200f6ff0d6ba -796, 0x5c9f92b675b2f641 -797, 0xe6b34f7a1e196039 -798, 0xe1b77d497bef7516 -799, 0xc59d1b80b7b3b30b -800, 0x819f5098375913b2 -801, 0xca0f73cffdaa9370 -802, 0x2f5bf935c691c5f4 -803, 0xecbd8bb256d09c58 -804, 0x43406aa69a99ecf4 -805, 0xf05f8b2ee179651d -806, 0xb7c70142a0228f54 -807, 0xfc2db144bec4b245 -808, 0x2abce886e1a45ebc -809, 0xaf58b72a59bca78e -810, 0xa52b038f4d4541bf -811, 0xc0d14bf583b241aa -812, 0xc8a1abd7115cf8a7 -813, 0xe02e5a30a769d474 -814, 0x56acfdbd29796da9 -815, 0xe7387234b8b03889 -816, 0xf1227dd110b8f9c1 -817, 0x8b124ad0cb62d460 -818, 0x97b7c747f3b13887 -819, 0x216f43a8fc2314bf -820, 0xaec316edaf92f3 -821, 0x10186bef157d36fe -822, 0xf37a7ddce615aca1 -823, 0x9b5b913d16158f6c -824, 0x59be9a31bf90f02a -825, 0x24170e196a66a0a0 -826, 0x589a9527086fc354 -827, 0xc5990d0f438d434a -828, 0x90eee29b52e7a094 -829, 0xb703a0dc266849dd -830, 0x6d0bff0ad3ad2faa -831, 0x91f7fc0cd9e78804 -832, 0xe86041baf693528d -833, 0x1efabed627bb50a6 -834, 0xb59397e5f2895f58 -835, 0xd07f3b88397416dd -836, 0x340f1719b497c11e -837, 0x284e6cb714f9b6 -838, 0x185fc6ffc0b68229 -839, 0xfa2deec9e6c26b24 -840, 0x62c6578b4b262188 -841, 0xad4109b1cc118f48 -842, 0xa395d493b26d6f0e -843, 0x325b4fe3d0dd4338 -844, 0xf91410de49c18d30 -845, 0xf07bf8b60923ce02 -846, 0x1423fe617d564876 -847, 0xc077f782126eb9cf -848, 0x2fcb2f20910e89ae -849, 0xc2bd451afd2e6816 -850, 0x77fb4184cb7d54b7 -851, 0x3f179aed62349343 -852, 0xd9186ae032d49425 -853, 0xb5eb57360137bdf8 -854, 0x3e4be92a340c6331 -855, 0x8429236eb3127098 -856, 0xdef72542e2b2b80 -857, 0x63a489df51948c4 -858, 0x8a7e00c797fde2b4 -859, 0xaf0ecdb100a40c24 -860, 0x5861013d27e2e75b -861, 0x755b9daf64e225f3 -862, 0x3d2df8752fc1f0a5 -863, 0x603430c7044c9cc1 -864, 0x861421e1eacce08f -865, 0x617e02ea4d46a34c -866, 0xb5a65006a14421c6 -867, 0xb0f80b679b414c72 -868, 0x9906164388248865 -869, 0xc9c844ffa4051128 -870, 0xca9d7bf3530f5c33 -871, 0xab16e556b494c5ee -872, 0x7221a1b8ef1aa54d -873, 0xc271845c7d1a4e37 -874, 0x6a76797104475a2 -875, 0x908e423fb8735430 -876, 0xb5bb58134b1677c -877, 0x9ffdd2ae9c3118c6 -878, 0x7e180fcd6840b8cc -879, 0xf94537df07d2fdc4 -880, 0x5cc348554d45bb14 -881, 0x3d4daf3c2b6664b9 -882, 0xfd04db3f786791ad -883, 0xc493d37c83bb96d2 -884, 0xbc9faef5435f86f1 -885, 0xbc65cb3d3f6e9d9e -886, 0x9cbf2ffa56e6ecd1 -887, 0x9250836b7c20ad40 -888, 0x4f5c0071a0db9a4f -889, 0xdc3f0522b1445aef -890, 0x7506e5599b850a1f -891, 0x81ed2abe0e2de08d -892, 0x240490146352067a -893, 0x3c77af13f5eea2cb -894, 0xa7f4cdb8ff827eb4 -895, 0x1417242e31ad2476 -896, 0x76016b03999f9478 -897, 0xf94521fac0306668 -898, 0x8269175893be1d41 -899, 0xfc753632a234f285 -900, 0xf612755268cace8d -901, 0xa14828c9024be019 -902, 0xfa70c71b9d1eaf55 -903, 0xdf1b71a62e31de5d -904, 0x5501951e0e1edc8a -905, 0x2f8f803b8df69cde -906, 0x574f363439f7da1 -907, 0xfb10c35585727813 -908, 0x749b3c2837397d13 -909, 0xf3cdd1febe8cfdc7 -910, 0xe394963ee5056211 -911, 0x577d7d7b18de73af -912, 0x47ab5d83b0c59c10 -913, 0x9dc8a3fadd1e6f9 -914, 0x83fe8257e75854d6 -915, 0x2e43cb3aa0046160 -916, 0x1dc475fcab4ac1dc -917, 0xf0bc49e0566ce0ec -918, 0xb603cdcf1f30fa6d -919, 0x526760cc6bb6babe -920, 0x7c1da274cfc404cc -921, 0x1e7f5020e4872eb0 -922, 0x5810d9ce7b4eb5d8 -923, 0x5ddd35b6fdc8ccf1 -924, 0x3384120a60586e91 -925, 0xbea2bd919e0f3ce9 -926, 0x5a5e242545609467 -927, 0x4bde47bcf26eb4f6 -928, 0xb0a735deefec6c20 -929, 0x68a22c177454e398 -930, 0x8c9bdb2d15db7858 -931, 0xcf3748c5ce8663d9 -932, 0x4815c2a33d2e0b89 -933, 0x8ccabff1a06d51a8 -934, 0x9a5ac9d5cd9bde72 -935, 0x1dc5a9d71a51705e -936, 0xbcdb2971a66f27a8 -937, 0x31b0cd0bd56e4640 -938, 0xf7efe6b1f1f5dabf -939, 0xc5c99d9b4fb22013 -940, 0x1ba119bae4d4fba4 -941, 0xf65a6d9da77cc4bd -942, 0x25cd9545d90e715b -943, 0xb7477672a3531ea3 -944, 0xcf247ec31abeebc4 -945, 0x7e057e2450496fbd -946, 0x38ef5e25d359c979 -947, 0x4c19225c27c2eace -948, 0x2f0a528453e09547 -949, 0x59c8f78eba33f6bb -950, 0xfc8e46c35ef2fd53 -951, 0xad32d2fb43958df0 -952, 0xa4925809889d9dec -953, 0x91511a8ded719be9 -954, 0x8bafdd3b61b109d -955, 0xedc9854399b02ea8 -956, 0xa50a9ba9d3f10ac3 -957, 0xbd94acf2d2a1833b -958, 0xcdefa8e500cb91d6 -959, 0x95d64c722dd9ce9c -960, 0x2593274b7561d701 -961, 0x9d5854a252f7d4ee -962, 0xd799bae55a43bac4 -963, 0xd56a4f738e03f65 -964, 0x9c100f2599fe70cf -965, 0x1fb9b7564fd6984a -966, 0x16ca3ffcfbc77ab5 -967, 0x3a98bb3993bfe243 -968, 0x7fc4a69a94fc389e -969, 0xf4adfc0494731b85 -970, 0xd691ed499cd189f2 -971, 0x7207391cf3664115 -972, 0xae2186bf1bb2773 -973, 0x5f10cea41eee2bd0 -974, 0x35f3303dba442fce -975, 0x41f7580460af8f7d -976, 0x6f92dcae967f8045 -977, 0xf8a23d127dfb64da -978, 0xca2955a095bfa56d -979, 0xf5f9a75318e0b668 -980, 0x94eabcf4d9fffbc1 -981, 0xfb5f2b3c85a44eb -982, 0x1edb77bc0d4ceef1 -983, 0x98bbacdb3bbbfc39 -984, 0xeeb6d6bc48b6156e -985, 0xc9c56b8f2fa29b0e -986, 0x22f31ccb223886d0 -987, 0xbb7f3e16bc706aaa -988, 0xe38c1e50cd965c52 -989, 0xb15aa0b68271c538 -990, 0x1c0dba1cfa587e61 -991, 0x70f267cd2d88e846 -992, 0xa439b7443ffebc10 -993, 0xd586c99b86177873 -994, 0xb05ff9807bdcb212 -995, 0xd7c08bd208fc8e05 -996, 0xd11063113d01ac5 -997, 0xd4c9beffc525f0b8 -998, 0x3d7303181643bc80 -999, 0xd75ef9b19286142 diff --git a/numpy/random/tests/data/xoshiro256-testset-1.csv b/numpy/random/tests/data/xoshiro256-testset-1.csv deleted file mode 100644 index 534799b04..000000000 --- a/numpy/random/tests/data/xoshiro256-testset-1.csv +++ /dev/null @@ -1,1001 +0,0 @@ -seed, 0xdeadbeaf -0, 0x876912846bc23b4b -1, 0xc392a0d7b1e2ce1d -2, 0x3a77bd8137033383 -3, 0x3f9bb87b973f5364 -4, 0x512bacc4fc06efaa -5, 0xd46c8d8fcbdcf201 -6, 0x377867a5134b9398 -7, 0xaaad55c3f16b804f -8, 0x8d0073c1156e04b3 -9, 0x636fbcd73be174a3 -10, 0x5e1b4e1dee91170e -11, 0x730f46db723ad8c7 -12, 0x10b330f0fad1bf5c -13, 0x88cc7f11032dbf1 -14, 0x988c1508b1baf298 -15, 0xe95976be578a5817 -16, 0x858fe732639b48ec -17, 0x5b64491ba03516e1 -18, 0x3546e28c5de1358a -19, 0x384c66cde49bd1a6 -20, 0xdbc3ca974f85cf87 -21, 0xf540c65c435d9ae0 -22, 0xe037047fd8120ac6 -23, 0x9970c031b58d7d63 -24, 0x5dae4898619ad11e -25, 0xdf3232cc92ccc65e -26, 0xa16beb0132ddff72 -27, 0x34d1995264d4c508 -28, 0x62da0bb6460ac302 -29, 0x40d2691b6746a05 -30, 0x7fb2ff58185cd1c0 -31, 0xc6e06bc2fe11d4b4 -32, 0x7116e104e2f75ff0 -33, 0xb1595e1cedf7141e -34, 0x29ebcf708d3bd9b -35, 0x628b49afc2d944cc -36, 0xab104fe5d2bf804d -37, 0x57ee3653bf484fe2 -38, 0xbf4d601f70f7f9ac -39, 0x2af4545067b5c32c -40, 0x34f14b2f8fa98e75 -41, 0x9b585ee1c787c12a -42, 0xc2e4f8a4e27f80e -43, 0xeb9876161a0b619d -44, 0x8ea0af67974da802 -45, 0x6e003252a09ed65 -46, 0x97526de03c99ffc5 -47, 0xb8bcd950ba3f2913 -48, 0x5da355c049c286b8 -49, 0xb50e613d8186312a -50, 0x945c21f6c4d7ed77 -51, 0xa7239005836ad3fd -52, 0x2129afecc78a928f -53, 0x9ae55d1d91c75ac6 -54, 0xf50bb42f77b43ad5 -55, 0x576f324976a7672b -56, 0xfa6df7e9660cfeff -57, 0x806144cc58601f9d -58, 0x85b39b38330f7af8 -59, 0xb7d0c116d3f9e866 -60, 0x35dfac0003ca608e -61, 0x9b6320f46d3926c4 -62, 0x4242bbd0776236d7 -63, 0x8aebcd05dd117b2 -64, 0x70df852ded653924 -65, 0x11ae5f39da26fe1c -66, 0x312e11e7aa00c4f9 -67, 0x1f038c235ae539f1 -68, 0xb997522615f4a73b -69, 0xb51bd427274c0935 -70, 0x55e7843d0749c8c2 -71, 0x37c3a6b0d4352cb5 -72, 0x2df190f46312134 -73, 0xc2ecce075d612185 -74, 0x6b490f64cd1f6d92 -75, 0x8a548dad9af41d4a -76, 0xc7a4454c7debc6bd -77, 0xdc2892cd77b00030 -78, 0xb760ac60c94d2b18 -79, 0xe35231cb73492527 -80, 0x55c9f1ee4910e683 -81, 0x97a202d0ad5fdb1 -82, 0x8ff5184631a2b156 -83, 0xcf942173d034770b -84, 0x9a06010116e675d9 -85, 0xa217423b96ae34c0 -86, 0x722e29ffb7567065 -87, 0xbea7d7060cd1a4c0 -88, 0xbcbad83a19de8545 -89, 0xa88c0985b701818c -90, 0x6c1fb7fc4ca8034 -91, 0xb9e24b68f54fb1b0 -92, 0xd925a8a4b8277771 -93, 0xc33beadd812f9876 -94, 0x7b512eae51ab25c7 -95, 0x3a5436f701a0064 -96, 0x6fa2dbfe047f973d -97, 0xa21076a7f59bef78 -98, 0x3c45f50a3e6f06d4 -99, 0x6cd17ca1a4fe09d -100, 0x8121cf3ffc6a1dd7 -101, 0x7b74926ec6d5a7e7 -102, 0x51eb9833ab8da289 -103, 0xaeb2a89fc9beff8 -104, 0x9fcd9cd992f8c183 -105, 0x5190d2596093217c -106, 0xf954156453009abc -107, 0x2bc45642def07a82 -108, 0xa8e3aaff7419393d -109, 0xff66dbc36b6f4899 -110, 0x7b4481a28034b8fb -111, 0xfc1c059bcaf7021 -112, 0x699b4509593d9079 -113, 0xf2c3cd6bb60ad015 -114, 0x76d11b5fc81c9ead -115, 0x5f28d4878bb011e4 -116, 0x62384630f3e25d61 -117, 0x260445ad18a3738 -118, 0xf92f0a2148f340d2 -119, 0xcb502f1bbdf45006 -120, 0xed89ca318747a00f -121, 0x37597ed2125b038e -122, 0xaee1e4927f412f8d -123, 0x18168368f58eccd9 -124, 0x89db16f70186a9c6 -125, 0x6f428e8fcc8a6ad9 -126, 0xb3865b982fe6b986 -127, 0xc1fae9d75ee9bda2 -128, 0xa0b8256d2615e34 -129, 0xd15c4642cc470639 -130, 0xf7f644305154bb69 -131, 0x65592281bae36127 -132, 0x840ebd2e2d314c8c -133, 0xdb08b0bec618b8de -134, 0xaec9540e4eabc7a1 -135, 0x2473da693e1ec36e -136, 0x6be6fdcfccd55dc2 -137, 0xce279e14163df56b -138, 0xc55baabca12406eb -139, 0x7283920d8e00779e -140, 0xea67175f9bd0ce52 -141, 0xe86bc373ed2f7e55 -142, 0xac3acc2569a30892 -143, 0xc749fc876e37766f -144, 0xddc74e16941b8d6e -145, 0xb9c8f5b769849f7b -146, 0xbab826c423a209a5 -147, 0xf1c1b54021fe6418 -148, 0xdad8586480fd30b0 -149, 0x8f713802438a6a1c -150, 0xc3c2f2b83c7d60c9 -151, 0x9697fdffad622052 -152, 0xcb72a8d5150d0507 -153, 0xc1371661bc3c9721 -154, 0x88ca5be46f1d728e -155, 0xdeb9ae3295bb0e4 -156, 0x2d83f4159ad3e2b8 -157, 0xb30c4ada3b396a15 -158, 0x5aac4c5e77f1d4d4 -159, 0x529374c779ee531 -160, 0xb5919e58de0d772a -161, 0x820809cc936741fb -162, 0x53bbba6d2a08acde -163, 0x9a59ed5a21be8fc0 -164, 0x88aa7be1658d60ef -165, 0xbcb7fc1ad8c7d828 -166, 0x11ab2e78229e89fa -167, 0x2056ea8f9c5867f3 -168, 0xfa27e3857ecc3b94 -169, 0x1e42b81f1d84f464 -170, 0x5e1014b09c812c14 -171, 0x9aaa9d8468d9e341 -172, 0x1bfb091f9815ee21 -173, 0x5caacbb9cc7aa2fe -174, 0x58d8a864c538e3c5 -175, 0x539382e5be9cc79 -176, 0xbd89db78d603a58 -177, 0x39e1a6cbda31f0e0 -178, 0x466a59433990edbf -179, 0x56d18c76058e2ce7 -180, 0x2602ce3675d0bdc1 -181, 0x1739af88af931f1b -182, 0x862a947f2809512e -183, 0x6f18216e0710069d -184, 0x5f6e251768ff8b2a -185, 0x3a3be0c1955b088a -186, 0x22b96dd914c79b47 -187, 0x18051e8fcfce2edf -188, 0x80b0f2cceec301d9 -189, 0x868586cb1388e737 -190, 0x22f7c668c6e0da2d -191, 0x13509ef57125f1e7 -192, 0xb91dce92077fb2d1 -193, 0x31b4841411853ad0 -194, 0x32e2ddc8b722c29f -195, 0x5ca01b204c0b166f -196, 0xa2e337cd3dd5a9d1 -197, 0x4131b472c753075d -198, 0x7efcc7a894c9a981 -199, 0xc1d9c33d90e01db3 -200, 0x9053f0abe677615d -201, 0xd2034c8d4e1aa8af -202, 0x227275362bffc8f8 -203, 0x8d5a9d405ecd0179 -204, 0x7b30ddf5440f02d1 -205, 0x3620f9d1867ad68d -206, 0x747ed65beeeba258 -207, 0x1691d5d4a7786e03 -208, 0xf50455cc65243abb -209, 0x4aa91863da8b65d5 -210, 0xa69807c0a08dfafe -211, 0x4fcc33b50b00b3d3 -212, 0xe0671f97db7a35d -213, 0x263f8eabf8f9044a -214, 0x27c85ae64e97e89 -215, 0x4520b74f57c7df51 -216, 0xa37c38ec047eb0b8 -217, 0xcabd6e3e95e72d25 -218, 0xe4bb620d2e3a16d9 -219, 0xda87a4272a6ad108 -220, 0xc867f3fbecd0384b -221, 0x8691f46246273ef7 -222, 0x5ce4229e2422943e -223, 0x8c40ee86a9691904 -224, 0xcb9b83f846c9c9e4 -225, 0xa931ac81531e1529 -226, 0x534cebd4cd8fd2d9 -227, 0x2e3cf1c29aeaba0d -228, 0xa3d2e692301343dc -229, 0x1ef408da84681a8c -230, 0x64f7f2f7d3c02da7 -231, 0x541c50b180553eec -232, 0x536194b38f566c5b -233, 0xbb7a282cd9f36f9d -234, 0x527010351098538b -235, 0xfe30504c6e499b4d -236, 0xa7c3602410a59e53 -237, 0x8f44cacb7b7d1267 -238, 0xe40bf315dc5df184 -239, 0xde7eb3b70c1f41c1 -240, 0xc41aecca30a4bb9c -241, 0x3bc0e028ccb19d93 -242, 0xe166010bfe275442 -243, 0xa70abd28e44af7ca -244, 0xd4504f4548d0d888 -245, 0xa55e4eecb4d88bb5 -246, 0xb6ec6442a017ef5c -247, 0x1c62a5d488494ff6 -248, 0x1c09e177b467f30d -249, 0xb9c90e7ad2f47ecd -250, 0xde2c186b02cc341e -251, 0x1a82ff0a466db4dc -252, 0x61db3602688eb096 -253, 0x920df7c1d2b0e8f1 -254, 0x34a2f18c92e9b6ff -255, 0x14830c36acd9ae19 -256, 0xc321ad1ffbfc54ff -257, 0x9e4b1c6799ff696f -258, 0x1780ce1f22fd9395 -259, 0x26c50c518a484cc1 -260, 0x7461330b1fe01211 -261, 0xd81e75bc84a15cf1 -262, 0x86ca81452380da38 -263, 0xe6b956498fa9f351 -264, 0x9ac04fe965ce35cd -265, 0xa4ec6641c5518519 -266, 0xa03e3054f706bb49 -267, 0xacb9b452fd8267ed -268, 0x302282d4ce222225 -269, 0x8b56489048399d5 -270, 0x1feadce5b06b509b -271, 0x7cee1475ce616c7f -272, 0xd414bce3075397b3 -273, 0xc71f6a8a8eff334a -274, 0x99b3df4a89d93e -275, 0xc702c1e101f4f2dd -276, 0xfe3a7177f2ec77c2 -277, 0xe080a478564afac9 -278, 0x665d0087841f481b -279, 0x4dab6f59d3c1a144 -280, 0x1ce185d7d140c8f5 -281, 0xb007fa8eca9036c0 -282, 0xf18f48ac88312c95 -283, 0x79550ca0c88204cc -284, 0x9970ba85bdb15f27 -285, 0x2b55457ead5f009e -286, 0xc4f24923b930e27a -287, 0x8c3018e3bad3b6d6 -288, 0x790837a25c10ee7 -289, 0xb2dd8ab9f1def8a8 -290, 0x363ec10ac55a521a -291, 0x971af7eb3b1560ad -292, 0xe1a3cb1562833819 -293, 0x6e60e9949b6af18a -294, 0xc379834ba34f6820 -295, 0xb668c3b288a5f926 -296, 0x9ffa1bd130c914c9 -297, 0xe6b93d5188a06452 -298, 0x9c520f67b97dfdf0 -299, 0x50c2a9973c08139a -300, 0x59851ffaf533706e -301, 0x2e5eff12d660fb5c -302, 0xeaa1ff394919a29 -303, 0x9846f6684ff28cd2 -304, 0xeda270a0cd0cd09d -305, 0xc0a319acd516a45d -306, 0x6b5e013c4c4e1efa -307, 0x76faab2a47dc7b68 -308, 0x10d5c15c81514814 -309, 0x3783ee8be5024e54 -310, 0xa4cdb957e5844ce2 -311, 0xd20ca72588a28e27 -312, 0xd7f16a0dcc7f77dc -313, 0xd7e945262b79f2b6 -314, 0xe789e1213d3c62ed -315, 0xba2cbc2fa27b9806 -316, 0x1d39cb2e5d96965 -317, 0x4526e9965c23273a -318, 0x23b4c26eb5166240 -319, 0xaf0f404d70dc5638 -320, 0x8933061cb36229e0 -321, 0x69cec3a72559600 -322, 0xf891d9d259e44209 -323, 0x2e49b1c932ba1d66 -324, 0x333f1bc8321c60f -325, 0x53bad1fb53c8c7cd -326, 0x392f1562e71aac52 -327, 0xa9f6d47f02e8b0d7 -328, 0x39f9c3b1feec67d8 -329, 0x669009ed80083055 -330, 0xab063271b9538170 -331, 0x56678abcd6d3864c -332, 0xde74b0617e61cbd8 -333, 0xbb4f24b9395938a6 -334, 0xc56dfbd143423466 -335, 0x4cb5a4a7ff276754 -336, 0xfb7b814159202ccc -337, 0xf7bbd8fce5320160 -338, 0x218d0ad6343402e7 -339, 0xc8f1bb14eea39aa7 -340, 0x92d7e7256dcab678 -341, 0x8f13ff680747d33 -342, 0x7706151f442ce1dd -343, 0xe902f2633656eb91 -344, 0x69cdf1a57b9424bb -345, 0x9775cad17cd05d1b -346, 0xccf9b27b7dd64f7f -347, 0x1a912eedead72feb -348, 0xc1e26527c077acbd -349, 0xc71692a375f3c720 -350, 0xef1e5b57c2054419 -351, 0xa6b72781c1fc92c0 -352, 0x38318f277f1ef07e -353, 0xe5ba934657bd23b4 -354, 0x792b67250dbc761f -355, 0x785df3106f3610ff -356, 0xfa80a926eae8d94f -357, 0x2c0a95d66d691c70 -358, 0x5c7006e181d4a6ac -359, 0x43e8b7dee8fe5379 -360, 0x87f509b549c83695 -361, 0x32599937b8fcd560 -362, 0xb9931fed6f066f24 -363, 0xf2a6ebcb697508ba -364, 0xc0a3c1ba9a67600a -365, 0xc8badd949bd0e30a -366, 0xcafc4c1611c002a7 -367, 0xc4b5310f493c8f20 -368, 0xc51ff1b5bdb380ac -369, 0xa9c73b25f03868f5 -370, 0x9edfdcc90d558540 -371, 0xd3d6333855161133 -372, 0xcbbd5d9ace516738 -373, 0xcb7e692a0f9fe6fa -374, 0x6a21b61cd8fbb617 -375, 0xfc31d9554c519f86 -376, 0x76ea0f8ef0a354a3 -377, 0xadc8a62ec6b08390 -378, 0x66eeb2fe10131429 -379, 0x12ee14e3a238353a -380, 0xbe3447a29c425e72 -381, 0xaaa368536635fb9a -382, 0xad2ed0d14e4c413f -383, 0x217b489205384ccc -384, 0x4f22392204e47cb6 -385, 0x9b073c7bc6fc086 -386, 0x291abda48636aa3c -387, 0x755ecf4077a77de2 -388, 0x34a5d238de636b33 -389, 0x8989d30fc37b325 -390, 0xd0b9fa38231bdf67 -391, 0x72461fe9b5055361 -392, 0xb25bd2fd4a1bfd09 -393, 0x9ed651e16289afac -394, 0xd02d8c13301d3d2e -395, 0x3d5bbed8ed8856bf -396, 0xc44f594ac43fdbb2 -397, 0x9ada629d96abe651 -398, 0x901bec1095df9927 -399, 0x8597db9a0e29e2f0 -400, 0x97194dc163ca609 -401, 0x90c00a05f753a86b -402, 0x426af3db2a4ac0fb -403, 0x8acda542a69f22c2 -404, 0x674cf92ffcd455ac -405, 0x6136bc48b45959d5 -406, 0xb90b38cd1ff9279d -407, 0x4e6c9b5ecae724d9 -408, 0xcf30abb9df98cc0 -409, 0xddee0179acdaf635 -410, 0xafc739ce5a1e5b9c -411, 0x646a8817ddc44ab5 -412, 0xd34ab42bcb8cdb93 -413, 0xdee4cbee62f81c86 -414, 0xc2221ab03185fdfa -415, 0x7c9f570c313fab96 -416, 0xf1b366adbfee1326 -417, 0x7f096df1a4b284e3 -418, 0x41ed5c325a684c02 -419, 0x177d8012ec68bf1e -420, 0x723ef03bbc899b8d -421, 0x4b133232b7b75961 -422, 0xdf26aaf400d56c4 -423, 0xdfdb1c617a5a9794 -424, 0x9ff2f6d5ff5ce426 -425, 0xa902670b191b5b6b -426, 0x6c9b17049b00578e -427, 0x698c0c675043a17b -428, 0x7a39ef3ca26d128d -429, 0x684d4a467f04e43f -430, 0xe2650c63fde538c8 -431, 0xd68d21f5390269e1 -432, 0x128f6856693a6f91 -433, 0xf16e391706e58b04 -434, 0x77487c06bb8213fb -435, 0x6fcd5a620a122728 -436, 0x505c93b08cca8734 -437, 0x9a1132efe64d531c -438, 0x7fffd4b9c31c6ecb -439, 0x18974137a14e2c8 -440, 0x2aff5858af3e3dec -441, 0x37c2c46feb19f7f1 -442, 0x69ff86ca141d00c9 -443, 0x94dabd547190bf71 -444, 0x5fbb969adddaa7c0 -445, 0xa0775e468c054ab8 -446, 0x632e6a69a80b7be4 -447, 0xba23d74ff6f179a6 -448, 0xdc80b0b9a70432a7 -449, 0xe012f4b1362a90f4 -450, 0x7f132473e42cbef -451, 0xfb182eefc0dad8ac -452, 0xf3fb712546ae256c -453, 0x8ac69f2735229dac -454, 0x564cafdaad77f80c -455, 0x876c4ab2647401d0 -456, 0x2baf5f31018e5c1e -457, 0xae1aaf82b13b7597 -458, 0x65944d8b8cabbb95 -459, 0xc7c01bfe1e0fbc00 -460, 0xf6dd901e7bbe8365 -461, 0x94e1050634114f11 -462, 0x47cab1cd353b7f81 -463, 0xa8775049b2696902 -464, 0xb186dc021a9110ea -465, 0xf28259ce664afa40 -466, 0x67558a2beab5b7b1 -467, 0xb117438f266ec05e -468, 0xf9da8468bb4cb968 -469, 0x2af756738bfc47b -470, 0xd5842c66749f950e -471, 0x953373bd7e97e4b -472, 0x49a929314667f184 -473, 0xe64daee7102ddb89 -474, 0xe459bd3f9acdea67 -475, 0x5b9b04066b20c49d -476, 0x5d82abef2d8487fc -477, 0x4f6236c778a5ed31 -478, 0xdcee2584cd287c46 -479, 0x31c53b48310c8c84 -480, 0xb9cd90102e158a63 -481, 0xe57be85d8e42deeb -482, 0x6582541962888815 -483, 0x845fd1538efbe310 -484, 0xaedc7db39263eaad -485, 0xc0ea0704dea093fd -486, 0x7d3e5c4a245ef295 -487, 0xfe651efbca41d1d8 -488, 0x5275c62cc60f26c1 -489, 0x4eb23a86fd35bd79 -490, 0xd3fccb059f30bb9d -491, 0xc9b6267a16be945a -492, 0x8fa963e267e0791a -493, 0x64e7ef9097602cad -494, 0x13a0d7ba848311ef -495, 0x88878d9ebd8381f -496, 0x4556a6258ccd7aa8 -497, 0x1321af0ffa57b4b2 -498, 0x271c1fc481143191 -499, 0xb09b8888fc206dae -500, 0x1fdb714c88aa8318 -501, 0xdadb65138cf1a785 -502, 0x5c25349014f20584 -503, 0xdde1241c9c5a58cd -504, 0xd93741fab3d630e1 -505, 0xe895c89a575d11f5 -506, 0x4f0b79334c81403c -507, 0xd8a9850c307c591a -508, 0x3621e4b8e12c9a19 -509, 0xb9db6231c6fa3793 -510, 0x659a34f2e8b13a30 -511, 0x3f7f65d4138a3ece -512, 0xc68a3b4193c7ddb -513, 0xfedb2ff6f59b308d -514, 0x91a49785126b2707 -515, 0xcd897846c2da401c -516, 0x3174aeb2ef45125a -517, 0xfc93e91769875bea -518, 0x20dc156b32d376bc -519, 0x55b332e7395ae006 -520, 0x898b4d9889ab42d7 -521, 0x80e8b4fa60d67e52 -522, 0x751bb9a5c4f43263 -523, 0x4ef12c7d48b02305 -524, 0xe9b2f6da9932279c -525, 0x28166b1bb0083fe -526, 0xd66ede9e1175436c -527, 0xe1600bfe3543967c -528, 0x9e82c1de27917b7e -529, 0x1a6a6a36eee4e0d3 -530, 0x4fd5e445d2ff89a6 -531, 0xb167da8a45a041b4 -532, 0x90421abd6d6b657 -533, 0xac2d084ffe30c155 -534, 0xaf6d71f79d0250a -535, 0x2d2ba07fc90eaba2 -536, 0xee44751087f49162 -537, 0xd9a125da1f2bcd5b -538, 0x1710b671e85149e2 -539, 0x6345319547b83ad1 -540, 0x68b4495241b6c0e7 -541, 0x74fa064e23915490 -542, 0x994254c5ef7484ff -543, 0x767ce73cb64a3828 -544, 0xc44be811238ec768 -545, 0x49bcfd08e26f93ca -546, 0x8506215301976fbe -547, 0x17d72c4c22b48cc9 -548, 0xf482dc265fc66423 -549, 0x81515cd9ee472156 -550, 0xffc3716cab24bdce -551, 0x4f272ed4fdd1cc65 -552, 0xa5fbe307e8a95706 -553, 0x4f489ae4435d271a -554, 0xc32af641a427871e -555, 0x481501cd6e76b046 -556, 0x7fdb10595e105959 -557, 0xc231d1fbcd7f9905 -558, 0x7f8af2f02dc96527 -559, 0xee1829cff220d07f -560, 0x69cec4a31d43a06a -561, 0x7ec964a98e091334 -562, 0x267d4751786ed827 -563, 0x3ff2a3fa95f49992 -564, 0x4db020a1aaa91126 -565, 0xf0a52fbc2ecbe5e6 -566, 0x22b4a6f29b420436 -567, 0x3baee23caf4332c7 -568, 0xf25b4154d1337b22 -569, 0xa1fc227fdb94fd5c -570, 0x1c8d1858a14c79c7 -571, 0xdee05236f275cd72 -572, 0xbd2feb9b5bfea570 -573, 0x96d3d6d1189b458c -574, 0xbfe1c60f48c2a834 -575, 0x590b91cf41e7f1c -576, 0xa230cd61d4aace50 -577, 0x9b15a3dbd0129922 -578, 0x5a6cd3333e77adea -579, 0x41825f9a09221129 -580, 0x713d20fbbb133600 -581, 0xde695bc734434fc2 -582, 0x80022a312ccfd484 -583, 0xfebe989fbe2d7f33 -584, 0xeacb2fc50aa3ce4b -585, 0xb7bde6fa12d0db67 -586, 0xc5e52e74fd2fcf5e -587, 0xccc74d9803ec269f -588, 0x9f9f1bd42ceed664 -589, 0x5892c340c9b3e3f3 -590, 0x306260b57f475e42 -591, 0x20ba283b7feec8fd -592, 0x8258f0179d4c1aac -593, 0xf4f89922b5afe031 -594, 0xfdba45233cdd04a -595, 0xce0f81c48bfd0d58 -596, 0x4b0cbebe17263b16 -597, 0xfee1fd8f3abf3ee0 -598, 0xfc5194839696ca5d -599, 0xb2106fc284f8cfed -600, 0x3be13181cdac454f -601, 0x1dfea888cdb8755 -602, 0xe1df7e41e646b676 -603, 0x72e16234c51caa19 -604, 0x367a508bf361b3c9 -605, 0x3e8d10a40879846d -606, 0x72540d5ed7c59a5e -607, 0x49d00e4543ebd93d -608, 0xf889e0dfb47c5a24 -609, 0xf6b166031a98e3f0 -610, 0x6ec9c4ac1f367f6e -611, 0x81c322bfb5b4963b -612, 0xe43618859ee305b6 -613, 0x5c0849263dff8bd8 -614, 0xca60ef338ca33c75 -615, 0x96dc953cd8229dfb -616, 0xd33d8edd653f9411 -617, 0x398f97e5a17e9d21 -618, 0xa679fb8f7359cdd3 -619, 0x1a079b224822d2ae -620, 0xd6f973d320aea3bd -621, 0x8147d823ddca9fdb -622, 0x7a15b31891283335 -623, 0x1ddff9012d02fbd7 -624, 0xf8822faf5627a945 -625, 0x41be97afe83c9b99 -626, 0xfc6c03f323a40cf0 -627, 0x40a3547fbda709fa -628, 0xdabf18e62533b8dc -629, 0x3df9047875ad057 -630, 0xaf3cb3461b5ce9a1 -631, 0x372859b34b493176 -632, 0x2fca17f51fa0f9eb -633, 0xc7029f122beba37f -634, 0x3f4e9ea4b4f4e36e -635, 0x63d22717f8c9118d -636, 0xc85fff0d3f30946f -637, 0xfaf6a8680c3327b7 -638, 0x7cc6ff76d32736cf -639, 0xed7066e55443e1d5 -640, 0xf8698e4c0986e3a4 -641, 0xfd8d1e5a65a86bae -642, 0xe52f0012446decc8 -643, 0x5057fe700548fd6c -644, 0x4529015264cdb296 -645, 0xf0bfc50ab6700a9b -646, 0xf42ac8161980025d -647, 0xd4eda173955d8472 -648, 0x37b042b1e5a10dd -649, 0xe325a690ab12eb81 -650, 0x7fcf9f4d85db4127 -651, 0xbacbd13cba440c75 -652, 0xbaaab45fa3ec6721 -653, 0x621a8fb360e704d7 -654, 0x8e97eb1966466330 -655, 0xda7f0a06440024c0 -656, 0xe32b44177201fb54 -657, 0x81426b2259d306df -658, 0xcc12d49f57a2a60d -659, 0x43d840cb2c1b96f3 -660, 0x2f5190397dd5f5fc -661, 0x37ca67cb906f8840 -662, 0x84bdcca3f926b24d -663, 0x833e6cc4f6846646 -664, 0x3d046e6375412bf0 -665, 0x8678ca4ef2e3f721 -666, 0x62d9c438d39748cd -667, 0x750fb4b000895aaf -668, 0x7b760b873d0bfce0 -669, 0x3cc79186f7e7528e -670, 0xe1e304d26bc14e90 -671, 0xe855ed09d88a5b86 -672, 0x99ae65ccd9d9ff9 -673, 0xd9bea1d3d04c6432 -674, 0x6871fc86fccce7a5 -675, 0xca6f22983e5d892b -676, 0x7e29222169c094bc -677, 0xbb6bb434e7225ce2 -678, 0x3b907684d5342268 -679, 0x5e5328163653a332 -680, 0xf56453da8399ea50 -681, 0x4691e0f9a0c6625 -682, 0x11a6cee0f014d630 -683, 0xdff740d94007b83a -684, 0x6744032172a60cb1 -685, 0x8d311639fb358a47 -686, 0xe77ae7a767d74301 -687, 0x994184353b84ffd5 -688, 0x9faa8b6852c8b9ec -689, 0xed5d549c40fd7b31 -690, 0x6bff41b829143500 -691, 0x95cd1f944b72360e -692, 0x966e8976a79bd4f7 -693, 0x5f73608f2069b1f3 -694, 0x20c03970af7c205f -695, 0x9a0e0928bc29f5fa -696, 0xdc80d66b7ec92bc3 -697, 0x558745e23c9e413d -698, 0x32dae13bef9e4398 -699, 0x1af3f745e7ca19b4 -700, 0x1cbb10f2f21417a2 -701, 0x37c03955556e6f6 -702, 0x852afdad0d2459fc -703, 0xee72e7019e217ec4 -704, 0x6854606758560380 -705, 0x9284eba641a65dfc -706, 0x446b92d6b8f3f53a -707, 0xbe360ebdf10ded26 -708, 0x1048ecaabfe15b93 -709, 0x25d1762c447cca8c -710, 0x6cf6151bdd266aa8 -711, 0x2e8fcc480b9d228 -712, 0xeb6b1cbea3c65d63 -713, 0x7a883b88ef974ee5 -714, 0x9f52f4081ea085f0 -715, 0x75fa5e7cbf0c55a5 -716, 0x2bfedfe0e029b818 -717, 0xebaec3bcde2e43b1 -718, 0xeaa3aa06bf8a67e1 -719, 0x4deacc579051e8c0 -720, 0xec44abbc73b62bf4 -721, 0xb9a339ae805270b7 -722, 0xf9eb47d4cba2877 -723, 0x6105cdeb6a7e678e -724, 0x242351322affd465 -725, 0x111fe30cf81b2f70 -726, 0x25b5ae64c741738a -727, 0xfb425508ba96049e -728, 0xe0fbf9619e3a1aee -729, 0xa0fcb4f5f0c32ee9 -730, 0x1e69787a387b30a -731, 0xe89a8480884263d9 -732, 0x4c02fe1f82aac874 -733, 0xb576e8a44017bee9 -734, 0x5e7b98878c6537ab -735, 0x6d291feb307f3740 -736, 0x7d00feb09e768b54 -737, 0x71bb0170d659119a -738, 0x7bb2ff7d0a61dda3 -739, 0x2c6a16824290b7f3 -740, 0xb96623628a2917ea -741, 0x14489300ff071e92 -742, 0xdedd6422224f3748 -743, 0xa6e1071c454da244 -744, 0x1c4b1edef803ffec -745, 0xa5f8e7c79d02be10 -746, 0x9b8309dddcbd21bc -747, 0x6f57e425d2808563 -748, 0xd7d49cab22729386 -749, 0xd0dab40fd019b301 -750, 0x6808b10401cda8fb -751, 0xfa51b53ceceb08b8 -752, 0xb90e4574b2745b68 -753, 0x470707ab3da1f1a2 -754, 0xbc76e852147fe684 -755, 0x82f7e418e4454b7e -756, 0x6aa5fec0a5dbb4b9 -757, 0x2695d285a10e05c2 -758, 0xd15219b5dcc6db09 -759, 0x8ece31d881c4e1e5 -760, 0x1bea39be5b09c080 -761, 0x19e1d4897394d0f8 -762, 0x8bb735c6dcade9e9 -763, 0x5df3789e52d93a64 -764, 0xcd6aae13791d95df -765, 0x188ce0105b17920a -766, 0x3fa30c09840f615e -767, 0x7c201465bc6301e4 -768, 0xa9a00e2757807982 -769, 0x122e0fc0c79782fe -770, 0xabff396bc21271b -771, 0x7d54d41d59c99fe4 -772, 0xe2d5b1393b081928 -773, 0x45165a925412ed4e -774, 0x96c945ed58ba2bab -775, 0xde05a1d6fb9ced45 -776, 0x496cad57600fe9ff -777, 0xc3846b63bfc1062c -778, 0x9055ccd5f729b1f7 -779, 0x8fa87030e7e623a4 -780, 0x7e6ee59d4fb11784 -781, 0xb5b151c0d892955e -782, 0xeeaa87699ff69dfc -783, 0xa6d485e04ce2dd71 -784, 0x69c53b89eec70119 -785, 0x3732533c7df25f53 -786, 0x275d37a0c68e7a42 -787, 0x3a88f16ac812bad8 -788, 0xb0f92536c7c763 -789, 0x27a32d261274ee83 -790, 0x3fd5ae8a771adf89 -791, 0x23feb68f4819e4f -792, 0x4d4c7be0e84aa024 -793, 0x41a80d994fc0a41c -794, 0x718321ae9282c3b3 -795, 0xd551e149c01af06c -796, 0xbcb93735c6eac744 -797, 0xe59f03655f9180f8 -798, 0x6e96a0431ed2e0cb -799, 0x5866d0755ecf3c6e -800, 0xd9f473c16bbec85f -801, 0x38b2070194506205 -802, 0x98aaa714c80a21af -803, 0xdb7853e1515cb5b -804, 0x32532dd0c0e1920b -805, 0xf5d440e12b584cfc -806, 0xe67397ec029cda3e -807, 0x2d51f19fcbc86346 -808, 0xb5e46840c44c80b0 -809, 0x6d39c237e90744be -810, 0x3535938a21e6e293 -811, 0x7b8a87d2b539e50 -812, 0xf4e74d0346ccdb48 -813, 0x1640fb85b5f11965 -814, 0x2a99ba02ff6b5ccd -815, 0x12dbbd81a6ca75ad -816, 0xff72053bbfd9490f -817, 0xf5470d1e0ff5888f -818, 0xd7d3e1ca8d79382d -819, 0xd437182225fda535 -820, 0xde44396868fad24c -821, 0xeafa4c86c0c578b4 -822, 0x788a1e34983fc51f -823, 0x396563f750981e64 -824, 0xeee9e79937487d52 -825, 0x12871390ffe443a9 -826, 0x96b07429b4a54778 -827, 0xb0506605d66bebce -828, 0x1b5878bc242f0158 -829, 0xea46c8e2d9ca3dbe -830, 0xa94a8750612bc68 -831, 0x864ccfa5796f590b -832, 0x4d1d2609563b8063 -833, 0xec62387e7f258abe -834, 0xb2726f3d37ba75b1 -835, 0x2067494d0dd41024 -836, 0xf75839382e176d99 -837, 0xf0c83dd9ed0aaf23 -838, 0xfa8a581e28780483 -839, 0xc461e40cda6d4ba4 -840, 0xaebdb6c7da47946b -841, 0xd380bbdf27718424 -842, 0xd31504078e3a9a9 -843, 0x4fc0eee024e9a5a9 -844, 0x18714e84611ae719 -845, 0x7503c0ee7ce5608c -846, 0xef1abc4a7543b398 -847, 0xd1e7ad19597d9cb5 -848, 0x77fb8e61dec1dff5 -849, 0x6d6504f8f1cd19ff -850, 0x7d7e1a6b8d21b29a -851, 0xc0504f78e1744ba0 -852, 0xbe3aefe760c2025f -853, 0xbeba2fd08acd9166 -854, 0x5c140d358435d3b9 -855, 0xc550467f426d4bb9 -856, 0xfcf1c8674b415f75 -857, 0xc81721303ee733e0 -858, 0xe4b0c096d8c54e7e -859, 0xa963e1fa39f44bc -860, 0xfc6fb6ad0317aa76 -861, 0xdf7c4217eeb378f9 -862, 0x69639f8b6c1c765e -863, 0x23d8874dfac843f4 -864, 0x323e6cfed1af5406 -865, 0xdf34a5b2df24c44f -866, 0x52c88f39e1f1017c -867, 0x9b780cb0ffd8e0ae -868, 0x17bdfe024bf483fe -869, 0x1bdc2d6b57afb0d7 -870, 0xe5cfe8cf4f301238 -871, 0x466caae45214f84b -872, 0xefa9e39d81d0f263 -873, 0xf9e330742b518177 -874, 0xea36033c02f97e71 -875, 0x37f90271cfa76be9 -876, 0x313e5ad81eb57d98 -877, 0xc0741d6410e19347 -878, 0x77567253b48ea919 -879, 0xa0b196d776905b46 -880, 0x81848e866c958c22 -881, 0x5defd26f7e313de1 -882, 0xebbf740f85d0a413 -883, 0xb43c6ca7dda9c7c3 -884, 0x3a38024f6076bce1 -885, 0xc9a4d739dd7a58d5 -886, 0x4a0036e594c30291 -887, 0xb67d467a13271850 -888, 0x26d4333f67ec5658 -889, 0x8683441959b6fca0 -890, 0xb4c3173d217788e1 -891, 0x3fca2876508b0037 -892, 0x4fd7ac0912a08d26 -893, 0x3990c299fd77d3cd -894, 0x388bfe456f0ee713 -895, 0xa17d56851d0aa9ad -896, 0xae6e173a38e92688 -897, 0xcae6f7387868f4c0 -898, 0x5deb567e87b682ed -899, 0x5bb2a3cbc6ad9aa7 -900, 0x4054518b25a4e546 -901, 0x8399534e3156fcc1 -902, 0x288ff48845b1cd34 -903, 0xc7d6f2e48f1799d0 -904, 0x968a3ed47b71e9c5 -905, 0xc06011209519bbee -906, 0xe2a80df93233bcf5 -907, 0x20b9afd489292293 -908, 0xf0ce32e84bdf040a -909, 0xbed405bc7fe1e795 -910, 0x86f7b1542f6b195e -911, 0xcbb6cb657318a436 -912, 0xcabf1276e3e6d85a -913, 0x42a331a4b5939d3c -914, 0x80cfa20e1ca1d0fa -915, 0x768bb2ab2504a2cb -916, 0x38a6f71b6865c85c -917, 0xdc4142ff4a656c94 -918, 0x91541ea1cece2095 -919, 0xbe03be2fc0073de0 -920, 0xe21d0d35ce487214 -921, 0x4681e310b4117bd7 -922, 0xf2253c6efd0ed606 -923, 0x702db3cd3ba7c127 -924, 0x8d3175ccb5e08f38 -925, 0xdafca1a22f02d177 -926, 0xb6fb797078eed6d6 -927, 0x10120f45ab02ea09 -928, 0xfd4cd6ff70fe60d6 -929, 0xaf70101012b33e44 -930, 0x6e4321ef1a47aed2 -931, 0x859676a49e1dca4f -932, 0x8065316b96ff29a0 -933, 0x44d05376ed2d0fdc -934, 0x7343def61d2425cc -935, 0x86113b555152aac5 -936, 0xba339a0e137c5ce6 -937, 0x1d2d89d9de5460d8 -938, 0x7ed9d48c61257119 -939, 0xcad2b91ab20da148 -940, 0x656377284c5e195c -941, 0x94e734e8a480a4a7 -942, 0x5bdacbc607ec7c4f -943, 0xec1241717db1ad5b -944, 0xe6eb7fbcf5b4b66b -945, 0x3512345a3554e6b6 -946, 0x58c77d926e9a528b -947, 0xf3e782be535f9b9 -948, 0x9d3b3a53ea1530a5 -949, 0x3df1eddab09a2ac2 -950, 0x86440868ee975e20 -951, 0x35e2f24867978c7 -952, 0xd3a6219dec1a447d -953, 0x4427eaeeb50643d3 -954, 0x1eac58507e33223e -955, 0x10fb299eab3112ac -956, 0xaa01a8b779062117 -957, 0x552c4559a7e5c22c -958, 0x2e10ac501d21242a -959, 0xbabf9866c8d7d061 -960, 0x94f03b79de712060 -961, 0x4a70ef01b76bf68e -962, 0xd1fcf4d2226ae986 -963, 0xcc53d27dcb2ab8bb -964, 0xe169d46e9a968cd2 -965, 0xdd3baeab560e1eb7 -966, 0x62e325462270d89 -967, 0x717dade9cf46c1ff -968, 0x229552ce0bb04970 -969, 0xa6ebda4d2eca3cbc -970, 0x80d3bd7426882137 -971, 0xfbc3243079309847 -972, 0x664f4a88f2c7bc55 -973, 0x750baa49d93df131 -974, 0x8f0a87416f41c64f -975, 0x5d01ca38b0484512 -976, 0x743fdfbdd79e82f3 -977, 0x69c3c2f9296fecaf -978, 0x3d945260849578e7 -979, 0x21aadd4d1956a540 -980, 0x17a2d7868afbf606 -981, 0xa945ff7af593e961 -982, 0x499c7abc8df892fc -983, 0x599c1a937b547e43 -984, 0xc6f0c1d6eec5cf12 -985, 0x425c576116b8bf5d -986, 0x5a9d64a33ba615a6 -987, 0x85f1341ef79fc27f -988, 0x75c151fd5787305a -989, 0xf56789cbc4c1a1ed -990, 0x1d547a0b47eab748 -991, 0xccc539d7a777e60c -992, 0x39d3177b7f18e15e -993, 0x9d9911afa8441757 -994, 0xe163b0cae65e074c -995, 0xb75ff4c843626bed -996, 0x696089f87bf020b5 -997, 0x78c5c7971b74ce1e -998, 0x2ed5aa6e489c3684 -999, 0xaf1b049e483011c3 diff --git a/numpy/random/tests/data/xoshiro256-testset-2.csv b/numpy/random/tests/data/xoshiro256-testset-2.csv deleted file mode 100644 index b688fcb2a..000000000 --- a/numpy/random/tests/data/xoshiro256-testset-2.csv +++ /dev/null @@ -1,1001 +0,0 @@ -seed, 0x0 -0, 0x99ec5f36cb75f2b4 -1, 0xbf6e1f784956452a -2, 0x1a5f849d4933e6e0 -3, 0x6aa594f1262d2d2c -4, 0xbba5ad4a1f842e59 -5, 0xffef8375d9ebcaca -6, 0x6c160deed2f54c98 -7, 0x8920ad648fc30a3f -8, 0xdb032c0ba7539731 -9, 0xeb3a475a3e749a3d -10, 0x1d42993fa43f2a54 -11, 0x11361bf526a14bb5 -12, 0x1b4f07a5ab3d8e9c -13, 0xa7a3257f6986db7f -14, 0x7efdaa95605dfc9c -15, 0x4bde97c0a78eaab8 -16, 0xb455eac43518666c -17, 0x304dbf6c06730690 -18, 0x8cbe7776598a798c -19, 0xecbdf7ffcd727e5 -20, 0x4ff52157533fe270 -21, 0x7e61475b87242f2e -22, 0x52558c68a9316824 -23, 0xa0bd00c592471176 -24, 0xfc9b83a3a0c63b9e -25, 0x4d786c0f0a8b88ef -26, 0xa52473c4f62f2338 -27, 0xe9dc0037db25d6d9 -28, 0xfce5eba9d25094c3 -29, 0xe3dbe61ee2d64b51 -30, 0x23f62e432b1272df -31, 0x4ac7443a342c4913 -32, 0xc31cf1a9658c1991 -33, 0x290c97ffce918b1d -34, 0xf54455e02e90636a -35, 0xf57745758bb8f33f -36, 0xe5e1b685122823d9 -37, 0x2c16cde0fd8097ec -38, 0x3cdebc44a5bc1936 -39, 0x6833bafa723c2dbd -40, 0xb6fa6c4ba1d3d39e -41, 0xe5b932b656c2edc3 -42, 0x9cf0b6121615c9f -43, 0x214e25d57fc636d5 -44, 0xcf3d1721806e2537 -45, 0xcf796fc6335ddc02 -46, 0x353c8b86489b0322 -47, 0xfc4865822547b6aa -48, 0xe8c93d84ee8b3f8c -49, 0xd1b42120a323f2d6 -50, 0xa73a11d247ff36b2 -51, 0xae42236958bba58c -52, 0xb622679e2affcf3a -53, 0xcc3bab0060f645f4 -54, 0x2e01e45c78f0daa7 -55, 0x8566c5f16be948a -56, 0x73beac2187e1f640 -57, 0x8e903d752c1b5d6e -58, 0x5b34681094d7511d -59, 0x70ebad382047f5c1 -60, 0xeae5ca1448d4e9cc -61, 0x3d2d62775b631bd5 -62, 0x8cb72ebc5b4f7dc3 -63, 0x99c2939ea690a80 -64, 0xf9d3061a3006c84b -65, 0xd0872c394d734a5f -66, 0xbf768c2fb70d5c2a -67, 0x9b5a7e27e4c57259 -68, 0x8e00b050a0489404 -69, 0x72ae4545fe9d40f3 -70, 0x2bdcc8dcb50cf5a -71, 0x7b20239fe07cd664 -72, 0x37b037a8ea138f13 -73, 0xa52f51f9e9cd65b0 -74, 0x5ee0b72fd581557a -75, 0x527ebb9ac92c6fa7 -76, 0xb64f03fc892955da -77, 0x972c4feb529a9045 -78, 0xa5ee146b2461a795 -79, 0xaaef1049a5bb9b07 -80, 0xbcf5f38ab6cfe9 -81, 0x16398fd1538acdd -82, 0x8a0744fd7315cae2 -83, 0xa4bf1e39de6657a6 -84, 0x685247449d0de2ef -85, 0xa48d5c8c364fb1dd -86, 0x7fbcaafb1f2b65b5 -87, 0x96f0967f55ddec48 -88, 0x30d43cfe4a788a1a -89, 0xf7b15bed8038c711 -90, 0x8db82a6db9261a2a -91, 0x94eb6a77a00e5b2e -92, 0x3e19490dbfd221a4 -93, 0x9644e15b5d0a6b54 -94, 0xe235ca3fdaeca1a7 -95, 0x2db8e0001ea7c79e -96, 0x1d82fb1d7674fc75 -97, 0x65039b3b4805404d -98, 0xd73a9fc3e975791b -99, 0x3cb72d021fba219c -100, 0x134f43cf382ea87a -101, 0x32806c8d66cf621f -102, 0xaaddf99cd62686db -103, 0x1b3e5fe6476a54d8 -104, 0xd0a2a5e803c27068 -105, 0xacfb9437a3b64c17 -106, 0x514a55b2ce7f4982 -107, 0xe0b9ee39938c909 -108, 0x66d449a98f1052d2 -109, 0x639a3b248f7b37e8 -110, 0xf0ef1ed4a65619a5 -111, 0xf010ee5ad7e74a11 -112, 0x3fbfb63d884eca59 -113, 0xdbed473e4efad8bb -114, 0x49c9bb8f88e373e4 -115, 0x251f496458b6360c -116, 0xd91a4850fddb72cb -117, 0x610f58fad3c217c1 -118, 0xbcb05e51100ad235 -119, 0xdebf8d6ccb4a94db -120, 0x297499be7e8fe7cb -121, 0xade854104ecd6600 -122, 0xe8924c68f96b97ba -123, 0xea4332df583b4cdf -124, 0x3c5950e1726a6684 -125, 0xe78baf12ad096b30 -126, 0x130e9517756e2908 -127, 0x2519a50a14a2bdaa -128, 0x548b96fa23c310bb -129, 0x689bea6fcb7a7b18 -130, 0xe500c168143be7b8 -131, 0x6615695d45714ed3 -132, 0xf58a87a6e82fcbdf -133, 0x77d9730cc4ebf311 -134, 0x9b3a449299c50530 -135, 0xfb5d93b0b60f022b -136, 0x31bb49a47b615ca7 -137, 0x5be9713f591556b -138, 0xec54b51a1185183c -139, 0x4dca5482711b4718 -140, 0x4cbe1b130e66cc8d -141, 0xe5ab874359671f11 -142, 0xadb342dee0eaaae5 -143, 0x7a9f5af1a3e89a24 -144, 0x83656d5ed37512b6 -145, 0xced3c2b8c231d286 -146, 0x575139132aafc520 -147, 0x2fc986b84ae150d0 -148, 0xf1e782d83e9bc699 -149, 0x1855c5fab454eb48 -150, 0x8c397cc4dfbdac0 -151, 0xca53a1df39daca62 -152, 0x8df17bc285c6c2d4 -153, 0xcc409e9c492ef29e -154, 0xc6609bf8eaeaf753 -155, 0x4f0e6d330e6647cc -156, 0x32a255fd34f2b58f -157, 0x26352ca3cc29b31d -158, 0x695c88b11a7e549c -159, 0xd91ec977523e201a -160, 0xd8e5a42958325ba0 -161, 0x481223fcbeec1f35 -162, 0x601cfbb9aad67313 -163, 0xfdcac7d3cb1091ef -164, 0x7fdc76c0a076d6fd -165, 0x394266448a75927c -166, 0x63243918d6fc4774 -167, 0x6ccfae907e52cc2e -168, 0xd4ce6176046ae4a2 -169, 0xa9818d710c31aa3 -170, 0xb8e803b82ca561b9 -171, 0x620b905a8425a1cd -172, 0x2443dea6bd2bd617 -173, 0x447fd94cd80faf23 -174, 0xd4f30e2a5c7767f2 -175, 0x11298de19077eccf -176, 0x35154fb0148fa69a -177, 0xed42b9c24ebc4d19 -178, 0x422724f98f4c3a1b -179, 0xd81cc933854afa52 -180, 0x54e2a03657411d03 -181, 0x8f12d5fcccdafb4a -182, 0xd91ebb398426414b -183, 0xb5555a96d9221341 -184, 0x6073189316d5f1f -185, 0x8a488d8d9c40366a -186, 0x109f57d19c71381a -187, 0x4e043cb3d78b4fdb -188, 0xa541464ecc30b27d -189, 0x15c2bf30d64900 -190, 0xa65cd77083ee4f66 -191, 0x1b98efd8729f2197 -192, 0xe954f9556e7cd0db -193, 0xb775e8ed94ede03b -194, 0xc3ef1f33db52eb8a -195, 0x21eec6afc3a045bc -196, 0x3d09338405d07ee1 -197, 0x501d08ca80daedff -198, 0x855f69bea1e262cc -199, 0xc88e6c97b5071d6c -200, 0xad42750a0f79e135 -201, 0x19171caa21061657 -202, 0xa337869a65c8d18f -203, 0xfb0cfae4b3cd24a3 -204, 0x43140ea8817faf71 -205, 0x895807fdf0d19712 -206, 0xb0c14c560e178c2d -207, 0xc47b4af3c3bb4789 -208, 0x60cafedf6696b7a2 -209, 0xf658b394f9697989 -210, 0x45d29b40a0ca3f86 -211, 0xb881cbe06cf6c2e3 -212, 0x2f045611c5d42ecf -213, 0xf011ca853c07b2a6 -214, 0xe078befb5dffff49 -215, 0xc2d1b7728fbc0ef7 -216, 0xb3ee6d8225161ee6 -217, 0x82e51268e2c152e0 -218, 0x6d79b320e5c33a15 -219, 0x1be56b3144ecab7c -220, 0x8e341dd781b3dffc -221, 0x50310327c0b03198 -222, 0x22ab06d620970b0e -223, 0x6b542de2f5625eb -224, 0xaacc9d5de070b881 -225, 0x21581365a4307e9c -226, 0x1a09b3443a155c66 -227, 0x2941d8614648c4cc -228, 0xbc4175b682a7f884 -229, 0x9cc92ed166c9cf23 -230, 0xc765ebe7eb3911b2 -231, 0x2d169ff7cc4369ee -232, 0xa3070da6835f0a0c -233, 0x827d253009c5d376 -234, 0xf23489deaf0450f2 -235, 0xc5e5b1ba6d4550ec -236, 0xa42ce77e33e206a3 -237, 0xc096f2576edc6a17 -238, 0xc4fa32113d4200d -239, 0x9bf6baf90bdf4ac -240, 0x47dc4d9bb5714a26 -241, 0xd58f0327551e948e -242, 0x9b1926b404a93ae9 -243, 0x6034442c56b4a50f -244, 0xe29e9c6881a89f9b -245, 0x79e49c426f3d4f3f -246, 0x75ba2077148ff864 -247, 0xf5dec8c46426e9c3 -248, 0x6affed5e72eacc9e -249, 0x1e4dcd0029679920 -250, 0x6470439685e44054 -251, 0xb156aa42e8413254 -252, 0xf6529f57a03df828 -253, 0xd706ceb3bd1c5f22 -254, 0xf8a3b615eaf44c9f -255, 0xfb33215a60fc88a -256, 0x53b93d040f72e76f -257, 0x4f67360a5c6ed447 -258, 0x600e87c4cbe6910f -259, 0x729ea44a3706a389 -260, 0x924cbabe379237ec -261, 0x618aeada6735f6cf -262, 0x12b4a8b32ecefaef -263, 0x7b129ddb43b182c -264, 0xd5466dc1e1de15cb -265, 0xc2e35a196a6e1efc -266, 0x8cdbacc1fc81c786 -267, 0x28b96b91b1ca9672 -268, 0x10e2a0174fc6f81c -269, 0x35ae5c9a74f2e2d8 -270, 0xc18f6c052b7f28e4 -271, 0x4f0abb08fa0bc2d1 -272, 0x84ab0e1b7c7cd062 -273, 0x29dca86fd5f5927d -274, 0x50fb63fccba90590 -275, 0xb7a60466af0de98c -276, 0x47baf40463bbd343 -277, 0xc72942184061bb8a -278, 0x2d55077237a2ce6e -279, 0x2f6b743bc35768e7 -280, 0x96975e80bfd6f74e -281, 0x77f334f2537aba60 -282, 0x8364264d2947b429 -283, 0x7e62c258f591189f -284, 0xe1a0962ad2d4f7ea -285, 0xf7a81d56b651d434 -286, 0xcbb9abcb6ec96876 -287, 0x7028c3ceffdccec1 -288, 0xa0049e182130928a -289, 0x79dab180c238f06a -290, 0x1eb3c704ecfa28db -291, 0xf9db38cf45524135 -292, 0xbf8f3bccec0609a3 -293, 0x5f0f2a25bb3ed38e -294, 0xe365cff62ec9287f -295, 0x9f5481118acd2a76 -296, 0x99296bb12e697f0a -297, 0x76aaf656bbbf9067 -298, 0x7d81ce20bb4461cb -299, 0xefb436add3cace0f -300, 0xf3ba4a29ed722849 -301, 0xc4cde39ff82317d -302, 0xad2bc44d417453af -303, 0xb36a704f170f7edd -304, 0xcdf268d6b5e2b5fb -305, 0x91aed4730adf51f2 -306, 0xeb2a37825e8a3de -307, 0xe79d586186766a28 -308, 0xc8bc6d8a5660356c -309, 0xafeeee51b23f4a5e -310, 0xfea1ecb5f9b17114 -311, 0xf0882ad449c3a225 -312, 0x8c0d387e9b4bbd68 -313, 0x39f2c8fdbdd00e8f -314, 0x830705f2260c2ef2 -315, 0x9bff6be123cc50bf -316, 0x99e33829b97434e4 -317, 0x6059a38e8957661f -318, 0xa77e6d06957108cf -319, 0x1e719fd3e756823 -320, 0x4564dd6be166e176 -321, 0x6f6a8c540e054563 -322, 0xc800237b21dc0e2c -323, 0xc6c3f2586f8d3062 -324, 0x85c469664e405a28 -325, 0xf5771300e8da6169 -326, 0x5f79c23a5e6807e2 -327, 0x593bbb0ce26b72b1 -328, 0x7e2e976e8309dff5 -329, 0xa543c50aecd30c5e -330, 0x7b71758289d403bc -331, 0x4a01dbff8cf37014 -332, 0xf1dee5472a53176f -333, 0xd82c78d69f2bef7a -334, 0xb63903647ded6604 -335, 0xe695634a32b0d1fe -336, 0xf89cec17a9792c77 -337, 0xcbb131921e8fad4d -338, 0x9425521c6c62076d -339, 0x18fa2dc92d99a3bc -340, 0x5d84f4a98055086f -341, 0xcaa5980ecaba579 -342, 0x2fd8a209612e2b2 -343, 0x1be8b333fae80866 -344, 0x99cd4808ba7c60f1 -345, 0x107242d94ac9d491 -346, 0x873838793d69cb0d -347, 0xce87b21b6eeea0a5 -348, 0x6831420da8fb877c -349, 0x1f51fe6670631366 -350, 0x9c093d89ef323dda -351, 0x3384d45cc9aec1b9 -352, 0x144970e9a0e6f741 -353, 0x3d8deffd6db78721 -354, 0x272f876c2821800a -355, 0x66eede1f8eb0bba9 -356, 0x6b85a48c6fd8dfac -357, 0xdeed765c9682da9 -358, 0x5956688ac942fe9c -359, 0x408147c1fe103dba -360, 0x8a5545b07bd7d483 -361, 0x2c8379adb00ea5c2 -362, 0xb9f96c9acd18c563 -363, 0x18e6e515e8c11ad3 -364, 0xf4c78395a36665f3 -365, 0x9319b999d50f42f6 -366, 0x1d9e89e8d5e22c8e -367, 0x7df15c14581535d2 -368, 0x214e3cf405b8b36f -369, 0xe11a168e3a824980 -370, 0x74998ef104966497 -371, 0xd6fc353bdca37cef -372, 0x48a55220b4fa6e1a -373, 0xbe2c7cfc7c08dc03 -374, 0x26c837223b6cfd46 -375, 0x22163b501aed055d -376, 0x946537d01e261110 -377, 0x39b4c0b78a79402c -378, 0xa68b2d66140ef79e -379, 0x8dc84a722b56fd9d -380, 0x6f32f10229bd5c83 -381, 0x722074979bca28dc -382, 0xd942d9911e43d52 -383, 0xf720ad0e5adada4a -384, 0x69fe38d6baa562de -385, 0x29a7488cb00fbc49 -386, 0x4d40dbe4a23b6c94 -387, 0x6bb39808bbae9d62 -388, 0x8b80231a7369e915 -389, 0x14bf8e755f80b050 -390, 0xf19bb00604d00336 -391, 0x552db8387eea31a7 -392, 0xe9ec067b59dd95e4 -393, 0x3d71f663886c520 -394, 0x97bb54095cd331e4 -395, 0xea3e829f0695cfc7 -396, 0xa93188e41583162f -397, 0xeeaabd3e3df2f07c -398, 0x291f70992ab1c5b5 -399, 0x55183a8b5857a080 -400, 0x7df148caba2c4978 -401, 0x84f178764bffc05e -402, 0x5acea77fb3139b5e -403, 0xcf57693ff3aa5f39 -404, 0xa0867abf8c89ce6 -405, 0x597f8192569e2971 -406, 0xf90a8e47c1271e18 -407, 0xbe5346e3fd0c12a4 -408, 0x524aeaa307d4b03b -409, 0xef3d68937d8270c8 -410, 0x3e73d03007156d55 -411, 0x94cc96dfeb586897 -412, 0x14e7a22da35e8923 -413, 0xca6ecc61d3cea9bd -414, 0x6044eca5a760cfb6 -415, 0xf4ed4f4f21933f13 -416, 0x99b923d7f9925de3 -417, 0x394b054ab147ae41 -418, 0x9afb74bbca1dcec6 -419, 0x830b9ee9e52b9234 -420, 0x83712e27c87cc4c6 -421, 0x7f025017de598df8 -422, 0xb3ea4ab92495a788 -423, 0x602a7c66750a2047 -424, 0xa15ca212f5002047 -425, 0x8aa5d8a19b1b7efb -426, 0x2852eaeb46dd9d21 -427, 0x605f261b8b77d3ee -428, 0xeb27c54d4359e1fc -429, 0x77e4aa530fbb27c8 -430, 0xaf06ddf2d74745bc -431, 0xe88964e4b8d79ede -432, 0x2192553c0ce6a4d4 -433, 0x90997c5c0cf3b6ae -434, 0x1153fc6436d48bb2 -435, 0x1703c60eb24cf506 -436, 0x116d8f4e35d51cbc -437, 0x5045a10f0131f6d0 -438, 0x1fbb76ef3c622e03 -439, 0x7d33bb57dcf79365 -440, 0x1ef362b02c379673 -441, 0xdf7a4a6801ca903a -442, 0xc784df93dcbb07f1 -443, 0xbc566896f2d86db9 -444, 0x72a169884d76aa42 -445, 0xcb65ab4ad4c8a6ba -446, 0xd810c9a3ee62ed3d -447, 0x7652322c4f6520d6 -448, 0x3ad4dc2bd6e4c8dd -449, 0xb2269d6e73a22c6c -450, 0xcbfdf90c34925001 -451, 0x2bb66613fbf8044 -452, 0xae9c53e815bc69d1 -453, 0x452d886b5a7407ae -454, 0xa7f3f05dfb111951 -455, 0xbe05cb088f4dc330 -456, 0x9b740a460b6ed662 -457, 0xd77a324b60f8c74 -458, 0x60ae94f69dce3f29 -459, 0xd04859db7833712a -460, 0xb90030c4a70c588a -461, 0x25dd21f6ac7df8d7 -462, 0x162154fcf4832a15 -463, 0x15947a2bbf844bae -464, 0xa20559f3a662a753 -465, 0x6dce918dd48cad0b -466, 0x32c5a086331216f4 -467, 0x3a683208ae4f86c4 -468, 0x1ecc2982d1720167 -469, 0x2b3017d572f5c7e7 -470, 0xd7861e549dc1fdcf -471, 0xcead2c572db0b00d -472, 0xbbb4afca7e873a92 -473, 0xada92286d14a0d26 -474, 0x7af00766c03cfd0d -475, 0x2353443fbef8f013 -476, 0x35291d9ea26217d9 -477, 0x9d907261f3f7ea54 -478, 0x6f11649f6c3b69fd -479, 0x36d9e3bf31b6b209 -480, 0x5f420540094e6bb9 -481, 0x980dc001315d9d33 -482, 0x1e6023baca982809 -483, 0x28441f8357769aa6 -484, 0x4acebf5fd0e84d43 -485, 0x9991e19a0f1ffddb -486, 0xea4f7c944b325d2a -487, 0x9e44a24cb37572c8 -488, 0x2949063600779260 -489, 0x313e58e1433ffa40 -490, 0x6eea07e56604152e -491, 0x47dee53a41fe61c7 -492, 0x21e6dc482e5df531 -493, 0x4c43131087191e79 -494, 0xb378e632ee28fb31 -495, 0xc1b106afa1c14816 -496, 0xba150956e0c630bb -497, 0xc5b64d8037dbaab6 -498, 0x47325510456ecc3 -499, 0x61a6f425ff2b555 -500, 0xabb9fcb3865a8ce0 -501, 0x7eaf52f3aa10b66f -502, 0xd91cf6b8600c7115 -503, 0x18eb54dcfb1b20fe -504, 0xc8911ada29a3162e -505, 0x6cb29138cb1ac68a -506, 0x4d0e9884ade85482 -507, 0x4cad40d37b3ec8f7 -508, 0x9467d7a7b34753a6 -509, 0x45f84f5e5a26175a -510, 0xd8753f7613d5ce77 -511, 0x86d400a246e8d128 -512, 0xcb8946c9f2c10785 -513, 0x89cb7c5c5ab35ff3 -514, 0x7bb60eaebc69a3ad -515, 0x534f554712b34d6a -516, 0x5667fa5c9b731343 -517, 0xeadb76ebcdeb49b -518, 0x3485b0afe8caa42e -519, 0xc78c543b4603f643 -520, 0xa8f3fc1217b9b77c -521, 0x44ff6333a229924d -522, 0x426e31b858cfcbd1 -523, 0xed5964b45b66718c -524, 0xac18d6cbcbca89ee -525, 0xc78a8bf4beffcb0e -526, 0xbd0d95b77da79de9 -527, 0xac7b69c368ad88ff -528, 0xbb729daeb9f32b7d -529, 0x6d5dcb59284675b -530, 0x4aa9af065367853c -531, 0x40de557a4730f8dc -532, 0x6b35765ddcb83237 -533, 0x7c4cdacf0801f9aa -534, 0xcd723c55ccc75d2f -535, 0x86c67f52807c3f64 -536, 0xc597a5d9141cf5eb -537, 0x6c50d3307da89da9 -538, 0xb2e259cf10ef27ff -539, 0xcf6862f7235a11e3 -540, 0xb60e07d1d6190673 -541, 0x69de7facea0c2233 -542, 0x19e548a3950a2d1b -543, 0x6028bcf0501a1d75 -544, 0xbe060ad84380878a -545, 0x425f528fa11f5584 -546, 0xeb64fdc71b8a0369 -547, 0xdb1d4fd9af7fc48 -548, 0xc32ea3df9267e071 -549, 0x9f0b4d409a6b7db6 -550, 0xe8e1ccce740c6369 -551, 0x8d0939433ef9c005 -552, 0x7b1a1969142d70f7 -553, 0xbe055803167b4dd9 -554, 0x3d525b7f29e2a20f -555, 0x2b58ca2bf659dfcc -556, 0x1884346d743d5753 -557, 0x3e5e6a992abcc639 -558, 0x334bed0210a5a1b9 -559, 0x545bd4a1c6a6ea3a -560, 0xdc1d84e28f8b4ff0 -561, 0xf3608d9fea1e61d -562, 0x639fadfda3d29b81 -563, 0x1a4195ffb607cd4d -564, 0x823bdad2efff1975 -565, 0x5fe15698d33ad156 -566, 0x961e7fcba86b8dfa -567, 0x9b7536cd3c368430 -568, 0xf9b9c01121a82eaf -569, 0xa3f39bdf6f8668f4 -570, 0x100ae93ca508d02e -571, 0x88de050245f0f9b2 -572, 0x4ca1e3a7fce0a942 -573, 0xce0366d47e60adce -574, 0x3f00fa3b552ef6c4 -575, 0x718ca18c97de55ec -576, 0x2705ca3caa5f047b -577, 0x8e9a4530bbabc87e -578, 0x57f73f76c2365c1f -579, 0x5783c7e50c89e813 -580, 0xeb0899277d5a0925 -581, 0xdc28a57fafb04818 -582, 0x7cc97832d2b3509e -583, 0xe937c3407bc84cdb -584, 0xaa2714014f14802f -585, 0xaa0b844baf434250 -586, 0x98f6097049cb2931 -587, 0x65d93055db2280e2 -588, 0x401e59aa74e005c4 -589, 0x8540018c086c5678 -590, 0x1ebd2b7c3093183a -591, 0xb015ff173910186c -592, 0x628d0a7cdcb5ee78 -593, 0xe6bcce512cb94fba -594, 0xf2112d66f4ad825e -595, 0x143ca3c833cc6119 -596, 0x141f17377db25eda -597, 0x2b5abd96ffa1cbff -598, 0xffbc3baec2fce0ae -599, 0xfb7ef6be757ecaf -600, 0xdec0e0b34488795e -601, 0x4b0cb9bfd1759241 -602, 0xc1ec90140a15b4e -603, 0xfc16386442e70156 -604, 0xe3f12f2adf688d91 -605, 0xd53b2d7bea9c8380 -606, 0x81cc446202a2ed5c -607, 0xe70e3ad34c0b8ea7 -608, 0x5f33526009e7fab2 -609, 0x6e33d20305b8c75c -610, 0xd6d534dd9461ac91 -611, 0x40cf8974d7c931ef -612, 0xb051886f44a85f34 -613, 0xbee99cf63e9e4ec6 -614, 0x80d5c210e7e8f3b5 -615, 0x182817a277213ba5 -616, 0xb57e1fcc3fa01e29 -617, 0x21ef9e484821c685 -618, 0x40e0bdb94b52f6b8 -619, 0x3993c9973c999499 -620, 0x324fe4cdacd0c7f8 -621, 0x2f276173f8434ce3 -622, 0x16f1f99b426e931 -623, 0xed2148eb554f6965 -624, 0x2f164f3156c8ab9a -625, 0x8fa66f8b7bdd6fbb -626, 0xa7facbbc6906343e -627, 0x4903fc405e661d8f -628, 0xd5e01a117658e004 -629, 0x327b0a3517b49e0d -630, 0xaa7f3a3a33033899 -631, 0x8e978760d337249e -632, 0xe4706aca37516d8b -633, 0xd3cb6f75b94f094f -634, 0xd2b9ab9715999627 -635, 0x807694f77b219f34 -636, 0x33b79cb95dc4bc0c -637, 0xc50b1dd63a993db -638, 0xfee37af82faaec9b -639, 0x9fdacc70effcef2a -640, 0x1bf998ee028c7d6 -641, 0xfbdff299a6531fef -642, 0xa108675116536b22 -643, 0x1527b4dc58905dce -644, 0xa7707694303577ce -645, 0x9b13fbc46e340e5e -646, 0xd020c010ec0baa5b -647, 0x384c228b30f40579 -648, 0xdc323bc7fdd5453b -649, 0x4011efb021d86d0e -650, 0x73540e72fd3d5c1a -651, 0x9584873c3d070ab8 -652, 0x5b49b14248e8bf2a -653, 0x9ac40d57d39d5919 -654, 0xe0c05768df113539 -655, 0x139cd4f88a7574b7 -656, 0xb9b32474195fd2cc -657, 0x77da8950d9fb2c98 -658, 0xdff0beffbdaa4b7 -659, 0x7d7c9554dc45fa9c -660, 0x105c2efbf8116c04 -661, 0xe62b22435244a315 -662, 0x59a1e2fe06fd3544 -663, 0x328af98625a31053 -664, 0x7e03a7ec81d1a078 -665, 0x94fe2cf6653e116c -666, 0x333fc9ecf8a43b6c -667, 0xb3828218cd24f83a -668, 0x9c3fd7d848f20cb1 -669, 0x92ce295ca15436f4 -670, 0x6f088c41b55b1c1 -671, 0x57392e60bd643a69 -672, 0x6e02f429d6a11733 -673, 0x2ebecbf5bd43e0ca -674, 0x8dd7afdc5552894 -675, 0x2114803fc6503fcd -676, 0x38b1873ed0ca3e65 -677, 0xf32c628f60a36bf5 -678, 0x8552202e20fb7342 -679, 0x4741fe855aa0336 -680, 0xca4d638854de9454 -681, 0x183078fda5d360cd -682, 0x6ae60d39e68650d8 -683, 0xfd0a1e80aa46b9f0 -684, 0xdc14a1d6b0901901 -685, 0xe54df01d09b44bb8 -686, 0x309de938e8d717bb -687, 0xa5a2a2e49b9c36fb -688, 0xb38be8c575c56063 -689, 0x770e5929cffdf3e2 -690, 0xcee13e2c47cf9f56 -691, 0xdfc2db4af23da4a8 -692, 0xe1c7dcefa31d46ba -693, 0x350e999c00e252cc -694, 0xaaffdb6ca58b7dfc -695, 0x313d23d88402948e -696, 0xc3ac1498a730309 -697, 0x69350ea02740c143 -698, 0xec0d5c624376e45b -699, 0x9b49e00d551bea96 -700, 0xe6427840614e80e2 -701, 0xea27953175e05f6d -702, 0xa2861b02743e8d50 -703, 0x35b2fbf59ddfe5ca -704, 0xf25726ec3bdfbdd9 -705, 0x71aa4383b0aa4630 -706, 0x4cf3f7708d98f205 -707, 0xa6e0108f77f1318 -708, 0xcaf0b81e3222bd69 -709, 0x6b18e84e511d1b43 -710, 0x2a53e20b2f706858 -711, 0xe14599cf85db7644 -712, 0xb7a31525aecbbf69 -713, 0xfce7e9b5211df2e9 -714, 0x3f71617fc291625a -715, 0x6164e5c8ede33272 -716, 0x43a0878da9fba4f3 -717, 0x491992fb5ce344d3 -718, 0x204b93918277c357 -719, 0x31189377f32f958c -720, 0xa8522eef63ec4e04 -721, 0x52cb2d449d63dae1 -722, 0xd3ab20f38e44122f -723, 0x9738796a2cf5f72e -724, 0x61335538636be0f2 -725, 0x4dbd8fd3e18d9368 -726, 0xc4d395b525170e36 -727, 0x363d2b24bcb72ea3 -728, 0xfcedc59fa0ac0b2f -729, 0xa00cfc5984f4c62b -730, 0xaf0ca1028edd76ba -731, 0x4fdf988297f27aec -732, 0x891a876ecfe4a5d -733, 0xb638f6971c14c255 -734, 0xff63c7ca4d499307 -735, 0x1ea43f18f530449 -736, 0xdbed5a3109ff48e6 -737, 0x2b01c0495e6edab7 -738, 0x87c1b49da18fb9b8 -739, 0x79356a301557c23e -740, 0x3d83db604937cb9 -741, 0xda4471e873ed75ae -742, 0x7a9bff590c3ea65a -743, 0x63ed127445a08bec -744, 0xaa232e05b3fda15f -745, 0x643873aa525504f4 -746, 0xfa708f34ec5c9692 -747, 0x4817b5bfefae32b7 -748, 0x5c7c79edec1297bf -749, 0xf06513dfd2d4a290 -750, 0x7f0cd3ca9c36631d -751, 0xdebf1b00e7838d3a -752, 0xe46004c03a6468 -753, 0x6b1ee341cf3319c5 -754, 0x765793cd734155d8 -755, 0xddc037ee2976777b -756, 0x7d30119e994c6d06 -757, 0x372937236b1f1f03 -758, 0xbb2aa1c9ed2b0dc0 -759, 0xd0962de2eab2b6d7 -760, 0x7f80047fbd8ee81 -761, 0xab546293b8136f47 -762, 0x71b74ffd91794bc -763, 0x3fc7c2e20a88d11b -764, 0xedbbba9528be628c -765, 0x4c29f32b97788b8 -766, 0xe721ed4b5dfb4aac -767, 0xf1877d8e4eb87386 -768, 0xf399f60aa3ffdcab -769, 0x73c7f48a0571873d -770, 0x89a1c8b247a63fc1 -771, 0xb3f3a37f25f0eb9f -772, 0x24dc12bfb6030b32 -773, 0xd070cbfd0e221c15 -774, 0x47dd6c8f9e3ec6c5 -775, 0x18b5e8a79e8c2717 -776, 0x46762bb85de44be0 -777, 0x4aed493495d044dd -778, 0xc70422a4f09c5594 -779, 0x128787d3470d0a3a -780, 0xf6a925f9e15a22a5 -781, 0x86e93253485db4a4 -782, 0x5023f2e2dd23e974 -783, 0xbdb6aa877c3fdde -784, 0xa0e3237b79a5b74c -785, 0x1eb41a88cfb42b8a -786, 0x49a511f7a0a022a8 -787, 0x85596ed41f1986ac -788, 0x5e572dac0265d4c4 -789, 0xf573b46d65cac12c -790, 0x33427b16cca1ac0f -791, 0x8d4d024f8bde011c -792, 0x91dddd48b91c52da -793, 0xbc5b67a1104d4c2e -794, 0x104e90822e17122a -795, 0x8be8c4e394ce3a1f -796, 0x581426b9c905f36b -797, 0x2666efb9cac21f5d -798, 0xbf8d3e5f295060d1 -799, 0xa04598c9d6e237dc -800, 0xa9fbf5516c7b8911 -801, 0x4c6ec7e0401140f6 -802, 0xb50cc45e1895ff0b -803, 0x453c3801b4bbf75d -804, 0xde80964dde83a7ad -805, 0x1e17250043629e63 -806, 0x84d3aac71f95b6e2 -807, 0x38176666a55a3fd3 -808, 0x6433ac841c48a95e -809, 0x5ba64539f33f48a -810, 0x48e5e074f832729 -811, 0x3d1fb01607adc32e -812, 0x63b22681ceb343af -813, 0x868b07d09e57b86b -814, 0xf98212b744a71fca -815, 0x797843f3fd5e0ef5 -816, 0x6355bb33b59c84e3 -817, 0x6a6a1203c7944f31 -818, 0x177a4be397cbf761 -819, 0xea8fb29d82135b94 -820, 0x689c505eed27c67f -821, 0x50cf765dcfd4e619 -822, 0x948e20aaaeb69e93 -823, 0x660761db84df481c -824, 0xac2c2e1ebaa60049 -825, 0x81f9a054209afa66 -826, 0x66ba9ec387a82b65 -827, 0xfd602aca17e4932b -828, 0xa4aac8d6b22f5705 -829, 0x994f7b582d826f84 -830, 0x9312d16bbe890581 -831, 0x3079b18f5f44e9bc -832, 0x8ef5489a07ee6327 -833, 0x6c9f0fc8ecd29e94 -834, 0x7c603b09eafe66a3 -835, 0xc084c72299ff49c9 -836, 0x10459931d6387460 -837, 0x97908e3a98efa125 -838, 0xd7c84c45ecc2531f -839, 0x90c7eb8b1c222f5f -840, 0x74781389c601e45c -841, 0x176e7351d5f5489a -842, 0xa8d555a9197d890d -843, 0xdf3035da9ec119a7 -844, 0xf2cfdd14cc4b7db6 -845, 0x70aed924a5a1fdc0 -846, 0x4b993be0711bc5f2 -847, 0xb712037cce51b6fd -848, 0x97ca679baabf594f -849, 0xde014850ea7b8e93 -850, 0x39be8272136c2a28 -851, 0xdd6ce923c7574ba2 -852, 0xb999537b19fc106e -853, 0x3e421eaf2d0ae00c -854, 0x3ee73eab1c009f68 -855, 0xb6c3187e644c0ec6 -856, 0x32375e8c4fd12e29 -857, 0xacc6dde27d3ab697 -858, 0xd0c6da152a9d13dc -859, 0x2d93991d56d475b1 -860, 0x91f676a136ea942e -861, 0xdba3c630477ef627 -862, 0x9832442c2743f71d -863, 0x327f4b8d08f42ad6 -864, 0xb11d32b9aa369c95 -865, 0x8f3b53aa390b4e05 -866, 0xdd2b5c796526856 -867, 0x5f4a6d26e7266e74 -868, 0x92fc04aa4519deb5 -869, 0xaf5d104350902604 -870, 0xe92ee9d9eb83d48e -871, 0x92e49c24b74d10c1 -872, 0xbbcb775e1df3dd9f -873, 0xa778bc4153b74d87 -874, 0x2c5cb1cb460778d -875, 0x204b96da5ca032a3 -876, 0xf8ed00512b2c8054 -877, 0xecea085421d30bd5 -878, 0x9b9b2f6891954ee0 -879, 0x210f39a3b60388e2 -880, 0x71cf1d4f49716e96 -881, 0x831f11200be69b03 -882, 0x47cf8470f8e9f115 -883, 0xb0b9621c996452dd -884, 0xf5511dede5b32628 -885, 0xd48b9e4296cd4180 -886, 0x6ab70c3334f11aa1 -887, 0x4ebd26c8decac629 -888, 0x71aefa349216bbb9 -889, 0x37a5967b8b366498 -890, 0xc825ba8bb37e04d0 -891, 0x3411fa5b43243230 -892, 0x32ce54ba8dd0106e -893, 0xa8a0446814fa43f4 -894, 0x9905b5e6d05924df -895, 0xb226af8b15ce9a5b -896, 0x594bed79eed4e4d4 -897, 0xeb6c283c67b0eb18 -898, 0xde5cb33d3dc1d629 -899, 0x1b57482ededa779e -900, 0x1d07de9f3796453e -901, 0x3d1b093a3b2f673f -902, 0x7138dfb52b1e19f9 -903, 0xefd791255568c006 -904, 0x5e9f6ea3fd02d382 -905, 0xada1ec576dedd60c -906, 0x894f3cd4d0463181 -907, 0xf8e46d0e8c179157 -908, 0x53234c91c74681f -909, 0x458491d26dc655b6 -910, 0x2dce3244020c6219 -911, 0x6815f50060ce3a58 -912, 0x13ec2d1c70067d9d -913, 0xe252832edd6cf225 -914, 0xd6656ac22edd7a1e -915, 0x818d3bb5d04315a8 -916, 0x36c302529a73033f -917, 0x1a9c6b44ccefb355 -918, 0x99e5dac400256022 -919, 0xdcf849ba5115f17c -920, 0xdf9c1238c38b6ad8 -921, 0xf7d9422477cc5cf8 -922, 0x6e3ccc5e484db3f0 -923, 0xf9f5dc3936d5ce41 -924, 0x4e42a060e0fc7c13 -925, 0x9789adf2f7e0b250 -926, 0xd12a569e95979840 -927, 0x14b652c51eadd0c8 -928, 0x2d8d9baea2c7a8ab -929, 0x9589291913c9345e -930, 0xc3e994adc95fa2ed -931, 0x30ef4019e04f22c2 -932, 0xae4d6ac24e6a42fa -933, 0x14bf6dd1873be03f -934, 0x48e3731b4088a6df -935, 0x66b6f14a28de0cb6 -936, 0x825b0e7560fd526d -937, 0x334b0c5989386158 -938, 0x5a4a0353e701405a -939, 0x11844bcfdda17e36 -940, 0x737420216b683159 -941, 0xcdfda9150023d465 -942, 0x3ccb1da83154f7d1 -943, 0xca0ed9ba34067fd7 -944, 0x5ca93550b1ccb1ef -945, 0xd52bf628b920563 -946, 0x239147f7b5d9e31 -947, 0x70457bc990dade04 -948, 0xec5a8e4749adada3 -949, 0xd1aed177de970226 -950, 0x537d06d8885531c1 -951, 0x4f83c7fc8e711e0f -952, 0x412b2d578e62a0ab -953, 0xcce8d0bc4f4d4e57 -954, 0xabd3b7802f2d051d -955, 0x76721bb6d8b97e0 -956, 0x217c77ff302ff9f1 -957, 0x19ea31efebc3350f -958, 0xf4a3f147857e5cb9 -959, 0xe802bf7f519cd61a -960, 0x1c8d02dba97d6e3d -961, 0x78bfb57b9bb0518e -962, 0x8a48af98c6df1ca5 -963, 0xdfac5ac680503f7 -964, 0x4a9e3e96d9ea260 -965, 0x5f1931c9a7dff2a2 -966, 0xc1968e6cbed5f888 -967, 0x8eb493f97aad3ec4 -968, 0x90f2abe998c8ef87 -969, 0xc6aba12513cfbb3e -970, 0x2c0ed550f9c796f -971, 0x444fa35f7d9fe383 -972, 0xb5f04f695ecab10 -973, 0x3385d267df3349fe -974, 0x4c70e55fa2bbbeca -975, 0xd10dec43a2c0bf05 -976, 0x1ca77c39862fc552 -977, 0x9cbd688dfab24fc4 -978, 0xb7fd22171296a3d1 -979, 0x1183b02b50271be2 -980, 0x883a7e16e7e0a424 -981, 0x10d83194ac141f1a -982, 0xebe3d57aed64b429 -983, 0x50b227d667b4cab7 -984, 0x5ea269feb856345d -985, 0xb7b31144fa8d0f75 -986, 0xb2a4ee8f1fe24113 -987, 0xe630bafdf1401749 -988, 0x2a5fa38d1f97c355 -989, 0x26ce612a57a75fc8 -990, 0x657f3a8955ebe69f -991, 0x6ce0b006f4ee7ad5 -992, 0xb2394f5046b31e22 -993, 0xe778365c658b2739 -994, 0x98fd9744990f5bc7 -995, 0x46218fb884bca27 -996, 0xe1b5e671a5fa3f4a -997, 0xcde973df241f948d -998, 0xa797c49a69f2eaee -999, 0x7aac8c483a2edd2f diff --git a/numpy/random/tests/data/xoshiro512-testset-1.csv b/numpy/random/tests/data/xoshiro512-testset-1.csv deleted file mode 100644 index 78fb903ee..000000000 --- a/numpy/random/tests/data/xoshiro512-testset-1.csv +++ /dev/null @@ -1,1001 +0,0 @@ -seed, 0xdeadbeaf -0, 0x876912846bc23b4b -1, 0xc392a0d7b1e2ce1d -2, 0xd280aa92dbaf6c20 -3, 0x9a545c48769bcb4 -4, 0xba901708334ed1da -5, 0x5d5c05bee6575bba -6, 0xdd35b1a2950ba097 -7, 0xa683f4f912b2de7b -8, 0x9bc8ba4aaf061f16 -9, 0x592c9c1eb898e661 -10, 0xd4c45a31e8d0ea2e -11, 0xd0f486ff8d15aa20 -12, 0x9f476a2094cf2e20 -13, 0x5dfeca30beb341f2 -14, 0xd148d9f7909fce1b -15, 0x77dee98756ef7ccb -16, 0xadc9df01bd7ca503 -17, 0x3d3395384db35e21 -18, 0xedb29f73f3497e33 -19, 0xe8064a9d95ad523 -20, 0xf371e0481aaac707 -21, 0x20ceb788ef6cc7b0 -22, 0x322843da066393d1 -23, 0xff5b70b598091031 -24, 0xbf92dd18de3e50b0 -25, 0x34c53c75dfb462e9 -26, 0x862b38ba34e2074c -27, 0x71d7fccd15ff2980 -28, 0x57659fb10e0a2e70 -29, 0x504aff6ae76bca79 -30, 0x241e0010547d002a -31, 0x6887bf03dd4578e -32, 0x3b74f448c5b5503e -33, 0x893c36f91ae88b29 -34, 0xc997f52382a03491 -35, 0x64d70ecd46d0d3d4 -36, 0x7391b3e2b46ab3b -37, 0xad0cb7eb249d1562 -38, 0xad8c488df7a6abd8 -39, 0x821201a7bfd18bfb -40, 0x13281b52ed3db7ca -41, 0x5fb74a1925cdbbad -42, 0xa0a82244150ebae7 -43, 0x33a699202c3e9777 -44, 0xaffd2aad50ab609a -45, 0xd0b2cf8e469a6ca1 -46, 0x9642269993d293a4 -47, 0x4726480893b8003d -48, 0x43927da186b7c458 -49, 0x48bea40a5f99f533 -50, 0xe378848ac37e2376 -51, 0xf9b1f0de5818b090 -52, 0x963368da3e372d75 -53, 0x94d760894d8d59fe -54, 0xed6a9730e9f9d10a -55, 0x78c870cc88e05f99 -56, 0xe4b4445bb8ec2548 -57, 0xf2d2c9524d47c49d -58, 0x3e326b4eb1e18a59 -59, 0xc9ed2185d3b07552 -60, 0x37312e94b1a19e86 -61, 0xe2e44446e72437ae -62, 0x3e5541807ba68504 -63, 0x64fc4a8e251ba4a0 -64, 0x95cae7337b2cef03 -65, 0x4ffc22e6cee5a43a -66, 0xd1220fcfcd2b91c3 -67, 0x951e666e2b35250f -68, 0x49a6bf7293bfeb76 -69, 0x2f572a06be223951 -70, 0xa6ef2f83e4ab699c -71, 0x3c779b06245bef11 -72, 0x7ca2068971303e22 -73, 0x99181930c623a0b -74, 0x23870cb8e351237b -75, 0x4b3b096b31c0970 -76, 0x34567d210e095de -77, 0xad2d302293c080b6 -78, 0x2b9912fc65270b03 -79, 0x9d83c41c4a03c97d -80, 0xe595f5a6818c6843 -81, 0xf4de1eaa641abd16 -82, 0x2fd5d26fa4e8fda -83, 0x20228869fa37cafe -84, 0x2f5aaadbc5ed7917 -85, 0xc5a5411d976295d1 -86, 0x50860eb0a32883e2 -87, 0x9671e47f29c3fde5 -88, 0xb405167f98de3d42 -89, 0xeb9e4ab5b6277a34 -90, 0x30cb8055425283f5 -91, 0xd16fd04051825def -92, 0x9dad7dc043f76efd -93, 0x4efb0d073fa86b85 -94, 0x41f9a8f57a4c5441 -95, 0x261b340edbdfc85d -96, 0xe1770e8f6417f4b8 -97, 0xcda740ac5492b7cb -98, 0x421852a55f5fbd17 -99, 0x6b5e600ff816480e -100, 0x6f810e2bc14ef783 -101, 0x3ac30d12dbe74179 -102, 0x6e6f55e8da77d1c -103, 0xb3c1b3198ba1edd -104, 0xd42a70884e0b4885 -105, 0xe5b8554e1a265456 -106, 0x984728fa61cde5e8 -107, 0x22a8631dea8491ab -108, 0x7dde04d2623c5280 -109, 0x56ca5fa13744f021 -110, 0xa07c4dccd62318c0 -111, 0x7643fbf3cb825b82 -112, 0xb514293ac755d9ab -113, 0x976a42d4d7d5603f -114, 0xc89c841ed969a429 -115, 0xd3b58bd283d84deb -116, 0x48b0cb54ef4045de -117, 0x2aac0bed41855b31 -118, 0x84f602d6f7e8f8bb -119, 0xffb8359b5c955803 -120, 0x50a030999c6b5a41 -121, 0xf5affea03223e801 -122, 0x480fca3d8b71f253 -123, 0x78f46d086436f38d -124, 0xe55f321bb366b5c5 -125, 0x6a62bdcf97975049 -126, 0x4ba1b23acb2b30a4 -127, 0xaa8fab62162096ff -128, 0x9df7f50611bbbe05 -129, 0x8c41f29908880a54 -130, 0x5ca1036a33aef749 -131, 0x749341c5a1836f3e -132, 0x20d782c11d500c36 -133, 0x2aa089b1c26c888d -134, 0xb20781d123d61f05 -135, 0x786a566307a0e29e -136, 0xd7098641e929f68b -137, 0x8ef02287eec14ac5 -138, 0x9e3aba8329a8901f -139, 0x60f1e7d84742be3f -140, 0xc5292e6425256ab7 -141, 0xdcbf5736a8f911fe -142, 0x52ad9d372e4bd44b -143, 0xffebb934b4bfe199 -144, 0x7b5914f9b9052873 -145, 0xab29298e00ae9e7b -146, 0x3f02c3b7c59d121f -147, 0xdfa607db43e83fd5 -148, 0x1d8b966bd15e43cd -149, 0x25505363d4cf3ea6 -150, 0xc7f96d3a547efd4f -151, 0xa76458b01561c500 -152, 0x88760cde8e7f1522 -153, 0x67fe6b33586a089a -154, 0x5f0cc55ccd9dcbad -155, 0xaf32ec846865364f -156, 0x8f475ab26161ac5f -157, 0x92f00c5e55d0f3fd -158, 0x70488866e54bd9fc -159, 0xa2579ad851925266 -160, 0x1f2d66d6ab9a6467 -161, 0x18f0e12487296a55 -162, 0xca46bd4045b88b1e -163, 0xa48926a8c9ae6ddb -164, 0x70cf4b02a878020 -165, 0x3c827fe43ccf6e84 -166, 0x7b90b8b99390d7fe -167, 0x239e42fba10e8dfa -168, 0xdd950d180b5554c9 -169, 0xc219887acba392dc -170, 0xfb0cea050c6b5cfc -171, 0xa0235db93ab17388 -172, 0xce4e9a6697f39fa4 -173, 0xa77bc206c26b62aa -174, 0x6c4c0d77659b8d3a -175, 0xccf68dae535cdfce -176, 0xb774203a9c3697ec -177, 0x8f9603ede62970e0 -178, 0x73466a6c08f5c621 -179, 0xe4acd501298142da -180, 0xc1dc6d50d19ce4d0 -181, 0xf4d7157f3385da90 -182, 0xb03a1668d58ccc1e -183, 0x6c1ec730cdc15ff2 -184, 0x22b33428cf6f7b6e -185, 0x86771ba36131beb7 -186, 0x5c6f1dfb5df9a773 -187, 0x83d0e480faf79e2f -188, 0xb574e4f020a5c2f2 -189, 0x1037336e206cdac5 -190, 0xd358d3bd2f84dc07 -191, 0xe4ab7d65f5359d88 -192, 0x575e10beab6ed90d -193, 0x92b392d9011fec7a -194, 0x3743566cd03a5632 -195, 0xd84d08e20ab24432 -196, 0x264edbb98ea18981 -197, 0xb02ec336d3439df8 -198, 0x98dca28ef3481cd0 -199, 0x4c7b36c3d5a92ee8 -200, 0xea3a5d8c0656562a -201, 0x84df1e0b04e16ffb -202, 0x4033a0901c5b99b2 -203, 0xd655e52a52f95806 -204, 0x877a6c6e491f65c2 -205, 0xc7c0476aa3b57914 -206, 0xdaeb947a7ea2bffd -207, 0x9f353a9a44bb3542 -208, 0x4c6149547cb86c21 -209, 0x476f38042f81f574 -210, 0x73ae5842de15b837 -211, 0x56d08498c32a3ca1 -212, 0x3a29bd1e56c4a455 -213, 0xd4a039af15c94e2a -214, 0xd7e99d87726f6b7d -215, 0x11c8799497348055 -216, 0xf301a2a414f75291 -217, 0x61ef21e4369a33b5 -218, 0xbfebae360aed836f -219, 0x77b268e02299116e -220, 0x1d97ecb5b5ff1390 -221, 0x8931baa8bbac229 -222, 0x3e0a9cd01623e25e -223, 0x241849e522393124 -224, 0x4cac9db644404e9f -225, 0xf1b301aaaf6ee36f -226, 0xc6f3b0e23ed765f -227, 0xa721a93561fdb2fb -228, 0xec5d2fe7bdd570b6 -229, 0xaac87fcd59a92a17 -230, 0x21f96034df83ca3e -231, 0x39168b96c29637b2 -232, 0x2285e7b1962b20c4 -233, 0xe05877c5e64e80a0 -234, 0xa6e5e068434197b8 -235, 0x9953d6ba338c81ce -236, 0xc44dc6a3db952698 -237, 0xfa5494d4815d3152 -238, 0x467f7c752a541c4b -239, 0xb1a4872d1fbb6953 -240, 0x53fd30ae98ca00d7 -241, 0xc70a548b87054598 -242, 0x9d8a20c63463d5ea -243, 0x4cecb6becf778a54 -244, 0x887087ebdaca7461 -245, 0x6d518861d1cbc12 -246, 0xb8e717a809a31912 -247, 0x2d36ba962e509fe4 -248, 0x9bf46721bb113d5f -249, 0x2269b9c4c443667a -250, 0x979d9b4e6a4036c4 -251, 0x97543e06d384fa7e -252, 0x75ad7d2c23b6b570 -253, 0x43de810a5ea78624 -254, 0x80927c6293498a84 -255, 0x45a8ad9bb8f0dc2b -256, 0xabc320ec65a09cd5 -257, 0xcad9c0647042cd93 -258, 0xe84acb1bd3f3c9a0 -259, 0x76879458f63a57b9 -260, 0x49832792c9e03bc2 -261, 0x363459686faf7f24 -262, 0x1953702db3bc481e -263, 0x7fe6ba3b5a71fc59 -264, 0x1b17d2f961567f8b -265, 0x4ad033e1a4976f6e -266, 0xfcc0a6a6ba63fe49 -267, 0x841ac723afca1b63 -268, 0x6c1e91e669a97e7b -269, 0x5bd742d77c4ffc4d -270, 0x2a4ee5d86d2c240 -271, 0xe6d74f8546c38065 -272, 0x8bf207da18d16f8a -273, 0x9d1c2a99dce927c -274, 0xcba190db5ac2bc23 -275, 0xbabffcd557568ce9 -276, 0xa299e5d76f753e2f -277, 0x1d9b7854688000dc -278, 0xb77578a80be855c5 -279, 0xed5ca1b150fe57ee -280, 0x45ee175cab6988fc -281, 0x909e1e69be99cc5a -282, 0xeb19bad3b280f6eb -283, 0x183e05016ba8278b -284, 0x353ac3c6b09909cd -285, 0x52acc5f973291d01 -286, 0xf34bf118d4119a02 -287, 0x9374f1c812dd0b4d -288, 0x3cde5e29ca458381 -289, 0xa273cf101a664a2c -290, 0x3853d177648e274 -291, 0xd56392bd92a668f7 -292, 0x1a1668b6f658e0df -293, 0xcf91598b7f111669 -294, 0x9de820277a8591ab -295, 0x13e814a02eae1592 -296, 0xc6327921c4c8e137 -297, 0x4552a0478447893e -298, 0x90599b2c47bd6a68 -299, 0x6c6e379db4c5bd45 -300, 0xaddd155f6abe63fb -301, 0x16db9bcfefb79d09 -302, 0xadca159b2d4590c -303, 0xea280435e2e8ce04 -304, 0x267dde359f765411 -305, 0xc864e3d28e62e7f4 -306, 0xe1fb3b84699cb288 -307, 0x736e511cbe0a901b -308, 0x8ab9371873aa48d0 -309, 0xee14f5d0455642dc -310, 0xf46227f274aa445e -311, 0xf2ffe9298c22aaa8 -312, 0xb252d7080d3d64e5 -313, 0xf028d588f8bf09a3 -314, 0x51cf0c448bceb8a1 -315, 0x78d514cb6eb97a24 -316, 0xd35f14eeb72a2a52 -317, 0x2517e47da9fc019b -318, 0xa489556e41ab02a4 -319, 0x656545c76c5c5ad4 -320, 0x492cb4aead67db01 -321, 0xe67564b20bcd1500 -322, 0x52902e9ddd3736ff -323, 0x5fce2d6101c2d2f4 -324, 0xd6f3518a5c17b71f -325, 0xcea602751388c642 -326, 0x7c457e009571d1cb -327, 0x227cfe2d67db803d -328, 0xe6ba583bae3ce6ed -329, 0xbfede024874e2353 -330, 0x9d3f741ad2fb1c3a -331, 0xc92d955fdc49e35b -332, 0xe69f6bd427cb55c9 -333, 0x25154cf96eca70f2 -334, 0x8ada45f19fb5f353 -335, 0xc53b729eceb66699 -336, 0xad1ffe3b331399d2 -337, 0x26fa10d0ebb11981 -338, 0x4421bf4042ab1aff -339, 0xa33e3522a639e3f9 -340, 0xb27e6a340f2ae673 -341, 0xfbc848389681b76e -342, 0x87c9b594466133f1 -343, 0x5599811888d255be -344, 0xd125be5eadf51857 -345, 0xcfeddf66c3515e41 -346, 0x4e0e7d52bf2d41e7 -347, 0x7350bd89ecaa448b -348, 0x757b947295bb2315 -349, 0x9f75502e97420690 -350, 0xe507886c40a0d5d4 -351, 0xffb51fce9b6dc784 -352, 0x99c25bc884a07f13 -353, 0xae344dc6a0b5166d -354, 0x6e40f70fd2ae8839 -355, 0x549899226f83a618 -356, 0x183534a08628f76d -357, 0x13dbc72806e9cd8a -358, 0xc451b9a7f19a7148 -359, 0xf3ddd00aa2b77694 -360, 0xbbbf6a41f2637562 -361, 0x915549fda9129f5f -362, 0x6fb5452e819db506 -363, 0xc5122da2374c0ca6 -364, 0x9f418bff6eca6a59 -365, 0xad3988d59c836956 -366, 0xea3a5d086c5fe4d3 -367, 0x11a982723a4fa262 -368, 0x7f8bc4b1e17c14b2 -369, 0x4ce7986a6f72da2d -370, 0x41a50493a56271df -371, 0x477f24559f89ebfd -372, 0xc572ffc3e23521cb -373, 0xa9f628071811e1be -374, 0xcff02944927dc1bc -375, 0xd9f3bc4c212e939a -376, 0x21ffd91aafaf2c40 -377, 0x787f6ed5a2bab7b4 -378, 0x4609e004f9f4b1dc -379, 0x35ab1b27ca8c420e -380, 0xcca7c9a1b9c3b92b -381, 0xca101f017408e01a -382, 0x839abfc61cd0e8ef -383, 0x4c9cbb325badd3b7 -384, 0x5461826c9f315581 -385, 0xad20102aca3d9965 -386, 0xb649a32f64ab0793 -387, 0x725876dd5ff27c65 -388, 0xf2b14bbba3426942 -389, 0x5435afdbc2d685ae -390, 0x9c82ffffcdaabf8f -391, 0x20cdae1036653261 -392, 0x750c8fc5e91ea522 -393, 0x2360b1ebcd9d5b1c -394, 0x565e847ea6e9cacf -395, 0x8cfbc0c6bb12629b -396, 0xb26a10d6f12d2655 -397, 0xef86d9c5378690bb -398, 0xe23f3de5c1b799f6 -399, 0x31414ecd6ad5c5ef -400, 0x2921e71b83de7f45 -401, 0xebb98f34ab50544d -402, 0x6a412a4e053db405 -403, 0xddbfe7ee3e59a7d6 -404, 0xf05a0b36f67b9d5d -405, 0x849702c7806eb90 -406, 0x2203171eecce2095 -407, 0xb35c4db941a0ad7b -408, 0x9935496450296948 -409, 0x25f6a856fb1eb5d6 -410, 0x1dbb88d4fec8e2aa -411, 0xc60d3d3e39a26b96 -412, 0xf056684ba3a744d5 -413, 0x9572bd538afc7a32 -414, 0x254a093ab05dc0fa -415, 0xba6097f07c855fa9 -416, 0xf8b4dccfdb80e63e -417, 0xd2847b228bac28b -418, 0x8a8fab7c6031ab8c -419, 0xec08987d742c44bd -420, 0x133e3fff1c3c3412 -421, 0x6530ebd39d7b0f3 -422, 0xdeabc74a2373434f -423, 0x7815e18e47103e3d -424, 0xf9055ff370764f53 -425, 0x5a0d1345d2a9cc8f -426, 0x4de989802f34160a -427, 0x28a18124bdac81e5 -428, 0xeb45ab441afbb912 -429, 0x8f5a312fe7a0aadd -430, 0x7314071d14857900 -431, 0x6409cb66fa1e53ef -432, 0xfaf96ce7d2ac6c00 -433, 0x76e7a4baea8c663b -434, 0xb6e304f2a50a0321 -435, 0xa9ea300fd24f020 -436, 0xf35c396e30b7101 -437, 0x81c58595f98f6fbe -438, 0xc0a7e9607a117181 -439, 0xed09111f23a46ac4 -440, 0xb54c0bb2f0c1a3ae -441, 0x43467aba9df3e0a5 -442, 0xe8339c39a322db8c -443, 0x51c577fe5ec19d36 -444, 0x4f3b14d68f848502 -445, 0x686cd92e19b79dd4 -446, 0xdc741863e36fae80 -447, 0xd43d6b68d8b201e9 -448, 0x2c50554b76cef087 -449, 0x56c381d91bf8b46d -450, 0xd127daceb8ff95be -451, 0xd0ea2f226b20d165 -452, 0xdd905744fa9202c5 -453, 0xfe1a9600438aff20 -454, 0x5d1abb8492e2e820 -455, 0x8e39cb8cc6fa2c06 -456, 0x9f1dd3396c6629c9 -457, 0x9d03c31afb79a214 -458, 0x22010d4e60bdda86 -459, 0x80ed07d705582e63 -460, 0x4f62b3e2e44b8571 -461, 0x101943c84597f33c -462, 0x4b4345de91b98294 -463, 0xc2ac56211ca6ee2c -464, 0x3cb95b436ece64d3 -465, 0x7a44a3c791671dcc -466, 0xc8bf29ce122b9d18 -467, 0x7943b142841bea04 -468, 0xfa2cc19a05924ff4 -469, 0xf9ad7238096bedb9 -470, 0xe63a166ab147220a -471, 0x6290dc36e53827e3 -472, 0xb21625ceb1014816 -473, 0xc4e932b9872d1e1f -474, 0xb1acf7e2a966bbb5 -475, 0xb9acdda48ec54590 -476, 0x336d528109c184a7 -477, 0x11316b2094f4d127 -478, 0x9e336afa73ba2faa -479, 0xd01fbf09ceeb6b24 -480, 0xcf97f3d08a634c2 -481, 0x72366953156c6a32 -482, 0x6db4bfd8113532e5 -483, 0x420d662640c9c82d -484, 0xef483fc8418f98b8 -485, 0x8f94c007d9e7d764 -486, 0xa920478806e51718 -487, 0xd4ff1f37c4402973 -488, 0xddbc1ff65d2e4944 -489, 0x1e358eaa42485b6a -490, 0x56cb2d0f9bab7e7 -491, 0x78965a1fc3ca2f1e -492, 0xb674cef0c1fd959e -493, 0xabba2d9a65e8a159 -494, 0x2c831ed46e02e9e6 -495, 0x96813fe5b0baca53 -496, 0x344cad935e02fc84 -497, 0xfb6e6b235ddf773c -498, 0x29947186532b0ac -499, 0x39446d366a46f449 -500, 0x270064563611ed55 -501, 0x9134963540c148bf -502, 0x46e72242d92ace70 -503, 0xbb588070df8c323 -504, 0x7656b60e47229e4b -505, 0xa1515367c8182e88 -506, 0x67194c7e83f0be6a -507, 0x8019b59794f3ec41 -508, 0x9346f2071da5e890 -509, 0xbf2968158965aa88 -510, 0x23234e9079cc8067 -511, 0x52480f9037e18c77 -512, 0x28849338ded11a2c -513, 0xdee551c607d5934a -514, 0x7378da20ad9165f4 -515, 0x8c913ef9e355a530 -516, 0xe2fe80181a74edd -517, 0xf1c99e6c3b0ca5b9 -518, 0x9ed9759b0ec64466 -519, 0x651dfcfc1fefa43a -520, 0x36d83fe0802969c1 -521, 0x288a70061165d01d -522, 0x5b9ff38ba4551eb8 -523, 0xb14b82c0d9052f6 -524, 0xa4af53cf1da019e8 -525, 0x562782be5655f97d -526, 0x87f92290b4f40131 -527, 0xe18168d9d140e801 -528, 0xbdacd598ad865c11 -529, 0xc0f4fe27f0884385 -530, 0xc034cd89bb7f0f42 -531, 0x3591756fece4a5fe -532, 0x1a73abbcbdbbc237 -533, 0x9af0782b54c0527b -534, 0xee5e13f65e7b76d5 -535, 0x16b7de36f37d2dc2 -536, 0xda6e3700f7987cf7 -537, 0x88b1a7a50bb8d03c -538, 0x73e0f21f7e240cec -539, 0xaf3de5598cd8ae24 -540, 0xb48ac453d9a452b8 -541, 0x67c7769e42377756 -542, 0x29d1c81c990639c4 -543, 0x5315f99dcc1926aa -544, 0x25e2df9a59623d48 -545, 0x17088168b2d6335d -546, 0x48929f9995cf0b8d -547, 0x9c80ce435ecb9b7d -548, 0xa6dbed42aca888a0 -549, 0x95d7ce284511406 -550, 0xc98a600e73fdf6b -551, 0x144dacadb5dcae70 -552, 0xf1c57aef0ced3fd0 -553, 0x4d7e9370bf5326e1 -554, 0x60eaec9ceddb9bbc -555, 0x40b99b3647bdec5d -556, 0x23451cd70ba654dd -557, 0x9e1e45a64320a108 -558, 0x572b629749dd059c -559, 0x370b84536cf92fbf -560, 0xa53c15e1b8e6930a -561, 0xff01f2d42f396a5 -562, 0xe4ce127c2371d1f4 -563, 0x964b007fd911f9d8 -564, 0xe8ad752ca4201d78 -565, 0xec150ec1bcea7899 -566, 0x3a98196d39a146e0 -567, 0xa13a6d24b065154d -568, 0x208f8f86fce0ffb7 -569, 0x48f3f5a286b8e61 -570, 0x231fc95324da4f0 -571, 0x4a912cc8c1145073 -572, 0xf55643f746f7c8 -573, 0x981b50355641f3aa -574, 0xf5cd5ca76785adf5 -575, 0x26809313bad9613e -576, 0x8b3bc2cbe2257a8a -577, 0xe7190ca66630f33d -578, 0xd678cb7a88ceea26 -579, 0xa82e3b2a968f54a1 -580, 0x9f495544f523a642 -581, 0x542ea223014d5724 -582, 0x976e7bc0aec4f3db -583, 0x6a4936ec50a7744f -584, 0x30ee4d2e234675bf -585, 0x7668a3489b46baab -586, 0x69b5bfddb0c219ce -587, 0x6cdf31a1621b4ee5 -588, 0xd47c5fa7524889e8 -589, 0x5ea77c458ed6b908 -590, 0x9f46aeb5373d4f5a -591, 0x2436d30afa02fb0f -592, 0xf75b5b183a82b399 -593, 0x2a0d4f653d5fb2b -594, 0xbaa369f3cee66a53 -595, 0x3b86f73fe2f8a1e3 -596, 0x6d7bb0961e1fd2c7 -597, 0xe0ea2803b75bb089 -598, 0xdad50e588726a5ed -599, 0xaad4c6349ef8c9bd -600, 0xac89692a9d19027f -601, 0x9128ccf4627bc207 -602, 0x84d06846beb2e304 -603, 0x7e8f78333abbc3d3 -604, 0x3f60914f5bd7e556 -605, 0x1d1304a8114ca709 -606, 0x140e3ae0d71cd49 -607, 0xd11427f5452fd9b4 -608, 0xf5ab3e8a0298f3be -609, 0x6b9e13c2d33aac45 -610, 0x855e2a9d17dca5af -611, 0x1578bc2441980cb9 -612, 0xb6d79ee20056c9a2 -613, 0x8becbe9a399154b5 -614, 0x7dcbfacd30d88c84 -615, 0xd9d2e48917b7010c -616, 0xfc72160892a21efd -617, 0xc7034a2a63410f42 -618, 0xbfdfa5eaeac7f80d -619, 0x89ced96a0e78f3c0 -620, 0x8afc51dfec588d2f -621, 0x6cd965499ebd9c86 -622, 0x86ca64414acae86b -623, 0x235defd7163050fa -624, 0x8350429671c8a0c5 -625, 0x86242291e8c4ad95 -626, 0x479275615cc7ab91 -627, 0xa6f410c0e2a26b2e -628, 0x3855e7ac300d255a -629, 0x46db9d9dc4109474 -630, 0x4ea0b44c4fe5b658 -631, 0x5433d83c0590d49e -632, 0x326ad33d53e5cb0 -633, 0x2ad4e88d8b8f4865 -634, 0xc0b971ea67fc2c1b -635, 0xd4db06ac68087267 -636, 0x35375c34999616ca -637, 0x7f313fa01760e4fc -638, 0x1f8b7ae8938e7d90 -639, 0x68aedc55512291e3 -640, 0x71e13848edee765a -641, 0x83feb5bccb136a0 -642, 0xec115ea084398beb -643, 0xdecd12d25159994a -644, 0x6ef3f928b79e1d15 -645, 0xc910824824961e9b -646, 0x6e56798f305fba9d -647, 0x9f2a78709ae8321a -648, 0x83673dba510e8329 -649, 0x38ee325de51bee33 -650, 0x6dde848944ff5c19 -651, 0xe990435690783cd8 -652, 0x4ef2b8fdf3a31076 -653, 0xb35c280054e321d1 -654, 0x2d66f077be780ce5 -655, 0xf003d07f5e8d24f1 -656, 0x63286f306d80f9e7 -657, 0x749e66588e9d5bdb -658, 0xf296e9d13eb97fdc -659, 0x8cc6e45328cecc17 -660, 0x4b35bc27b7d27225 -661, 0xea1f0b0e7cb3f20b -662, 0xccddb348221b89a8 -663, 0x8a2b674dbe8732 -664, 0x90a2fe18fc860a2b -665, 0xee92bfccb4c6986 -666, 0x55bfc65eef023c41 -667, 0x61e082760147dced -668, 0x2cf7af28fb253ab7 -669, 0x58dec379fe82b794 -670, 0xfe6d8ec391ba7af0 -671, 0x3f96cf458d50cc0f -672, 0xb97a170ccb8094d7 -673, 0xca876f8a8ee27019 -674, 0xa03a1b9f8c2c3595 -675, 0x8ce5c48735932234 -676, 0x5bcbfeda6a7099dd -677, 0x32ffcf8fc39ebdda -678, 0x945d734289b83a9a -679, 0x8824610f5d088bdf -680, 0x9259056e8d773859 -681, 0xf4b40ae4f8ec9d59 -682, 0x78be6102d44b8198 -683, 0x7dce883504ae3027 -684, 0x3bcbac86d37993e -685, 0x334af10e3ce0cb50 -686, 0x12b3fe24d1df167c -687, 0xfa17184c24036cb -688, 0x200d27e144d9f60c -689, 0xcb1fd05755672423 -690, 0xd5ad76956dced3a5 -691, 0x7e54849c6a87880d -692, 0x359af4d5828b1f79 -693, 0x26453ccc43829d09 -694, 0x871808b8e5cb05b9 -695, 0x955a1ebf98da9d59 -696, 0xf5893da12ea014e8 -697, 0xae43111b363eaf7b -698, 0xc6dddd603e4b5cca -699, 0xe1cc643e404fe108 -700, 0xfcbe2e95831db0bd -701, 0xdc01ec9e93e54c55 -702, 0x380c88bd4fa28495 -703, 0x8bd7bfd49c7d768 -704, 0x6489b7ae98113f23 -705, 0xce19f0dd365e3544 -706, 0xf5a58147d87d3083 -707, 0x81efbadc3c88a2f0 -708, 0xad91664c2e7da0b8 -709, 0x8b78dda657eb421b -710, 0x6e552452af7e258f -711, 0xb260660b01d6650d -712, 0x27a45a1cfbd98603 -713, 0xa8f620c73f0ffb4 -714, 0x7e43f2dd4c476ebc -715, 0x7d4e51c6a3614d8c -716, 0x3d5300002b65077d -717, 0xc24e7491fa70d4db -718, 0xf2bcd733a1d21f0c -719, 0x8d5bb04c5273eab8 -720, 0xf9cd01ba63f92da1 -721, 0x64d29462217baa90 -722, 0xcaa1fc3b19b00a05 -723, 0xc9fae87d7026e4ce -724, 0x40120cb2e2680cb6 -725, 0xcc83d069bdfa6caf -726, 0x6a11b1724a9404cf -727, 0x8c24bc538308e19b -728, 0x2be028ae22c66d3d -729, 0xae2a94a920547418 -730, 0xd0c9c729c0d0fdf9 -731, 0x79855e445226f087 -732, 0xa467118788c6ae21 -733, 0x18a67b3f737ac66c -734, 0x9f0422fbf1704575 -735, 0x3cb380445380b25f -736, 0xe16d37c484cd8232 -737, 0x39403a33ed4f833d -738, 0xfea5df032f093e41 -739, 0x47b5d65b30a245a2 -740, 0x5711e2c4cd1bbc2e -741, 0x4b17a868719ff611 -742, 0x12d79e4df14b55e1 -743, 0xb759adb60f0a5110 -744, 0xc495633b8df72a7a -745, 0xc0053b2671187190 -746, 0x8d3924968e71608f -747, 0x1523ade2927ac191 -748, 0x1cfcaf3b0bc57fa -749, 0xb91a7984235eaad3 -750, 0xfc5c6cb849eb3a5e -751, 0xe5d427fef5d314bb -752, 0xb714878d2c853b41 -753, 0xbaf47a81594ca957 -754, 0x3de6e218723fcbab -755, 0x30ee829bf38ab024 -756, 0xb374a5ca939b2a77 -757, 0x689ca34206e9d827 -758, 0x5b639ed104818c6e -759, 0xd4e8fb1ae2cba92a -760, 0x1e74a4554b198ff0 -761, 0x8554e6fe30612ac5 -762, 0xf8078efbafaf7941 -763, 0xb60b6cde7161bfbc -764, 0xe81e0e93e0dea073 -765, 0xac02d3f3b697c994 -766, 0xd10bab917e4348e4 -767, 0xe6fa834ca7e7aa0b -768, 0x6eba49968d0d5254 -769, 0x4a94152838ad62fa -770, 0xe8789cecbaad60cb -771, 0xa970ebd7a89905df -772, 0xe49e4d76fac277ef -773, 0xb8adb96bd78e0d22 -774, 0x3691be969b56ec80 -775, 0x566a22004cdf18be -776, 0xd4da2618b9171235 -777, 0x8dd6f2f32503d141 -778, 0xfe199681d91e5178 -779, 0xed5891007cf409eb -780, 0xd5d999f9d416f32c -781, 0xa5f9a414434cd178 -782, 0x3cd8de680cb84094 -783, 0x2c70c158a5f08368 -784, 0xfd4c6d304ad80f14 -785, 0x1b3555f90f0fa209 -786, 0xbfc5397a69a4335d -787, 0xe51459f0861790fc -788, 0x173d12cdb0c70d44 -789, 0x6c88b6cb9a439159 -790, 0x9e3d527583959951 -791, 0x8974610167fb3d0e -792, 0x8ddec067f7d91a2 -793, 0xda0a0394d476a41 -794, 0xb4bc6f905125bb13 -795, 0x26647355ce93705 -796, 0x6e77d00e7d59f697 -797, 0x8a52c90d219277f8 -798, 0x9a9d112119a2ca00 -799, 0x78a4507edbc0c338 -800, 0xc1a70ab377af5b48 -801, 0x36a1278bed1d15a4 -802, 0xf0f6fe034ce240bd -803, 0x3774f55f64722926 -804, 0x63e4e477803ed6bf -805, 0x2b631b9e6e3dff6d -806, 0xc4c2268f2eb0bf1a -807, 0xb0b910cedfb4eec2 -808, 0x491781f6e8f5078d -809, 0x2db574eaecd44693 -810, 0x397d8904141cb1b4 -811, 0x2848d2ad2a224e0f -812, 0x41f9fae31cf93d56 -813, 0x68bca8f51877387a -814, 0xb43114eb511ba30 -815, 0x6811c33595351f9b -816, 0xf7c9b154b26a6501 -817, 0xa35317f4e4369356 -818, 0x2bbb3809e211de1b -819, 0xbf95e8ce2588f5c5 -820, 0x951b4fc9a159b558 -821, 0xbedaf5970dad8ce2 -822, 0xd79d52c7fc92c15d -823, 0x2b1440cba83e0a6f -824, 0x968f7f07b4a36640 -825, 0xddb5d48949a8258e -826, 0xc679b204042b05f1 -827, 0x9d00c9fbd7edbeb4 -828, 0xafb601b2be4c9a97 -829, 0xc35a1adfe92039b1 -830, 0x4392c71aff19cdfb -831, 0x1ab34fdb1e3f94fa -832, 0xe8e3bad693ee9d2b -833, 0x78ae4836d1711383 -834, 0xcb764bcf9104bd66 -835, 0xcb80c3c2286af3b0 -836, 0x5c1d4bb3d36d0deb -837, 0xa2071886b21e6c32 -838, 0x137909746a058350 -839, 0xa2a196ae5a9845b6 -840, 0xc0776cc50ba681ee -841, 0x8101ae19ebcdf8cb -842, 0x253846a45a1bea0a -843, 0x945829fdcac6cc2a -844, 0x28dcc868b896b986 -845, 0x336d9114936baa1d -846, 0x4bdf4ed2bfd5d8ef -847, 0x7f43f8324a743507 -848, 0xb721732c35266109 -849, 0x5654184a7879a5a -850, 0x932e5c33053debc8 -851, 0x6c8a42cb4bb07c7e -852, 0x3e2853cb7367a326 -853, 0xf670fcefeaf352e0 -854, 0x2f0ed63118ecfeee -855, 0x22b32d6a6fcaaabc -856, 0xa8df4f57af993b14 -857, 0xc4fbcdfec94e25fc -858, 0x7855b5802cd2d6e6 -859, 0xd31ec992392792cf -860, 0x499b4022955ae602 -861, 0xb1d9df2a56d1d9b5 -862, 0x2be020670c2ba9ad -863, 0x4f51c9ac114691f6 -864, 0x43db97ee34cb6585 -865, 0xf7889fa1c3372662 -866, 0x7428ebb0889ce59a -867, 0xf69778b6c2a803b1 -868, 0x68c7f79994d68355 -869, 0x49b31b833c1fe002 -870, 0x14823830b7aa93f1 -871, 0xfa3fe89a5d2be21e -872, 0xd75217b26deb1860 -873, 0x5e49f031d805df72 -874, 0x9d3c204122e892db -875, 0xe4f71314f6bce3c -876, 0x2ac5f8fa64ab428f -877, 0x71a8ee18efa4b447 -878, 0x38170f177f7babce -879, 0x77cbc1adc5a7104e -880, 0x45b756a5c674ed37 -881, 0x3da29002dd3a1dfe -882, 0xcb645f42a1a2df5f -883, 0xb733e9942b4c7ed0 -884, 0xbe1c3292f348b4bf -885, 0x78d11d13c10c2099 -886, 0xf73fa04c2283e128 -887, 0x87e719305bc8ed51 -888, 0x6566b3860eed926 -889, 0xea271a89df9f7896 -890, 0xcace2b0b23f6e8f3 -891, 0x53e2280362cfc833 -892, 0x33ee7d314d33fa14 -893, 0xc033d8359b0de79e -894, 0xec1687b4cf771683 -895, 0x7e9971fdb5f45106 -896, 0xc9e3c5777bb561be -897, 0x17d1a55af8659714 -898, 0x312ba0a1f36f469b -899, 0x74c8f6caac97449 -900, 0x951c3d8e2f973859 -901, 0xff5de9a5079d8908 -902, 0x839fe3f7bc5dc4d9 -903, 0x5a21de4667516721 -904, 0x38ec459dc4da82f9 -905, 0x7a72aa7877678423 -906, 0x9839c4f3ff159ed2 -907, 0x338c7af893a226e4 -908, 0xe057270bd63d90e1 -909, 0x74382261608dab72 -910, 0xc62804f051b15437 -911, 0xd761a1ef0c5db73a -912, 0x496ab0869f08c505 -913, 0xc8b021a098da8e32 -914, 0x6dfe12239acc8048 -915, 0x2e7a263485f52b8f -916, 0xd5e9ddf81a37d37d -917, 0x5de50454fb933d95 -918, 0x431900d5526e3d9 -919, 0x77476c947d99e745 -920, 0x31827e1ae78d0df6 -921, 0xedd8155bcff2a247 -922, 0x1e850adc3c67d0fb -923, 0x661108b21735dd75 -924, 0x352812aa0035019 -925, 0xb927385f13660903 -926, 0x9a516de262c20354 -927, 0xef7bc11900eaff94 -928, 0xf57add7357601ba5 -929, 0x80e7a452cf0b3215 -930, 0xcf6f3fdfdd010a89 -931, 0xb06e98efb8c4cf8d -932, 0xdaa9088d73c8469a -933, 0x2932275de82cf904 -934, 0xae4fe81ef1f2ea6d -935, 0x8f55ad1c108ecd7b -936, 0x4d36deb616fe60d5 -937, 0x129d84b87e28cbfd -938, 0x3d9b18404e0d716c -939, 0x5576067b39672db7 -940, 0x7e57c5806e5bd926 -941, 0xdb86a738b0df1c15 -942, 0xc4263370c4ff9fdd -943, 0x57d5bba42942542 -944, 0x2b2be3e9fa816534 -945, 0x54c1ba10ca97f953 -946, 0xd89c1f14d9805c3b -947, 0xcdad0af12830e5d -948, 0xef8a4e05bb7939a0 -949, 0x10a02cfa077c64cd -950, 0x37dd082b003ba023 -951, 0xbd52decb5ba0259d -952, 0xf07939e0ac9edc13 -953, 0xf14dce84156215f9 -954, 0x4ff635c6efd4c0d1 -955, 0x8273d381b00d1da2 -956, 0x2fe4aee0a7dab542 -957, 0x79a485b897698801 -958, 0x8d3f9726bfdec8ce -959, 0x6daea7b39c0baf5a -960, 0x8508a8b168841669 -961, 0x4dec7955aa28c99c -962, 0x6bd02c3a6e4496aa -963, 0x2c13959a34e93763 -964, 0x1ccace54fdfeb05e -965, 0x34cad73846788c6f -966, 0xabb7d3e684c062bd -967, 0x69c236a70240069c -968, 0xa53398808da493b2 -969, 0x2b4cfa32cf2603f0 -970, 0x903cde2693c3b0f9 -971, 0x5d556925830a020b -972, 0x90a63eab0db9352f -973, 0x351c2d2838792525 -974, 0xe85ceb3486eefb16 -975, 0xfa275cecec8d524d -976, 0x9f1b20f0dd3ce0d7 -977, 0xceb1490022a7a9cd -978, 0x1e7b51c976ea3265 -979, 0x5fa85864c857568e -980, 0x1e7b06ae95db5660 -981, 0xfee282a9657ed8d6 -982, 0x1f2a6fde4761b6b5 -983, 0x1568cbeaba398cdf -984, 0xe185d2c2cef2cc9c -985, 0x2933556aa7be334d -986, 0xec1d06dc69a8a107 -987, 0xa9683634651f5552 -988, 0x8f448642e633fc86 -989, 0xa39ca103aaae4c10 -990, 0x11ca0212139029ff -991, 0xdea595418a51693d -992, 0x1b96d86565401fa7 -993, 0x9876432af1ab5f2a -994, 0xc9630e117c574a52 -995, 0xdc6b6eaa00873b8d -996, 0xd4456b90b2690f82 -997, 0x38374bbd586d9905 -998, 0x47c96bd123a5f3b4 -999, 0x72ef78391219eb11 diff --git a/numpy/random/tests/data/xoshiro512-testset-2.csv b/numpy/random/tests/data/xoshiro512-testset-2.csv deleted file mode 100644 index 264308f1a..000000000 --- a/numpy/random/tests/data/xoshiro512-testset-2.csv +++ /dev/null @@ -1,1001 +0,0 @@ -seed, 0x0 -0, 0x99ec5f36cb75f2b4 -1, 0xbf6e1f784956452a -2, 0x3832e5e4541959a2 -3, 0x25715bafdf7a6b43 -4, 0x8b67fc19f1c8e17f -5, 0xe950e894acc448c1 -6, 0x940554d2c9b256b2 -7, 0xf9eadc87da09ac92 -8, 0x4bfa499f878ac962 -9, 0x383336b0082c3c49 -10, 0x2863cf13af79512e -11, 0x498c25ccc5953380 -12, 0xacde7669d72ac701 -13, 0xd8582a2fdda30a73 -14, 0xddae8a5a57c3302 -15, 0x39b75e8fb865dff5 -16, 0x6946963b565b2ba9 -17, 0xa67ec91e011a1aa3 -18, 0xf88116863cba9c94 -19, 0xc3a3c692211c54f8 -20, 0x62e1a84548f3272d -21, 0x48bfac565faea7dc -22, 0xe8ec2b5f2ee41403 -23, 0x9f4081dab8c56846 -24, 0x7cf256729df79a61 -25, 0xeede53016acd39f2 -26, 0xb37e90df69310b9c -27, 0x2975a99504c56251 -28, 0xdb9416723df2752b -29, 0xc189e2089a8ee16c -30, 0x39fb60f3d17db683 -31, 0x2b60dda991df7c61 -32, 0x5749b739403062bc -33, 0xbe7379e4398257e7 -34, 0x21adce8625781175 -35, 0xf9ca19cb6ff09a4a -36, 0x27689fd07f617a32 -37, 0x656290d3433d9077 -38, 0xc6fba3291a5d6372 -39, 0x8794d1a1bb955db7 -40, 0xc8b037815aab3077 -41, 0x23a02093b144d169 -42, 0x267ad8c80f9caad3 -43, 0x5970a90562008761 -44, 0x7419aa839b2828b6 -45, 0x52dc309a0dfe0f33 -46, 0x10564d319fe055b8 -47, 0xad925ebe373170b0 -48, 0xc38f00ef7258c162 -49, 0x19e6805cbf134b02 -50, 0xa3368cb52e0919a -51, 0xa543ded14e49d4b6 -52, 0x2cebe96c5f0a953 -53, 0xfd2f810919931d8d -54, 0x8181b29c373ad4cc -55, 0x5a03097378f059d6 -56, 0x8e9be6b21fec37b7 -57, 0x37bd0c6e705b5df2 -58, 0x8f1e22e2eb0a869e -59, 0x1abded820c714cf8 -60, 0xdfc917d8b2bed11 -61, 0xc8d119482cead771 -62, 0xee4b670743624ba5 -63, 0x55fbc8a194bf56e6 -64, 0xb21bc8ce5c709989 -65, 0x77abbb291a079826 -66, 0xabb7e9f7bd35d5be -67, 0x479866e6b1a66f15 -68, 0xec82d785eae5a82c -69, 0x2e5d3b0aa0158dc4 -70, 0x2fec4f8b5a8efbfe -71, 0x885293aa43f8645b -72, 0x816c016dc41f2dd7 -73, 0x832f06eae4dd19ed -74, 0xaabacaf4c7840bb7 -75, 0x84e0fd247b0b2412 -76, 0x4ecf02bbf93c2647 -77, 0x1ecf4e8fbab848f8 -78, 0xa7618244187427a -79, 0xc51c7d4d76a4b4e0 -80, 0x44b7b83127f6cb2 -81, 0x13e717ce99868f93 -82, 0x571466622b4e94e4 -83, 0x6086c22ca249714e -84, 0x15d182d77b18a109 -85, 0x2b5cbbf2e8092148 -86, 0x33b31ee2e36f9cdd -87, 0x5ba30dc0c04b381f -88, 0xf855a989b1146877 -89, 0x8f85aef1e22fcae8 -90, 0x7bb6f96d4b652fb7 -91, 0xf3a2e2b45a2619c9 -92, 0x49bcf25f4d6260a -93, 0x26640d4f8e246f16 -94, 0x3b3ca907ab2abb1a -95, 0x2f7a9a3d75f59615 -96, 0xdb63eb1c6172e7fb -97, 0x1569afee9f7a840d -98, 0x4fd1b0162e59bc8a -99, 0x4649428b04932d2b -100, 0xc504f1aa5e5dea73 -101, 0xc2ccb667a4325d31 -102, 0x9afbfdd5ad3a5204 -103, 0xcc07392e231e5553 -104, 0x6f4d6d195fd22ebb -105, 0xeb292b5127fb6e18 -106, 0xfe1f960a70442ded -107, 0x4447c330b74b5933 -108, 0xd21d4046f002efae -109, 0x8bc90cc78187c57e -110, 0x4f67494bf7cecee2 -111, 0xbc33ce353c1ddcfd -112, 0xb891c0a04b0e88f4 -113, 0x8f689f4d0ed5342c -114, 0xda219cd14be3d102 -115, 0x7c1ddbb38629b680 -116, 0x6c70aa3b93c4f52a -117, 0x29ec9e21b1dd5d9e -118, 0xcaeedac16be11bbf -119, 0x35b5110345859bbf -120, 0x439d41ea67b37ebb -121, 0xc6d8d0b7b4f1486a -122, 0xc52385db44d09080 -123, 0x5f99c2e9ca57b52a -124, 0xe3254276e855d800 -125, 0xefbd9049da09502c -126, 0xe6ff8ac6ad006271 -127, 0x2c930e30cb747267 -128, 0x4830da263ba45758 -129, 0x8c60b7ab98006775 -130, 0x7a57c0ea2b570c5a -131, 0xf70f75d3119e0efd -132, 0x3e522394beeed598 -133, 0xb7df8f82912f9695 -134, 0x2abb69f78de3c4f1 -135, 0xd51a5b2c0a7bb5cb -136, 0x89920a17d1de9528 -137, 0xa9d3b9cc614ce21a -138, 0xddd991172b564698 -139, 0xb4a4642875502ea0 -140, 0x8ddcf309cbfe223e -141, 0xb08ba3624d1c66b1 -142, 0x54f027d2804b5a93 -143, 0xb07c3b2d04832f27 -144, 0x848ac9c736770aba -145, 0xc341815ec6b12bf8 -146, 0x3983885191aac395 -147, 0x2c50047012e39883 -148, 0x35762e00ddd30f52 -149, 0x7592ad5f45512761 -150, 0x171247b019c3b822 -151, 0xdf2f59197f67bf2 -152, 0x3d32b07deb6ea68d -153, 0x333e4f44e437159b -154, 0x41a72372d89d3e17 -155, 0x8540ef3654d90ba2 -156, 0x87bd219a8adf77f0 -157, 0x81f0bc1fca841bb3 -158, 0xd3200d827a384d0f -159, 0xd8a9825fadc0be67 -160, 0xe05a6530036bea30 -161, 0xf142901dd1444861 -162, 0xda7d20911dad993d -163, 0x872847376d5e1231 -164, 0x3907389fdf521b33 -165, 0x90fcc779c427a50a -166, 0xb49366477e2b48c8 -167, 0xa04ebd5074accf86 -168, 0x3c92343f5469f7c -169, 0x2b84435bd09b4cb3 -170, 0xb8d4734885fece80 -171, 0xe2fca98eb7e3dc90 -172, 0x5a7f0f454e525193 -173, 0xcc0b1333129c5d2 -174, 0x6433a5896a07730a -175, 0x892937b8a1f1c314 -176, 0xe4a5b385d69dfb7d -177, 0xd8cb9ca239d53aef -178, 0x2cd7af2df788e262 -179, 0x177745f129e94f6c -180, 0x6a6db6c1ebf163e8 -181, 0x58f2f2e255caafeb -182, 0x227c81b75d181eb -183, 0x516d0226e079dbf9 -184, 0x6f66bc3efe0970ed -185, 0xb295db10d97abd08 -186, 0x99d30a4e4ace9fad -187, 0xd9d6a16104bd47d0 -188, 0xdc4c2ea12903a427 -189, 0x6334e1f5f5e03adc -190, 0x9a0cff45fc1bcee8 -191, 0x10874d542fbeec4e -192, 0x3819c7e7fba3b9bf -193, 0x1ee786f49b45924b -194, 0x54723c4712cfb62 -195, 0x3bcca5b2905fb708 -196, 0xf393a7f6ff6a667 -197, 0xaa06af9ce17f62b -198, 0x48c8f05f3e9d463c -199, 0x3479d0238b587b2b -200, 0xa8d8c6670104be96 -201, 0x55814d99b9dfe921 -202, 0xe1ce0f01000d20bd -203, 0x1014d96a94bf3326 -204, 0x582949045ca618f0 -205, 0x223bae0c2e7f5bc0 -206, 0x4bb41f7d1d9fb622 -207, 0xe1f3e2fd4021d8fd -208, 0x5ebccfc61d09c4c9 -209, 0xcfdef40545198b7 -210, 0x4ba8ccc2f8c60a64 -211, 0xba1b4fd748b5061 -212, 0x66e32eba41e0939a -213, 0xa18eed1669d9d315 -214, 0x87c02cfa0ee04b88 -215, 0xfb7c0dfe47ff10b4 -216, 0x865e22c3cbf93ed9 -217, 0xf61e66796f8889b1 -218, 0x3ce89e1af1f9c49c -219, 0x5df6d8fd03e50c56 -220, 0xe2d84d5a77047da7 -221, 0xf1e4983c4900285f -222, 0x1c4fdae662cf9ccf -223, 0x21e8d690e68e9a1a -224, 0x8bc4a83d32b939b9 -225, 0xca02b1f22175c5ff -226, 0x38c7e9f4818bb02d -227, 0x1a0849515278434f -228, 0x9b5ba0111c7e913c -229, 0x7f262e2236221eec -230, 0xbb50a7892f4f3289 -231, 0x61bf32a67a8a37ba -232, 0x8857a179391d0935 -233, 0xe6e89e905c2c838d -234, 0x42a4ac61146bc5a3 -235, 0x709439ac10ef9068 -236, 0x101b793f07cebbdb -237, 0xa15d15f938b270f5 -238, 0xb82363d829a5c246 -239, 0xf472088457296606 -240, 0xa637655483f6a118 -241, 0x8413c67139637302 -242, 0x84e91307377687b7 -243, 0x519f2fdc21adca74 -244, 0x2a57efb29d83c66b -245, 0x5061e889dbf1432f -246, 0xffb74ef07814a287 -247, 0xd82936d72d9838e7 -248, 0xfded7b21dc383d9f -249, 0xc28e1e820fa2d7f3 -250, 0xdad0ba8ae4409211 -251, 0xd7d5ed00366f754 -252, 0xc8f007b6d6161d36 -253, 0x1c4187a9c90e7d87 -254, 0x49fa2c16e3c78424 -255, 0xf3d899da10e89521 -256, 0x89aeb0ade569e3e1 -257, 0x56d3219edcc04b14 -258, 0x5853167abe7fa125 -259, 0x239b40146df96622 -260, 0xa2a70ed13e55aa13 -261, 0x452c6fd65a31f946 -262, 0x771cdf487bb8ea39 -263, 0x458020e1e0355a3 -264, 0x86b71c8ac351f40f -265, 0x4518b905912e4b44 -266, 0xe59809fb72b59f51 -267, 0xf52f08fabdb424ab -268, 0x98729bc24ae9b930 -269, 0xd18bea8f222ae2fd -270, 0xaa5bff6ddbe6cd39 -271, 0x5e6564bdf9d27a0 -272, 0xc1c4658d6d27e065 -273, 0x31d66edddd8655ed -274, 0x6af3bc60e2b4af07 -275, 0x399c4af6041796ab -276, 0x17bb479a69a6ed73 -277, 0x2784fe93a28ecaa3 -278, 0xf21f2428f04f3562 -279, 0x8400c729e4bbcaaa -280, 0xc7b9912613e2277b -281, 0x4100a49d29d132d8 -282, 0xe83d287fada879af -283, 0x20512ca7b1735a2e -284, 0x16d172b52cee39f4 -285, 0x932f40c6356b0681 -286, 0x73b173d7394ebe2f -287, 0x621f4add757fccb6 -288, 0x7724a21d6908f4b -289, 0x82723dadae7a25f -290, 0x917c3b165505d87f -291, 0x317789982769846d -292, 0x9118ac495eb78d26 -293, 0xf52b2e19d3ef473 -294, 0xa846c997a4f8604e -295, 0xf316fca50e1bf909 -296, 0x5fd613d38169c705 -297, 0xfa2c8ac49a16f4d -298, 0x19382f84f73cc4c5 -299, 0xbbbdf4d883438e9e -300, 0xd0c0b36f4d4ef8fc -301, 0x5b57967a9e761eaf -302, 0x8003a747f3cdc264 -303, 0x67245a0a751da7ad -304, 0xc8ddd03ef82a0a33 -305, 0xa7c93a1bfd6c820c -306, 0xf8c05bc5f6fdd20e -307, 0xd9879192f8295663 -308, 0x180c2ff3e2771469 -309, 0xb17b2159870533e6 -310, 0x34d6c12c9be34bc9 -311, 0x664eb6de3c27d98d -312, 0xdbb5b1ba134b9d90 -313, 0x68ce417ee1e96b76 -314, 0x2fb7a10f525e5e08 -315, 0xf4d92c47b9a37cad -316, 0x3fd6bf82bb631c2d -317, 0x269eb1cd345e8a31 -318, 0xbe940cb0cffd51ee -319, 0x17f4afb78aad2719 -320, 0xe6418d546742ed86 -321, 0xbbddf550be83c008 -322, 0x21f5abc27624453d -323, 0xa9c23d6d0fc4cc4a -324, 0x51dd98db43adfa45 -325, 0x768debf45d278d3a -326, 0x3c66726469c6d78a -327, 0x19720ca3ec5c95fe -328, 0x647128339a9de240 -329, 0x2283bfd5ff7fca46 -330, 0x491c02359844cc18 -331, 0x759e770b8b4ab91e -332, 0xca1335607f9cb5c8 -333, 0x57622ba5e6ab8e31 -334, 0xe2631640efa27ee1 -335, 0x9a374481132fdcc3 -336, 0xead08fc06ebe7d6e -337, 0x51f6e040be74899f -338, 0xef020a2644eea66b -339, 0xd08de860251ea1af -340, 0xbbd4224fef793ab5 -341, 0xe32c1f5a20c14b49 -342, 0x41a9c20ee9ab12ff -343, 0xa4f28d0065e07695 -344, 0x29f6a06ee894dde4 -345, 0xf892525b2a6eacd5 -346, 0xf014392e71ac28e -347, 0x95fc7879ae3930da -348, 0x4f6d3fbc928edb34 -349, 0x827c5e01824069df -350, 0xcc71b97aaf28952b -351, 0x34ea77a8fee21c5a -352, 0x1060da2bf2eb6e5d -353, 0xb5c810ce92166853 -354, 0xe4a3a54ee402b549 -355, 0xfccad41d569a68ba -356, 0xef7cdfbe1a1dc930 -357, 0xa4fc3447ec16869c -358, 0x38fd0381051d225d -359, 0x4588436100fb4666 -360, 0x315ee0679f95d75d -361, 0xdb3ebac7a80ce68a -362, 0x711776d978e4144f -363, 0x76335f1760bf6c69 -364, 0xa0e43f3a570985d8 -365, 0x4acd44aa515c8a2a -366, 0xeae99aa23e380173 -367, 0x64db0d85601f3581 -368, 0xb251dc038cc5c88d -369, 0x416acb242805830 -370, 0xc58c8a6f0c958ee5 -371, 0xfca9023592ef2492 -372, 0xe0b53c925afac1d -373, 0x59ab2f382172a153 -374, 0x5b32526cf9ffddf7 -375, 0xe8f7da4d2ee7d446 -376, 0x54ebb0fad0b278a6 -377, 0xdb347dac25d9f210 -378, 0xe439a5295e5218a7 -379, 0xee108ec20ca6d955 -380, 0xcaeb3ae75ca6a426 -381, 0xd626b91bed8e3cfe -382, 0xf594cc47bb420358 -383, 0xcb8c06c63f602631 -384, 0xea1bbf343755e2a6 -385, 0x769f8ad9e3e9dd82 -386, 0x5d0004d1952f258b -387, 0xf696d68c507351d1 -388, 0xcdfd3bef68eeb52f -389, 0x3d400e8af4240cca -390, 0x8662dfc98da8bbba -391, 0x5127c718b4533d93 -392, 0x1628510427094b54 -393, 0xb6d294f5979c4b17 -394, 0x6d03a41585865ea1 -395, 0x96728b5b88e3b111 -396, 0xea45bc46ab6d1e06 -397, 0x53ce57a324130f26 -398, 0x59e439b690174051 -399, 0x7c143c4e625949df -400, 0xc764c808c3e166a3 -401, 0x6263f53fa2405763 -402, 0x71952cf69bb08e58 -403, 0xfec4e83b29280505 -404, 0xce28f5ba58ef8f6e -405, 0xebd9e7ab671427a6 -406, 0x4a91ba373ed1de6e -407, 0xb22b200125627341 -408, 0x8c111548e4a162e5 -409, 0xf4345a7b421b34aa -410, 0x40ba35f569a690a4 -411, 0xf1031a09b5e1d223 -412, 0xbe1c1a131386bbc -413, 0x216f8598d1be1586 -414, 0xef45f48c338d8db0 -415, 0xf57e9f4e168b19c8 -416, 0x56e06748363954b6 -417, 0xccd0b383991896f9 -418, 0x4b40d308361e4d23 -419, 0x1ee49bb107ccb9b9 -420, 0xcdfd1ccf20e46b0b -421, 0x55089ad213e2c33e -422, 0x2852c242329b05a8 -423, 0xa46180d6534b97ef -424, 0xbfb5bbe8b1bd13cd -425, 0xb0bcb564e00214a0 -426, 0x6e9d330e742cf634 -427, 0x7b5b292cfa1b9430 -428, 0x5441cad8cf303e85 -429, 0x1762008ea3eefc9e -430, 0xa9ade7d73cb4296 -431, 0x98a6316562c0ea4f -432, 0xc51574eccad0e9fb -433, 0x677ec01be6893139 -434, 0xb0c7982fbaaee4a2 -435, 0xe07ed42cbb34d46c -436, 0xafc4634fa786c32d -437, 0xdaf8b97e6ad7e018 -438, 0x6267f0706ae3a607 -439, 0xca07bd40f70c2e9e -440, 0x4b25e8c7869abc8e -441, 0xabbb474aa737636e -442, 0x410f530d20a6769f -443, 0xee7d10dba29880d5 -444, 0x61f91eb2ebc3c39e -445, 0xc02d21d44c280731 -446, 0x7ca6f8eb9d6d3abe -447, 0x5e3fc57fc5b3ab03 -448, 0xc4b0f5d5d2655632 -449, 0x9b57a16a81ad63b9 -450, 0xc4732d2261781084 -451, 0xbd26679e27f54c19 -452, 0x8eef61d7a56c9d2d -453, 0x950e4be078a1d146 -454, 0x672e35b94cfafe9 -455, 0x79076d70ef347878 -456, 0x8d0158c3b7af319a -457, 0x9f9f475701b78fbd -458, 0x15768b3aabdb75e1 -459, 0x9f00af1f73d4209c -460, 0x680f425ca7814aa5 -461, 0x4501ef424a132af8 -462, 0xc57a90ca7cec1f2f -463, 0x708bfd7448c14dd1 -464, 0x3bfcbe7c8840456 -465, 0x6f97402f07bde0a0 -466, 0x8027440e4b178a21 -467, 0x94e947eb94a1c33f -468, 0xa99d1ab0d9e32c23 -469, 0x3240cb605f629e2a -470, 0x414086506367a711 -471, 0xb9186fe6279d4965 -472, 0x3f21caccdeb1c91a -473, 0x13554b8865e173ec -474, 0x867beb29cf375a21 -475, 0x1f27821ee23885b7 -476, 0xc64f09efbf1b5c69 -477, 0xc8f96ad307b1eaee -478, 0xea9040a44f9765f2 -479, 0xdf9c784d488953c8 -480, 0xa010bdbdce78972f -481, 0xbb8ab6017fcb7e5c -482, 0x8584f4844ad95ef6 -483, 0xc319e59b7efd9aad -484, 0x7ab487076c4a148f -485, 0xe5d8c47faa0488a0 -486, 0x4077092e33a0457a -487, 0x1bf7e7c4f615d7c4 -488, 0xea03b4fb0f4c3902 -489, 0xee72742384d93cc -490, 0x5bdae630f24c703b -491, 0x4d47db7fd176b322 -492, 0x4457f591923d3714 -493, 0x4a5cb51e0ce52280 -494, 0x16021446e36cf9ab -495, 0x87c563540c39d952 -496, 0x18c0cbfa66b443eb -497, 0xa3edd3ce7632c1f2 -498, 0x2921b28c42e77852 -499, 0xc72e3be0072541bf -500, 0x988c2deed5403283 -501, 0x510b8765988cd3ad -502, 0xa86ee406bfa09364 -503, 0xae5e6c62df70a308 -504, 0x28d4790520331444 -505, 0xbb1a0474b2f407d4 -506, 0x6bcfae4cf73c59cd -507, 0x36695e04107a9f5f -508, 0x5b1e9ad38395f724 -509, 0xd3157c290d299f2 -510, 0xd084175fa8220b7b -511, 0x76b0399bdfb66af2 -512, 0x29c3425c62e361ca -513, 0xe4bf2b3494a19bd8 -514, 0xc9d57df374baba6b -515, 0xdcee5e50619bf223 -516, 0xa3ba78fa885e6a72 -517, 0xbf34ea44695a8f30 -518, 0x5ddde2254aff3d06 -519, 0x6d1f3041e9879f3 -520, 0xaccd25b0875c2d89 -521, 0xefa539c60700018d -522, 0x7d3764e10c6d733b -523, 0x367d61076fe9c3c0 -524, 0x4657ab485775ed78 -525, 0x1ba7888d4f32d223 -526, 0x24ee78667fd08a50 -527, 0xfad3ba97460fae93 -528, 0x4dd200f3b026d7dc -529, 0x9d4e33c5fef7953f -530, 0x2ca6fd68615253c9 -531, 0xe3d16805a894838e -532, 0x10db3a0c972ecdc8 -533, 0x4090524fc5355e3c -534, 0x27385eae6f429d47 -535, 0x50af78ddc8681d35 -536, 0x1ebe6ea924bcd104 -537, 0x75423f64f5df83e7 -538, 0x876c4860427c720f -539, 0x8dc8f9407e27a179 -540, 0xedcd4c67c2676676 -541, 0x3341e48a470ebdb8 -542, 0xd4f63685f508ba66 -543, 0x3f6e375d68e34845 -544, 0x11b33ca59e6c3241 -545, 0x40189f7217f8137a -546, 0x916b0c45129e9a53 -547, 0xc1e91440f5b713bb -548, 0x414652f46a900767 -549, 0x33310db43b11e46f -550, 0xff1503c244b4b868 -551, 0x669e43bc981f4223 -552, 0xe27d487e222dc483 -553, 0xb2ae0efe4fef9eae -554, 0xd8dd8b215c1cfe79 -555, 0x16a80138d4ddcedd -556, 0xbc6a70ac7a4bcda5 -557, 0x18d80787abf2acfc -558, 0xecd0532537c2d3cc -559, 0x993800a80d4446f4 -560, 0x4ea5aeea9f43526 -561, 0x5a8031685b0c1463 -562, 0x31f108fa80921689 -563, 0xb9709186be75599f -564, 0x3adff9562a928b69 -565, 0x190d15108d41eb7 -566, 0xea7591506a38e4c7 -567, 0x4c91ea0a6340a8c3 -568, 0x919c67ef7a244bbf -569, 0xe6a76f184ad3d2b -570, 0x3a9640c5bed1edbc -571, 0x506ebd2fe9ef89e8 -572, 0x4d0796896388d9c4 -573, 0x2de4c110f7d7d112 -574, 0xe46c7b927d9f79a9 -575, 0xbf0ae3712f8eeae1 -576, 0x3b2984ee35da6a32 -577, 0xc59345b1697baef0 -578, 0xa3473fb9f81cc2df -579, 0x4454c552a21d642f -580, 0xca1636a3e911c77f -581, 0x2d9b63fde30e80fc -582, 0xaef85088f4d559f1 -583, 0x46544642eecad016 -584, 0x4da4f3f6afd9956 -585, 0xe6e375ac0867fc0a -586, 0x37d32889b072031e -587, 0x83fc712194bb9b4f -588, 0x9fa04dcc1f546c93 -589, 0x11c7883dc79aa96f -590, 0x1a71d76e8ea10b7c -591, 0x718279514561c06a -592, 0xc664454f1de48c18 -593, 0x945794f5dbc5b9b9 -594, 0x3cb32ee274775b53 -595, 0x571676c238e946b6 -596, 0x903cb8f8a39a1994 -597, 0xe63cdce42313cb65 -598, 0xddf3163b47ec269d -599, 0xb2c5a360383dd417 -600, 0x7bbf55331e3acb3e -601, 0x5c03cfbcc662c4b3 -602, 0x8cee8a1ce27b0fd0 -603, 0xb3e4f5dcce5e41de -604, 0xa3c560c653f8d148 -605, 0x9b0803f47ddbbd92 -606, 0x73598c03ae44f0c5 -607, 0xeda1ffa390632e00 -608, 0x1110571306d5e9c0 -609, 0x41ed218f2f65a1b5 -610, 0xe07441e90b230c6e -611, 0xcde6847873992446 -612, 0xb7d9b5ee4e941a3f -613, 0x5c9e0ac35e79e606 -614, 0x168d3790aca61ccc -615, 0x1846981baa478e7c -616, 0xc1689be15fa49372 -617, 0xddcb4e9701381927 -618, 0xa01ea97bce8344ff -619, 0xbaf44781cab34255 -620, 0xec241fa1a79901d1 -621, 0xea98acc2951f15ac -622, 0x1494afaba64e4697 -623, 0xda5136456a210ac1 -624, 0x5fa20a363997390d -625, 0xb53bbf197e19ce07 -626, 0xde0f31128a00cca2 -627, 0xc605fd5f98698e2a -628, 0x6796d5719b95d97c -629, 0xee44914e65e92f5a -630, 0xb0054098c1bddbe2 -631, 0xad7700d59df9004b -632, 0xcdf1288400a36d30 -633, 0x8b0f55466049fde1 -634, 0xab9410d6a2a28f3e -635, 0x4b5adce26df9bbee -636, 0xb16dcc4180dc7bb7 -637, 0x7657f9213f0dc5e2 -638, 0xc1eb5760b0852f85 -639, 0x8fb3fe1d0faec1d9 -640, 0x2dbbb8a4882f96dd -641, 0xf4ecd3eaf395f8fa -642, 0xb258df3c504f12e0 -643, 0x7ac9b40c8f945ed6 -644, 0x8f134be6970b05d9 -645, 0x6ecc9666da7fa595 -646, 0x133361dfb73314dd -647, 0xb8721ed39e997436 -648, 0x656883492dc738b9 -649, 0x174a3c8f99bf9b85 -650, 0xc09ef0f2df044a07 -651, 0x28c7a240745dff8c -652, 0x176441c5299c7c50 -653, 0x8f42c91c5e888ade -654, 0x1512801d9d3d0953 -655, 0x443640b3f1c700f -656, 0xd83f359def440e5f -657, 0x9fe61cf5cc1c3aa2 -658, 0xff32bae693ac2f8c -659, 0xb4c4595dd221d70a -660, 0xd3437b597e7286c8 -661, 0x2510f2ff588244d8 -662, 0x886154af6e3c0192 -663, 0xd6725d1af0c4a779 -664, 0x4874ef6b5ef6f9e3 -665, 0xbb987030fc6d4ede -666, 0xa0143e44289ccb48 -667, 0xca3de9e602373a89 -668, 0x78a50b8eed52c7c -669, 0x7bc6b4f801904167 -670, 0x9d14d691cb0acee5 -671, 0x53d9784fdefd3fa7 -672, 0x2b5457b8912e9095 -673, 0x41f3614d5840ec5 -674, 0xdb1d447cd66f3375 -675, 0x80f3770ee7d84b3f -676, 0xab9863f7e5a52eae -677, 0xfc078f48c4b21252 -678, 0xd360cf3d61a05da2 -679, 0xb31a15784218b1b6 -680, 0xdc0a6e5e7a89bf5a -681, 0xea18995b334e9d69 -682, 0x3e07c668b1f71a31 -683, 0x4ecf7c96be3b06e7 -684, 0xeb3f4dbab3912a0c -685, 0xf3adfd6a616308c5 -686, 0x7478bc40793ad794 -687, 0xeedca7d9bc381ea9 -688, 0x7b5a77d7b42cc04e -689, 0xd66ffb33bd6e5616 -690, 0x48d8ef97ac2d0ff7 -691, 0xb1c85985725cab07 -692, 0x669a9762479ad88f -693, 0x22e49f0ceddf433c -694, 0xb78bf3ac7e020fc9 -695, 0x3c4939f7654e38d7 -696, 0x6ba6b31e431bf01 -697, 0xe55d5f4848c9e979 -698, 0x5e943e51c4223664 -699, 0x7385c2084ba55b84 -700, 0xedae6a69b96c4181 -701, 0x5498b7fd55f464b4 -702, 0xd889c1a2eb452455 -703, 0x189fd7411f0f9003 -704, 0xd26ce80a290a614a -705, 0xe17114fdc506bf73 -706, 0xe9e4b0ef791be2f7 -707, 0xcf9fa23043d230e5 -708, 0x3a8dac60f4791a0b -709, 0xbefc5e64f0603b04 -710, 0x41e622805a016bb2 -711, 0x8a57df661b57fa6f -712, 0x13a30bb387257625 -713, 0x52a45137bdc9d9d7 -714, 0x6385fcd7f91189f0 -715, 0xb18c44ec584e6de7 -716, 0x6335807f6d6b86fd -717, 0xd573fb71853ef93a -718, 0xf6171462c9f74a61 -719, 0x10089f2cad628d2f -720, 0x96b8d5937d722b85 -721, 0x7376821fe68a497f -722, 0xb752bcac1c64da57 -723, 0x2a043c4fd7c56683 -724, 0xb9acd886078b8ca8 -725, 0xa137bfd64a2aabfa -726, 0x7b616af852cfb604 -727, 0x851d36fd60a7a376 -728, 0x1f6612c681686473 -729, 0xeb70d6175c3f21a3 -730, 0x38df2476423bb985 -731, 0x1c8946a1d708676a -732, 0xe3857fbe776fbcf0 -733, 0x4bccfabc6a7aa9f6 -734, 0xaa79d49af3fb0ad9 -735, 0x8a90ac2c9062949 -736, 0x1bef9e17f6abd7ac -737, 0x5f834c276df092ed -738, 0x57451b8f37c655de -739, 0x9b37a62f91df1c6b -740, 0xfea0e5e928521dd1 -741, 0x30ae26af2d3d3066 -742, 0x90c7f4fe041cc96f -743, 0xae3d8a1af5e89491 -744, 0x8654f2cadce2dce3 -745, 0x45b460f2bd49bf46 -746, 0xbb29582042d003d3 -747, 0x29cd1be694c5c95f -748, 0xbc0ae7374b735c03 -749, 0x4db1a0bc64758878 -750, 0x122c278b74b518c4 -751, 0x4a94e6b50bf51213 -752, 0xf408489bdda60454 -753, 0x791c5da3bf67cb99 -754, 0x83b85caa737261f3 -755, 0x619fe26f59c92f28 -756, 0x6f24d7563749d335 -757, 0x4d5224b378f4356d -758, 0xa80dece2650eccfe -759, 0xc537fb63fd483efd -760, 0x28c5c3cdb5ae2df7 -761, 0xcd66fbab1368c7aa -762, 0xf2abd0adff7069ca -763, 0x152fee808d76d3ab -764, 0x2f21b3a82acb2d08 -765, 0x7eafb15d34cfad1e -766, 0xa7f1608a241eab5e -767, 0xe030095ce12c4c10 -768, 0xa0d6ae018a94f4fb -769, 0x908e2ddca49b6b27 -770, 0x160e2f0b13791c01 -771, 0xc94bcaab64d37b36 -772, 0x9b6d2771f3cab823 -773, 0x877e720beca0fa5e -774, 0xeab6a692db2c4bb2 -775, 0xbe7c0b35f9c454dd -776, 0xafd9faefc3c2e26f -777, 0xc0b313e172484781 -778, 0x802ab792f708ee16 -779, 0x9bb8a1c513145652 -780, 0xb3bb6fbd9ac8b1f5 -781, 0xfd1222d31160e2ac -782, 0x9e8def9378eb0567 -783, 0x4cb5047d3e7613e9 -784, 0xe870feca80e56b98 -785, 0xa6b53c45c84d5b1b -786, 0x2cccb2ab07159ff1 -787, 0xbc1532a0b621d08c -788, 0xc17f60e6e631228c -789, 0xe231bf2fa4ed9790 -790, 0x9650d2546468aea4 -791, 0x78ed0341e62b1f36 -792, 0x564786e0f06f2136 -793, 0xad67f8e36f21e2a6 -794, 0x14aca551dc2007f4 -795, 0xdaaf21ba99a85718 -796, 0x801993a2b9ccd054 -797, 0xc081b520e3351ae4 -798, 0xb4c2c3a575d98933 -799, 0xee0febb05021f5d9 -800, 0xa8e9bf042c8524c2 -801, 0x62a4e29d5e5b0e32 -802, 0xca47dc23b3267d2d -803, 0x7dcda2032acfb297 -804, 0x707edefabc363d8c -805, 0x66ae33b39d40cc26 -806, 0x29af2f7a0dbe3c6c -807, 0x45bd35e7e7fe3fc8 -808, 0xe2be9934a9386886 -809, 0x1369a648c1f66d4 -810, 0x36771ede37f6912d -811, 0x29f125e90e92f06a -812, 0xdf2517a841fe4c35 -813, 0xa07e77e5ac2fa24d -814, 0xaafc1ab2e8914f7e -815, 0x64d602ea8eab3138 -816, 0x7dcc67358db459b7 -817, 0x18b3c0f3e2ddc176 -818, 0x3186ebc761499532 -819, 0x26eae2da284bf1fc -820, 0x2fce764273c3afe8 -821, 0x8d14d487425c3e78 -822, 0x515162b0ca58a70e -823, 0xc9a51fd0466b0019 -824, 0x6928f5af5674a4a2 -825, 0x23aec98e1759caa1 -826, 0x438f9a8f033d4511 -827, 0x8a6314a76994c55e -828, 0xa3bef565e65855a2 -829, 0x251c36d1deb6face -830, 0x221f06d4847ef177 -831, 0x29741abb3ab9b4e4 -832, 0x93c9827eacaa262f -833, 0x9d91f19aace9c4c9 -834, 0x30038d3da09b76e -835, 0xcddf978db05ec6cb -836, 0x798aa80467245bdf -837, 0x9c26179d57a6263b -838, 0x2cbdb745276e1c2b -839, 0xee549998a174e7c5 -840, 0x707933d84e48e90 -841, 0xc1925775d969b667 -842, 0xbac030db93b43a38 -843, 0xa478f204b04d5963 -844, 0xecfc1e66fa00531b -845, 0x4771b36479d16c0c -846, 0xfa28373c9c035622 -847, 0xc89c89a3ee2b5365 -848, 0x88a4066f98fa60a2 -849, 0x3d3395c78b0a0111 -850, 0xed59a448861220b6 -851, 0x97574be1b4fbf7cc -852, 0xe63d52a637907a6b -853, 0x5ba45d5ae3d14fcd -854, 0xecfff9b9ce46e911 -855, 0x1aff395024e1670f -856, 0x80735f71f452b8d0 -857, 0xb35665e1a7090637 -858, 0xb6fc2f8eafbdb100 -859, 0x1f72a04d1ac1ec24 -860, 0xdc6a743a6dfc9a65 -861, 0xc1f2e21f56bf953b -862, 0x3861b9573b9b211f -863, 0x1b0b5ebe315c8de6 -864, 0x4a2474209eefeb20 -865, 0x8bf700bea8771d57 -866, 0x5c826e1b9d96e021 -867, 0x3c550882c3e60dd3 -868, 0xbcfc1b474082e0b -869, 0x36328eb420971300 -870, 0x31f955615998d5c0 -871, 0xefc881172a488a7a -872, 0x8ae7f46c694723a3 -873, 0x71642de55998b04a -874, 0x43af19c9ce33d752 -875, 0xb489c13374abc234 -876, 0x3691de307b663328 -877, 0xeef765a5e6839de2 -878, 0xdceb9040010939ee -879, 0xc402cd11b98f0ab7 -880, 0x714e9a2cb8f045e -881, 0xf0cabb6fe1a41f30 -882, 0xcf41bc2a41ecfb57 -883, 0x62c24ff5eeb1048b -884, 0x74a62a4266a09c41 -885, 0xa6ddcbcf7c7af5f4 -886, 0x8534a3d967991eb1 -887, 0xe43dbafd0a4c9311 -888, 0xc0d713b3b8d9dd68 -889, 0x174a9b2d277e1f -890, 0x8573edcbab177db6 -891, 0x1bcff4d3595158e6 -892, 0x84e938887e7c6066 -893, 0x354130c60d728871 -894, 0xb8dd477ccc07d2a0 -895, 0xc1e30214f9d75b60 -896, 0xce4977c3d243d7fb -897, 0xf93ba43fa22155b7 -898, 0x1cd39a9065bed6c4 -899, 0x1677daec8a3647cc -900, 0xce08f421c19266ae -901, 0xca3ca9ebd2a2669d -902, 0x7eb68405132fca15 -903, 0x18168b0f0ce8d315 -904, 0xdf241f3d574a968e -905, 0xe2fa2207e0dbc86a -906, 0xb8bfb68c1ee88be6 -907, 0xc386a425a0e8ec8b -908, 0xf60e7ea66674e122 -909, 0xd6b7820405c40e8 -910, 0x84bd5fac533797e7 -911, 0x5acfd875363dcfdb -912, 0xd0cab73b1d04d65d -913, 0x8d5cd9a81de7cc92 -914, 0x816b262b71097355 -915, 0x2d28470f662f3ef7 -916, 0xc7ef80c95a450030 -917, 0x18be275d375e8d38 -918, 0x4ebbb686e2fe3832 -919, 0xa15f1c5068711bf -920, 0x6e3e14f47aab4b11 -921, 0x51d2f11208103b72 -922, 0x4083a7d5788b72f5 -923, 0x5037780b542dc8ce -924, 0x1df9802ce8610192 -925, 0xba270a3bcbb59d80 -926, 0xce0459574f8a37c -927, 0x543aaf1a28480574 -928, 0xea92b1cf98896d16 -929, 0x6bfd3baae08a2060 -930, 0x5d9a2b2b76d4ed11 -931, 0x8de7686a95d09d5 -932, 0x392e959b78286928 -933, 0x98fc7a7d1a82e0b5 -934, 0x23f25d04738d1d6d -935, 0x507922d324dd1207 -936, 0xef809cf741419ad7 -937, 0x3a3ffc65ef3365f3 -938, 0x3eb258435905713f -939, 0x242386e52078bd9c -940, 0xa3941556020beac4 -941, 0xbbb020f8e5f4aee2 -942, 0x3373440701bbd45e -943, 0xa6a36308592401f3 -944, 0x20e5642bed30990a -945, 0x6c3cce6f512f0c30 -946, 0x61b470467a590ea3 -947, 0xff15bf7dc3ffccb2 -948, 0x23a3c0663725715f -949, 0x197ea4c617f88f31 -950, 0x6412abc6b559972e -951, 0x5e963b8491f05790 -952, 0x7b837bd7e43c7b83 -953, 0xccde4023d6b2ba81 -954, 0xa39f9c1d210fdfed -955, 0xa413f619bdd49c28 -956, 0xd2096d2202caee6c -957, 0xbbdbb1f4178b9ec4 -958, 0x77d3deb9828dc7ec -959, 0xdb311ba28eb9b8bf -960, 0x781905616be8bc25 -961, 0xf7b401fdce0928ac -962, 0xa29286d380c51201 -963, 0x4f6790854c5fcf9e -964, 0x95b7e3793eceab8f -965, 0x77097d01be05b8fd -966, 0xea6645235d898393 -967, 0xc260212650bb4196 -968, 0xab028439386af2a1 -969, 0xb9c99c6cb6bac542 -970, 0x44597a7ac513a707 -971, 0x7c3503863d73196a -972, 0x5310606fb739afa0 -973, 0x2b9a1a30b2b82283 -974, 0x442c9600d98d3fd4 -975, 0x56dbbb72bd2fb227 -976, 0x9e137b63c9dfbd47 -977, 0x8c432826c8059484 -978, 0x2a581bd76096803 -979, 0x9bced11dd3da15d4 -980, 0x448d0782fa0e2d56 -981, 0x6fe223ed7981de88 -982, 0xa11abc8ebee400d0 -983, 0x70cfca3c8008b197 -984, 0x6de64d935456ab83 -985, 0x726bdd86810c0d6a -986, 0x1077e0584ccc4150 -987, 0x64fa38092b2316f9 -988, 0xe3ef337ecdc3b8c5 -989, 0xebc0452bc41c192a -990, 0x2a81ecd193ab45f9 -991, 0xeb6038f45a865c3a -992, 0xe7f1e1b3600ec5d2 -993, 0x16897e3406fe264c -994, 0x2768a1d17fb81ddb -995, 0x9965317d69c47896 -996, 0x949e16bd19a6c53b -997, 0x81cc74cdf8fe59ea -998, 0x180ade029d93ddc6 -999, 0xcfe8717315f3ca1f diff --git a/numpy/random/tests/test_direct.py b/numpy/random/tests/test_direct.py index 722d5e680..1e824fbcc 100644 --- a/numpy/random/tests/test_direct.py +++ b/numpy/random/tests/test_direct.py @@ -6,8 +6,9 @@ from numpy.testing import (assert_equal, assert_allclose, assert_array_equal, assert_raises) import pytest -from numpy.random import (Generator, MT19937, DSFMT, ThreeFry, PCG32, PCG64, - Philox, Xoshiro256, Xoshiro512, RandomState) +from numpy.random import ( + Generator, MT19937, PCG64, Philox, RandomState, SeedSequence, SFC64 +) from numpy.random.common import interface try: @@ -117,6 +118,24 @@ def gauss_from_uint(x, n, bits): return gauss[:n] +def test_seedsequence(): + from numpy.random.bit_generator import (ISeedSequence, + ISpawnableSeedSequence, + SeedlessSeedSequence) + + s1 = SeedSequence(range(10), spawn_key=(1, 2), pool_size=6) + s1.spawn(10) + s2 = SeedSequence(**s1.state) + assert_equal(s1.state, s2.state) + assert_equal(s1.n_children_spawned, s2.n_children_spawned) + + # The interfaces cannot be instantiated themselves. + assert_raises(TypeError, ISeedSequence) + assert_raises(TypeError, ISpawnableSeedSequence) + dummy = SeedlessSeedSequence() + assert_raises(NotImplementedError, dummy.generate_state, 10) + assert len(dummy.spawn(10)) == 10 + class Base(object): dtype = np.uint64 @@ -124,12 +143,12 @@ class Base(object): @classmethod def setup_class(cls): - cls.bit_generator = Xoshiro256 + cls.bit_generator = PCG64 cls.bits = 64 cls.dtype = np.uint64 cls.seed_error_type = TypeError - cls.invalid_seed_types = [] - cls.invalid_seed_values = [] + cls.invalid_init_types = [] + cls.invalid_init_values = [] @classmethod def _read_csv(cls, filename): @@ -200,39 +219,6 @@ class Base(object): assert_allclose(uniforms, vals) assert_equal(uniforms.dtype, np.float32) - def test_seed_float(self): - # GH #82 - rs = Generator(self.bit_generator(*self.data1['seed'])) - assert_raises(self.seed_error_type, rs.bit_generator.seed, np.pi) - assert_raises(self.seed_error_type, rs.bit_generator.seed, -np.pi) - - def test_seed_float_array(self): - # GH #82 - rs = Generator(self.bit_generator(*self.data1['seed'])) - assert_raises(self.seed_error_type, rs.bit_generator.seed, - np.array([np.pi])) - assert_raises(self.seed_error_type, rs.bit_generator.seed, - np.array([-np.pi])) - assert_raises(ValueError, rs.bit_generator.seed, - np.array([np.pi, -np.pi])) - assert_raises(TypeError, rs.bit_generator.seed, np.array([0, np.pi])) - assert_raises(TypeError, rs.bit_generator.seed, [np.pi]) - assert_raises(TypeError, rs.bit_generator.seed, [0, np.pi]) - - def test_seed_out_of_range(self): - # GH #82 - rs = Generator(self.bit_generator(*self.data1['seed'])) - assert_raises(ValueError, rs.bit_generator.seed, - 2 ** (2 * self.bits + 1)) - assert_raises(ValueError, rs.bit_generator.seed, -1) - - def test_seed_out_of_range_array(self): - # GH #82 - rs = Generator(self.bit_generator(*self.data1['seed'])) - assert_raises(ValueError, rs.bit_generator.seed, - [2 ** (2 * self.bits + 1)]) - assert_raises(ValueError, rs.bit_generator.seed, [-1]) - def test_repr(self): rs = Generator(self.bit_generator(*self.data1['seed'])) assert 'Generator' in repr(rs) @@ -257,6 +243,10 @@ class Base(object): assert bit_generator is not reloaded assert_state_equal(reloaded_state, state) + ss = SeedSequence(100) + aa = pickle.loads(pickle.dumps(ss)) + assert_equal(ss.state, aa.state) + def test_invalid_state_type(self): bit_generator = self.bit_generator(*self.data1['seed']) with pytest.raises(TypeError): @@ -269,17 +259,17 @@ class Base(object): with pytest.raises(ValueError): bit_generator.state = state - def test_invalid_seed_type(self): - bit_generator = self.bit_generator(*self.data1['seed']) - for st in self.invalid_seed_types: + def test_invalid_init_type(self): + bit_generator = self.bit_generator + for st in self.invalid_init_types: with pytest.raises(TypeError): - bit_generator.seed(*st) + bit_generator(*st) - def test_invalid_seed_values(self): - bit_generator = self.bit_generator(*self.data1['seed']) - for st in self.invalid_seed_values: - with pytest.raises(ValueError): - bit_generator.seed(*st) + def test_invalid_init_values(self): + bit_generator = self.bit_generator + for st in self.invalid_init_values: + with pytest.raises((ValueError, OverflowError)): + bit_generator(*st) def test_benchmark(self): bit_generator = self.bit_generator(*self.data1['seed']) @@ -311,59 +301,6 @@ class Base(object): assert_state_equal(state, alt_state) -class TestXoshiro256(Base): - @classmethod - def setup_class(cls): - cls.bit_generator = Xoshiro256 - cls.bits = 64 - cls.dtype = np.uint64 - cls.data1 = cls._read_csv( - join(pwd, './data/xoshiro256-testset-1.csv')) - cls.data2 = cls._read_csv( - join(pwd, './data/xoshiro256-testset-2.csv')) - cls.seed_error_type = TypeError - cls.invalid_seed_types = [('apple',), (2 + 3j,), (3.1,)] - cls.invalid_seed_values = [(-2,), (np.empty((2, 2), dtype=np.int64),)] - - -class TestXoshiro512(Base): - @classmethod - def setup_class(cls): - cls.bit_generator = Xoshiro512 - cls.bits = 64 - cls.dtype = np.uint64 - cls.data1 = cls._read_csv( - join(pwd, './data/xoshiro512-testset-1.csv')) - cls.data2 = cls._read_csv( - join(pwd, './data/xoshiro512-testset-2.csv')) - cls.seed_error_type = TypeError - cls.invalid_seed_types = [('apple',), (2 + 3j,), (3.1,)] - cls.invalid_seed_values = [(-2,), (np.empty((2, 2), dtype=np.int64),)] - - -class TestThreeFry(Base): - @classmethod - def setup_class(cls): - cls.bit_generator = ThreeFry - cls.bits = 64 - cls.dtype = np.uint64 - cls.data1 = cls._read_csv( - join(pwd, './data/threefry-testset-1.csv')) - cls.data2 = cls._read_csv( - join(pwd, './data/threefry-testset-2.csv')) - cls.seed_error_type = TypeError - cls.invalid_seed_types = [] - cls.invalid_seed_values = [(1, None, 1), (-1,), (2 ** 257 + 1,), - (None, None, 2 ** 257 + 1)] - - def test_set_key(self): - bit_generator = self.bit_generator(*self.data1['seed']) - state = bit_generator.state - keyed = self.bit_generator(counter=state['state']['counter'], - key=state['state']['key']) - assert_state_equal(bit_generator.state, keyed.state) - - class TestPhilox(Base): @classmethod def setup_class(cls): @@ -375,9 +312,8 @@ class TestPhilox(Base): cls.data2 = cls._read_csv( join(pwd, './data/philox-testset-2.csv')) cls.seed_error_type = TypeError - cls.invalid_seed_types = [] - cls.invalid_seed_values = [(1, None, 1), (-1,), (2 ** 257 + 1,), - (None, None, 2 ** 257 + 1)] + cls.invalid_init_types = [] + cls.invalid_init_values = [(1, None, 1), (-1,), (None, None, 2 ** 257 + 1)] def test_set_key(self): bit_generator = self.bit_generator(*self.data1['seed']) @@ -395,30 +331,9 @@ class TestPCG64(Base): cls.dtype = np.uint64 cls.data1 = cls._read_csv(join(pwd, './data/pcg64-testset-1.csv')) cls.data2 = cls._read_csv(join(pwd, './data/pcg64-testset-2.csv')) - cls.seed_error_type = TypeError - cls.invalid_seed_types = [(np.array([1, 2]),), (3.2,), - (None, np.zeros(1))] - cls.invalid_seed_values = [(-1,), (2 ** 129 + 1,), (None, -1), - (None, 2 ** 129 + 1)] - - def test_seed_float_array(self): - rs = Generator(self.bit_generator(*self.data1['seed'])) - assert_raises(self.seed_error_type, rs.bit_generator.seed, - np.array([np.pi])) - assert_raises(self.seed_error_type, rs.bit_generator.seed, - np.array([-np.pi])) - assert_raises(self.seed_error_type, rs.bit_generator.seed, - np.array([np.pi, -np.pi])) - assert_raises(self.seed_error_type, rs.bit_generator.seed, - np.array([0, np.pi])) - assert_raises(self.seed_error_type, rs.bit_generator.seed, [np.pi]) - assert_raises(self.seed_error_type, rs.bit_generator.seed, [0, np.pi]) - - def test_seed_out_of_range_array(self): - rs = Generator(self.bit_generator(*self.data1['seed'])) - assert_raises(self.seed_error_type, rs.bit_generator.seed, - [2 ** (2 * self.bits + 1)]) - assert_raises(self.seed_error_type, rs.bit_generator.seed, [-1]) + cls.seed_error_type = (ValueError, TypeError) + cls.invalid_init_types = [(3.2,), ([None],), (1, None)] + cls.invalid_init_values = [(-1,)] def test_advance_symmetry(self): rs = Generator(self.bit_generator(*self.data1['seed'])) @@ -435,20 +350,6 @@ class TestPCG64(Base): assert val_neg == val_pos assert val_big == val_pos -class TestPCG32(TestPCG64): - @classmethod - def setup_class(cls): - cls.bit_generator = PCG32 - cls.bits = 32 - cls.dtype = np.uint32 - cls.data1 = cls._read_csv(join(pwd, './data/pcg32-testset-1.csv')) - cls.data2 = cls._read_csv(join(pwd, './data/pcg32-testset-2.csv')) - cls.seed_error_type = TypeError - cls.invalid_seed_types = [(np.array([1, 2]),), (3.2,), - (None, np.zeros(1))] - cls.invalid_seed_values = [(-1,), (2 ** 129 + 1,), (None, -1), - (None, 2 ** 129 + 1)] - class TestMT19937(Base): @classmethod @@ -459,42 +360,16 @@ class TestMT19937(Base): cls.data1 = cls._read_csv(join(pwd, './data/mt19937-testset-1.csv')) cls.data2 = cls._read_csv(join(pwd, './data/mt19937-testset-2.csv')) cls.seed_error_type = ValueError - cls.invalid_seed_types = [] - cls.invalid_seed_values = [(-1,), np.array([2 ** 33])] - - def test_seed_out_of_range(self): - # GH #82 - rs = Generator(self.bit_generator(*self.data1['seed'])) - assert_raises(ValueError, rs.bit_generator.seed, 2 ** (self.bits + 1)) - assert_raises(ValueError, rs.bit_generator.seed, -1) - assert_raises(ValueError, rs.bit_generator.seed, - 2 ** (2 * self.bits + 1)) - - def test_seed_out_of_range_array(self): - # GH #82 - rs = Generator(self.bit_generator(*self.data1['seed'])) - assert_raises(ValueError, rs.bit_generator.seed, - [2 ** (self.bits + 1)]) - assert_raises(ValueError, rs.bit_generator.seed, [-1]) - assert_raises(TypeError, rs.bit_generator.seed, - [2 ** (2 * self.bits + 1)]) - - def test_seed_float(self): - # GH #82 - rs = Generator(self.bit_generator(*self.data1['seed'])) - assert_raises(TypeError, rs.bit_generator.seed, np.pi) - assert_raises(TypeError, rs.bit_generator.seed, -np.pi) + cls.invalid_init_types = [] + cls.invalid_init_values = [(-1,)] def test_seed_float_array(self): - # GH #82 - rs = Generator(self.bit_generator(*self.data1['seed'])) - bit_generator = rs.bit_generator - assert_raises(TypeError, bit_generator.seed, np.array([np.pi])) - assert_raises(TypeError, bit_generator.seed, np.array([-np.pi])) - assert_raises(TypeError, bit_generator.seed, np.array([np.pi, -np.pi])) - assert_raises(TypeError, bit_generator.seed, np.array([0, np.pi])) - assert_raises(TypeError, bit_generator.seed, [np.pi]) - assert_raises(TypeError, bit_generator.seed, [0, np.pi]) + assert_raises(TypeError, self.bit_generator, np.array([np.pi])) + assert_raises(TypeError, self.bit_generator, np.array([-np.pi])) + assert_raises(TypeError, self.bit_generator, np.array([np.pi, -np.pi])) + assert_raises(TypeError, self.bit_generator, np.array([0, np.pi])) + assert_raises(TypeError, self.bit_generator, [np.pi]) + assert_raises(TypeError, self.bit_generator, [0, np.pi]) def test_state_tuple(self): rs = Generator(self.bit_generator(*self.data1['seed'])) @@ -512,82 +387,16 @@ class TestMT19937(Base): assert_equal(actual, desired) -class TestDSFMT(Base): +class TestSFC64(Base): @classmethod def setup_class(cls): - cls.bit_generator = DSFMT - cls.bits = 53 + cls.bit_generator = SFC64 + cls.bits = 64 cls.dtype = np.uint64 - cls.data1 = cls._read_csv(join(pwd, './data/dSFMT-testset-1.csv')) - cls.data2 = cls._read_csv(join(pwd, './data/dSFMT-testset-2.csv')) - cls.seed_error_type = TypeError - cls.invalid_seed_types = [] - cls.invalid_seed_values = [(-1,), np.array([2 ** 33]), - (np.array([2 ** 33, 2 ** 33]),)] - - def test_uniform_double(self): - rs = Generator(self.bit_generator(*self.data1['seed'])) - assert_array_equal(uniform_from_dsfmt(self.data1['data']), - rs.random(1000)) - - rs = Generator(self.bit_generator(*self.data2['seed'])) - assert_equal(uniform_from_dsfmt(self.data2['data']), - rs.random(1000)) - - def test_gauss_inv(self): - n = 25 - rs = RandomState(self.bit_generator(*self.data1['seed'])) - gauss = rs.standard_normal(n) - assert_allclose(gauss, - gauss_from_uint(self.data1['data'], n, 'dsfmt')) - - rs = RandomState(self.bit_generator(*self.data2['seed'])) - gauss = rs.standard_normal(25) - assert_allclose(gauss, - gauss_from_uint(self.data2['data'], n, 'dsfmt')) - - def test_seed_out_of_range_array(self): - # GH #82 - rs = Generator(self.bit_generator(*self.data1['seed'])) - assert_raises(ValueError, rs.bit_generator.seed, - [2 ** (self.bits + 1)]) - assert_raises(ValueError, rs.bit_generator.seed, [-1]) - assert_raises(TypeError, rs.bit_generator.seed, - [2 ** (2 * self.bits + 1)]) - - def test_seed_float(self): - # GH #82 - rs = Generator(self.bit_generator(*self.data1['seed'])) - assert_raises(TypeError, rs.bit_generator.seed, np.pi) - assert_raises(TypeError, rs.bit_generator.seed, -np.pi) - - def test_seed_float_array(self): - # GH #82 - rs = Generator(self.bit_generator(*self.data1['seed'])) - assert_raises(TypeError, rs.bit_generator.seed, np.array([np.pi])) - assert_raises(TypeError, rs.bit_generator.seed, np.array([-np.pi])) - assert_raises(TypeError, rs.bit_generator.seed, - np.array([np.pi, -np.pi])) - assert_raises(TypeError, rs.bit_generator.seed, np.array([0, np.pi])) - assert_raises(TypeError, rs.bit_generator.seed, [np.pi]) - assert_raises(TypeError, rs.bit_generator.seed, [0, np.pi]) - - def test_uniform_float(self): - rs = Generator(self.bit_generator(*self.data1['seed'])) - vals = uniform32_from_uint(self.data1['data'], self.bits) - uniforms = rs.random(len(vals), dtype=np.float32) - assert_allclose(uniforms, vals) - assert_equal(uniforms.dtype, np.float32) - - rs = Generator(self.bit_generator(*self.data2['seed'])) - vals = uniform32_from_uint(self.data2['data'], self.bits) - uniforms = rs.random(len(vals), dtype=np.float32) - assert_allclose(uniforms, vals) - assert_equal(uniforms.dtype, np.float32) - - def test_buffer_reset(self): - rs = Generator(self.bit_generator(*self.data1['seed'])) - rs.random(1) - assert rs.bit_generator.state['buffer_loc'] != 382 - rs.bit_generator.seed(*self.data1['seed']) - assert rs.bit_generator.state['buffer_loc'] == 382 + cls.data1 = cls._read_csv( + join(pwd, './data/sfc64-testset-1.csv')) + cls.data2 = cls._read_csv( + join(pwd, './data/sfc64-testset-2.csv')) + cls.seed_error_type = (ValueError, TypeError) + cls.invalid_init_types = [(3.2,), ([None],), (1, None)] + cls.invalid_init_values = [(-1,)] diff --git a/numpy/random/tests/test_generator_mt19937.py b/numpy/random/tests/test_generator_mt19937.py index 06c88af85..ef821d46f 100644 --- a/numpy/random/tests/test_generator_mt19937.py +++ b/numpy/random/tests/test_generator_mt19937.py @@ -8,7 +8,7 @@ from numpy.testing import ( assert_warns, assert_no_warnings, assert_array_equal, assert_array_almost_equal, suppress_warnings) -from numpy.random import Generator, MT19937 +from numpy.random import Generator, MT19937, SeedSequence random = Generator(MT19937()) @@ -21,19 +21,23 @@ def endpoint(request): class TestSeed(object): def test_scalar(self): s = Generator(MT19937(0)) - assert_equal(s.integers(1000), 684) + assert_equal(s.integers(1000), 479) s = Generator(MT19937(4294967295)) - assert_equal(s.integers(1000), 419) + assert_equal(s.integers(1000), 324) def test_array(self): s = Generator(MT19937(range(10))) - assert_equal(s.integers(1000), 468) + assert_equal(s.integers(1000), 465) s = Generator(MT19937(np.arange(10))) - assert_equal(s.integers(1000), 468) + assert_equal(s.integers(1000), 465) s = Generator(MT19937([0])) - assert_equal(s.integers(1000), 973) + assert_equal(s.integers(1000), 479) s = Generator(MT19937([4294967295])) - assert_equal(s.integers(1000), 265) + assert_equal(s.integers(1000), 324) + + def test_seedsequence(self): + s = MT19937(SeedSequence(0)) + assert_equal(s.random_raw(1), 2058676884) def test_invalid_scalar(self): # seed must be an unsigned 32 bit integer @@ -41,11 +45,9 @@ class TestSeed(object): assert_raises(ValueError, MT19937, -1) def test_invalid_array(self): - # seed must be an unsigned 32 bit integer + # seed must be an unsigned integer assert_raises(TypeError, MT19937, [-0.5]) assert_raises(ValueError, MT19937, [-1]) - assert_raises(ValueError, MT19937, [4294967296]) - assert_raises(ValueError, MT19937, [1, 2, 4294967296]) assert_raises(ValueError, MT19937, [1, -2, 4294967296]) def test_noninstantized_bitgen(self): @@ -101,14 +103,14 @@ class TestMultinomial(object): def test_invalid_n(self): assert_raises(ValueError, random.multinomial, -1, [0.8, 0.2]) assert_raises(ValueError, random.multinomial, [-1] * 10, [0.8, 0.2]) - + def test_p_non_contiguous(self): p = np.arange(15.) p /= np.sum(p[1::3]) pvals = p[1::3] - random.bit_generator.seed(1432985819) + random = Generator(MT19937(1432985819)) non_contig = random.multinomial(100, pvals=pvals) - random.bit_generator.seed(1432985819) + random = Generator(MT19937(1432985819)) contig = random.multinomial(100, pvals=np.ascontiguousarray(pvals)) assert_array_equal(non_contig, contig) @@ -283,7 +285,7 @@ class TestIntegers(object): def test_in_bounds_fuzz(self, endpoint): # Don't use fixed seed - random.bit_generator.seed() + random = Generator(MT19937()) for dt in self.itype[1:]: for ubnd in [4, 8, 16]: @@ -304,16 +306,16 @@ class TestIntegers(object): ubnd = ubnd - 1 if endpoint else ubnd size = 1000 - random.bit_generator.seed(1234) - scalar = self.rfunc(lbnd, ubnd, size=size, endpoint=endpoint, + random = Generator(MT19937(1234)) + scalar = random.integers(lbnd, ubnd, size=size, endpoint=endpoint, dtype=dt) - random.bit_generator.seed(1234) - scalar_array = self.rfunc([lbnd], [ubnd], size=size, + random = Generator(MT19937(1234)) + scalar_array = random.integers([lbnd], [ubnd], size=size, endpoint=endpoint, dtype=dt) - random.bit_generator.seed(1234) - array = self.rfunc([lbnd] * size, [ubnd] * + random = Generator(MT19937(1234)) + array = random.integers([lbnd] * size, [ubnd] * size, size=size, endpoint=endpoint, dtype=dt) assert_array_equal(scalar, scalar_array) assert_array_equal(scalar, array) @@ -323,33 +325,33 @@ class TestIntegers(object): # We use a md5 hash of generated sequences of 1000 samples # in the range [0, 6) for all but bool, where the range # is [0, 2). Hashes are for little endian numbers. - tgt = {'bool': '7dd3170d7aa461d201a65f8bcf3944b0', - 'int16': '1b7741b80964bb190c50d541dca1cac1', - 'int32': '4dc9fcc2b395577ebb51793e58ed1a05', - 'int64': '17db902806f448331b5a758d7d2ee672', - 'int8': '27dd30c4e08a797063dffac2490b0be6', - 'uint16': '1b7741b80964bb190c50d541dca1cac1', - 'uint32': '4dc9fcc2b395577ebb51793e58ed1a05', - 'uint64': '17db902806f448331b5a758d7d2ee672', - 'uint8': '27dd30c4e08a797063dffac2490b0be6'} + tgt = {'bool': 'b3300e66d2bb59e493d255d47c3a6cbe', + 'int16': '39624ead49ad67e37545744024d2648b', + 'int32': '5c4810373f979336c6c0c999996e47a1', + 'int64': 'ab126c15edff26f55c50d2b7e37391ac', + 'int8': 'd1746364b48a020dab9ef0568e6c0cd2', + 'uint16': '39624ead49ad67e37545744024d2648b', + 'uint32': '5c4810373f979336c6c0c999996e47a1', + 'uint64': 'ab126c15edff26f55c50d2b7e37391ac', + 'uint8': 'd1746364b48a020dab9ef0568e6c0cd2'} for dt in self.itype[1:]: - random.bit_generator.seed(1234) + random = Generator(MT19937(1234)) # view as little endian for hash if sys.byteorder == 'little': - val = self.rfunc(0, 6 - endpoint, size=1000, endpoint=endpoint, + val = random.integers(0, 6 - endpoint, size=1000, endpoint=endpoint, dtype=dt) else: - val = self.rfunc(0, 6 - endpoint, size=1000, endpoint=endpoint, + val = random.integers(0, 6 - endpoint, size=1000, endpoint=endpoint, dtype=dt).byteswap() res = hashlib.md5(val.view(np.int8)).hexdigest() assert_(tgt[np.dtype(dt).name] == res) # bools do not depend on endianness - random.bit_generator.seed(1234) - val = self.rfunc(0, 2 - endpoint, size=1000, endpoint=endpoint, + random = Generator(MT19937(1234)) + val = random.integers(0, 2 - endpoint, size=1000, endpoint=endpoint, dtype=bool).view(np.int8) res = hashlib.md5(val).hexdigest() assert_(tgt[np.dtype(bool).name] == res) @@ -362,18 +364,18 @@ class TestIntegers(object): ubnd = ubnd - 1 if endpoint else ubnd # view as little endian for hash - random.bit_generator.seed(1234) - val = self.rfunc(lbnd, ubnd, size=1000, endpoint=endpoint, + random = Generator(MT19937(1234)) + val = random.integers(lbnd, ubnd, size=1000, endpoint=endpoint, dtype=dt) - random.bit_generator.seed(1234) - val_bc = self.rfunc([lbnd] * 1000, ubnd, endpoint=endpoint, + random = Generator(MT19937(1234)) + val_bc = random.integers([lbnd] * 1000, ubnd, endpoint=endpoint, dtype=dt) assert_array_equal(val, val_bc) - random.bit_generator.seed(1234) - val_bc = self.rfunc([lbnd] * 1000, [ubnd] * 1000, + random = Generator(MT19937(1234)) + val_bc = random.integers([lbnd] * 1000, [ubnd] * 1000, endpoint=endpoint, dtype=dt) assert_array_equal(val, val_bc) @@ -482,6 +484,7 @@ class TestIntegers(object): with pytest.raises(ValueError): random.integers(0, 200, size=10, dtype=other_byteord_dt) + class TestRandomDist(object): # Make sure the random distribution returns the correct value for a # given seed @@ -490,29 +493,23 @@ class TestRandomDist(object): self.seed = 1234567890 def test_integers(self): - random.bit_generator.seed(self.seed) + random = Generator(MT19937(self.seed)) actual = random.integers(-99, 99, size=(3, 2)) - desired = np.array([[31, 3], - [-52, 41], - [-48, -66]]) + desired = np.array([[-80, -56], [41, 37], [-83, -16]]) assert_array_equal(actual, desired) def test_integers_masked(self): # Test masked rejection sampling algorithm to generate array of # uint32 in an interval. - random.bit_generator.seed(self.seed) + random = Generator(MT19937(self.seed)) actual = random.integers(0, 99, size=(3, 2), dtype=np.uint32) - desired = np.array([[2, 47], - [12, 51], - [33, 43]], dtype=np.uint32) + desired = np.array([[9, 21], [70, 68], [8, 41]], dtype=np.uint32) assert_array_equal(actual, desired) def test_integers_closed(self): - random.bit_generator.seed(self.seed) + random = Generator(MT19937(self.seed)) actual = random.integers(-99, 99, size=(3, 2), endpoint=True) - desired = np.array([[31, 3], - [-52, 41], - [-48, -66]]) + desired = np.array([[-80, -56], [ 41, 38], [-83, -15]]) assert_array_equal(actual, desired) def test_integers_max_int(self): @@ -528,72 +525,72 @@ class TestRandomDist(object): assert_equal(actual, desired) def test_random(self): - random.bit_generator.seed(self.seed) + random = Generator(MT19937(self.seed)) actual = random.random((3, 2)) - desired = np.array([[0.61879477158567997, 0.59162362775974664], - [0.88868358904449662, 0.89165480011560816], - [0.4575674820298663, 0.7781880808593471]]) + desired = np.array([[0.096999199829214, 0.707517457682192], + [0.084364834598269, 0.767731206553125], + [0.665069021359413, 0.715487190596693]]) assert_array_almost_equal(actual, desired, decimal=15) - random.bit_generator.seed(self.seed) + random = Generator(MT19937(self.seed)) actual = random.random() assert_array_almost_equal(actual, desired[0, 0], decimal=15) def test_random_float(self): - random.bit_generator.seed(self.seed) + random = Generator(MT19937(self.seed)) actual = random.random((3, 2)) - desired = np.array([[0.6187948, 0.5916236], - [0.8886836, 0.8916548], - [0.4575675, 0.7781881]]) + desired = np.array([[0.0969992 , 0.70751746], + [0.08436483, 0.76773121], + [0.66506902, 0.71548719]]) assert_array_almost_equal(actual, desired, decimal=7) def test_random_float_scalar(self): - random.bit_generator.seed(self.seed) + random = Generator(MT19937(self.seed)) actual = random.random(dtype=np.float32) - desired = 0.6187948 + desired = 0.0969992 assert_array_almost_equal(actual, desired, decimal=7) def test_random_unsupported_type(self): assert_raises(TypeError, random.random, dtype='int32') def test_choice_uniform_replace(self): - random.bit_generator.seed(self.seed) + random = Generator(MT19937(self.seed)) actual = random.choice(4, 4) - desired = np.array([2, 3, 2, 3], dtype=np.int64) + desired = np.array([0, 0, 2, 2], dtype=np.int64) assert_array_equal(actual, desired) def test_choice_nonuniform_replace(self): - random.bit_generator.seed(self.seed) + random = Generator(MT19937(self.seed)) actual = random.choice(4, 4, p=[0.4, 0.4, 0.1, 0.1]) - desired = np.array([1, 1, 2, 2], dtype=np.int64) + desired = np.array([0, 1, 0, 1], dtype=np.int64) assert_array_equal(actual, desired) def test_choice_uniform_noreplace(self): - random.bit_generator.seed(self.seed) + random = Generator(MT19937(self.seed)) actual = random.choice(4, 3, replace=False) - desired = np.array([0, 2, 3], dtype=np.int64) + desired = np.array([0, 1, 3], dtype=np.int64) assert_array_equal(actual, desired) def test_choice_nonuniform_noreplace(self): - random.bit_generator.seed(self.seed) + random = Generator(MT19937(self.seed)) actual = random.choice(4, 3, replace=False, p=[0.1, 0.3, 0.5, 0.1]) - desired = np.array([2, 3, 1], dtype=np.int64) + desired = np.array([0, 2, 3], dtype=np.int64) assert_array_equal(actual, desired) def test_choice_noninteger(self): - random.bit_generator.seed(self.seed) + random = Generator(MT19937(self.seed)) actual = random.choice(['a', 'b', 'c', 'd'], 4) - desired = np.array(['c', 'd', 'c', 'd']) + desired = np.array(['a', 'a', 'c', 'c']) assert_array_equal(actual, desired) def test_choice_multidimensional_default_axis(self): - random.bit_generator.seed(self.seed) + random = Generator(MT19937(self.seed)) actual = random.choice([[0, 1], [2, 3], [4, 5], [6, 7]], 3) - desired = np.array([[4, 5], [6, 7], [4, 5]]) + desired = np.array([[0, 1], [0, 1], [4, 5]]) assert_array_equal(actual, desired) def test_choice_multidimensional_custom_axis(self): - random.bit_generator.seed(self.seed) + random = Generator(MT19937(self.seed)) actual = random.choice([[0, 1], [2, 3], [4, 5], [6, 7]], 1, axis=1) desired = np.array([[0], [2], [4], [6]]) assert_array_equal(actual, desired) @@ -666,13 +663,13 @@ class TestRandomDist(object): a = np.array([42, 1, 2]) p = [None, None, None] assert_raises(ValueError, random.choice, a, p=p) - + def test_choice_p_non_contiguous(self): p = np.ones(10) / 5 p[1::2] = 3.0 - random.bit_generator.seed(self.seed) + random = Generator(MT19937(self.seed)) non_contig = random.choice(5, 3, p=p[::2]) - random.bit_generator.seed(self.seed) + random = Generator(MT19937(self.seed)) contig = random.choice(5, 3, p=np.ascontiguousarray(p[::2])) assert_array_equal(non_contig, contig) @@ -691,8 +688,8 @@ class TestRandomDist(object): def test_choice_large_sample(self): import hashlib - choice_hash = '6395868be877d27518c832213c17977c' - random.bit_generator.seed(self.seed) + choice_hash = '5ca163da624c938bb3bc93e89a7dec4c' + random = Generator(MT19937(self.seed)) actual = random.choice(10000, 5000, replace=False) if sys.byteorder != 'little': actual = actual.byteswap() @@ -700,9 +697,9 @@ class TestRandomDist(object): assert_(choice_hash == res) def test_bytes(self): - random.bit_generator.seed(self.seed) + random = Generator(MT19937(self.seed)) actual = random.bytes(10) - desired = b'\x82Ui\x9e\xff\x97+Wf\xa5' + desired = b'\x86\xf0\xd4\x18\xe1\x81\t8%\xdd' assert_equal(actual, desired) def test_shuffle(self): @@ -725,11 +722,11 @@ class TestRandomDist(object): lambda x: np.asarray([(i, i) for i in x], [("a", object, (1,)), ("b", np.int32, (1,))])]: - random.bit_generator.seed(self.seed) + random = Generator(MT19937(self.seed)) alist = conv([1, 2, 3, 4, 5, 6, 7, 8, 9, 0]) random.shuffle(alist) actual = alist - desired = conv([0, 1, 9, 6, 2, 4, 5, 8, 7, 3]) + desired = conv([4, 1, 9, 8, 0, 5, 3, 6, 2, 7]) assert_array_equal(actual, desired) def test_shuffle_masked(self): @@ -747,62 +744,62 @@ class TestRandomDist(object): sorted(b.data[~b.mask]), sorted(b_orig.data[~b_orig.mask])) def test_permutation(self): - random.bit_generator.seed(self.seed) + random = Generator(MT19937(self.seed)) alist = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0] actual = random.permutation(alist) - desired = [0, 1, 9, 6, 2, 4, 5, 8, 7, 3] + desired = [4, 1, 9, 8, 0, 5, 3, 6, 2, 7] assert_array_equal(actual, desired) - random.bit_generator.seed(self.seed) + random = Generator(MT19937(self.seed)) arr_2d = np.atleast_2d([1, 2, 3, 4, 5, 6, 7, 8, 9, 0]).T actual = random.permutation(arr_2d) assert_array_equal(actual, np.atleast_2d(desired).T) def test_beta(self): - random.bit_generator.seed(self.seed) + random = Generator(MT19937(self.seed)) actual = random.beta(.1, .9, size=(3, 2)) desired = np.array( - [[1.45341850513746058e-02, 5.31297615662868145e-04], - [1.85366619058432324e-06, 4.19214516800110563e-03], - [1.58405155108498093e-04, 1.26252891949397652e-04]]) + [[1.083029353267698e-10, 2.449965303168024e-11], + [2.397085162969853e-02, 3.590779671820755e-08], + [2.830254190078299e-04, 1.744709918330393e-01]]) assert_array_almost_equal(actual, desired, decimal=15) def test_binomial(self): - random.bit_generator.seed(self.seed) + random = Generator(MT19937(self.seed)) actual = random.binomial(100.123, .456, size=(3, 2)) - desired = np.array([[37, 43], + desired = np.array([[42, 41], [42, 48], - [46, 45]]) + [44, 50]]) assert_array_equal(actual, desired) - random.bit_generator.seed(self.seed) + random = Generator(MT19937(self.seed)) actual = random.binomial(100.123, .456) - desired = 37 + desired = 42 assert_array_equal(actual, desired) def test_chisquare(self): - random.bit_generator.seed(self.seed) + random = Generator(MT19937(self.seed)) actual = random.chisquare(50, size=(3, 2)) - desired = np.array([[22.2534560369812, 46.9302393710074], - [52.9974164611614, 85.3559029505718], - [46.1580841240719, 36.1933148548090]]) + desired = np.array([[32.9850547060149, 39.0219480493301], + [56.2006134779419, 57.3474165711485], + [55.4243733880198, 55.4209797925213]]) assert_array_almost_equal(actual, desired, decimal=13) def test_dirichlet(self): - random.bit_generator.seed(self.seed) + random = Generator(MT19937(self.seed)) alpha = np.array([51.72840233779265162, 39.74494232180943953]) actual = random.dirichlet(alpha, size=(3, 2)) - desired = np.array([[[0.444382290764855, 0.555617709235145], - [0.468440809291970, 0.531559190708030]], - [[0.613461427360549, 0.386538572639451], - [0.529103072088183, 0.470896927911817]], - [[0.513490650101800, 0.486509349898200], - [0.558550925712797, 0.441449074287203]]]) + desired = np.array([[[0.5439892869558927, 0.45601071304410745], + [0.5588917345860708, 0.4411082654139292 ]], + [[0.5632074165063435, 0.43679258349365657], + [0.54862581112627, 0.45137418887373015]], + [[0.49961831357047226, 0.5003816864295278 ], + [0.52374806183482, 0.47625193816517997]]]) assert_array_almost_equal(actual, desired, decimal=15) bad_alpha = np.array([5.4e-01, -1.0e-16]) assert_raises(ValueError, random.dirichlet, bad_alpha) - random.bit_generator.seed(self.seed) + random = Generator(MT19937(self.seed)) alpha = np.array([51.72840233779265162, 39.74494232180943953]) actual = random.dirichlet(alpha) assert_array_almost_equal(actual, desired[0, 0], decimal=15) @@ -823,23 +820,23 @@ class TestRandomDist(object): # gh-2089 alpha = np.array([5.4e-01, -1.0e-16]) assert_raises(ValueError, random.dirichlet, alpha) - + def test_dirichlet_alpha_non_contiguous(self): a = np.array([51.72840233779265162, -1.0, 39.74494232180943953]) alpha = a[::2] - random.bit_generator.seed(self.seed) + random = Generator(MT19937(self.seed)) non_contig = random.dirichlet(alpha, size=(3, 2)) - random.bit_generator.seed(self.seed) + random = Generator(MT19937(self.seed)) contig = random.dirichlet(np.ascontiguousarray(alpha), size=(3, 2)) assert_array_almost_equal(non_contig, contig) def test_exponential(self): - random.bit_generator.seed(self.seed) + random = Generator(MT19937(self.seed)) actual = random.exponential(1.1234, size=(3, 2)) - desired = np.array([[5.350682337747634, 1.152307441755771], - [3.867015473358779, 1.538765912839396], - [0.347846818048527, 2.715656549872026]]) + desired = np.array([[0.098845481066258, 1.560752510746964], + [0.075730916041636, 1.769098974710777], + [1.488602544592235, 2.49684815275751 ]]) assert_array_almost_equal(actual, desired, decimal=15) def test_exponential_0(self): @@ -847,19 +844,19 @@ class TestRandomDist(object): assert_raises(ValueError, random.exponential, scale=-0.) def test_f(self): - random.bit_generator.seed(self.seed) + random = Generator(MT19937(self.seed)) actual = random.f(12, 77, size=(3, 2)) - desired = np.array([[0.809498839488467, 2.867222762455471], - [0.588036831639353, 1.012185639664636], - [1.147554281917365, 1.150886518432105]]) + desired = np.array([[0.461720027077085, 1.100441958872451], + [1.100337455217484, 0.91421736740018 ], + [0.500811891303113, 0.826802454552058]]) assert_array_almost_equal(actual, desired, decimal=15) def test_gamma(self): - random.bit_generator.seed(self.seed) + random = Generator(MT19937(self.seed)) actual = random.gamma(5, 3, size=(3, 2)) - desired = np.array([[12.46569350177219, 16.46580642087044], - [43.65744473309084, 11.98722785682592], - [6.50371499559955, 7.48465689751638]]) + desired = np.array([[ 5.03850858902096, 7.9228656732049 ], + [18.73983605132985, 19.57961681699238], + [18.17897755150825, 18.17653912505234]]) assert_array_almost_equal(actual, desired, decimal=14) def test_gamma_0(self): @@ -867,11 +864,11 @@ class TestRandomDist(object): assert_raises(ValueError, random.gamma, shape=-0., scale=-0.) def test_geometric(self): - random.bit_generator.seed(self.seed) + random = Generator(MT19937(self.seed)) actual = random.geometric(.123456789, size=(3, 2)) - desired = np.array([[8, 7], - [17, 17], - [5, 12]]) + desired = np.array([[ 1, 10], + [ 1, 12], + [ 9, 10]]) assert_array_equal(actual, desired) def test_geometric_exceptions(self): @@ -884,11 +881,11 @@ class TestRandomDist(object): assert_raises(ValueError, random.geometric, [np.nan] * 10) def test_gumbel(self): - random.bit_generator.seed(self.seed) + random = Generator(MT19937(self.seed)) actual = random.gumbel(loc=.123456789, scale=2.0, size=(3, 2)) - desired = np.array([[0.19591898743416816, 0.34405539668096674], - [-1.4492522252274278, -1.47374816298446865], - [1.10651090478803416, -0.69535848626236174]]) + desired = np.array([[ 4.688397515056245, -0.289514845417841], + [ 4.981176042584683, -0.633224272589149], + [-0.055915275687488, -0.333962478257953]]) assert_array_almost_equal(actual, desired, decimal=15) def test_gumbel_0(self): @@ -896,11 +893,11 @@ class TestRandomDist(object): assert_raises(ValueError, random.gumbel, scale=-0.) def test_hypergeometric(self): - random.bit_generator.seed(self.seed) + random = Generator(MT19937(self.seed)) actual = random.hypergeometric(10.1, 5.5, 14, size=(3, 2)) - desired = np.array([[10, 10], - [10, 10], - [9, 9]]) + desired = np.array([[ 9, 9], + [ 9, 9], + [10, 9]]) assert_array_equal(actual, desired) # Test nbad = 0 @@ -922,11 +919,11 @@ class TestRandomDist(object): assert_array_equal(actual, desired) def test_laplace(self): - random.bit_generator.seed(self.seed) + random = Generator(MT19937(self.seed)) actual = random.laplace(loc=.123456789, scale=2.0, size=(3, 2)) - desired = np.array([[0.66599721112760157, 0.52829452552221945], - [3.12791959514407125, 3.18202813572992005], - [-0.05391065675859356, 1.74901336242837324]]) + desired = np.array([[-3.156353949272393, 1.195863024830054], + [-3.435458081645966, 1.656882398925444], + [ 0.924824032467446, 1.251116432209336]]) assert_array_almost_equal(actual, desired, decimal=15) def test_laplace_0(self): @@ -934,19 +931,19 @@ class TestRandomDist(object): assert_raises(ValueError, random.laplace, scale=-0.) def test_logistic(self): - random.bit_generator.seed(self.seed) + random = Generator(MT19937(self.seed)) actual = random.logistic(loc=.123456789, scale=2.0, size=(3, 2)) - desired = np.array([[1.09232835305011444, 0.8648196662399954], - [4.27818590694950185, 4.33897006346929714], - [-0.21682183359214885, 2.63373365386060332]]) + desired = np.array([[-4.338584631510999, 1.890171436749954], + [-4.64547787337966 , 2.514545562919217], + [ 1.495389489198666, 1.967827627577474]]) assert_array_almost_equal(actual, desired, decimal=15) def test_lognormal(self): - random.bit_generator.seed(self.seed) + random = Generator(MT19937(self.seed)) actual = random.lognormal(mean=.123456789, sigma=2.0, size=(3, 2)) - desired = np.array([[1.0894838661036e-03, 9.0990021488311e-01], - [6.9178869932225e-01, 2.7672077560016e-01], - [2.3248645126975e+00, 1.4609997951330e+00]]) + desired = np.array([[ 0.0268252166335, 13.9534486483053], + [ 0.1204014788936, 2.2422077497792], + [ 4.2484199496128, 12.0093343977523]]) assert_array_almost_equal(actual, desired, decimal=13) def test_lognormal_0(self): @@ -954,11 +951,11 @@ class TestRandomDist(object): assert_raises(ValueError, random.lognormal, sigma=-0.) def test_logseries(self): - random.bit_generator.seed(self.seed) + random = Generator(MT19937(self.seed)) actual = random.logseries(p=.923456789, size=(3, 2)) - desired = np.array([[2, 2], - [6, 17], - [3, 6]]) + desired = np.array([[14, 17], + [3, 18], + [5, 1]]) assert_array_equal(actual, desired) def test_logseries_exceptions(self): @@ -967,34 +964,34 @@ class TestRandomDist(object): assert_raises(ValueError, random.logseries, [np.nan] * 10) def test_multinomial(self): - random.bit_generator.seed(self.seed) + random = Generator(MT19937(self.seed)) actual = random.multinomial(20, [1 / 6.] * 6, size=(3, 2)) - desired = np.array([[[4, 3, 5, 4, 2, 2], - [5, 2, 8, 2, 2, 1]], - [[3, 4, 3, 6, 0, 4], - [2, 1, 4, 3, 6, 4]], - [[4, 4, 2, 5, 2, 3], - [4, 3, 4, 2, 3, 4]]]) + desired = np.array([[[1, 5, 1, 6, 4, 3], + [4, 2, 6, 2, 4, 2]], + [[5, 3, 2, 6, 3, 1], + [4, 4, 0, 2, 3, 7]], + [[6, 3, 1, 5, 3, 2], + [5, 5, 3, 1, 2, 4]]]) assert_array_equal(actual, desired) def test_multivariate_normal(self): - random.bit_generator.seed(self.seed) + random = Generator(MT19937(self.seed)) mean = (.123456789, 10) cov = [[1, 0], [0, 1]] size = (3, 2) actual = random.multivariate_normal(mean, cov, size) - desired = np.array([[[-3.34929721161096100, 9.891061435770858], - [-0.12250896439641100, 9.295898449738300]], - [[0.48355927611635563, 10.127832101772366], - [3.11093021424924300, 10.283109168794352]], - [[-0.20332082341774727, 9.868532121697195], - [-1.33806889550667330, 9.813657233804179]]]) + desired = np.array([[[-1.747478062846581, 11.25613495182354 ], + [-0.9967333370066214, 10.342002097029821 ]], + [[ 0.7850019631242964, 11.181113712443013 ], + [ 0.8901349653255224, 8.873825399642492 ]], + [[ 0.7130260107430003, 9.551628690083056 ], + [ 0.7127098726541128, 11.991709234143173 ]]]) assert_array_almost_equal(actual, desired, decimal=15) # Check for default size, was raising deprecation warning actual = random.multivariate_normal(mean, cov) - desired = np.array([-1.097443117192574, 10.535787051184261]) + desired = np.array([0.233278563284287, 9.424140804347195]) assert_array_almost_equal(actual, desired, decimal=15) # Check that non positive-semidefinite covariance warns with @@ -1029,11 +1026,11 @@ class TestRandomDist(object): mu, np.eye(3)) def test_negative_binomial(self): - random.bit_generator.seed(self.seed) + random = Generator(MT19937(self.seed)) actual = random.negative_binomial(n=100, p=.12345, size=(3, 2)) - desired = np.array([[521, 736], - [665, 690], - [723, 751]]) + desired = np.array([[543, 727], + [775, 760], + [600, 674]]) assert_array_equal(actual, desired) def test_negative_binomial_exceptions(self): @@ -1043,46 +1040,46 @@ class TestRandomDist(object): [np.nan] * 10) def test_noncentral_chisquare(self): - random.bit_generator.seed(self.seed) + random = Generator(MT19937(self.seed)) actual = random.noncentral_chisquare(df=5, nonc=5, size=(3, 2)) - desired = np.array([[9.47783251920357, 10.02066178260461], - [3.15869984192364, 10.5581565031544], - [5.01652540543548, 13.7689551218441]]) + desired = np.array([[ 1.70561552362133, 15.97378184942111], + [13.71483425173724, 20.17859633310629], + [11.3615477156643 , 3.67891108738029]]) assert_array_almost_equal(actual, desired, decimal=14) actual = random.noncentral_chisquare(df=.5, nonc=.2, size=(3, 2)) - desired = np.array([[0.00145153051285, 0.22432468724778], - [0.02956713468556, 0.00207192946898], - [1.41985055641800, 0.15451287602753]]) + desired = np.array([[9.41427665607629e-04, 1.70473157518850e-04], + [1.14554372041263e+00, 1.38187755933435e-03], + [1.90659181905387e+00, 1.21772577941822e+00]]) assert_array_almost_equal(actual, desired, decimal=14) - random.bit_generator.seed(self.seed) + random = Generator(MT19937(self.seed)) actual = random.noncentral_chisquare(df=5, nonc=0, size=(3, 2)) - desired = np.array([[3.64881368071039, 5.48224544747803], - [20.41999842025404, 3.44075915187367], - [1.29765160605552, 1.64125033268606]]) + desired = np.array([[0.82947954590419, 1.80139670767078], + [6.58720057417794, 7.00491463609814], + [6.31101879073157, 6.30982307753005]]) assert_array_almost_equal(actual, desired, decimal=14) def test_noncentral_f(self): - random.bit_generator.seed(self.seed) + random = Generator(MT19937(self.seed)) actual = random.noncentral_f(dfnum=5, dfden=2, nonc=1, size=(3, 2)) - desired = np.array([[1.22680230963236, 2.56457837623956], - [2.7653304499494, 7.4336268865443], - [1.16362730891403, 2.54104276581491]]) + desired = np.array([[0.060310671139 , 0.23866058175939], + [0.86860246709073, 0.2668510459738 ], + [0.23375780078364, 1.88922102885943]]) assert_array_almost_equal(actual, desired, decimal=14) def test_noncentral_f_nan(self): - random.bit_generator.seed(self.seed) + random = Generator(MT19937(self.seed)) actual = random.noncentral_f(dfnum=5, dfden=2, nonc=np.nan) assert np.isnan(actual) def test_normal(self): - random.bit_generator.seed(self.seed) + random = Generator(MT19937(self.seed)) actual = random.normal(loc=.123456789, scale=2.0, size=(3, 2)) - desired = np.array([[-6.822051212221923, -0.094420339458285], - [-0.368474717792823, -1.284746311523402], - [0.843661763232711, 0.379120992544734]]) + desired = np.array([[-3.618412914693162, 2.635726692647081], + [-2.116923463013243, 0.807460983059643], + [ 1.446547137248593, 2.485684213886024]]) assert_array_almost_equal(actual, desired, decimal=15) def test_normal_0(self): @@ -1090,11 +1087,11 @@ class TestRandomDist(object): assert_raises(ValueError, random.normal, scale=-0.) def test_pareto(self): - random.bit_generator.seed(self.seed) + random = Generator(MT19937(self.seed)) actual = random.pareto(a=.123456789, size=(3, 2)) - desired = np.array([[5.6883528121891552e+16, 4.0569373841667057e+03], - [1.2854967019379475e+12, 6.5833156486851483e+04], - [1.1281132447159091e+01, 3.1895968171107006e+08]]) + desired = np.array([[1.0394926776069018e+00, 7.7142534343505773e+04], + [7.2640150889064703e-01, 3.4650454783825594e+05], + [4.5852344481994740e+04, 6.5851383009539105e+07]]) # For some reason on 32-bit x86 Ubuntu 12.10 the [1, 0] entry in this # matrix differs by 24 nulps. Discussion: # https://mail.python.org/pipermail/numpy-discussion/2012-September/063801.html @@ -1104,10 +1101,10 @@ class TestRandomDist(object): np.testing.assert_array_almost_equal_nulp(actual, desired, nulp=30) def test_poisson(self): - random.bit_generator.seed(self.seed) + random = Generator(MT19937(self.seed)) actual = random.poisson(lam=.123456789, size=(3, 2)) desired = np.array([[0, 0], - [1, 0], + [0, 0], [0, 0]]) assert_array_equal(actual, desired) @@ -1123,19 +1120,19 @@ class TestRandomDist(object): assert_raises(ValueError, random.poisson, [np.nan] * 10) def test_power(self): - random.bit_generator.seed(self.seed) + random = Generator(MT19937(self.seed)) actual = random.power(a=.123456789, size=(3, 2)) - desired = np.array([[9.328833342693975e-01, 2.742250409261003e-02], - [7.684513237993961e-01, 9.297548209160028e-02], - [2.214811188828573e-05, 4.693448360603472e-01]]) + desired = np.array([[1.977857368842754e-09, 9.806792196620341e-02], + [2.482442984543471e-10, 1.527108843266079e-01], + [8.188283434244285e-02, 3.950547209346948e-01]]) assert_array_almost_equal(actual, desired, decimal=15) def test_rayleigh(self): - random.bit_generator.seed(self.seed) + random = Generator(MT19937(self.seed)) actual = random.rayleigh(scale=10, size=(3, 2)) - desired = np.array([[13.8882496494248393, 13.383318339044731], - [20.95413364294492098, 21.08285015800712614], - [11.06066537006854311, 17.35468505778271009]]) + desired = np.array([[ 4.51734079831581, 15.6802442485758 ], + [ 4.19850651287094, 17.08718809823704], + [14.7907457708776 , 15.85545333419775]]) assert_array_almost_equal(actual, desired, decimal=14) def test_rayleigh_0(self): @@ -1143,56 +1140,56 @@ class TestRandomDist(object): assert_raises(ValueError, random.rayleigh, scale=-0.) def test_standard_cauchy(self): - random.bit_generator.seed(self.seed) + random = Generator(MT19937(self.seed)) actual = random.standard_cauchy(size=(3, 2)) - desired = np.array([[31.87809592667601, 0.349332782046838], - [2.816995747731641, 10.552372563459114], - [2.485608017991235, 7.843211273201831]]) + desired = np.array([[-1.489437778266206, -3.275389641569784], + [ 0.560102864910406, -0.680780916282552], + [-1.314912905226277, 0.295852965660225]]) assert_array_almost_equal(actual, desired, decimal=15) def test_standard_exponential(self): - random.bit_generator.seed(self.seed) + random = Generator(MT19937(self.seed)) actual = random.standard_exponential(size=(3, 2), method='inv') - desired = np.array([[0.96441739162374596, 0.89556604882105506], - [2.1953785836319808, 2.22243285392490542], - [0.6116915921431676, 1.50592546727413201]]) + desired = np.array([[0.102031839440643, 1.229350298474972], + [0.088137284693098, 1.459859985522667], + [1.093830802293668, 1.256977002164613]]) assert_array_almost_equal(actual, desired, decimal=15) def test_standard_expoential_type_error(self): assert_raises(TypeError, random.standard_exponential, dtype=np.int32) def test_standard_gamma(self): - random.bit_generator.seed(self.seed) + random = Generator(MT19937(self.seed)) actual = random.standard_gamma(shape=3, size=(3, 2)) - desired = np.array([[2.28483515569645, 3.29899524967824], - [11.12492298902645, 2.16784417297277], - [0.92121813690910, 1.12853552328470]]) + desired = np.array([[0.62970724056362, 1.22379851271008], + [3.899412530884 , 4.12479964250139], + [3.74994102464584, 3.74929307690815]]) assert_array_almost_equal(actual, desired, decimal=14) def test_standard_gammma_scalar_float(self): - random.bit_generator.seed(self.seed) + random = Generator(MT19937(self.seed)) actual = random.standard_gamma(3, dtype=np.float32) - desired = 1.3877466 + desired = 2.9242148399353027 assert_array_almost_equal(actual, desired, decimal=6) def test_standard_gamma_float(self): - random.bit_generator.seed(self.seed) + random = Generator(MT19937(self.seed)) actual = random.standard_gamma(shape=3, size=(3, 2)) - desired = np.array([[2.2848352, 3.2989952], - [11.124923, 2.1678442], - [0.9212181, 1.1285355]]) + desired = np.array([[0.62971, 1.2238 ], + [3.89941, 4.1248 ], + [3.74994, 3.74929]]) assert_array_almost_equal(actual, desired, decimal=5) def test_standard_gammma_float_out(self): actual = np.zeros((3, 2), dtype=np.float32) - random.bit_generator.seed(self.seed) + random = Generator(MT19937(self.seed)) random.standard_gamma(10.0, out=actual, dtype=np.float32) - desired = np.array([[6.9824033, 7.3731737], - [14.860578, 7.5327270], - [11.767487, 6.2320185]], dtype=np.float32) + desired = np.array([[10.14987, 7.87012], + [ 9.46284, 12.56832], + [13.82495, 7.81533]], dtype=np.float32) assert_array_almost_equal(actual, desired, decimal=5) - random.bit_generator.seed(self.seed) + random = Generator(MT19937(self.seed)) random.standard_gamma(10.0, out=actual, size=(3, 2), dtype=np.float32) assert_array_almost_equal(actual, desired, decimal=5) @@ -1212,39 +1209,39 @@ class TestRandomDist(object): assert_raises(ValueError, random.standard_gamma, shape=-0.) def test_standard_normal(self): - random.bit_generator.seed(self.seed) + random = Generator(MT19937(self.seed)) actual = random.standard_normal(size=(3, 2)) - desired = np.array([[-3.472754000610961, -0.108938564229143], - [-0.245965753396411, -0.704101550261701], - [0.360102487116356, 0.127832101772367]]) + desired = np.array([[-1.870934851846581, 1.25613495182354 ], + [-1.120190126006621, 0.342002097029821], + [ 0.661545174124296, 1.181113712443012]]) assert_array_almost_equal(actual, desired, decimal=15) def test_standard_normal_unsupported_type(self): assert_raises(TypeError, random.standard_normal, dtype=np.int32) def test_standard_t(self): - random.bit_generator.seed(self.seed) + random = Generator(MT19937(self.seed)) actual = random.standard_t(df=10, size=(3, 2)) - desired = np.array([[-3.68722108185508, -0.672031186266171], - [2.900224996448669, -0.199656996187739], - [-1.12179956985969, 1.85668262342106]]) + desired = np.array([[-1.484666193042647, 0.30597891831161 ], + [ 1.056684299648085, -0.407312602088507], + [ 0.130704414281157, -2.038053410490321]]) assert_array_almost_equal(actual, desired, decimal=15) def test_triangular(self): - random.bit_generator.seed(self.seed) + random = Generator(MT19937(self.seed)) actual = random.triangular(left=5.12, mode=10.23, right=20.34, size=(3, 2)) - desired = np.array([[12.68117178949215784, 12.4129206149193152], - [16.20131377335158263, 16.25692138747600524], - [11.20400690911820263, 14.4978144835829923]]) + desired = np.array([[ 7.86664070590917, 13.6313848513185 ], + [ 7.68152445215983, 14.36169131136546], + [13.16105603911429, 13.72341621856971]]) assert_array_almost_equal(actual, desired, decimal=14) def test_uniform(self): - random.bit_generator.seed(self.seed) + random = Generator(MT19937(self.seed)) actual = random.uniform(low=1.23, high=10.54, size=(3, 2)) - desired = np.array([[6.99097932346268003, 6.73801597444323974], - [9.50364421400426274, 9.53130618907631089], - [5.48995325769805476, 8.47493103280052118]]) + desired = np.array([[2.13306255040998 , 7.816987531021207], + [2.015436610109887, 8.377577533009589], + [7.421792588856135, 7.891185744455209]]) assert_array_almost_equal(actual, desired, decimal=15) def test_uniform_range_bounds(self): @@ -1286,51 +1283,51 @@ class TestRandomDist(object): assert_raises(TypeError, random.hypergeometric, throwing_int, 1, 1) def test_vonmises(self): - random.bit_generator.seed(self.seed) + random = Generator(MT19937(self.seed)) actual = random.vonmises(mu=1.23, kappa=1.54, size=(3, 2)) - desired = np.array([[2.28567572673902042, 2.89163838442285037], - [0.38198375564286025, 2.57638023113890746], - [1.19153771588353052, 1.83509849681825354]]) + desired = np.array([[ 1.107972248690106, 2.841536476232361], + [ 1.832602376042457, 1.945511926976032], + [-0.260147475776542, 2.058047492231698]]) assert_array_almost_equal(actual, desired, decimal=15) def test_vonmises_small(self): # check infinite loop, gh-4720 - random.bit_generator.seed(self.seed) + random = Generator(MT19937(self.seed)) r = random.vonmises(mu=0., kappa=1.1e-8, size=10**6) assert_(np.isfinite(r).all()) def test_vonmises_nan(self): - random.bit_generator.seed(self.seed) + random = Generator(MT19937(self.seed)) r = random.vonmises(mu=0., kappa=np.nan) assert_(np.isnan(r)) def test_wald(self): - random.bit_generator.seed(self.seed) + random = Generator(MT19937(self.seed)) actual = random.wald(mean=1.23, scale=1.54, size=(3, 2)) - desired = np.array([[0.10653278160339, 0.98771068102461], - [0.89276055317879, 0.13640126419923], - [0.9194319091599, 0.36037816317472]]) + desired = np.array([[0.26871721804551, 3.2233942732115 ], + [2.20328374987066, 2.40958405189353], + [2.07093587449261, 0.73073890064369]]) assert_array_almost_equal(actual, desired, decimal=14) def test_weibull(self): - random.bit_generator.seed(self.seed) + random = Generator(MT19937(self.seed)) actual = random.weibull(a=1.23, size=(3, 2)) - desired = np.array([[3.557276979846361, 1.020870580998542], - [2.731847777612348, 1.29148068905082], - [0.385531483942839, 2.049551716717254]]) + desired = np.array([[0.138613914769468, 1.306463419753191], + [0.111623365934763, 1.446570494646721], + [1.257145775276011, 1.914247725027957]]) assert_array_almost_equal(actual, desired, decimal=15) def test_weibull_0(self): - random.bit_generator.seed(self.seed) + random = Generator(MT19937(self.seed)) assert_equal(random.weibull(a=0, size=12), np.zeros(12)) assert_raises(ValueError, random.weibull, a=-0.) def test_zipf(self): - random.bit_generator.seed(self.seed) + random = Generator(MT19937(self.seed)) actual = random.zipf(a=1.23, size=(3, 2)) - desired = np.array([[66, 29], - [1, 1], - [3, 13]]) + desired = np.array([[ 1, 1], + [ 10, 867], + [354, 2]]) assert_array_equal(actual, desired) @@ -1340,88 +1337,75 @@ class TestBroadcast(object): def setup(self): self.seed = 123456789 - def set_seed(self): - random.bit_generator.seed(self.seed) def test_uniform(self): + random = Generator(MT19937(self.seed)) low = [0] high = [1] uniform = random.uniform - desired = np.array([0.53283302478975902, - 0.53413660089041659, - 0.50955303552646702]) + desired = np.array([0.16693771389729, 0.19635129550675, 0.75563050964095]) - self.set_seed() - actual = uniform(low * 3, high) + random = Generator(MT19937(self.seed)) + actual = random.uniform(low * 3, high) assert_array_almost_equal(actual, desired, decimal=14) - self.set_seed() - actual = uniform(low, high * 3) + random = Generator(MT19937(self.seed)) + actual = random.uniform(low, high * 3) assert_array_almost_equal(actual, desired, decimal=14) def test_normal(self): loc = [0] scale = [1] bad_scale = [-1] - normal = random.normal - desired = np.array([0.454879818179180, - -0.62749179463661, - -0.06063266769872]) + random = Generator(MT19937(self.seed)) + desired = np.array([-0.38736406738527, 0.79594375042255, 0.0197076236097]) - self.set_seed() - actual = normal(loc * 3, scale) + random = Generator(MT19937(self.seed)) + actual = random.normal(loc * 3, scale) assert_array_almost_equal(actual, desired, decimal=14) - assert_raises(ValueError, normal, loc * 3, bad_scale) assert_raises(ValueError, random.normal, loc * 3, bad_scale) - self.set_seed() + random = Generator(MT19937(self.seed)) + normal = random.normal actual = normal(loc, scale * 3) assert_array_almost_equal(actual, desired, decimal=14) assert_raises(ValueError, normal, loc, bad_scale * 3) - assert_raises(ValueError, random.normal, loc, bad_scale * 3) def test_beta(self): a = [1] b = [2] bad_a = [-1] bad_b = [-2] - beta = random.beta - desired = np.array([0.63222080311226, - 0.33310522220774, - 0.64494078460190]) + desired = np.array([0.18719338682602, 0.73234824491364, 0.17928615186455]) - self.set_seed() + random = Generator(MT19937(self.seed)) + beta = random.beta actual = beta(a * 3, b) assert_array_almost_equal(actual, desired, decimal=14) assert_raises(ValueError, beta, bad_a * 3, b) assert_raises(ValueError, beta, a * 3, bad_b) - self.set_seed() - actual = beta(a, b * 3) + random = Generator(MT19937(self.seed)) + actual = random.beta(a, b * 3) assert_array_almost_equal(actual, desired, decimal=14) def test_exponential(self): scale = [1] bad_scale = [-1] - exponential = random.exponential - desired = np.array([1.68591211640990, - 3.14186859487914, - 0.67717375919228]) + desired = np.array([0.67245993212806, 0.21380495318094, 0.7177848928629]) - self.set_seed() - actual = exponential(scale * 3) + random = Generator(MT19937(self.seed)) + actual = random.exponential(scale * 3) assert_array_almost_equal(actual, desired, decimal=14) - assert_raises(ValueError, exponential, bad_scale * 3) + assert_raises(ValueError, random.exponential, bad_scale * 3) def test_standard_gamma(self): shape = [1] bad_shape = [-1] - std_gamma = random.standard_gamma - desired = np.array([1.68591211640990, - 3.14186859487914, - 0.67717375919228]) + desired = np.array([0.67245993212806, 0.21380495318094, 0.7177848928629]) - self.set_seed() + random = Generator(MT19937(self.seed)) + std_gamma = random.standard_gamma actual = std_gamma(shape * 3) assert_array_almost_equal(actual, desired, decimal=14) assert_raises(ValueError, std_gamma, bad_shape * 3) @@ -1431,18 +1415,17 @@ class TestBroadcast(object): scale = [2] bad_shape = [-1] bad_scale = [-2] - gamma = random.gamma - desired = np.array([3.37182423281980, - 6.28373718975827, - 1.35434751838456]) + desired = np.array([1.34491986425611, 0.42760990636187, 1.4355697857258]) - self.set_seed() + random = Generator(MT19937(self.seed)) + gamma = random.gamma actual = gamma(shape * 3, scale) assert_array_almost_equal(actual, desired, decimal=14) assert_raises(ValueError, gamma, bad_shape * 3, scale) assert_raises(ValueError, gamma, shape * 3, bad_scale) - self.set_seed() + random = Generator(MT19937(self.seed)) + gamma = random.gamma actual = gamma(shape, scale * 3) assert_array_almost_equal(actual, desired, decimal=14) assert_raises(ValueError, gamma, bad_shape, scale * 3) @@ -1453,18 +1436,17 @@ class TestBroadcast(object): dfden = [2] bad_dfnum = [-1] bad_dfden = [-2] - f = random.f - desired = np.array([0.84207044881810, - 3.08607209903483, - 3.12823105933169]) + desired = np.array([0.07765056244107, 7.72951397913186, 0.05786093891763]) - self.set_seed() + random = Generator(MT19937(self.seed)) + f = random.f actual = f(dfnum * 3, dfden) assert_array_almost_equal(actual, desired, decimal=14) assert_raises(ValueError, f, bad_dfnum * 3, dfden) assert_raises(ValueError, f, dfnum * 3, bad_dfden) - self.set_seed() + random = Generator(MT19937(self.seed)) + f = random.f actual = f(dfnum, dfden * 3) assert_array_almost_equal(actual, desired, decimal=14) assert_raises(ValueError, f, bad_dfnum, dfden * 3) @@ -1477,12 +1459,10 @@ class TestBroadcast(object): bad_dfnum = [0] bad_dfden = [-1] bad_nonc = [-2] - nonc_f = random.noncentral_f - desired = np.array([3.83710578542563, - 8.74926819712029, - 0.48892943835401]) + desired = np.array([2.02434240411421, 12.91838601070124, 1.24395160354629]) - self.set_seed() + random = Generator(MT19937(self.seed)) + nonc_f = random.noncentral_f actual = nonc_f(dfnum * 3, dfden, nonc) assert_array_almost_equal(actual, desired, decimal=14) assert np.all(np.isnan(nonc_f(dfnum, dfden, [np.nan] * 3))) @@ -1491,14 +1471,16 @@ class TestBroadcast(object): assert_raises(ValueError, nonc_f, dfnum * 3, bad_dfden, nonc) assert_raises(ValueError, nonc_f, dfnum * 3, dfden, bad_nonc) - self.set_seed() + random = Generator(MT19937(self.seed)) + nonc_f = random.noncentral_f actual = nonc_f(dfnum, dfden * 3, nonc) assert_array_almost_equal(actual, desired, decimal=14) assert_raises(ValueError, nonc_f, bad_dfnum, dfden * 3, nonc) assert_raises(ValueError, nonc_f, dfnum, bad_dfden * 3, nonc) assert_raises(ValueError, nonc_f, dfnum, dfden * 3, bad_nonc) - self.set_seed() + random = Generator(MT19937(self.seed)) + nonc_f = random.noncentral_f actual = nonc_f(dfnum, dfden, nonc * 3) assert_array_almost_equal(actual, desired, decimal=14) assert_raises(ValueError, nonc_f, bad_dfnum, dfden, nonc * 3) @@ -1506,41 +1488,37 @@ class TestBroadcast(object): assert_raises(ValueError, nonc_f, dfnum, dfden, bad_nonc * 3) def test_noncentral_f_small_df(self): - self.set_seed() - desired = np.array([21.57878070681719, 1.17110217503908]) + random = Generator(MT19937(self.seed)) + desired = np.array([0.04714867120827, 0.1239390327694]) actual = random.noncentral_f(0.9, 0.9, 2, size=2) assert_array_almost_equal(actual, desired, decimal=14) def test_chisquare(self): df = [1] bad_df = [-1] - chisquare = random.chisquare - desired = np.array([0.57022801133088286, - 0.51947702108840776, - 0.1320969254923558]) + desired = np.array([0.05573640064251, 1.47220224353539, 2.9469379318589]) - self.set_seed() - actual = chisquare(df * 3) + random = Generator(MT19937(self.seed)) + actual = random.chisquare(df * 3) assert_array_almost_equal(actual, desired, decimal=14) - assert_raises(ValueError, chisquare, bad_df * 3) + assert_raises(ValueError, random.chisquare, bad_df * 3) def test_noncentral_chisquare(self): df = [1] nonc = [2] bad_df = [-1] bad_nonc = [-2] - nonc_chi = random.noncentral_chisquare - desired = np.array([2.20478739452297, - 1.45177405755115, - 1.00418921695354]) + desired = np.array([0.07710766249436, 5.27829115110304, 0.630732147399]) - self.set_seed() + random = Generator(MT19937(self.seed)) + nonc_chi = random.noncentral_chisquare actual = nonc_chi(df * 3, nonc) assert_array_almost_equal(actual, desired, decimal=14) assert_raises(ValueError, nonc_chi, bad_df * 3, nonc) assert_raises(ValueError, nonc_chi, df * 3, bad_nonc) - self.set_seed() + random = Generator(MT19937(self.seed)) + nonc_chi = random.noncentral_chisquare actual = nonc_chi(df, nonc * 3) assert_array_almost_equal(actual, desired, decimal=14) assert_raises(ValueError, nonc_chi, bad_df, nonc * 3) @@ -1549,93 +1527,73 @@ class TestBroadcast(object): def test_standard_t(self): df = [1] bad_df = [-1] - t = random.standard_t - desired = np.array([0.60081050724244, - -0.90380889829210, - -0.64499590504117]) + desired = np.array([-1.39498829447098, -1.23058658835223, 0.17207021065983]) - self.set_seed() - actual = t(df * 3) + random = Generator(MT19937(self.seed)) + actual = random.standard_t(df * 3) assert_array_almost_equal(actual, desired, decimal=14) - assert_raises(ValueError, t, bad_df * 3) assert_raises(ValueError, random.standard_t, bad_df * 3) def test_vonmises(self): mu = [2] kappa = [1] bad_kappa = [-1] - vonmises = random.vonmises - desired = np.array([2.9883443664201312, - -2.7064099483995943, - -1.8672476700665914]) + desired = np.array([2.25935584988528, 2.23326261461399, -2.84152146503326]) - self.set_seed() - actual = vonmises(mu * 3, kappa) + random = Generator(MT19937(self.seed)) + actual = random.vonmises(mu * 3, kappa) assert_array_almost_equal(actual, desired, decimal=14) - assert_raises(ValueError, vonmises, mu * 3, bad_kappa) + assert_raises(ValueError, random.vonmises, mu * 3, bad_kappa) - self.set_seed() - actual = vonmises(mu, kappa * 3) + random = Generator(MT19937(self.seed)) + actual = random.vonmises(mu, kappa * 3) assert_array_almost_equal(actual, desired, decimal=14) - assert_raises(ValueError, vonmises, mu, bad_kappa * 3) + assert_raises(ValueError, random.vonmises, mu, bad_kappa * 3) def test_pareto(self): a = [1] bad_a = [-1] - pareto = random.pareto - desired = np.array([4.397371719158540, - 22.14707898642946, - 0.968306954322200]) + desired = np.array([0.95905052946317, 0.2383810889437 , 1.04988745750013]) - self.set_seed() - actual = pareto(a * 3) + random = Generator(MT19937(self.seed)) + actual = random.pareto(a * 3) assert_array_almost_equal(actual, desired, decimal=14) - assert_raises(ValueError, pareto, bad_a * 3) assert_raises(ValueError, random.pareto, bad_a * 3) def test_weibull(self): a = [1] bad_a = [-1] - weibull = random.weibull - desired = np.array([1.68591211640990, - 3.14186859487914, - 0.67717375919228]) + desired = np.array([0.67245993212806, 0.21380495318094, 0.7177848928629]) - self.set_seed() - actual = weibull(a * 3) + random = Generator(MT19937(self.seed)) + actual = random.weibull(a * 3) assert_array_almost_equal(actual, desired, decimal=14) - assert_raises(ValueError, weibull, bad_a * 3) assert_raises(ValueError, random.weibull, bad_a * 3) def test_power(self): a = [1] bad_a = [-1] - power = random.power - desired = np.array([0.81472463783615, - 0.95679800459547, - 0.49194916077287]) + desired = np.array([0.48954864361052, 0.19249412888486, 0.51216834058807]) - self.set_seed() - actual = power(a * 3) + random = Generator(MT19937(self.seed)) + actual = random.power(a * 3) assert_array_almost_equal(actual, desired, decimal=14) - assert_raises(ValueError, power, bad_a * 3) assert_raises(ValueError, random.power, bad_a * 3) def test_laplace(self): loc = [0] scale = [1] bad_scale = [-1] - laplace = random.laplace - desired = np.array([0.067921356028507157, - 0.070715642226971326, - 0.019290950698972624]) + desired = np.array([-1.09698732625119, -0.93470271947368, 0.71592671378202]) - self.set_seed() + random = Generator(MT19937(self.seed)) + laplace = random.laplace actual = laplace(loc * 3, scale) assert_array_almost_equal(actual, desired, decimal=14) assert_raises(ValueError, laplace, loc * 3, bad_scale) - self.set_seed() + random = Generator(MT19937(self.seed)) + laplace = random.laplace actual = laplace(loc, scale * 3) assert_array_almost_equal(actual, desired, decimal=14) assert_raises(ValueError, laplace, loc, bad_scale * 3) @@ -1644,17 +1602,16 @@ class TestBroadcast(object): loc = [0] scale = [1] bad_scale = [-1] - gumbel = random.gumbel - desired = np.array([0.2730318639556768, - 0.26936705726291116, - 0.33906220393037939]) + desired = np.array([1.70020068231762, 1.52054354273631, -0.34293267607081]) - self.set_seed() + random = Generator(MT19937(self.seed)) + gumbel = random.gumbel actual = gumbel(loc * 3, scale) assert_array_almost_equal(actual, desired, decimal=14) assert_raises(ValueError, gumbel, loc * 3, bad_scale) - self.set_seed() + random = Generator(MT19937(self.seed)) + gumbel = random.gumbel actual = gumbel(loc, scale * 3) assert_array_almost_equal(actual, desired, decimal=14) assert_raises(ValueError, gumbel, loc, bad_scale * 3) @@ -1663,79 +1620,61 @@ class TestBroadcast(object): loc = [0] scale = [1] bad_scale = [-1] - logistic = random.logistic - desired = np.array([0.13152135837586171, - 0.13675915696285773, - 0.038216792802833396]) + desired = np.array([-1.607487640433, -1.40925686003678, 1.12887112820397]) - self.set_seed() - actual = logistic(loc * 3, scale) + random = Generator(MT19937(self.seed)) + actual = random.logistic(loc * 3, scale) assert_array_almost_equal(actual, desired, decimal=14) - assert_raises(ValueError, logistic, loc * 3, bad_scale) + assert_raises(ValueError, random.logistic, loc * 3, bad_scale) - self.set_seed() - actual = logistic(loc, scale * 3) + random = Generator(MT19937(self.seed)) + actual = random.logistic(loc, scale * 3) assert_array_almost_equal(actual, desired, decimal=14) - assert_raises(ValueError, logistic, loc, bad_scale * 3) + assert_raises(ValueError, random.logistic, loc, bad_scale * 3) assert_equal(random.logistic(1.0, 0.0), 1.0) def test_lognormal(self): mean = [0] sigma = [1] bad_sigma = [-1] - lognormal = random.lognormal - desired = np.array([1.57598396702930, - 0.53392932731280, - 0.94116889802361]) + desired = np.array([0.67884390500697, 2.21653186290321, 1.01990310084276]) - self.set_seed() + random = Generator(MT19937(self.seed)) + lognormal = random.lognormal actual = lognormal(mean * 3, sigma) assert_array_almost_equal(actual, desired, decimal=14) assert_raises(ValueError, lognormal, mean * 3, bad_sigma) - assert_raises(ValueError, random.lognormal, mean * 3, bad_sigma) - self.set_seed() - actual = lognormal(mean, sigma * 3) - assert_array_almost_equal(actual, desired, decimal=14) - assert_raises(ValueError, lognormal, mean, bad_sigma * 3) + random = Generator(MT19937(self.seed)) + actual = random.lognormal(mean, sigma * 3) assert_raises(ValueError, random.lognormal, mean, bad_sigma * 3) def test_rayleigh(self): scale = [1] bad_scale = [-1] - rayleigh = random.rayleigh - desired = np.array([1.2337491937897689, - 1.2360119924878694, - 1.1936818095781789]) + desired = np.array([0.60439534475066, 0.66120048396359, 1.67873398389499]) - self.set_seed() - actual = rayleigh(scale * 3) + random = Generator(MT19937(self.seed)) + actual = random.rayleigh(scale * 3) assert_array_almost_equal(actual, desired, decimal=14) - assert_raises(ValueError, rayleigh, bad_scale * 3) + assert_raises(ValueError, random.rayleigh, bad_scale * 3) def test_wald(self): mean = [0.5] scale = [1] bad_mean = [0] bad_scale = [-2] - wald = random.wald - desired = np.array([0.36297361471752, - 0.52190135028254, - 0.55111022040727]) + desired = np.array([0.38052407392905, 0.50701641508592, 0.484935249864]) - self.set_seed() - actual = wald(mean * 3, scale) + random = Generator(MT19937(self.seed)) + actual = random.wald(mean * 3, scale) assert_array_almost_equal(actual, desired, decimal=14) - assert_raises(ValueError, wald, bad_mean * 3, scale) - assert_raises(ValueError, wald, mean * 3, bad_scale) assert_raises(ValueError, random.wald, bad_mean * 3, scale) assert_raises(ValueError, random.wald, mean * 3, bad_scale) - self.set_seed() - actual = wald(mean, scale * 3) + random = Generator(MT19937(self.seed)) + actual = random.wald(mean, scale * 3) assert_array_almost_equal(actual, desired, decimal=14) - assert_raises(ValueError, wald, bad_mean, scale * 3) - assert_raises(ValueError, wald, mean, bad_scale * 3) assert_raises(ValueError, random.wald, bad_mean, scale * 3) assert_raises(ValueError, random.wald, mean, bad_scale * 3) @@ -1746,12 +1685,10 @@ class TestBroadcast(object): bad_left_one = [3] bad_mode_one = [4] bad_left_two, bad_mode_two = right * 2 - triangular = random.triangular - desired = np.array([2.03339048710429, - 2.0347400359389356, - 2.0095991069536208]) + desired = np.array([1.57781954604754, 1.62665986867957, 2.30090130831326]) - self.set_seed() + random = Generator(MT19937(self.seed)) + triangular = random.triangular actual = triangular(left * 3, mode, right) assert_array_almost_equal(actual, desired, decimal=14) assert_raises(ValueError, triangular, bad_left_one * 3, mode, right) @@ -1759,7 +1696,8 @@ class TestBroadcast(object): assert_raises(ValueError, triangular, bad_left_two * 3, bad_mode_two, right) - self.set_seed() + random = Generator(MT19937(self.seed)) + triangular = random.triangular actual = triangular(left, mode * 3, right) assert_array_almost_equal(actual, desired, decimal=14) assert_raises(ValueError, triangular, bad_left_one, mode * 3, right) @@ -1767,7 +1705,8 @@ class TestBroadcast(object): assert_raises(ValueError, triangular, bad_left_two, bad_mode_two * 3, right) - self.set_seed() + random = Generator(MT19937(self.seed)) + triangular = random.triangular actual = triangular(left, mode, right * 3) assert_array_almost_equal(actual, desired, decimal=14) assert_raises(ValueError, triangular, bad_left_one, mode, right * 3) @@ -1785,18 +1724,18 @@ class TestBroadcast(object): bad_n = [-1] bad_p_one = [-1] bad_p_two = [1.5] - binom = random.binomial - desired = np.array([1, 1, 1]) + desired = np.array([0, 0, 1]) - self.set_seed() + random = Generator(MT19937(self.seed)) + binom = random.binomial actual = binom(n * 3, p) assert_array_equal(actual, desired) assert_raises(ValueError, binom, bad_n * 3, p) assert_raises(ValueError, binom, n * 3, bad_p_one) assert_raises(ValueError, binom, n * 3, bad_p_two) - self.set_seed() - actual = binom(n, p * 3) + random = Generator(MT19937(self.seed)) + actual = random.binomial(n, p * 3) assert_array_equal(actual, desired) assert_raises(ValueError, binom, bad_n, p * 3) assert_raises(ValueError, binom, n, bad_p_one * 3) @@ -1808,17 +1747,18 @@ class TestBroadcast(object): bad_n = [-1] bad_p_one = [-1] bad_p_two = [1.5] - neg_binom = random.negative_binomial - desired = np.array([3, 1, 2], dtype=np.int64) + desired = np.array([0, 2, 1], dtype=np.int64) - self.set_seed() + random = Generator(MT19937(self.seed)) + neg_binom = random.negative_binomial actual = neg_binom(n * 3, p) assert_array_equal(actual, desired) assert_raises(ValueError, neg_binom, bad_n * 3, p) assert_raises(ValueError, neg_binom, n * 3, bad_p_one) assert_raises(ValueError, neg_binom, n * 3, bad_p_two) - self.set_seed() + random = Generator(MT19937(self.seed)) + neg_binom = random.negative_binomial actual = neg_binom(n, p * 3) assert_array_equal(actual, desired) assert_raises(ValueError, neg_binom, bad_n, p * 3) @@ -1826,15 +1766,15 @@ class TestBroadcast(object): assert_raises(ValueError, neg_binom, n, bad_p_two * 3) def test_poisson(self): - max_lam = random._poisson_lam_max lam = [1] bad_lam_one = [-1] + desired = np.array([0, 0, 3]) + + random = Generator(MT19937(self.seed)) + max_lam = random._poisson_lam_max bad_lam_two = [max_lam * 2] poisson = random.poisson - desired = np.array([1, 1, 0]) - - self.set_seed() actual = poisson(lam * 3) assert_array_equal(actual, desired) assert_raises(ValueError, poisson, bad_lam_one * 3) @@ -1843,10 +1783,10 @@ class TestBroadcast(object): def test_zipf(self): a = [2] bad_a = [0] - zipf = random.zipf - desired = np.array([2, 2, 1]) + desired = np.array([1, 8, 1]) - self.set_seed() + random = Generator(MT19937(self.seed)) + zipf = random.zipf actual = zipf(a * 3) assert_array_equal(actual, desired) assert_raises(ValueError, zipf, bad_a * 3) @@ -1858,14 +1798,14 @@ class TestBroadcast(object): p = [0.5] bad_p_one = [-1] bad_p_two = [1.5] - geom = random.geometric - desired = np.array([2, 2, 2]) + desired = np.array([1, 1, 3]) - self.set_seed() - actual = geom(p * 3) + random = Generator(MT19937(self.seed)) + geometric = random.geometric + actual = geometric(p * 3) assert_array_equal(actual, desired) - assert_raises(ValueError, geom, bad_p_one * 3) - assert_raises(ValueError, geom, bad_p_two * 3) + assert_raises(ValueError, geometric, bad_p_one * 3) + assert_raises(ValueError, geometric, bad_p_two * 3) def test_hypergeometric(self): ngood = [1] @@ -1875,26 +1815,26 @@ class TestBroadcast(object): bad_nbad = [-2] bad_nsample_one = [-1] bad_nsample_two = [4] - hypergeom = random.hypergeometric - desired = np.array([1, 1, 1]) + desired = np.array([0, 0, 1]) - self.set_seed() - actual = hypergeom(ngood * 3, nbad, nsample) + random = Generator(MT19937(self.seed)) + actual = random.hypergeometric(ngood * 3, nbad, nsample) assert_array_equal(actual, desired) - assert_raises(ValueError, hypergeom, bad_ngood * 3, nbad, nsample) - assert_raises(ValueError, hypergeom, ngood * 3, bad_nbad, nsample) - assert_raises(ValueError, hypergeom, ngood * 3, nbad, bad_nsample_one) - assert_raises(ValueError, hypergeom, ngood * 3, nbad, bad_nsample_two) + assert_raises(ValueError, random.hypergeometric, bad_ngood * 3, nbad, nsample) + assert_raises(ValueError, random.hypergeometric, ngood * 3, bad_nbad, nsample) + assert_raises(ValueError, random.hypergeometric, ngood * 3, nbad, bad_nsample_one) + assert_raises(ValueError, random.hypergeometric, ngood * 3, nbad, bad_nsample_two) - self.set_seed() - actual = hypergeom(ngood, nbad * 3, nsample) + random = Generator(MT19937(self.seed)) + actual = random.hypergeometric(ngood, nbad * 3, nsample) assert_array_equal(actual, desired) - assert_raises(ValueError, hypergeom, bad_ngood, nbad * 3, nsample) - assert_raises(ValueError, hypergeom, ngood, bad_nbad * 3, nsample) - assert_raises(ValueError, hypergeom, ngood, nbad * 3, bad_nsample_one) - assert_raises(ValueError, hypergeom, ngood, nbad * 3, bad_nsample_two) + assert_raises(ValueError, random.hypergeometric, bad_ngood, nbad * 3, nsample) + assert_raises(ValueError, random.hypergeometric, ngood, bad_nbad * 3, nsample) + assert_raises(ValueError, random.hypergeometric, ngood, nbad * 3, bad_nsample_one) + assert_raises(ValueError, random.hypergeometric, ngood, nbad * 3, bad_nsample_two) - self.set_seed() + random = Generator(MT19937(self.seed)) + hypergeom = random.hypergeometric actual = hypergeom(ngood, nbad, nsample * 3) assert_array_equal(actual, desired) assert_raises(ValueError, hypergeom, bad_ngood, nbad, nsample * 3) @@ -1907,34 +1847,39 @@ class TestBroadcast(object): assert_raises(ValueError, hypergeom, 10, 10, -1) assert_raises(ValueError, hypergeom, 10, 10, 25) + # ValueError for arguments that are too big. + assert_raises(ValueError, hypergeom, 2**30, 10, 20) + assert_raises(ValueError, hypergeom, 999, 2**31, 50) + assert_raises(ValueError, hypergeom, 999, [2**29, 2**30], 1000) + def test_logseries(self): p = [0.5] bad_p_one = [2] bad_p_two = [-1] - logseries = random.logseries desired = np.array([1, 1, 1]) - self.set_seed() + random = Generator(MT19937(self.seed)) + logseries = random.logseries actual = logseries(p * 3) assert_array_equal(actual, desired) assert_raises(ValueError, logseries, bad_p_one * 3) assert_raises(ValueError, logseries, bad_p_two * 3) def test_multinomial(self): - random.bit_generator.seed(self.seed) + random = Generator(MT19937(self.seed)) actual = random.multinomial([5, 20], [1 / 6.] * 6, size=(3, 2)) - desired = np.array([[[1, 1, 1, 1, 0, 1], - [4, 5, 1, 4, 3, 3]], - [[1, 1, 1, 0, 0, 2], - [2, 0, 4, 3, 7, 4]], - [[1, 2, 0, 0, 2, 0], - [3, 2, 3, 4, 2, 6]]], dtype=np.int64) + desired = np.array([[[0, 0, 2, 1, 2, 0], + [2, 3, 6, 4, 2, 3]], + [[1, 0, 1, 0, 2, 1], + [7, 2, 2, 1, 4, 4]], + [[0, 2, 0, 1, 2, 0], + [3, 2, 3, 3, 4, 5]]], dtype=np.int64) assert_array_equal(actual, desired) - random.bit_generator.seed(self.seed) + random = Generator(MT19937(self.seed)) actual = random.multinomial([5, 20], [1 / 6.] * 6) - desired = np.array([[1, 1, 1, 1, 0, 1], - [4, 5, 1, 4, 3, 3]], dtype=np.int64) + desired = np.array([[0, 0, 2, 1, 2, 0], + [2, 3, 6, 4, 2, 3]], dtype=np.int64) assert_array_equal(actual, desired) diff --git a/numpy/random/tests/test_generator_mt19937_regressions.py b/numpy/random/tests/test_generator_mt19937_regressions.py index cd4e08d6f..3a937f997 100644 --- a/numpy/random/tests/test_generator_mt19937_regressions.py +++ b/numpy/random/tests/test_generator_mt19937_regressions.py @@ -23,20 +23,13 @@ class TestRegression(object): assert_(np.all(mt19937.hypergeometric(18, 3, 11, size=10) > 0)) # Test for ticket #5623 - args = [ - (2**20 - 2, 2**20 - 2, 2**20 - 2), # Check for 32-bit systems - ] - is_64bits = sys.maxsize > 2**32 - if is_64bits and sys.platform != 'win32': - # Check for 64-bit systems - args.append((2**40 - 2, 2**40 - 2, 2**40 - 2)) - for arg in args: - assert_(mt19937.hypergeometric(*arg) > 0) + args = (2**20 - 2, 2**20 - 2, 2**20 - 2) # Check for 32-bit systems + assert_(mt19937.hypergeometric(*args) > 0) def test_logseries_convergence(self): # Test for ticket #923 N = 1000 - mt19937.bit_generator.seed(0) + mt19937 = Generator(MT19937(0)) rvsn = mt19937.logseries(0.8, size=N) # these two frequency counts should be close to theoretical # numbers with this large sample @@ -50,9 +43,9 @@ class TestRegression(object): assert_(freq < 0.23, msg) def test_permutation_longs(self): - mt19937.bit_generator.seed(1234) + mt19937 = Generator(MT19937(1234)) a = mt19937.permutation(12) - mt19937.bit_generator.seed(1234) + mt19937 = Generator(MT19937(1234)) b = mt19937.permutation(long(12)) assert_array_equal(a, b) @@ -62,18 +55,17 @@ class TestRegression(object): [(1, 1), (2, 2), (3, 3), None], [1, (2, 2), (3, 3), None], [(1, 1), 2, 3, None]]: - mt19937.bit_generator.seed(12345) + mt19937 = Generator(MT19937(12345)) shuffled = list(t) mt19937.shuffle(shuffled) - assert_array_equal(shuffled, [t[0], t[3], t[1], t[2]]) + assert_array_equal(shuffled, [t[2], t[0], t[3], t[1]]) def test_call_within_randomstate(self): - # Check that custom RandomState does not call into global state - m = Generator(MT19937()) # mt19937.RandomState() - res = np.array([0, 8, 7, 2, 1, 9, 4, 7, 0, 3]) + # Check that custom BitGenerator does not call into global state + res = np.array([1, 8, 0, 1, 5, 3, 3, 8, 1, 4]) for i in range(3): - mt19937.bit_generator.seed(i) - m.bit_generator.seed(4321) + mt19937 = Generator(MT19937(i)) + m = Generator(MT19937(4321)) # If m.state is not honored, the result will change assert_array_equal(m.choice(10, size=10, p=np.ones(10)/10.), res) @@ -88,7 +80,7 @@ class TestRegression(object): def test_beta_small_parameters(self): # Test that beta with small a and b parameters does not produce # NaNs due to roundoff errors causing 0 / 0, gh-5851 - mt19937.bit_generator.seed(1234567890) + mt19937 = Generator(MT19937(1234567890)) x = mt19937.beta(0.0001, 0.0001, size=100) assert_(not np.any(np.isnan(x)), 'Nans in mt19937.beta') @@ -96,7 +88,7 @@ class TestRegression(object): # The sum of probs should be 1.0 with some tolerance. # For low precision dtypes the tolerance was too tight. # See numpy github issue 6123. - mt19937.bit_generator.seed(1234) + mt19937 = Generator(MT19937(1234)) a = [1, 2, 3] counts = [4, 4, 2] for dt in np.float16, np.float32, np.float64: @@ -110,7 +102,7 @@ class TestRegression(object): # Test that permuting an array of different length strings # will not cause a segfault on garbage collection # Tests gh-7710 - mt19937.bit_generator.seed(1234) + mt19937 = Generator(MT19937(1234)) a = np.array(['a', 'a' * 1000]) @@ -125,7 +117,7 @@ class TestRegression(object): # Test that permuting an array of objects will not cause # a segfault on garbage collection. # See gh-7719 - mt19937.bit_generator.seed(1234) + mt19937 = Generator(MT19937(1234)) a = np.array([np.arange(1), np.arange(4)]) for _ in range(1000): @@ -139,10 +131,10 @@ class TestRegression(object): class N(np.ndarray): pass - mt19937.bit_generator.seed(1) + mt19937 = Generator(MT19937(1)) orig = np.arange(3).view(N) perm = mt19937.permutation(orig) - assert_array_equal(perm, np.array([0, 2, 1])) + assert_array_equal(perm, np.array([2, 0, 1])) assert_array_equal(orig, np.arange(3).view(N)) class M(object): @@ -151,10 +143,10 @@ class TestRegression(object): def __array__(self): return self.a - mt19937.bit_generator.seed(1) + mt19937 = Generator(MT19937(1)) m = M() perm = mt19937.permutation(m) - assert_array_equal(perm, np.array([2, 1, 4, 0, 3])) + assert_array_equal(perm, np.array([4, 1, 3, 0, 2])) assert_array_equal(m.__array__(), np.arange(5)) def test_gamma_0(self): diff --git a/numpy/random/tests/test_randomstate.py b/numpy/random/tests/test_randomstate.py index e075a97bc..3b5a279a3 100644 --- a/numpy/random/tests/test_randomstate.py +++ b/numpy/random/tests/test_randomstate.py @@ -11,7 +11,7 @@ from numpy.testing import ( suppress_warnings ) -from numpy.random import MT19937, Xoshiro256, mtrand as random +from numpy.random import MT19937, PCG64, mtrand as random INT_FUNCS = {'binomial': (100.0, 0.6), 'geometric': (.5,), @@ -98,11 +98,10 @@ class TestSeed(object): assert_raises(ValueError, random.RandomState, [[1, 2, 3], [4, 5, 6]]) - def test_seed_equivalency(self): - rs = random.RandomState(0) - rs2 = random.RandomState(MT19937(0)) - assert_mt19937_state_equal(rs.get_state(legacy=False), - rs2.get_state(legacy=False)) + def test_cannot_seed(self): + rs = random.RandomState(PCG64(0)) + with assert_raises(TypeError): + rs.seed(1234) def test_invalid_initialization(self): assert_raises(ValueError, random.RandomState, MT19937) @@ -216,13 +215,13 @@ class TestSetState(object): self.random_state.negative_binomial(0.5, 0.5) def test_get_state_warning(self): - rs = random.RandomState(Xoshiro256()) + rs = random.RandomState(PCG64()) with suppress_warnings() as sup: w = sup.record(RuntimeWarning) state = rs.get_state() assert_(len(w) == 1) assert isinstance(state, dict) - assert state['bit_generator'] == 'Xoshiro256' + assert state['bit_generator'] == 'PCG64' def test_invalid_legacy_state_setting(self): state = self.random_state.get_state() diff --git a/numpy/random/tests/test_seed_sequence.py b/numpy/random/tests/test_seed_sequence.py new file mode 100644 index 000000000..34278375a --- /dev/null +++ b/numpy/random/tests/test_seed_sequence.py @@ -0,0 +1,40 @@ +import numpy as np +from numpy.testing import assert_array_equal + +from numpy.random.bit_generator import SeedSequence + + +def test_reference_data(): + """ Check that SeedSequence generates data the same as the C++ reference. + + https://gist.github.com/imneme/540829265469e673d045 + """ + inputs = [ + [3735928559, 195939070, 229505742, 305419896], + [3668361503, 4165561550, 1661411377, 3634257570], + [164546577, 4166754639, 1765190214, 1303880213], + [446610472, 3941463886, 522937693, 1882353782], + [1864922766, 1719732118, 3882010307, 1776744564], + [4141682960, 3310988675, 553637289, 902896340], + [1134851934, 2352871630, 3699409824, 2648159817], + [1240956131, 3107113773, 1283198141, 1924506131], + [2669565031, 579818610, 3042504477, 2774880435], + [2766103236, 2883057919, 4029656435, 862374500], + ] + outputs = [ + [3914649087, 576849849, 3593928901, 2229911004], + [2240804226, 3691353228, 1365957195, 2654016646], + [3562296087, 3191708229, 1147942216, 3726991905], + [1403443605, 3591372999, 1291086759, 441919183], + [1086200464, 2191331643, 560336446, 3658716651], + [3249937430, 2346751812, 847844327, 2996632307], + [2584285912, 4034195531, 3523502488, 169742686], + [959045797, 3875435559, 1886309314, 359682705], + [3978441347, 432478529, 3223635119, 138903045], + [296367413, 4262059219, 13109864, 3283683422], + ] + for seed, expected in zip(inputs, outputs): + expected = np.array(expected, dtype=np.uint32) + ss = SeedSequence(seed) + state = ss.generate_state(len(expected)) + assert_array_equal(state, expected) diff --git a/numpy/random/tests/test_smoke.py b/numpy/random/tests/test_smoke.py index c94e1a285..4263335f6 100644 --- a/numpy/random/tests/test_smoke.py +++ b/numpy/random/tests/test_smoke.py @@ -5,10 +5,7 @@ from functools import partial import numpy as np import pytest from numpy.testing import assert_equal, assert_, assert_array_equal -from numpy.random import (Generator, MT19937, DSFMT, ThreeFry, - PCG32, PCG64, Philox, Xoshiro256, Xoshiro512, - entropy) - +from numpy.random import (Generator, MT19937, PCG64, Philox, SFC64, entropy) @pytest.fixture(scope='module', params=(np.bool, np.int8, np.int16, np.int32, np.int64, @@ -99,7 +96,7 @@ class RNG(object): @classmethod def setup_class(cls): # Overridden in test classes. Place holder to silence IDE noise - cls.bit_generator = Xoshiro256 + cls.bit_generator = PCG64 cls.advance = None cls.seed = [12345] cls.rg = Generator(cls.bit_generator(*cls.seed)) @@ -148,7 +145,7 @@ class RNG(object): assert_(comp_state(jumped_state, rejumped_state)) else: bitgen_name = self.rg.bit_generator.__class__.__name__ - if bitgen_name not in ('',): + if bitgen_name not in ('SFC64',): raise AttributeError('no "jumped" in %s' % bitgen_name) pytest.skip('Jump is not supported by {0}'.format(bitgen_name)) @@ -459,56 +456,34 @@ class RNG(object): else: dtype = np.uint64 seed = np.array([1], dtype=dtype) - self.rg.bit_generator.seed(seed) - state1 = self.rg.bit_generator.state - self.rg.bit_generator.seed(1) - state2 = self.rg.bit_generator.state + bg = self.bit_generator(seed) + state1 = bg.state + bg = self.bit_generator(1) + state2 = bg.state assert_(comp_state(state1, state2)) seed = np.arange(4, dtype=dtype) - self.rg.bit_generator.seed(seed) - state1 = self.rg.bit_generator.state - self.rg.bit_generator.seed(seed[0]) - state2 = self.rg.bit_generator.state + bg = self.bit_generator(seed) + state1 = bg.state + bg = self.bit_generator(seed[0]) + state2 = bg.state assert_(not comp_state(state1, state2)) seed = np.arange(1500, dtype=dtype) - self.rg.bit_generator.seed(seed) - state1 = self.rg.bit_generator.state - self.rg.bit_generator.seed(seed[0]) - state2 = self.rg.bit_generator.state + bg = self.bit_generator(seed) + state1 = bg.state + bg = self.bit_generator(seed[0]) + state2 = bg.state assert_(not comp_state(state1, state2)) seed = 2 ** np.mod(np.arange(1500, dtype=dtype), self.seed_vector_bits - 1) + 1 - self.rg.bit_generator.seed(seed) - state1 = self.rg.bit_generator.state - self.rg.bit_generator.seed(seed[0]) - state2 = self.rg.bit_generator.state + bg = self.bit_generator(seed) + state1 = bg.state + bg = self.bit_generator(seed[0]) + state2 = bg.state assert_(not comp_state(state1, state2)) - def test_seed_array_error(self): - if self.seed_vector_bits == 32: - out_of_bounds = 2 ** 32 - else: - out_of_bounds = 2 ** 64 - - seed = -1 - with pytest.raises(ValueError): - self.rg.bit_generator.seed(seed) - - seed = np.array([-1], dtype=np.int32) - with pytest.raises(ValueError): - self.rg.bit_generator.seed(seed) - - seed = np.array([1, 2, 3, -5], dtype=np.int32) - with pytest.raises(ValueError): - self.rg.bit_generator.seed(seed) - - seed = np.array([1, 2, 3, out_of_bounds]) - with pytest.raises(ValueError): - self.rg.bit_generator.seed(seed) - def test_uniform_float(self): rg = Generator(self.bit_generator(12345)) warmup(rg) @@ -777,54 +752,18 @@ class TestPhilox(RNG): cls._extra_setup() -class TestThreeFry(RNG): +class TestSFC64(RNG): @classmethod def setup_class(cls): - cls.bit_generator = ThreeFry - cls.advance = 2 ** 63 + 2 ** 31 + 2 ** 15 + 1 - cls.seed = [12345] - cls.rg = Generator(cls.bit_generator(*cls.seed)) - cls.initial_state = cls.rg.bit_generator.state - cls.seed_vector_bits = 64 - cls._extra_setup() - - -class TestXoshiro256(RNG): - @classmethod - def setup_class(cls): - cls.bit_generator = Xoshiro256 + cls.bit_generator = SFC64 cls.advance = None cls.seed = [12345] cls.rg = Generator(cls.bit_generator(*cls.seed)) cls.initial_state = cls.rg.bit_generator.state - cls.seed_vector_bits = 64 + cls.seed_vector_bits = 192 cls._extra_setup() -class TestXoshiro512(RNG): - @classmethod - def setup_class(cls): - cls.bit_generator = Xoshiro512 - cls.advance = None - cls.seed = [12345] - cls.rg = Generator(cls.bit_generator(*cls.seed)) - cls.initial_state = cls.rg.bit_generator.state - cls.seed_vector_bits = 64 - cls._extra_setup() - - -class TestDSFMT(RNG): - @classmethod - def setup_class(cls): - cls.bit_generator = DSFMT - cls.advance = None - cls.seed = [12345] - cls.rg = Generator(cls.bit_generator(*cls.seed)) - cls.initial_state = cls.rg.bit_generator.state - cls._extra_setup() - cls.seed_vector_bits = 32 - - class TestEntropy(object): def test_entropy(self): e1 = entropy.random_entropy() @@ -843,52 +782,3 @@ class TestEntropy(object): e2 = entropy.random_entropy(source='fallback') assert_((e1 != e2)) - -class TestPCG64(RNG): - @classmethod - def setup_class(cls): - cls.bit_generator = PCG64 - cls.advance = 2 ** 96 + 2 ** 48 + 2 ** 21 + 2 ** 16 + 2 ** 5 + 1 - cls.seed = [2 ** 96 + 2 ** 48 + 2 ** 21 + 2 ** 16 + 2 ** 5 + 1, - 2 ** 21 + 2 ** 16 + 2 ** 5 + 1] - cls.rg = Generator(cls.bit_generator(*cls.seed)) - cls.initial_state = cls.rg.bit_generator.state - cls.seed_vector_bits = None - cls._extra_setup() - - def test_seed_array_error(self): - # GH #82 for error type changes - if self.seed_vector_bits == 32: - out_of_bounds = 2 ** 32 - else: - out_of_bounds = 2 ** 64 - - seed = -1 - with pytest.raises(ValueError): - self.rg.bit_generator.seed(seed) - - error_type = ValueError if self.seed_vector_bits else TypeError - seed = np.array([-1], dtype=np.int32) - with pytest.raises(error_type): - self.rg.bit_generator.seed(seed) - - seed = np.array([1, 2, 3, -5], dtype=np.int32) - with pytest.raises(error_type): - self.rg.bit_generator.seed(seed) - - seed = np.array([1, 2, 3, out_of_bounds]) - with pytest.raises(error_type): - self.rg.bit_generator.seed(seed) - - -class TestPCG32(TestPCG64): - @classmethod - def setup_class(cls): - cls.bit_generator = PCG32 - cls.advance = 2 ** 48 + 2 ** 21 + 2 ** 16 + 2 ** 5 + 1 - cls.seed = [2 ** 48 + 2 ** 21 + 2 ** 16 + 2 ** 5 + 1, - 2 ** 21 + 2 ** 16 + 2 ** 5 + 1] - cls.rg = Generator(cls.bit_generator(*cls.seed)) - cls.initial_state = cls.rg.bit_generator.state - cls.seed_vector_bits = None - cls._extra_setup() diff --git a/numpy/random/threefry.pyx b/numpy/random/threefry.pyx deleted file mode 100644 index eb98bc0af..000000000 --- a/numpy/random/threefry.pyx +++ /dev/null @@ -1,466 +0,0 @@ -from cpython.pycapsule cimport PyCapsule_New - -try: - from threading import Lock -except ImportError: - from dummy_threading import Lock - -import numpy as np - -from .common cimport * -from .distributions cimport bitgen_t -from .entropy import random_entropy, seed_by_array - -__all__ = ['ThreeFry'] - -np.import_array() - -DEF THREEFRY_BUFFER_SIZE=4 - -cdef extern from 'src/threefry/threefry.h': - struct s_r123array4x64: - uint64_t v[4] - - ctypedef s_r123array4x64 r123array4x64 - - ctypedef r123array4x64 threefry4x64_key_t - ctypedef r123array4x64 threefry4x64_ctr_t - - struct s_threefry_state: - threefry4x64_ctr_t *ctr - threefry4x64_key_t *key - int buffer_pos - uint64_t buffer[THREEFRY_BUFFER_SIZE] - int has_uint32 - uint32_t uinteger - - ctypedef s_threefry_state threefry_state - - uint64_t threefry_next64(threefry_state *state) nogil - uint32_t threefry_next32(threefry_state *state) nogil - void threefry_jump(threefry_state *state) - void threefry_advance(uint64_t *step, threefry_state *state) - - -cdef uint64_t threefry_uint64(void* st) nogil: - return threefry_next64(<threefry_state *>st) - -cdef uint32_t threefry_uint32(void *st) nogil: - return threefry_next32(<threefry_state *> st) - -cdef double threefry_double(void* st) nogil: - return uint64_to_double(threefry_next64(<threefry_state *>st)) - -cdef class ThreeFry: - """ - ThreeFry(seed=None, counter=None, key=None) - - Container for the ThreeFry (4x64) pseudo-random number generator. - - Parameters - ---------- - seed : {None, int, array_like}, optional - Random seed initializing the pseudo-random number generator. - Can be an integer in [0, 2**64-1], array of integers in - [0, 2**64-1] or ``None`` (the default). If `seed` is ``None``, - data will be read from ``/dev/urandom`` (or the Windows analog) - if available. If unavailable, a hash of the time and process ID is - used. - counter : {None, int, array_like}, optional - Counter to use in the ThreeFry state. Can be either - a Python int in [0, 2**256) or a 4-element uint64 array. - If not provided, the RNG is initialized at 0. - key : {None, int, array_like}, optional - Key to use in the ThreeFry state. Unlike seed, which is run through - another RNG before use, the value in key is directly set. Can be either - a Python int in [0, 2**256) or a 4-element uint64 array. - key and seed cannot both be used. - - Attributes - ---------- - lock: threading.Lock - Lock instance that is shared so that the same bit git generator can - be used in multiple Generators without corrupting the state. Code that - generates values from a bit generator should hold the bit generator's - lock. - - Notes - ----- - ThreeFry is a 64-bit PRNG that uses a counter-based design based on - weaker (and faster) versions of cryptographic functions [1]_. Instances - using different values of the key produce independent sequences. ``ThreeFry`` - has a period of :math:`2^{256} - 1` and supports arbitrary advancing and - jumping the sequence in increments of :math:`2^{128}`. These features allow - multiple non-overlapping sequences to be generated. - - ``ThreeFry`` provides a capsule containing function pointers that produce - doubles, and unsigned 32 and 64- bit integers. These are not - directly consumable in Python and must be consumed by a ``Generator`` - or similar object that supports low-level access. - - See ``Philox`` for a closely related PRNG. - - **State and Seeding** - - The ``ThreeFry`` state vector consists of a 2 256-bit values encoded as - 4-element uint64 arrays. One is a counter which is incremented by 1 for - every 4 64-bit randoms produced. The second is a key which determined - the sequence produced. Using different keys produces independent - sequences. - - ``ThreeFry`` is seeded using either a single 64-bit unsigned integer - or a vector of 64-bit unsigned integers. In either case, the seed is - used as an input for a second random number generator, - SplitMix64, and the output of this PRNG function is used as the initial state. - Using a single 64-bit value for the seed can only initialize a small range of - the possible initial state values. - - **Parallel Features** - - ``ThreeFry`` can be used in parallel applications by calling the ``jumped`` - method to advances the state as-if :math:`2^{128}` random numbers have - been generated. Alternatively, ``advance`` can be used to advance the - counter for any positive step in [0, 2**256). When using ``jumped``, all - generators should be chained to ensure that the segments come from the same - sequence. - - >>> from numpy.random import Generator, ThreeFry - >>> bit_generator = ThreeFry(1234) - >>> rg = [] - >>> for _ in range(10): - ... rg.append(Generator(bit_generator)) - ... # Chain the BitGenerators - ... bit_generator = bit_generator.jumped() - - Alternatively, ``ThreeFry`` can be used in parallel applications by using - a sequence of distinct keys where each instance uses different key. - - >>> key = 2**196 + 2**132 + 2**65 + 2**33 + 2**17 + 2**9 - >>> rg = [Generator(ThreeFry(key=key+i)) for i in range(10)] - - **Compatibility Guarantee** - - ``ThreeFry`` makes a guarantee that a fixed seed and will always produce - the same random integer stream. - - Examples - -------- - >>> from numpy.random import Generator, ThreeFry - >>> rg = Generator(ThreeFry(1234)) - >>> rg.standard_normal() - 0.123 # random - - References - ---------- - .. [1] John K. Salmon, Mark A. Moraes, Ron O. Dror, and David E. Shaw, - "Parallel Random Numbers: As Easy as 1, 2, 3," Proceedings of - the International Conference for High Performance Computing, - Networking, Storage and Analysis (SC11), New York, NY: ACM, 2011. - """ - cdef threefry_state rng_state - cdef threefry4x64_ctr_t threefry_ctr - cdef threefry4x64_key_t threefry_key - cdef bitgen_t _bitgen - cdef public object capsule - cdef object _ctypes - cdef object _cffi - cdef public object lock - - def __init__(self, seed=None, counter=None, key=None): - self.rng_state.ctr = &self.threefry_ctr - self.rng_state.key = &self.threefry_key - self.seed(seed, counter, key) - self.lock = Lock() - - self._bitgen.state = <void *>&self.rng_state - self._bitgen.next_uint64 = &threefry_uint64 - self._bitgen.next_uint32 = &threefry_uint32 - self._bitgen.next_double = &threefry_double - self._bitgen.next_raw = &threefry_uint64 - - self._ctypes = None - self._cffi = None - - cdef const char *name = 'BitGenerator' - self.capsule = PyCapsule_New(<void *>&self._bitgen, name, NULL) - - # Pickling support: - def __getstate__(self): - return self.state - - def __setstate__(self, state): - self.state = state - - def __reduce__(self): - from ._pickle import __bit_generator_ctor - return __bit_generator_ctor, (self.state['bit_generator'],), self.state - - cdef _reset_state_variables(self): - self.rng_state.has_uint32 = 0 - self.rng_state.uinteger = 0 - self.rng_state.buffer_pos = THREEFRY_BUFFER_SIZE - for i in range(THREEFRY_BUFFER_SIZE): - self.rng_state.buffer[i] = 0 - - def random_raw(self, size=None, output=True): - """ - random_raw(self, size=None) - - Return randoms as generated by the underlying BitGenerator - - Parameters - ---------- - size : int or tuple of ints, optional - Output shape. If the given shape is, e.g., ``(m, n, k)``, then - ``m * n * k`` samples are drawn. Default is None, in which case a - single value is returned. - output : bool, optional - Output values. Used for performance testing since the generated - values are not returned. - - Returns - ------- - out : uint or ndarray - Drawn samples. - - Notes - ----- - This method directly exposes the the raw underlying pseudo-random - number generator. All values are returned as unsigned 64-bit - values irrespective of the number of bits produced by the PRNG. - - See the class docstring for the number of bits returned. - """ - return random_raw(&self._bitgen, self.lock, size, output) - - def _benchmark(self, Py_ssize_t cnt, method=u'uint64'): - return benchmark(&self._bitgen, self.lock, cnt, method) - - def seed(self, seed=None, counter=None, key=None): - """ - seed(seed=None, counter=None, key=None) - - Seed the generator. - - This method is called when ``ThreeFry`` is initialized. It can be - called again to re-seed the generator. For details, see - ``ThreeFry``. - - Parameters - ---------- - seed : int, optional - Seed for ``ThreeFry``. - counter : {None, int array}, optional - Positive integer less than 2**256 containing the counter position - or a 4 element array of uint64 containing the counter - key : {None, int, array}, optional - Positive integer less than 2**256 containing the key - or a 4 element array of uint64 containing the key. key and - seed cannot be simultaneously used. - - Raises - ------ - ValueError - If values are out of range for the PRNG. - - Notes - ----- - The two representation of the counter and key are related through - array[i] = (value // 2**(64*i)) % 2**64. - """ - if seed is not None and key is not None: - raise ValueError('seed and key cannot be both used') - if key is None: - if seed is None: - try: - state = random_entropy(8) - except RuntimeError: - state = random_entropy(8, 'fallback') - state = state.view(np.uint64) - else: - state = seed_by_array(seed, 4) - for i in range(4): - self.rng_state.key.v[i] = state[i] - else: - key = int_to_array(key, 'key', 256, 64) - for i in range(4): - self.rng_state.key.v[i] = key[i] - - counter = 0 if counter is None else counter - counter = int_to_array(counter, 'counter', 256, 64) - for i in range(4): - self.rng_state.ctr.v[i] = counter[i] - - self._reset_state_variables() - - @property - def state(self): - """ - Get or set the PRNG state - - Returns - ------- - state : dict - Dictionary containing the information required to describe the - state of the PRNG - """ - ctr = np.empty(4, dtype=np.uint64) - key = np.empty(4, dtype=np.uint64) - buffer = np.empty(THREEFRY_BUFFER_SIZE, dtype=np.uint64) - for i in range(4): - ctr[i] = self.rng_state.ctr.v[i] - key[i] = self.rng_state.key.v[i] - for i in range(THREEFRY_BUFFER_SIZE): - buffer[i] = self.rng_state.buffer[i] - state = {'counter': ctr, 'key': key} - return {'bit_generator': self.__class__.__name__, - 'state': state, - 'buffer': buffer, - 'buffer_pos': self.rng_state.buffer_pos, - 'has_uint32': self.rng_state.has_uint32, - 'uinteger': self.rng_state.uinteger} - - @state.setter - def state(self, value): - if not isinstance(value, dict): - raise TypeError('state must be a dict') - bitgen = value.get('bit_generator', '') - if bitgen != self.__class__.__name__: - raise ValueError('state must be for a {0} ' - 'PRNG'.format(self.__class__.__name__)) - for i in range(4): - self.rng_state.ctr.v[i] = <uint64_t>value['state']['counter'][i] - self.rng_state.key.v[i] = <uint64_t>value['state']['key'][i] - for i in range(THREEFRY_BUFFER_SIZE): - self.rng_state.buffer[i] = <uint64_t>value['buffer'][i] - self.rng_state.has_uint32 = value['has_uint32'] - self.rng_state.uinteger = value['uinteger'] - self.rng_state.buffer_pos = value['buffer_pos'] - - cdef jump_inplace(self, iter): - """ - Jump state in-place - - Not part of public API - - Parameters - ---------- - iter : integer, positive - Number of times to jump the state of the rng. - """ - self.advance(iter * int(2**128)) - - def jumped(self, jumps=1): - """ - jumped(jumps=1) - - Returns a new bit generator with the state jumped - - The state of the returned big generator is jumped as-if - 2**(128 * jumps) random numbers have been generated. - - Parameters - ---------- - iter : integer, positive - Number of times to jump the state of the bit generator returned - - Returns - ------- - bit_generator : ThreeFry - New instance of generator jumped iter times - """ - cdef ThreeFry bit_generator - - bit_generator = self.__class__() - bit_generator.state = self.state - bit_generator.jump_inplace(jumps) - - return bit_generator - - def advance(self, delta): - """ - advance(delta) - - Advance the underlying RNG as-if delta draws have occurred. - - Parameters - ---------- - delta : integer, positive - Number of draws to advance the RNG. Must be less than the - size state variable in the underlying RNG. - - Returns - ------- - self : ThreeFry - RNG advanced delta steps - - Notes - ----- - Advancing a RNG updates the underlying RNG state as-if a given - number of calls to the underlying RNG have been made. In general - there is not a one-to-one relationship between the number output - random values from a particular distribution and the number of - draws from the core RNG. This occurs for two reasons: - - * The random values are simulated using a rejection-based method - and so, on average, more than one value from the underlying - RNG is required to generate an single draw. - * The number of bits required to generate a simulated value - differs from the number of bits generated by the underlying - RNG. For example, two 16-bit integer values can be simulated - from a single draw of a 32-bit RNG. - - Advancing the RNG state resets any pre-computed random numbers. - This is required to ensure exact reproducibility. - """ - delta = wrap_int(delta, 256) - - cdef np.ndarray delta_a - delta_a = int_to_array(delta, 'step', 256, 64) - threefry_advance(<uint64_t *>delta_a.data, &self.rng_state) - self._reset_state_variables() - return self - - @property - def ctypes(self): - """ - ctypes interface - - Returns - ------- - interface : namedtuple - Named tuple containing ctypes wrapper - - * state_address - Memory address of the state struct - * state - pointer to the state struct - * next_uint64 - function pointer to produce 64 bit integers - * next_uint32 - function pointer to produce 32 bit integers - * next_double - function pointer to produce doubles - * bitgen - pointer to the BitGenerator struct - """ - if self._ctypes is None: - self._ctypes = prepare_ctypes(&self._bitgen) - - return self._ctypes - - @property - def cffi(self): - """ - CFFI interface - - Returns - ------- - interface : namedtuple - Named tuple containing CFFI wrapper - - * state_address - Memory address of the state struct - * state - pointer to the state struct - * next_uint64 - function pointer to produce 64 bit integers - * next_uint32 - function pointer to produce 32 bit integers - * next_double - function pointer to produce doubles - * bitgen - pointer to the BitGenerator struct - """ - if self._cffi is not None: - return self._cffi - self._cffi = prepare_cffi(&self._bitgen) - return self._cffi diff --git a/numpy/random/xoshiro256.pyx b/numpy/random/xoshiro256.pyx deleted file mode 100644 index f03fc1cf3..000000000 --- a/numpy/random/xoshiro256.pyx +++ /dev/null @@ -1,354 +0,0 @@ -try: - from threading import Lock -except ImportError: - from dummy_threading import Lock - -from cpython.pycapsule cimport PyCapsule_New - -import numpy as np -cimport numpy as np - -from .common cimport * -from .distributions cimport bitgen_t -from .entropy import random_entropy, seed_by_array - -__all__ = ['Xoshiro256'] - -np.import_array() - -cdef extern from "src/xoshiro256/xoshiro256.h": - - struct s_xoshiro256_state: - uint64_t s[4] - int has_uint32 - uint32_t uinteger - - ctypedef s_xoshiro256_state xoshiro256_state - - uint64_t xoshiro256_next64(xoshiro256_state *state) nogil - uint32_t xoshiro256_next32(xoshiro256_state *state) nogil - void xoshiro256_jump(xoshiro256_state *state) - -cdef uint64_t xoshiro256_uint64(void* st) nogil: - return xoshiro256_next64(<xoshiro256_state *>st) - -cdef uint32_t xoshiro256_uint32(void *st) nogil: - return xoshiro256_next32(<xoshiro256_state *> st) - -cdef double xoshiro256_double(void* st) nogil: - return uint64_to_double(xoshiro256_next64(<xoshiro256_state *>st)) - -cdef class Xoshiro256: - """ - Xoshiro256(seed=None) - - Container for the xoshiro256** pseudo-random number generator. - - Parameters - ---------- - seed : {None, int, array_like}, optional - Random seed initializing the pseudo-random number generator. - Can be an integer in [0, 2**64-1], array of integers in [0, 2**64-1] - or ``None`` (the default). If `seed` is ``None``, then data is read - from ``/dev/urandom`` (or the Windows analog) if available. If - unavailable, a hash of the time and process ID is used. - - Attributes - ---------- - lock: threading.Lock - Lock instance that is shared so that the same bit git generator can - be used in multiple Generators without corrupting the state. Code that - generates values from a bit generator should hold the bit generator's - lock. - - Notes - ----- - xoshiro256** is written by David Blackman and Sebastiano Vigna. - It is a 64-bit PRNG that uses a carefully constructed linear transformation. - This produces a fast PRNG with excellent statistical quality - [1]_. xoshiro256** has a period of :math:`2^{256} - 1` - and supports jumping the sequence in increments of :math:`2^{128}`, - which allows multiple non-overlapping subsequences to be generated. - - ``Xoshiro256`` provides a capsule containing function pointers that - produce doubles, and unsigned 32 and 64- bit integers. These are not - directly consumable in Python and must be consumed by a ``Generator`` - or similar object that supports low-level access. - - See ``Xoshiro512`` for a related PRNG with a different period - (:math:`2^{1024} - 1`) and jumped size (:math:`2^{512} - 1`). - - **State and Seeding** - - The ``Xoshiro256`` state vector consists of a 4-element array - of 64-bit unsigned integers. - - ``Xoshiro256`` is seeded using either a single 64-bit unsigned - integer or a vector of 64-bit unsigned integers. In either case, the seed - is used as an input for another simple random number generator, SplitMix64, - and the output of this PRNG function is used as the initial state. Using - a single 64-bit value for the seed can only initialize a small range of - the possible initial state values. - - **Parallel Features** - - ``Xoshiro256`` can be used in parallel applications by calling the - method ``jumped`` which advances the state as-if :math:`2^{128}` random - numbers have been generated. This allows the original sequence to be split - so that distinct segments can be used in each worker process. All - generators should be chained to ensure that the segments come from the same - sequence. - - >>> from numpy.random import Generator, Xoshiro256 - >>> bit_generator = Xoshiro256(1234) - >>> rg = [] - >>> for _ in range(10): - ... rg.append(Generator(bit_generator)) - ... bit_generator = bit_generator.jumped() - - **Compatibility Guarantee** - - ``Xoshiro256`` makes a guarantee that a fixed seed will always - produce the same random integer stream. - - Examples - -------- - >>> from numpy.random import Generator, Xoshiro256 - >>> rg = Generator(Xoshiro256(1234)) - >>> rg.standard_normal() - 0.123 # random - - References - ---------- - .. [1] "xoroshiro+ / xorshift* / xorshift+ generators and the PRNG shootout", - http://xorshift.di.unimi.it/ - """ - cdef xoshiro256_state rng_state - cdef bitgen_t _bitgen - cdef public object capsule - cdef object _ctypes - cdef object _cffi - cdef public object lock - - def __init__(self, seed=None): - self.seed(seed) - self.lock = Lock() - - self._bitgen.state = <void *>&self.rng_state - self._bitgen.next_uint64 = &xoshiro256_uint64 - self._bitgen.next_uint32 = &xoshiro256_uint32 - self._bitgen.next_double = &xoshiro256_double - self._bitgen.next_raw = &xoshiro256_uint64 - - self._ctypes = None - self._cffi = None - - cdef const char *name = "BitGenerator" - self.capsule = PyCapsule_New(<void *>&self._bitgen, name, NULL) - - # Pickling support: - def __getstate__(self): - return self.state - - def __setstate__(self, state): - self.state = state - - def __reduce__(self): - from ._pickle import __bit_generator_ctor - return __bit_generator_ctor, (self.state['bit_generator'],), self.state - - cdef _reset_state_variables(self): - self.rng_state.has_uint32 = 0 - self.rng_state.uinteger = 0 - - def random_raw(self, size=None, output=True): - """ - random_raw(self, size=None) - - Return randoms as generated by the underlying BitGenerator - - Parameters - ---------- - size : int or tuple of ints, optional - Output shape. If the given shape is, e.g., ``(m, n, k)``, then - ``m * n * k`` samples are drawn. Default is None, in which case a - single value is returned. - output : bool, optional - Output values. Used for performance testing since the generated - values are not returned. - - Returns - ------- - out : uint or ndarray - Drawn samples. - - Notes - ----- - This method directly exposes the the raw underlying pseudo-random - number generator. All values are returned as unsigned 64-bit - values irrespective of the number of bits produced by the PRNG. - - See the class docstring for the number of bits returned. - """ - return random_raw(&self._bitgen, self.lock, size, output) - - def _benchmark(self, Py_ssize_t cnt, method=u'uint64'): - return benchmark(&self._bitgen, self.lock, cnt, method) - - def seed(self, seed=None): - """ - seed(seed=None) - - Seed the generator. - - This method is called at initialization. It can be called again to - re-seed the generator. - - Parameters - ---------- - seed : {int, ndarray}, optional - Seed for PRNG. Can be a single 64 bit unsigned integer or an array - of 64 bit unsigned integers. - - Raises - ------ - ValueError - If seed values are out of range for the PRNG. - """ - ub = 2 ** 64 - if seed is None: - try: - state = random_entropy(8) - except RuntimeError: - state = random_entropy(8, 'fallback') - state = state.view(np.uint64) - else: - state = seed_by_array(seed, 4) - self.rng_state.s[0] = <uint64_t>int(state[0]) - self.rng_state.s[1] = <uint64_t>int(state[1]) - self.rng_state.s[2] = <uint64_t>int(state[2]) - self.rng_state.s[3] = <uint64_t>int(state[3]) - self._reset_state_variables() - - cdef jump_inplace(self, np.npy_intp iter): - """ - Jump state in-place - - Not part of public API - - Parameters - ---------- - iter : integer, positive - Number of times to jump the state of the rng. - """ - cdef np.npy_intp i - for i in range(iter): - xoshiro256_jump(&self.rng_state) - self._reset_state_variables() - - def jumped(self, np.npy_intp jumps=1): - """ - jumped(jumps=1) - - Returns a new bit generator with the state jumped - - The state of the returned big generator is jumped as-if - 2**(128 * jumps) random numbers have been generated. - - Parameters - ---------- - jumps : integer, positive - Number of times to jump the state of the bit generator returned - - Returns - ------- - bit_generator : Xoshiro256 - New instance of generator jumped iter times - """ - cdef Xoshiro256 bit_generator - - bit_generator = self.__class__() - bit_generator.state = self.state - bit_generator.jump_inplace(jumps) - - return bit_generator - - @property - def state(self): - """ - Get or set the PRNG state - - Returns - ------- - state : dict - Dictionary containing the information required to describe the - state of the PRNG - """ - state = np.empty(4, dtype=np.uint64) - state[0] = self.rng_state.s[0] - state[1] = self.rng_state.s[1] - state[2] = self.rng_state.s[2] - state[3] = self.rng_state.s[3] - return {'bit_generator': self.__class__.__name__, - 's': state, - 'has_uint32': self.rng_state.has_uint32, - 'uinteger': self.rng_state.uinteger} - - @state.setter - def state(self, value): - if not isinstance(value, dict): - raise TypeError('state must be a dict') - bitgen = value.get('bit_generator', '') - if bitgen != self.__class__.__name__: - raise ValueError('state must be for a {0} ' - 'PRNG'.format(self.__class__.__name__)) - self.rng_state.s[0] = <uint64_t>value['s'][0] - self.rng_state.s[1] = <uint64_t>value['s'][1] - self.rng_state.s[2] = <uint64_t>value['s'][2] - self.rng_state.s[3] = <uint64_t>value['s'][3] - self.rng_state.has_uint32 = value['has_uint32'] - self.rng_state.uinteger = value['uinteger'] - - @property - def ctypes(self): - """ - ctypes interface - - Returns - ------- - interface : namedtuple - Named tuple containing ctypes wrapper - - * state_address - Memory address of the state struct - * state - pointer to the state struct - * next_uint64 - function pointer to produce 64 bit integers - * next_uint32 - function pointer to produce 32 bit integers - * next_double - function pointer to produce doubles - * bitgen - pointer to the bit generator struct - """ - if self._ctypes is None: - self._ctypes = prepare_ctypes(&self._bitgen) - - return self._ctypes - - @property - def cffi(self): - """ - CFFI interface - - Returns - ------- - interface : namedtuple - Named tuple containing CFFI wrapper - - * state_address - Memory address of the state struct - * state - pointer to the state struct - * next_uint64 - function pointer to produce 64 bit integers - * next_uint32 - function pointer to produce 32 bit integers - * next_double - function pointer to produce doubles - * bitgen - pointer to the bit generator struct - """ - if self._cffi is not None: - return self._cffi - self._cffi = prepare_cffi(&self._bitgen) - return self._cffi diff --git a/numpy/random/xoshiro512.pyx b/numpy/random/xoshiro512.pyx deleted file mode 100644 index d6f348189..000000000 --- a/numpy/random/xoshiro512.pyx +++ /dev/null @@ -1,349 +0,0 @@ -try: - from threading import Lock -except ImportError: - from dummy_threading import Lock - -from cpython.pycapsule cimport PyCapsule_New - -import numpy as np -cimport numpy as np - -from .common cimport * -from .distributions cimport bitgen_t -from .entropy import random_entropy, seed_by_array - -__all__ = ['Xoshiro512'] - -np.import_array() - -cdef extern from "src/xoshiro512/xoshiro512.h": - - struct s_xoshiro512_state: - uint64_t s[8] - int has_uint32 - uint32_t uinteger - - ctypedef s_xoshiro512_state xoshiro512_state - - uint64_t xoshiro512_next64(xoshiro512_state *state) nogil - uint32_t xoshiro512_next32(xoshiro512_state *state) nogil - void xoshiro512_jump(xoshiro512_state *state) - -cdef uint64_t xoshiro512_uint64(void* st) nogil: - return xoshiro512_next64(<xoshiro512_state *>st) - -cdef uint32_t xoshiro512_uint32(void *st) nogil: - return xoshiro512_next32(<xoshiro512_state *> st) - -cdef double xoshiro512_double(void* st) nogil: - return uint64_to_double(xoshiro512_next64(<xoshiro512_state *>st)) - -cdef class Xoshiro512: - """ - Xoshiro512(seed=None) - - Container for the xoshiro512** pseudo-random number generator. - - Parameters - ---------- - seed : {None, int, array_like}, optional - Random seed initializing the pseudo-random number generator. - Can be an integer in [0, 2**64-1], array of integers in [0, 2**64-1] - or ``None`` (the default). If `seed` is ``None``, then data is read - from ``/dev/urandom`` (or the Windows analog) if available. If - unavailable, a hash of the time and process ID is used. - - Attributes - ---------- - lock: threading.Lock - Lock instance that is shared so that the same bit git generator can - be used in multiple Generators without corrupting the state. Code that - generates values from a bit generator should hold the bit generator's - lock. - - Notes - ----- - xoshiro512** is written by David Blackman and Sebastiano Vigna. - It is a 64-bit PRNG that uses a carefully constructed linear transformation. - This produces a fast PRNG with excellent statistical quality - [1]_. xoshiro512** has a period of :math:`2^{512} - 1` - and supports jumping the sequence in increments of :math:`2^{256}`, - which allows multiple non-overlapping subsequences to be generated. - - ``Xoshiro512`` provides a capsule containing function pointers that - produce doubles, and unsigned 32 and 64- bit integers. These are not - directly consumable in Python and must be consumed by a ``Generator`` - or similar object that supports low-level access. - - See ``Xorshift256`` for a related PRNG with a different period - (:math:`2^{256} - 1`) and jumped size (:math:`2^{128} - 1`). - - **State and Seeding** - - The ``Xoshiro512`` state vector consists of a 4 element array - of 64-bit unsigned integers. - - ``Xoshiro512`` is seeded using either a single 64-bit unsigned - integer or a vector of 64-bit unsigned integers. In either case, the seed - is used as an input for another simple random number generator, SplitMix64, - and the output of this PRNG function is used as the initial state. Using - a single 64-bit value for the seed can only initialize a small range of - the possible initial state values. - - **Parallel Features** - - ``Xoshiro512`` can be used in parallel applications by calling the - method ``jumped`` which advances the state as-if :math:`2^{128}` random - numbers have been generated. This allows the original sequence to be split - so that distinct segments can be used in each worker process. All - generators should be chained to ensure that the segments come from the same - sequence. - - >>> from numpy.random import Generator, Xoshiro512 - >>> bit_generator = Xoshiro512(1234) - >>> rg = [] - >>> for _ in range(10): - ... rg.append(Generator(bit_generator)) - ... # Chain the BitGenerators - ... bit_generator = bit_generator.jumped() - - **Compatibility Guarantee** - - ``Xoshiro512`` makes a guarantee that a fixed seed will always - produce the same random integer stream. - - Examples - -------- - >>> from numpy.random import Generator, Xoshiro512 - >>> rg = Generator(Xoshiro512(1234)) - >>> rg.standard_normal() - 0.123 # random - - References - ---------- - .. [1] "xoroshiro+ / xorshift* / xorshift+ generators and the PRNG shootout", - http://xorshift.di.unimi.it/ - """ - cdef xoshiro512_state rng_state - cdef bitgen_t _bitgen - cdef public object capsule - cdef object _ctypes - cdef object _cffi - cdef public object lock - - def __init__(self, seed=None): - self.seed(seed) - self.lock = Lock() - - self._bitgen.state = <void *>&self.rng_state - self._bitgen.next_uint64 = &xoshiro512_uint64 - self._bitgen.next_uint32 = &xoshiro512_uint32 - self._bitgen.next_double = &xoshiro512_double - self._bitgen.next_raw = &xoshiro512_uint64 - - self._ctypes = None - self._cffi = None - - cdef const char *name = "BitGenerator" - self.capsule = PyCapsule_New(<void *>&self._bitgen, name, NULL) - - # Pickling support: - def __getstate__(self): - return self.state - - def __setstate__(self, state): - self.state = state - - def __reduce__(self): - from ._pickle import __bit_generator_ctor - return __bit_generator_ctor, (self.state['bit_generator'],), self.state - - cdef _reset_state_variables(self): - self.rng_state.has_uint32 = 0 - self.rng_state.uinteger = 0 - - def random_raw(self, size=None, output=True): - """ - random_raw(self, size=None) - - Return randoms as generated by the underlying BitGenerator - - Parameters - ---------- - size : int or tuple of ints, optional - Output shape. If the given shape is, e.g., ``(m, n, k)``, then - ``m * n * k`` samples are drawn. Default is None, in which case a - single value is returned. - output : bool, optional - Output values. Used for performance testing since the generated - values are not returned. - - Returns - ------- - out : uint or ndarray - Drawn samples. - - Notes - ----- - This method directly exposes the the raw underlying pseudo-random - number generator. All values are returned as unsigned 64-bit - values irrespective of the number of bits produced by the PRNG. - - See the class docstring for the number of bits returned. - """ - return random_raw(&self._bitgen, self.lock, size, output) - - def _benchmark(self, Py_ssize_t cnt, method=u'uint64'): - return benchmark(&self._bitgen, self.lock, cnt, method) - - def seed(self, seed=None): - """ - seed(seed=None) - - Seed the generator. - - This method is called at initialization. It can be called again to - re-seed the generator. - - Parameters - ---------- - seed : {int, ndarray}, optional - Seed for PRNG. Can be a single 64 bit unsigned integer or an array - of 64 bit unsigned integers. - - Raises - ------ - ValueError - If seed values are out of range for the PRNG. - """ - ub = 2 ** 64 - if seed is None: - try: - state = random_entropy(16) - except RuntimeError: - state = random_entropy(16, 'fallback') - state = state.view(np.uint64) - else: - state = seed_by_array(seed, 8) - for i in range(8): - self.rng_state.s[i] = <uint64_t>int(state[i]) - self._reset_state_variables() - - cdef jump_inplace(self, np.npy_intp iter): - """ - Jump state in-place - - Not part of public API - - Parameters - ---------- - iter : integer, positive - Number of times to jump the state of the rng. - """ - cdef np.npy_intp i - for i in range(iter): - xoshiro512_jump(&self.rng_state) - self._reset_state_variables() - - def jumped(self, np.npy_intp jumps=1): - """ - jumped(jumps=1) - - Returns a new bit generator with the state jumped - - The state of the returned big generator is jumped as-if - 2**(256 * jumps) random numbers have been generated. - - Parameters - ---------- - jumps : integer, positive - Number of times to jump the state of the bit generator returned - - Returns - ------- - bit_generator : Xoshiro512 - New instance of generator jumped iter times - """ - cdef Xoshiro512 bit_generator - - bit_generator = self.__class__() - bit_generator.state = self.state - bit_generator.jump_inplace(jumps) - - return bit_generator - - @property - def state(self): - """ - Get or set the PRNG state - - Returns - ------- - state : dict - Dictionary containing the information required to describe the - state of the PRNG - """ - state = np.empty(8, dtype=np.uint64) - for i in range(8): - state[i] = self.rng_state.s[i] - return {'bit_generator': self.__class__.__name__, - 's': state, - 'has_uint32': self.rng_state.has_uint32, - 'uinteger': self.rng_state.uinteger} - - @state.setter - def state(self, value): - if not isinstance(value, dict): - raise TypeError('state must be a dict') - bitgen = value.get('bit_generator', '') - if bitgen != self.__class__.__name__: - raise ValueError('state must be for a {0} ' - 'PRNG'.format(self.__class__.__name__)) - for i in range(8): - self.rng_state.s[i] = <uint64_t>value['s'][i] - self.rng_state.has_uint32 = value['has_uint32'] - self.rng_state.uinteger = value['uinteger'] - - @property - def ctypes(self): - """ - ctypes interface - - Returns - ------- - interface : namedtuple - Named tuple containing ctypes wrapper - - * state_address - Memory address of the state struct - * state - pointer to the state struct - * next_uint64 - function pointer to produce 64 bit integers - * next_uint32 - function pointer to produce 32 bit integers - * next_double - function pointer to produce doubles - * bitgen - pointer to the bit generator struct - """ - if self._ctypes is None: - self._ctypes = prepare_ctypes(&self._bitgen) - - return self._ctypes - - @property - def cffi(self): - """ - CFFI interface - - Returns - ------- - interface : namedtuple - Named tuple containing CFFI wrapper - - * state_address - Memory address of the state struct - * state - pointer to the state struct - * next_uint64 - function pointer to produce 64 bit integers - * next_uint32 - function pointer to produce 32 bit integers - * next_double - function pointer to produce doubles - * bitgen - pointer to the bit generator struct - """ - if self._cffi is not None: - return self._cffi - self._cffi = prepare_cffi(&self._bitgen) - return self._cffi diff --git a/tools/refguide_check.py b/tools/refguide_check.py index 74dbad78b..c20807267 100644 --- a/tools/refguide_check.py +++ b/tools/refguide_check.py @@ -505,7 +505,8 @@ class Checker(doctest.OutputChecker): obj_pattern = re.compile('at 0x[0-9a-fA-F]+>') int_pattern = re.compile('^[0-9]+L?$') vanilla = doctest.OutputChecker() - rndm_markers = {'# random', '# Random', '#random', '#Random', "# may vary"} + rndm_markers = {'# random', '# Random', '#random', '#Random', "# may vary", + "# uninitialized", "#uninitialized"} stopwords = {'plt.', '.hist', '.show', '.ylim', '.subplot(', 'set_title', 'imshow', 'plt.show', '.axis(', '.plot(', '.bar(', '.title', '.ylabel', '.xlabel', 'set_ylim', 'set_xlim', @@ -13,7 +13,7 @@ # - Use pip to install the numpy sdist into the virtualenv # - Run the numpy tests # To run against a specific subset of Python versions, use: -# tox -e py27 +# tox -e py37 # Extra arguments will be passed to test-installed-numpy.py. To run # the full testsuite: @@ -26,21 +26,17 @@ [tox] envlist = - py27,py34,py35,py36, - py27-not-relaxed-strides,py34-not-relaxed-strides + py35,py36,py37, + py37-not-relaxed-strides [testenv] deps= - nose + pytest changedir={envdir} commands={envpython} {toxinidir}/tools/test-installed-numpy.py --mode=full {posargs:} -[testenv:py27-not-relaxed-strides] -basepython=python2.7 -env=NPY_RELAXED_STRIDES_CHECKING=0 - -[testenv:py34-not-relaxed-strides] -basepython=python3.4 +[testenv:py37-not-relaxed-strides] +basepython=python3.7 env=NPY_RELAXED_STRIDES_CHECKING=0 # Not run by default. Set up the way you want then use 'tox -e debug' |