Ticket #38438: patch-numpy-upgrade-1.7.0.diff

File patch-numpy-upgrade-1.7.0.diff, 777.1 KB (added by seanfarley (Sean Farley), 11 years ago)

upgrade numpy to 1.7.0

  • dports/python/py-numpy/Portfile

    # HG changeset patch
    # User Sean Farley <sean.michael.farley@gmail.com>
    # Date 1364092472 18000
    #      Sat Mar 23 21:34:32 2013 -0500
    # Node ID 75efd583378d2b69379db8e07a7efd01008dd3fc
    # Parent  58f2aa0d00ae6eb03f33a59e8dde04eef1b8570b
    py-numpy: update to 1.7.0
    
    diff --git a/dports/python/py-numpy/Portfile b/dports/python/py-numpy/Portfile
    a b  
    33
    44PortSystem              1.0
    55PortGroup               python 1.0
    66PortGroup               github 1.0
    77
    8 github.setup            numpy numpy 1.6.2 v
     8github.setup            numpy numpy 1.7.0 v
    99name                    py-numpy
    10 revision                1
     10revision                0
    1111dist_subdir             ${name}/${version}_1
    1212
    1313categories-append       math
    1414license                 BSD
    1515platforms               darwin
    1616maintainers             dh openmaintainer
    1717description             The core utilities for the scientific library scipy for Python
    1818long_description        ${description}
    1919
    20 checksums               rmd160  9643c04a2e8fbb99cdb047281eedbbfb99423553 \
    21                         sha256  0992d326147d0ed83bd059519897e7a8ee52dea5ee66bbe04c0ea1c502cd8618
     20checksums               rmd160  f64215a07b35b7791a20ca236cdce45d4747473e \
     21                        sha256  757b91f89e2b9946a325ea4ae6955a7629c65a68e10ed751b98a50e21c13ff5e
    2222
    2323python.versions         24 25 26 27 31 32 33
    2424
    2525if {$subport != $name} {
    2626    patchfiles              patch-f2py_setup.py.diff \
    2727                            patch-fcompiler_g95.diff
    2828
    29     if {${python.version} == 33} {
    30         patchfiles-append   patch-python33-unicode.diff \
    31                             patch-python33-mtrand.diff \
    32                             patch-python33-shape.diff \
    33                             patch-python33-methods.diff
    34     }
    35 
    3629    depends_lib-append      port:fftw-3 \
    3730                            port:py${python.version}-nose
    3831
    3932    if {[variant_isset universal]} {
    4033        build.env-append        ARCHFLAGS="${configure.universal_ldflags}"
     
    184177
    185178    livecheck.type        none
    186179} else {
    187180    livecheck.regex       archive/[join ${github.tag_prefix} ""](\[\\d+(?:\\.\\d+)*"\]+)${extract.suffix}"
    188181}
    189 
  • dports/python/py-numpy/files/patch-f2py_setup.py.diff

    diff --git a/dports/python/py-numpy/files/patch-f2py_setup.py.diff b/dports/python/py-numpy/files/patch-f2py_setup.py.diff
    a b  
    1 --- numpy/f2py/setup.py 2011-02-27 23:40:29.000000000 -0600
    2 +++ numpy/f2py/setup.py 2011-05-15 09:18:40.000000000 -0500
     1--- numpy/f2py/setup.py.orig    2013-02-10 00:51:36.000000000 +0400
     2+++ numpy/f2py/setup.py 2013-03-19 15:27:15.000000000 +0400
     3@@ -41,7 +41,7 @@
     4     config.make_svn_version_py()
     5 
     6     def generate_f2py_py(build_dir):
     7-        f2py_exe = 'f2py'+os.path.basename(sys.executable)[6:]
     8+        f2py_exe = 'f2py'
     9         if f2py_exe[-4:]=='.exe':
     10             f2py_exe = f2py_exe[:-4] + '.py'
     11         if 'bdist_wininst' in sys.argv and f2py_exe[-3:] != '.py':
    312@@ -51,7 +51,7 @@
    413             log.info('Creating %s', target)
    514             f = open(target,'w')
    615             f.write('''\
    716-#!/usr/bin/env %s
  • dports/python/py-numpy/files/patch-fcompiler_g95.diff

    diff --git a/dports/python/py-numpy/files/patch-fcompiler_g95.diff b/dports/python/py-numpy/files/patch-fcompiler_g95.diff
    a b  
    1 --- numpy/distutils/fcompiler/__init__.py       2011-03-15 00:22:25.000000000 -0500
    2 +++ numpy/distutils/fcompiler/__init__.py       2011-05-15 09:21:14.000000000 -0500
    3 @@ -698,7 +698,7 @@
     1--- numpy/distutils/fcompiler/__init__.py.orig  2013-03-19 13:35:03.000000000 +0400
     2+++ numpy/distutils/fcompiler/__init__.py       2013-03-19 13:35:27.000000000 +0400
     3@@ -708,7 +708,7 @@
    44     ('cygwin.*', ('gnu','intelv','absoft','compaqv','intelev','gnu95','g95')),
    5      ('linux.*', ('gnu','intel','lahey','pg','absoft','nag','vast','compaq',
    6                  'intele','intelem','gnu95','g95','pathf95')),
    7 -    ('darwin.*', ('nag', 'absoft', 'ibm', 'intel', 'gnu', 'gnu95', 'g95', 'pg')),
    8 +    ('darwin.*', ('nag', 'absoft', 'ibm', 'intel', 'gnu', 'gnu95', 'pg')),
     5     ('linux.*', ('gnu95','intel','lahey','pg','absoft','nag','vast','compaq',
     6                 'intele','intelem','gnu','g95','pathf95')),
     7-    ('darwin.*', ('gnu95', 'nag', 'absoft', 'ibm', 'intel', 'gnu', 'g95', 'pg')),
     8+    ('darwin.*', ('gnu95', 'nag', 'absoft', 'ibm', 'intel', 'gnu', 'pg')),
    99     ('sunos.*', ('sun','gnu','gnu95','g95')),
    1010     ('irix.*', ('mips','gnu','gnu95',)),
    1111     ('aix.*', ('ibm','gnu','gnu95',)),
  • deleted file dports/python/py-numpy/files/patch-python33-methods.diff

    diff --git a/dports/python/py-numpy/files/patch-python33-methods.diff b/dports/python/py-numpy/files/patch-python33-methods.diff
    deleted file mode 100644
    + -  
    1 --- numpy/core/src/multiarray/methods.old.c     2012-12-06 16:49:23.000000000 -0600
    2 +++ numpy/core/src/multiarray/methods.c 2012-12-06 16:48:07.000000000 -0600
    3 @@ -1476,7 +1476,7 @@
    4      if (!PyDataType_FLAGCHK(typecode, NPY_LIST_PICKLE)) {
    5          int swap=!PyArray_ISNOTSWAPPED(self);
    6          self->data = datastr;
    7 -        if (!_IsAligned(self) || swap) {
    8 +        if (!_IsAligned(self) || swap || (len <= 1000)) {
    9              intp num = PyArray_NBYTES(self);
    10              self->data = PyDataMem_NEW(num);
    11              if (self->data == NULL) {
  • deleted file dports/python/py-numpy/files/patch-python33-mtrand.diff

    diff --git a/dports/python/py-numpy/files/patch-python33-mtrand.diff b/dports/python/py-numpy/files/patch-python33-mtrand.diff
    deleted file mode 100644
    + -  
    1 --- numpy/random/mtrand/mtrand.old.c    2012-05-19 08:41:41.000000000 -0500
    2 +++ numpy/random/mtrand/mtrand.c        2012-12-06 15:02:43.000000000 -0600
    3 @@ -1,16 +1,16 @@
    4 -/* Generated by Cython 0.15.1 on Tue May  1 15:44:50 2012 */
    5 +/* Generated by Cython 0.17.1 on Thu Dec  6 15:02:42 2012 */
    6  
    7  #define PY_SSIZE_T_CLEAN
    8  #include "Python.h"
    9  #ifndef Py_PYTHON_H
    10      #error Python headers needed to compile C extensions, please install development version of Python.
    11 +#elif PY_VERSION_HEX < 0x02040000
    12 +    #error Cython requires Python 2.4+.
    13  #else
    14 -
    15  #include <stddef.h> /* For offsetof */
    16  #ifndef offsetof
    17  #define offsetof(type, member) ( (size_t) & ((type*)0) -> member )
    18  #endif
    19 -
    20  #if !defined(WIN32) && !defined(MS_WINDOWS)
    21    #ifndef __stdcall
    22      #define __stdcall
    23 @@ -22,36 +22,44 @@
    24      #define __fastcall
    25    #endif
    26  #endif
    27 -
    28  #ifndef DL_IMPORT
    29    #define DL_IMPORT(t) t
    30  #endif
    31  #ifndef DL_EXPORT
    32    #define DL_EXPORT(t) t
    33  #endif
    34 -
    35  #ifndef PY_LONG_LONG
    36    #define PY_LONG_LONG LONG_LONG
    37  #endif
    38 -
    39 -#if PY_VERSION_HEX < 0x02040000
    40 -  #define METH_COEXIST 0
    41 -  #define PyDict_CheckExact(op) (Py_TYPE(op) == &PyDict_Type)
    42 -  #define PyDict_Contains(d,o)   PySequence_Contains(d,o)
    43 +#ifndef Py_HUGE_VAL
    44 +  #define Py_HUGE_VAL HUGE_VAL
    45 +#endif
    46 +#ifdef PYPY_VERSION
    47 +#define CYTHON_COMPILING_IN_PYPY 1
    48 +#define CYTHON_COMPILING_IN_CPYTHON 0
    49 +#else
    50 +#define CYTHON_COMPILING_IN_PYPY 0
    51 +#define CYTHON_COMPILING_IN_CPYTHON 1
    52  #endif
    53 -
    54  #if PY_VERSION_HEX < 0x02050000
    55    typedef int Py_ssize_t;
    56    #define PY_SSIZE_T_MAX INT_MAX
    57    #define PY_SSIZE_T_MIN INT_MIN
    58    #define PY_FORMAT_SIZE_T ""
    59 +  #define CYTHON_FORMAT_SSIZE_T ""
    60    #define PyInt_FromSsize_t(z) PyInt_FromLong(z)
    61    #define PyInt_AsSsize_t(o)   __Pyx_PyInt_AsInt(o)
    62 -  #define PyNumber_Index(o)    PyNumber_Int(o)
    63 -  #define PyIndex_Check(o)     PyNumber_Check(o)
    64 +  #define PyNumber_Index(o)    ((PyNumber_Check(o) && !PyFloat_Check(o)) ? PyNumber_Int(o) : \
    65 +                                (PyErr_Format(PyExc_TypeError, \
    66 +                                              "expected index value, got %.200s", Py_TYPE(o)->tp_name), \
    67 +                                 (PyObject*)0))
    68 +  #define PyIndex_Check(o)     (PyNumber_Check(o) && !PyFloat_Check(o) && !PyComplex_Check(o))
    69    #define PyErr_WarnEx(category, message, stacklevel) PyErr_Warn(category, message)
    70 +  #define __PYX_BUILD_PY_SSIZE_T "i"
    71 +#else
    72 +  #define __PYX_BUILD_PY_SSIZE_T "n"
    73 +  #define CYTHON_FORMAT_SSIZE_T "z"
    74  #endif
    75 -
    76  #if PY_VERSION_HEX < 0x02060000
    77    #define Py_REFCNT(ob) (((PyObject*)(ob))->ob_refcnt)
    78    #define Py_TYPE(ob)   (((PyObject*)(ob))->ob_type)
    79 @@ -59,7 +67,6 @@
    80    #define PyVarObject_HEAD_INIT(type, size) \
    81            PyObject_HEAD_INIT(type) size,
    82    #define PyType_Modified(t)
    83 -
    84    typedef struct {
    85       void *buf;
    86       PyObject *obj;
    87 @@ -73,7 +80,6 @@
    88       Py_ssize_t *suboffsets;
    89       void *internal;
    90    } Py_buffer;
    91 -
    92    #define PyBUF_SIMPLE 0
    93    #define PyBUF_WRITABLE 0x0001
    94    #define PyBUF_FORMAT 0x0004
    95 @@ -83,24 +89,44 @@
    96    #define PyBUF_F_CONTIGUOUS (0x0040 | PyBUF_STRIDES)
    97    #define PyBUF_ANY_CONTIGUOUS (0x0080 | PyBUF_STRIDES)
    98    #define PyBUF_INDIRECT (0x0100 | PyBUF_STRIDES)
    99 -
    100 +  #define PyBUF_RECORDS (PyBUF_STRIDES | PyBUF_FORMAT | PyBUF_WRITABLE)
    101 +  #define PyBUF_FULL (PyBUF_INDIRECT | PyBUF_FORMAT | PyBUF_WRITABLE)
    102 +  typedef int (*getbufferproc)(PyObject *, Py_buffer *, int);
    103 +  typedef void (*releasebufferproc)(PyObject *, Py_buffer *);
    104  #endif
    105 -
    106  #if PY_MAJOR_VERSION < 3
    107    #define __Pyx_BUILTIN_MODULE_NAME "__builtin__"
    108 +  #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) \
    109 +          PyCode_New(a, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)
    110  #else
    111    #define __Pyx_BUILTIN_MODULE_NAME "builtins"
    112 +  #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) \
    113 +          PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)
    114 +#endif
    115 +#if PY_MAJOR_VERSION < 3 && PY_MINOR_VERSION < 6
    116 +  #define PyUnicode_FromString(s) PyUnicode_Decode(s, strlen(s), "UTF-8", "strict")
    117  #endif
    118 -
    119  #if PY_MAJOR_VERSION >= 3
    120    #define Py_TPFLAGS_CHECKTYPES 0
    121    #define Py_TPFLAGS_HAVE_INDEX 0
    122  #endif
    123 -
    124  #if (PY_VERSION_HEX < 0x02060000) || (PY_MAJOR_VERSION >= 3)
    125    #define Py_TPFLAGS_HAVE_NEWBUFFER 0
    126  #endif
    127 -
    128 +#if PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND)
    129 +  #define CYTHON_PEP393_ENABLED 1
    130 +  #define __Pyx_PyUnicode_READY(op)       (likely(PyUnicode_IS_READY(op)) ? \
    131 +                                              0 : _PyUnicode_Ready((PyObject *)(op)))
    132 +  #define __Pyx_PyUnicode_GET_LENGTH(u)   PyUnicode_GET_LENGTH(u)
    133 +  #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_READ_CHAR(u, i)
    134 +  #define __Pyx_PyUnicode_READ(k, d, i)   PyUnicode_READ(k, d, i)
    135 +#else
    136 +  #define CYTHON_PEP393_ENABLED 0
    137 +  #define __Pyx_PyUnicode_READY(op)       (0)
    138 +  #define __Pyx_PyUnicode_GET_LENGTH(u)   PyUnicode_GET_SIZE(u)
    139 +  #define __Pyx_PyUnicode_READ_CHAR(u, i) ((Py_UCS4)(PyUnicode_AS_UNICODE(u)[i]))
    140 +  #define __Pyx_PyUnicode_READ(k, d, i)   ((k=k), (Py_UCS4)(((Py_UNICODE*)d)[i]))
    141 +#endif
    142  #if PY_MAJOR_VERSION >= 3
    143    #define PyBaseString_Type            PyUnicode_Type
    144    #define PyStringObject               PyUnicodeObject
    145 @@ -108,7 +134,6 @@
    146    #define PyString_Check               PyUnicode_Check
    147    #define PyString_CheckExact          PyUnicode_CheckExact
    148  #endif
    149 -
    150  #if PY_VERSION_HEX < 0x02060000
    151    #define PyBytesObject                PyStringObject
    152    #define PyBytes_Type                 PyString_Type
    153 @@ -127,7 +152,6 @@
    154    #define PyBytes_Concat               PyString_Concat
    155    #define PyBytes_ConcatAndDel         PyString_ConcatAndDel
    156  #endif
    157 -
    158  #if PY_VERSION_HEX < 0x02060000
    159    #define PySet_Check(obj)             PyObject_TypeCheck(obj, &PySet_Type)
    160    #define PyFrozenSet_Check(obj)       PyObject_TypeCheck(obj, &PyFrozenSet_Type)
    161 @@ -135,9 +159,7 @@
    162  #ifndef PySet_CheckExact
    163    #define PySet_CheckExact(obj)        (Py_TYPE(obj) == &PySet_Type)
    164  #endif
    165 -
    166  #define __Pyx_TypeCheck(obj, type) PyObject_TypeCheck(obj, (PyTypeObject *)type)
    167 -
    168  #if PY_MAJOR_VERSION >= 3
    169    #define PyIntObject                  PyLongObject
    170    #define PyInt_Type                   PyLong_Type
    171 @@ -154,11 +176,9 @@
    172    #define PyInt_AsUnsignedLongMask     PyLong_AsUnsignedLongMask
    173    #define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask
    174  #endif
    175 -
    176  #if PY_MAJOR_VERSION >= 3
    177    #define PyBoolObject                 PyLongObject
    178  #endif
    179 -
    180  #if PY_VERSION_HEX < 0x03020000
    181    typedef long Py_hash_t;
    182    #define __Pyx_PyInt_FromHash_t PyInt_FromLong
    183 @@ -167,16 +187,6 @@
    184    #define __Pyx_PyInt_FromHash_t PyInt_FromSsize_t
    185    #define __Pyx_PyInt_AsHash_t   PyInt_AsSsize_t
    186  #endif
    187 -
    188 -
    189 -#if PY_MAJOR_VERSION >= 3
    190 -  #define __Pyx_PyNumber_Divide(x,y)         PyNumber_TrueDivide(x,y)
    191 -  #define __Pyx_PyNumber_InPlaceDivide(x,y)  PyNumber_InPlaceTrueDivide(x,y)
    192 -#else
    193 -  #define __Pyx_PyNumber_Divide(x,y)         PyNumber_Divide(x,y)
    194 -  #define __Pyx_PyNumber_InPlaceDivide(x,y)  PyNumber_InPlaceDivide(x,y)
    195 -#endif
    196 -
    197  #if (PY_MAJOR_VERSION < 3) || (PY_VERSION_HEX >= 0x03010300)
    198    #define __Pyx_PySequence_GetSlice(obj, a, b) PySequence_GetSlice(obj, a, b)
    199    #define __Pyx_PySequence_SetSlice(obj, a, b, value) PySequence_SetSlice(obj, a, b, value)
    200 @@ -195,11 +205,9 @@
    201          (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_DelSlice(obj, a, b)) : \
    202              (PyErr_Format(PyExc_TypeError, "'%.200s' object doesn't support slice deletion", (obj)->ob_type->tp_name), -1)))
    203  #endif
    204 -
    205  #if PY_MAJOR_VERSION >= 3
    206    #define PyMethod_New(func, self, klass) ((self) ? PyMethod_New(func, self) : PyInstanceMethod_New(func))
    207  #endif
    208 -
    209  #if PY_VERSION_HEX < 0x02050000
    210    #define __Pyx_GetAttrString(o,n)   PyObject_GetAttrString((o),((char *)(n)))
    211    #define __Pyx_SetAttrString(o,n,a) PyObject_SetAttrString((o),((char *)(n)),(a))
    212 @@ -209,7 +217,6 @@
    213    #define __Pyx_SetAttrString(o,n,a) PyObject_SetAttrString((o),(n),(a))
    214    #define __Pyx_DelAttrString(o,n)   PyObject_DelAttrString((o),(n))
    215  #endif
    216 -
    217  #if PY_VERSION_HEX < 0x02050000
    218    #define __Pyx_NAMESTR(n) ((char *)(n))
    219    #define __Pyx_DOCSTR(n)  ((char *)(n))
    220 @@ -218,6 +225,15 @@
    221    #define __Pyx_DOCSTR(n)  (n)
    222  #endif
    223  
    224 +
    225 +#if PY_MAJOR_VERSION >= 3
    226 +  #define __Pyx_PyNumber_Divide(x,y)         PyNumber_TrueDivide(x,y)
    227 +  #define __Pyx_PyNumber_InPlaceDivide(x,y)  PyNumber_InPlaceTrueDivide(x,y)
    228 +#else
    229 +  #define __Pyx_PyNumber_Divide(x,y)         PyNumber_Divide(x,y)
    230 +  #define __Pyx_PyNumber_InPlaceDivide(x,y)  PyNumber_InPlaceDivide(x,y)
    231 +#endif
    232 +
    233  #ifndef __PYX_EXTERN_C
    234    #ifdef __cplusplus
    235      #define __PYX_EXTERN_C extern "C"
    236 @@ -269,7 +285,7 @@
    237  #   else
    238  #     define CYTHON_UNUSED
    239  #   endif
    240 -# elif defined(__ICC) || defined(__INTEL_COMPILER)
    241 +# elif defined(__ICC) || (defined(__INTEL_COMPILER) && !defined(_MSC_VER))
    242  #   define CYTHON_UNUSED __attribute__ ((__unused__))
    243  # else
    244  #   define CYTHON_UNUSED
    245 @@ -293,8 +309,12 @@
    246  static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t);
    247  static CYTHON_INLINE size_t __Pyx_PyInt_AsSize_t(PyObject*);
    248  
    249 +#if CYTHON_COMPILING_IN_CPYTHON
    250  #define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x))
    251 -
    252 +#else
    253 +#define __pyx_PyFloat_AsDouble(x) PyFloat_AsDouble(x)
    254 +#endif
    255 +#define __pyx_PyFloat_AsFloat(x) ((float) __pyx_PyFloat_AsDouble(x))
    256  
    257  #ifdef __GNUC__
    258    /* Test for GCC > 2.95 */
    259 @@ -421,11 +441,9 @@
    260    rk_state *internal_state;
    261  };
    262  
    263 -
    264  #ifndef CYTHON_REFNANNY
    265    #define CYTHON_REFNANNY 0
    266  #endif
    267 -
    268  #if CYTHON_REFNANNY
    269    typedef struct {
    270      void (*INCREF)(void*, PyObject*, int);
    271 @@ -438,8 +456,21 @@
    272    static __Pyx_RefNannyAPIStruct *__Pyx_RefNanny = NULL;
    273    static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname); /*proto*/
    274    #define __Pyx_RefNannyDeclarations void *__pyx_refnanny = NULL;
    275 -  #define __Pyx_RefNannySetupContext(name)           __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__)
    276 -  #define __Pyx_RefNannyFinishContext()           __Pyx_RefNanny->FinishContext(&__pyx_refnanny)
    277 +#ifdef WITH_THREAD
    278 +  #define __Pyx_RefNannySetupContext(name, acquire_gil) \
    279 +          if (acquire_gil) { \
    280 +              PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure(); \
    281 +              __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__); \
    282 +              PyGILState_Release(__pyx_gilstate_save); \
    283 +          } else { \
    284 +              __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__); \
    285 +          }
    286 +#else
    287 +  #define __Pyx_RefNannySetupContext(name, acquire_gil) \
    288 +          __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__)
    289 +#endif
    290 +  #define __Pyx_RefNannyFinishContext() \
    291 +          __Pyx_RefNanny->FinishContext(&__pyx_refnanny)
    292    #define __Pyx_INCREF(r)  __Pyx_RefNanny->INCREF(__pyx_refnanny, (PyObject *)(r), __LINE__)
    293    #define __Pyx_DECREF(r)  __Pyx_RefNanny->DECREF(__pyx_refnanny, (PyObject *)(r), __LINE__)
    294    #define __Pyx_GOTREF(r)  __Pyx_RefNanny->GOTREF(__pyx_refnanny, (PyObject *)(r), __LINE__)
    295 @@ -450,7 +481,7 @@
    296    #define __Pyx_XGIVEREF(r) do { if((r) != NULL) {__Pyx_GIVEREF(r);}} while(0)
    297  #else
    298    #define __Pyx_RefNannyDeclarations
    299 -  #define __Pyx_RefNannySetupContext(name)
    300 +  #define __Pyx_RefNannySetupContext(name, acquire_gil)
    301    #define __Pyx_RefNannyFinishContext()
    302    #define __Pyx_INCREF(r) Py_INCREF(r)
    303    #define __Pyx_DECREF(r) Py_DECREF(r)
    304 @@ -461,6 +492,8 @@
    305    #define __Pyx_XGOTREF(r)
    306    #define __Pyx_XGIVEREF(r)
    307  #endif /* CYTHON_REFNANNY */
    308 +#define __Pyx_CLEAR(r)    do { PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);} while(0)
    309 +#define __Pyx_XCLEAR(r)   do { if((r) != NULL) {PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);}} while(0)
    310  
    311  static PyObject *__Pyx_GetName(PyObject *dict, PyObject *name); /*proto*/
    312  
    313 @@ -469,15 +502,15 @@
    314  
    315  static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause); /*proto*/
    316  
    317 -static void __Pyx_RaiseDoubleKeywordsError(
    318 -    const char* func_name, PyObject* kw_name); /*proto*/
    319 +static void __Pyx_RaiseDoubleKeywordsError(const char* func_name, PyObject* kw_name); /*proto*/
    320  
    321 -static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject **argnames[],     PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args,     const char* function_name); /*proto*/
    322 +static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject **argnames[], \
    323 +    PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args, \
    324 +    const char* function_name); /*proto*/
    325  
    326  static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact,
    327      Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found); /*proto*/
    328  
    329 -
    330  static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j) {
    331      PyObject *r;
    332      if (!j) return NULL;
    333 @@ -485,89 +518,102 @@
    334      Py_DECREF(j);
    335      return r;
    336  }
    337 -
    338 -
    339  #define __Pyx_GetItemInt_List(o, i, size, to_py_func) (((size) <= sizeof(Py_ssize_t)) ? \
    340                                                      __Pyx_GetItemInt_List_Fast(o, i) : \
    341                                                      __Pyx_GetItemInt_Generic(o, to_py_func(i)))
    342 -
    343  static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i) {
    344 -    if (likely(o != Py_None)) {
    345 -        if (likely((0 <= i) & (i < PyList_GET_SIZE(o)))) {
    346 -            PyObject *r = PyList_GET_ITEM(o, i);
    347 -            Py_INCREF(r);
    348 -            return r;
    349 -        }
    350 -        else if ((-PyList_GET_SIZE(o) <= i) & (i < 0)) {
    351 -            PyObject *r = PyList_GET_ITEM(o, PyList_GET_SIZE(o) + i);
    352 -            Py_INCREF(r);
    353 -            return r;
    354 -        }
    355 +#if CYTHON_COMPILING_IN_CPYTHON
    356 +    if (likely((0 <= i) & (i < PyList_GET_SIZE(o)))) {
    357 +        PyObject *r = PyList_GET_ITEM(o, i);
    358 +        Py_INCREF(r);
    359 +        return r;
    360 +    }
    361 +    else if ((-PyList_GET_SIZE(o) <= i) & (i < 0)) {
    362 +        PyObject *r = PyList_GET_ITEM(o, PyList_GET_SIZE(o) + i);
    363 +        Py_INCREF(r);
    364 +        return r;
    365      }
    366      return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i));
    367 +#else
    368 +    return PySequence_GetItem(o, i);
    369 +#endif
    370  }
    371 -
    372  #define __Pyx_GetItemInt_Tuple(o, i, size, to_py_func) (((size) <= sizeof(Py_ssize_t)) ? \
    373                                                      __Pyx_GetItemInt_Tuple_Fast(o, i) : \
    374                                                      __Pyx_GetItemInt_Generic(o, to_py_func(i)))
    375 -
    376  static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i) {
    377 -    if (likely(o != Py_None)) {
    378 -        if (likely((0 <= i) & (i < PyTuple_GET_SIZE(o)))) {
    379 -            PyObject *r = PyTuple_GET_ITEM(o, i);
    380 -            Py_INCREF(r);
    381 -            return r;
    382 -        }
    383 -        else if ((-PyTuple_GET_SIZE(o) <= i) & (i < 0)) {
    384 -            PyObject *r = PyTuple_GET_ITEM(o, PyTuple_GET_SIZE(o) + i);
    385 -            Py_INCREF(r);
    386 -            return r;
    387 -        }
    388 +#if CYTHON_COMPILING_IN_CPYTHON
    389 +    if (likely((0 <= i) & (i < PyTuple_GET_SIZE(o)))) {
    390 +        PyObject *r = PyTuple_GET_ITEM(o, i);
    391 +        Py_INCREF(r);
    392 +        return r;
    393 +    }
    394 +    else if ((-PyTuple_GET_SIZE(o) <= i) & (i < 0)) {
    395 +        PyObject *r = PyTuple_GET_ITEM(o, PyTuple_GET_SIZE(o) + i);
    396 +        Py_INCREF(r);
    397 +        return r;
    398      }
    399      return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i));
    400 +#else
    401 +    return PySequence_GetItem(o, i);
    402 +#endif
    403  }
    404 -
    405 -
    406  #define __Pyx_GetItemInt(o, i, size, to_py_func) (((size) <= sizeof(Py_ssize_t)) ? \
    407                                                      __Pyx_GetItemInt_Fast(o, i) : \
    408                                                      __Pyx_GetItemInt_Generic(o, to_py_func(i)))
    409 -
    410  static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i) {
    411 -    PyObject *r;
    412 -    if (PyList_CheckExact(o) && ((0 <= i) & (i < PyList_GET_SIZE(o)))) {
    413 -        r = PyList_GET_ITEM(o, i);
    414 -        Py_INCREF(r);
    415 -    }
    416 -    else if (PyTuple_CheckExact(o) && ((0 <= i) & (i < PyTuple_GET_SIZE(o)))) {
    417 -        r = PyTuple_GET_ITEM(o, i);
    418 -        Py_INCREF(r);
    419 +#if CYTHON_COMPILING_IN_CPYTHON
    420 +    if (PyList_CheckExact(o)) {
    421 +        Py_ssize_t n = (likely(i >= 0)) ? i : i + PyList_GET_SIZE(o);
    422 +        if (likely((n >= 0) & (n < PyList_GET_SIZE(o)))) {
    423 +            PyObject *r = PyList_GET_ITEM(o, n);
    424 +            Py_INCREF(r);
    425 +            return r;
    426 +        }
    427      }
    428 -    else if (Py_TYPE(o)->tp_as_sequence && Py_TYPE(o)->tp_as_sequence->sq_item && (likely(i >= 0))) {
    429 -        r = PySequence_GetItem(o, i);
    430 +    else if (PyTuple_CheckExact(o)) {
    431 +        Py_ssize_t n = (likely(i >= 0)) ? i : i + PyTuple_GET_SIZE(o);
    432 +        if (likely((n >= 0) & (n < PyTuple_GET_SIZE(o)))) {
    433 +            PyObject *r = PyTuple_GET_ITEM(o, n);
    434 +            Py_INCREF(r);
    435 +            return r;
    436 +        }
    437 +    } else {  /* inlined PySequence_GetItem() */
    438 +        PySequenceMethods *m = Py_TYPE(o)->tp_as_sequence;
    439 +        if (likely(m && m->sq_item)) {
    440 +            if (unlikely(i < 0) && likely(m->sq_length)) {
    441 +                Py_ssize_t l = m->sq_length(o);
    442 +                if (unlikely(l < 0)) return NULL;
    443 +                i += l;
    444 +            }
    445 +            return m->sq_item(o, i);
    446 +        }
    447      }
    448 -    else {
    449 -        r = __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i));
    450 +#else
    451 +    if (PySequence_Check(o)) {
    452 +        return PySequence_GetItem(o, i);
    453      }
    454 -    return r;
    455 +#endif
    456 +    return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i));
    457  }
    458  
    459 +static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected);
    460 +
    461  static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index);
    462  
    463 -static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected);
    464 +static CYTHON_INLINE int __Pyx_IterFinish(void); /*proto*/
    465  
    466  static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected); /*proto*/
    467  
    468  static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb); /*proto*/
    469  
    470 -static CYTHON_INLINE int __Pyx_CheckKeywordStrings(PyObject *kwdict,
    471 -    const char* function_name, int kw_allowed); /*proto*/
    472 +static CYTHON_INLINE int __Pyx_CheckKeywordStrings(PyObject *kwdict, const char* function_name, int kw_allowed); /*proto*/
    473  
    474  static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type); /*proto*/
    475  
    476  #define __Pyx_SetItemInt(o, i, v, size, to_py_func) (((size) <= sizeof(Py_ssize_t)) ? \
    477                                                      __Pyx_SetItemInt_Fast(o, i, v) : \
    478                                                      __Pyx_SetItemInt_Generic(o, to_py_func(i), v))
    479 -
    480  static CYTHON_INLINE int __Pyx_SetItemInt_Generic(PyObject *o, PyObject *j, PyObject *v) {
    481      int r;
    482      if (!j) return -1;
    483 @@ -575,20 +621,38 @@
    484      Py_DECREF(j);
    485      return r;
    486  }
    487 -
    488  static CYTHON_INLINE int __Pyx_SetItemInt_Fast(PyObject *o, Py_ssize_t i, PyObject *v) {
    489 -    if (PyList_CheckExact(o) && ((0 <= i) & (i < PyList_GET_SIZE(o)))) {
    490 -        Py_INCREF(v);
    491 -        Py_DECREF(PyList_GET_ITEM(o, i));
    492 -        PyList_SET_ITEM(o, i, v);
    493 -        return 1;
    494 +#if CYTHON_COMPILING_IN_CPYTHON
    495 +    if (PyList_CheckExact(o)) {
    496 +        Py_ssize_t n = (likely(i >= 0)) ? i : i + PyList_GET_SIZE(o);
    497 +        if (likely((n >= 0) & (n < PyList_GET_SIZE(o)))) {
    498 +            PyObject* old = PyList_GET_ITEM(o, n);
    499 +            Py_INCREF(v);
    500 +            PyList_SET_ITEM(o, n, v);
    501 +            Py_DECREF(old);
    502 +            return 1;
    503 +        }
    504 +    } else {  /* inlined PySequence_SetItem() */
    505 +        PySequenceMethods *m = Py_TYPE(o)->tp_as_sequence;
    506 +        if (likely(m && m->sq_ass_item)) {
    507 +            if (unlikely(i < 0) && likely(m->sq_length)) {
    508 +                Py_ssize_t l = m->sq_length(o);
    509 +                if (unlikely(l < 0)) return -1;
    510 +                i += l;
    511 +            }
    512 +            return m->sq_ass_item(o, i, v);
    513 +        }
    514      }
    515 -    else if (Py_TYPE(o)->tp_as_sequence && Py_TYPE(o)->tp_as_sequence->sq_ass_item && (likely(i >= 0)))
    516 +#else
    517 +#if CYTHON_COMPILING_IN_PYPY
    518 +    if (PySequence_Check(o) && !PyDict_Check(o)) {
    519 +#else
    520 +    if (PySequence_Check(o)) {
    521 +#endif
    522          return PySequence_SetItem(o, i, v);
    523 -    else {
    524 -        PyObject *j = PyInt_FromSsize_t(i);
    525 -        return __Pyx_SetItemInt_Generic(o, j, v);
    526      }
    527 +#endif
    528 +    return __Pyx_SetItemInt_Generic(o, PyInt_FromSsize_t(i), v);
    529  }
    530  
    531  static CYTHON_INLINE void __Pyx_ExceptionSave(PyObject **type, PyObject **value, PyObject **tb); /*proto*/
    532 @@ -596,17 +660,9 @@
    533  
    534  static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, long level); /*proto*/
    535  
    536 -#include <string.h>
    537 -
    538 -static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals); /*proto*/
    539 -
    540 -static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals); /*proto*/
    541 +static CYTHON_INLINE npy_intp __Pyx_PyInt_from_py_npy_intp(PyObject *);
    542  
    543 -#if PY_MAJOR_VERSION >= 3
    544 -#define __Pyx_PyString_Equals __Pyx_PyUnicode_Equals
    545 -#else
    546 -#define __Pyx_PyString_Equals __Pyx_PyBytes_Equals
    547 -#endif
    548 +static CYTHON_INLINE void __Pyx_RaiseImportError(PyObject *name);
    549  
    550  static CYTHON_INLINE PyObject *__Pyx_PyInt_to_py_npy_intp(npy_intp);
    551  
    552 @@ -642,19 +698,40 @@
    553  
    554  static CYTHON_INLINE signed PY_LONG_LONG __Pyx_PyInt_AsSignedLongLong(PyObject *);
    555  
    556 -static CYTHON_INLINE npy_intp __Pyx_PyInt_from_py_npy_intp(PyObject *);
    557 -
    558  static int __Pyx_check_binary_version(void);
    559  
    560 -static PyTypeObject *__Pyx_ImportType(const char *module_name, const char *class_name, size_t size, int strict);  /*proto*/
    561 +#if !defined(__Pyx_PyIdentifier_FromString)
    562 +#if PY_MAJOR_VERSION < 3
    563 +  #define __Pyx_PyIdentifier_FromString(s) PyString_FromString(s)
    564 +#else
    565 +  #define __Pyx_PyIdentifier_FromString(s) PyUnicode_FromString(s)
    566 +#endif
    567 +#endif
    568  
    569  static PyObject *__Pyx_ImportModule(const char *name); /*proto*/
    570  
    571 -static void __Pyx_AddTraceback(const char *funcname, int __pyx_clineno,
    572 -                               int __pyx_lineno, const char *__pyx_filename); /*proto*/
    573 +static PyTypeObject *__Pyx_ImportType(const char *module_name, const char *class_name, size_t size, int strict);  /*proto*/
    574 +
    575 +typedef struct {
    576 +    int code_line;
    577 +    PyCodeObject* code_object;
    578 +} __Pyx_CodeObjectCacheEntry;
    579 +struct __Pyx_CodeObjectCache {
    580 +    int count;
    581 +    int max_count;
    582 +    __Pyx_CodeObjectCacheEntry* entries;
    583 +};
    584 +static struct __Pyx_CodeObjectCache __pyx_code_cache = {0,0,NULL};
    585 +static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line);
    586 +static PyCodeObject *__pyx_find_code_object(int code_line);
    587 +static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object);
    588 +
    589 +static void __Pyx_AddTraceback(const char *funcname, int c_line,
    590 +                               int py_line, const char *filename); /*proto*/
    591  
    592  static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); /*proto*/
    593  
    594 +
    595  /* Module declarations from 'numpy' */
    596  
    597  /* Module declarations from 'mtrand' */
    598 @@ -686,6 +763,58 @@
    599  /* Implementation of 'mtrand' */
    600  static PyObject *__pyx_builtin_ValueError;
    601  static PyObject *__pyx_builtin_TypeError;
    602 +static int __pyx_pf_6mtrand_11RandomState___init__(struct __pyx_obj_6mtrand_RandomState *__pyx_v_self, PyObject *__pyx_v_seed); /* proto */
    603 +static void __pyx_pf_6mtrand_11RandomState_2__dealloc__(struct __pyx_obj_6mtrand_RandomState *__pyx_v_self); /* proto */
    604 +static PyObject *__pyx_pf_6mtrand_11RandomState_4seed(struct __pyx_obj_6mtrand_RandomState *__pyx_v_self, PyObject *__pyx_v_seed); /* proto */
    605 +static PyObject *__pyx_pf_6mtrand_11RandomState_6get_state(struct __pyx_obj_6mtrand_RandomState *__pyx_v_self); /* proto */
    606 +static PyObject *__pyx_pf_6mtrand_11RandomState_8set_state(struct __pyx_obj_6mtrand_RandomState *__pyx_v_self, PyObject *__pyx_v_state); /* proto */
    607 +static PyObject *__pyx_pf_6mtrand_11RandomState_10__getstate__(struct __pyx_obj_6mtrand_RandomState *__pyx_v_self); /* proto */
    608 +static PyObject *__pyx_pf_6mtrand_11RandomState_12__setstate__(struct __pyx_obj_6mtrand_RandomState *__pyx_v_self, PyObject *__pyx_v_state); /* proto */
    609 +static PyObject *__pyx_pf_6mtrand_11RandomState_14__reduce__(struct __pyx_obj_6mtrand_RandomState *__pyx_v_self); /* proto */
    610 +static PyObject *__pyx_pf_6mtrand_11RandomState_16random_sample(struct __pyx_obj_6mtrand_RandomState *__pyx_v_self, PyObject *__pyx_v_size); /* proto */
    611 +static PyObject *__pyx_pf_6mtrand_11RandomState_18tomaxint(struct __pyx_obj_6mtrand_RandomState *__pyx_v_self, PyObject *__pyx_v_size); /* proto */
    612 +static PyObject *__pyx_pf_6mtrand_11RandomState_20randint(struct __pyx_obj_6mtrand_RandomState *__pyx_v_self, PyObject *__pyx_v_low, PyObject *__pyx_v_high, PyObject *__pyx_v_size); /* proto */
    613 +static PyObject *__pyx_pf_6mtrand_11RandomState_22bytes(struct __pyx_obj_6mtrand_RandomState *__pyx_v_self, npy_intp __pyx_v_length); /* proto */
    614 +static PyObject *__pyx_pf_6mtrand_11RandomState_24uniform(struct __pyx_obj_6mtrand_RandomState *__pyx_v_self, PyObject *__pyx_v_low, PyObject *__pyx_v_high, PyObject *__pyx_v_size); /* proto */
    615 +static PyObject *__pyx_pf_6mtrand_11RandomState_26rand(struct __pyx_obj_6mtrand_RandomState *__pyx_v_self, PyObject *__pyx_v_args); /* proto */
    616 +static PyObject *__pyx_pf_6mtrand_11RandomState_28randn(struct __pyx_obj_6mtrand_RandomState *__pyx_v_self, PyObject *__pyx_v_args); /* proto */
    617 +static PyObject *__pyx_pf_6mtrand_11RandomState_30random_integers(struct __pyx_obj_6mtrand_RandomState *__pyx_v_self, PyObject *__pyx_v_low, PyObject *__pyx_v_high, PyObject *__pyx_v_size); /* proto */
    618 +static PyObject *__pyx_pf_6mtrand_11RandomState_32standard_normal(struct __pyx_obj_6mtrand_RandomState *__pyx_v_self, PyObject *__pyx_v_size); /* proto */
    619 +static PyObject *__pyx_pf_6mtrand_11RandomState_34normal(struct __pyx_obj_6mtrand_RandomState *__pyx_v_self, PyObject *__pyx_v_loc, PyObject *__pyx_v_scale, PyObject *__pyx_v_size); /* proto */
    620 +static PyObject *__pyx_pf_6mtrand_11RandomState_36beta(struct __pyx_obj_6mtrand_RandomState *__pyx_v_self, PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_size); /* proto */
    621 +static PyObject *__pyx_pf_6mtrand_11RandomState_38exponential(struct __pyx_obj_6mtrand_RandomState *__pyx_v_self, PyObject *__pyx_v_scale, PyObject *__pyx_v_size); /* proto */
    622 +static PyObject *__pyx_pf_6mtrand_11RandomState_40standard_exponential(struct __pyx_obj_6mtrand_RandomState *__pyx_v_self, PyObject *__pyx_v_size); /* proto */
    623 +static PyObject *__pyx_pf_6mtrand_11RandomState_42standard_gamma(struct __pyx_obj_6mtrand_RandomState *__pyx_v_self, PyObject *__pyx_v_shape, PyObject *__pyx_v_size); /* proto */
    624 +static PyObject *__pyx_pf_6mtrand_11RandomState_44gamma(struct __pyx_obj_6mtrand_RandomState *__pyx_v_self, PyObject *__pyx_v_shape, PyObject *__pyx_v_scale, PyObject *__pyx_v_size); /* proto */
    625 +static PyObject *__pyx_pf_6mtrand_11RandomState_46f(struct __pyx_obj_6mtrand_RandomState *__pyx_v_self, PyObject *__pyx_v_dfnum, PyObject *__pyx_v_dfden, PyObject *__pyx_v_size); /* proto */
    626 +static PyObject *__pyx_pf_6mtrand_11RandomState_48noncentral_f(struct __pyx_obj_6mtrand_RandomState *__pyx_v_self, PyObject *__pyx_v_dfnum, PyObject *__pyx_v_dfden, PyObject *__pyx_v_nonc, PyObject *__pyx_v_size); /* proto */
    627 +static PyObject *__pyx_pf_6mtrand_11RandomState_50chisquare(struct __pyx_obj_6mtrand_RandomState *__pyx_v_self, PyObject *__pyx_v_df, PyObject *__pyx_v_size); /* proto */
    628 +static PyObject *__pyx_pf_6mtrand_11RandomState_52noncentral_chisquare(struct __pyx_obj_6mtrand_RandomState *__pyx_v_self, PyObject *__pyx_v_df, PyObject *__pyx_v_nonc, PyObject *__pyx_v_size); /* proto */
    629 +static PyObject *__pyx_pf_6mtrand_11RandomState_54standard_cauchy(struct __pyx_obj_6mtrand_RandomState *__pyx_v_self, PyObject *__pyx_v_size); /* proto */
    630 +static PyObject *__pyx_pf_6mtrand_11RandomState_56standard_t(struct __pyx_obj_6mtrand_RandomState *__pyx_v_self, PyObject *__pyx_v_df, PyObject *__pyx_v_size); /* proto */
    631 +static PyObject *__pyx_pf_6mtrand_11RandomState_58vonmises(struct __pyx_obj_6mtrand_RandomState *__pyx_v_self, PyObject *__pyx_v_mu, PyObject *__pyx_v_kappa, PyObject *__pyx_v_size); /* proto */
    632 +static PyObject *__pyx_pf_6mtrand_11RandomState_60pareto(struct __pyx_obj_6mtrand_RandomState *__pyx_v_self, PyObject *__pyx_v_a, PyObject *__pyx_v_size); /* proto */
    633 +static PyObject *__pyx_pf_6mtrand_11RandomState_62weibull(struct __pyx_obj_6mtrand_RandomState *__pyx_v_self, PyObject *__pyx_v_a, PyObject *__pyx_v_size); /* proto */
    634 +static PyObject *__pyx_pf_6mtrand_11RandomState_64power(struct __pyx_obj_6mtrand_RandomState *__pyx_v_self, PyObject *__pyx_v_a, PyObject *__pyx_v_size); /* proto */
    635 +static PyObject *__pyx_pf_6mtrand_11RandomState_66laplace(struct __pyx_obj_6mtrand_RandomState *__pyx_v_self, PyObject *__pyx_v_loc, PyObject *__pyx_v_scale, PyObject *__pyx_v_size); /* proto */
    636 +static PyObject *__pyx_pf_6mtrand_11RandomState_68gumbel(struct __pyx_obj_6mtrand_RandomState *__pyx_v_self, PyObject *__pyx_v_loc, PyObject *__pyx_v_scale, PyObject *__pyx_v_size); /* proto */
    637 +static PyObject *__pyx_pf_6mtrand_11RandomState_70logistic(struct __pyx_obj_6mtrand_RandomState *__pyx_v_self, PyObject *__pyx_v_loc, PyObject *__pyx_v_scale, PyObject *__pyx_v_size); /* proto */
    638 +static PyObject *__pyx_pf_6mtrand_11RandomState_72lognormal(struct __pyx_obj_6mtrand_RandomState *__pyx_v_self, PyObject *__pyx_v_mean, PyObject *__pyx_v_sigma, PyObject *__pyx_v_size); /* proto */
    639 +static PyObject *__pyx_pf_6mtrand_11RandomState_74rayleigh(struct __pyx_obj_6mtrand_RandomState *__pyx_v_self, PyObject *__pyx_v_scale, PyObject *__pyx_v_size); /* proto */
    640 +static PyObject *__pyx_pf_6mtrand_11RandomState_76wald(struct __pyx_obj_6mtrand_RandomState *__pyx_v_self, PyObject *__pyx_v_mean, PyObject *__pyx_v_scale, PyObject *__pyx_v_size); /* proto */
    641 +static PyObject *__pyx_pf_6mtrand_11RandomState_78triangular(struct __pyx_obj_6mtrand_RandomState *__pyx_v_self, PyObject *__pyx_v_left, PyObject *__pyx_v_mode, PyObject *__pyx_v_right, PyObject *__pyx_v_size); /* proto */
    642 +static PyObject *__pyx_pf_6mtrand_11RandomState_80binomial(struct __pyx_obj_6mtrand_RandomState *__pyx_v_self, PyObject *__pyx_v_n, PyObject *__pyx_v_p, PyObject *__pyx_v_size); /* proto */
    643 +static PyObject *__pyx_pf_6mtrand_11RandomState_82negative_binomial(struct __pyx_obj_6mtrand_RandomState *__pyx_v_self, PyObject *__pyx_v_n, PyObject *__pyx_v_p, PyObject *__pyx_v_size); /* proto */
    644 +static PyObject *__pyx_pf_6mtrand_11RandomState_84poisson(struct __pyx_obj_6mtrand_RandomState *__pyx_v_self, PyObject *__pyx_v_lam, PyObject *__pyx_v_size); /* proto */
    645 +static PyObject *__pyx_pf_6mtrand_11RandomState_86zipf(struct __pyx_obj_6mtrand_RandomState *__pyx_v_self, PyObject *__pyx_v_a, PyObject *__pyx_v_size); /* proto */
    646 +static PyObject *__pyx_pf_6mtrand_11RandomState_88geometric(struct __pyx_obj_6mtrand_RandomState *__pyx_v_self, PyObject *__pyx_v_p, PyObject *__pyx_v_size); /* proto */
    647 +static PyObject *__pyx_pf_6mtrand_11RandomState_90hypergeometric(struct __pyx_obj_6mtrand_RandomState *__pyx_v_self, PyObject *__pyx_v_ngood, PyObject *__pyx_v_nbad, PyObject *__pyx_v_nsample, PyObject *__pyx_v_size); /* proto */
    648 +static PyObject *__pyx_pf_6mtrand_11RandomState_92logseries(struct __pyx_obj_6mtrand_RandomState *__pyx_v_self, PyObject *__pyx_v_p, PyObject *__pyx_v_size); /* proto */
    649 +static PyObject *__pyx_pf_6mtrand_11RandomState_94multivariate_normal(struct __pyx_obj_6mtrand_RandomState *__pyx_v_self, PyObject *__pyx_v_mean, PyObject *__pyx_v_cov, PyObject *__pyx_v_size); /* proto */
    650 +static PyObject *__pyx_pf_6mtrand_11RandomState_96multinomial(struct __pyx_obj_6mtrand_RandomState *__pyx_v_self, npy_intp __pyx_v_n, PyObject *__pyx_v_pvals, PyObject *__pyx_v_size); /* proto */
    651 +static PyObject *__pyx_pf_6mtrand_11RandomState_98dirichlet(struct __pyx_obj_6mtrand_RandomState *__pyx_v_self, PyObject *__pyx_v_alpha, PyObject *__pyx_v_size); /* proto */
    652 +static PyObject *__pyx_pf_6mtrand_11RandomState_100shuffle(struct __pyx_obj_6mtrand_RandomState *__pyx_v_self, PyObject *__pyx_v_x); /* proto */
    653 +static PyObject *__pyx_pf_6mtrand_11RandomState_102permutation(struct __pyx_obj_6mtrand_RandomState *__pyx_v_self, PyObject *__pyx_v_x); /* proto */
    654  static char __pyx_k_1[] = "size is not compatible with inputs";
    655  static char __pyx_k_9[] = "algorithm must be 'MT19937'";
    656  static char __pyx_k_11[] = "state must be 624 longs";
    657 @@ -1318,7 +1447,7 @@
    658    int __pyx_lineno = 0;
    659    const char *__pyx_filename = NULL;
    660    int __pyx_clineno = 0;
    661 -  __Pyx_RefNannySetupContext("cont0_array");
    662 +  __Pyx_RefNannySetupContext("cont0_array", 0);
    663  
    664    /* "mtrand.pyx":134
    665   *     cdef npy_intp i
    666 @@ -1365,7 +1494,7 @@
    667      __Pyx_GOTREF(__pyx_t_4);
    668      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    669      __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 137; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    670 -    __Pyx_GOTREF(((PyObject *)__pyx_t_2));
    671 +    __Pyx_GOTREF(__pyx_t_2);
    672      __Pyx_INCREF(__pyx_v_size);
    673      PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_size);
    674      __Pyx_GIVEREF(__pyx_v_size);
    675 @@ -1470,7 +1599,7 @@
    676    int __pyx_lineno = 0;
    677    const char *__pyx_filename = NULL;
    678    int __pyx_clineno = 0;
    679 -  __Pyx_RefNannySetupContext("cont1_array_sc");
    680 +  __Pyx_RefNannySetupContext("cont1_array_sc", 0);
    681  
    682    /* "mtrand.pyx":151
    683   *     cdef npy_intp i
    684 @@ -1517,7 +1646,7 @@
    685      __Pyx_GOTREF(__pyx_t_4);
    686      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    687      __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 154; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    688 -    __Pyx_GOTREF(((PyObject *)__pyx_t_2));
    689 +    __Pyx_GOTREF(__pyx_t_2);
    690      __Pyx_INCREF(__pyx_v_size);
    691      PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_size);
    692      __Pyx_GIVEREF(__pyx_v_size);
    693 @@ -1625,7 +1754,7 @@
    694    int __pyx_lineno = 0;
    695    const char *__pyx_filename = NULL;
    696    int __pyx_clineno = 0;
    697 -  __Pyx_RefNannySetupContext("cont1_array");
    698 +  __Pyx_RefNannySetupContext("cont1_array", 0);
    699  
    700    /* "mtrand.pyx":170
    701   *     cdef broadcast multi
    702 @@ -1731,7 +1860,7 @@
    703      __Pyx_GOTREF(__pyx_t_5);
    704      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    705      __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 179; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    706 -    __Pyx_GOTREF(((PyObject *)__pyx_t_2));
    707 +    __Pyx_GOTREF(__pyx_t_2);
    708      __Pyx_INCREF(__pyx_v_size);
    709      PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_size);
    710      __Pyx_GIVEREF(__pyx_v_size);
    711 @@ -1886,7 +2015,7 @@
    712    int __pyx_lineno = 0;
    713    const char *__pyx_filename = NULL;
    714    int __pyx_clineno = 0;
    715 -  __Pyx_RefNannySetupContext("cont2_array_sc");
    716 +  __Pyx_RefNannySetupContext("cont2_array_sc", 0);
    717  
    718    /* "mtrand.pyx":198
    719   *     cdef npy_intp i
    720 @@ -1933,7 +2062,7 @@
    721      __Pyx_GOTREF(__pyx_t_4);
    722      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    723      __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    724 -    __Pyx_GOTREF(((PyObject *)__pyx_t_2));
    725 +    __Pyx_GOTREF(__pyx_t_2);
    726      __Pyx_INCREF(__pyx_v_size);
    727      PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_size);
    728      __Pyx_GIVEREF(__pyx_v_size);
    729 @@ -2040,7 +2169,7 @@
    730    int __pyx_lineno = 0;
    731    const char *__pyx_filename = NULL;
    732    int __pyx_clineno = 0;
    733 -  __Pyx_RefNannySetupContext("cont2_array");
    734 +  __Pyx_RefNannySetupContext("cont2_array", 0);
    735  
    736    /* "mtrand.pyx":219
    737   *     cdef broadcast multi
    738 @@ -2155,7 +2284,7 @@
    739      __Pyx_GOTREF(__pyx_t_5);
    740      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    741      __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 229; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    742 -    __Pyx_GOTREF(((PyObject *)__pyx_t_2));
    743 +    __Pyx_GOTREF(__pyx_t_2);
    744      __Pyx_INCREF(__pyx_v_size);
    745      PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_size);
    746      __Pyx_GIVEREF(__pyx_v_size);
    747 @@ -2327,7 +2456,7 @@
    748    int __pyx_lineno = 0;
    749    const char *__pyx_filename = NULL;
    750    int __pyx_clineno = 0;
    751 -  __Pyx_RefNannySetupContext("cont3_array_sc");
    752 +  __Pyx_RefNannySetupContext("cont3_array_sc", 0);
    753  
    754    /* "mtrand.pyx":250
    755   *     cdef npy_intp i
    756 @@ -2374,7 +2503,7 @@
    757      __Pyx_GOTREF(__pyx_t_4);
    758      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    759      __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 253; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    760 -    __Pyx_GOTREF(((PyObject *)__pyx_t_2));
    761 +    __Pyx_GOTREF(__pyx_t_2);
    762      __Pyx_INCREF(__pyx_v_size);
    763      PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_size);
    764      __Pyx_GIVEREF(__pyx_v_size);
    765 @@ -2482,7 +2611,7 @@
    766    int __pyx_lineno = 0;
    767    const char *__pyx_filename = NULL;
    768    int __pyx_clineno = 0;
    769 -  __Pyx_RefNannySetupContext("cont3_array");
    770 +  __Pyx_RefNannySetupContext("cont3_array", 0);
    771  
    772    /* "mtrand.pyx":272
    773   *     cdef broadcast multi
    774 @@ -2606,7 +2735,7 @@
    775      __Pyx_GOTREF(__pyx_t_5);
    776      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    777      __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 283; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    778 -    __Pyx_GOTREF(((PyObject *)__pyx_t_2));
    779 +    __Pyx_GOTREF(__pyx_t_2);
    780      __Pyx_INCREF(__pyx_v_size);
    781      PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_size);
    782      __Pyx_GIVEREF(__pyx_v_size);
    783 @@ -2778,7 +2907,7 @@
    784    int __pyx_lineno = 0;
    785    const char *__pyx_filename = NULL;
    786    int __pyx_clineno = 0;
    787 -  __Pyx_RefNannySetupContext("disc0_array");
    788 +  __Pyx_RefNannySetupContext("disc0_array", 0);
    789  
    790    /* "mtrand.pyx":303
    791   *     cdef npy_intp i
    792 @@ -2820,7 +2949,7 @@
    793      __Pyx_GOTREF(__pyx_t_3);
    794      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    795      __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 306; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    796 -    __Pyx_GOTREF(((PyObject *)__pyx_t_2));
    797 +    __Pyx_GOTREF(__pyx_t_2);
    798      __Pyx_INCREF(__pyx_v_size);
    799      PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_size);
    800      __Pyx_GIVEREF(__pyx_v_size);
    801 @@ -2925,7 +3054,7 @@
    802    int __pyx_lineno = 0;
    803    const char *__pyx_filename = NULL;
    804    int __pyx_clineno = 0;
    805 -  __Pyx_RefNannySetupContext("discnp_array_sc");
    806 +  __Pyx_RefNannySetupContext("discnp_array_sc", 0);
    807  
    808    /* "mtrand.pyx":319
    809   *     cdef npy_intp i
    810 @@ -2967,7 +3096,7 @@
    811      __Pyx_GOTREF(__pyx_t_3);
    812      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    813      __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 322; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    814 -    __Pyx_GOTREF(((PyObject *)__pyx_t_2));
    815 +    __Pyx_GOTREF(__pyx_t_2);
    816      __Pyx_INCREF(__pyx_v_size);
    817      PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_size);
    818      __Pyx_GIVEREF(__pyx_v_size);
    819 @@ -3074,7 +3203,7 @@
    820    int __pyx_lineno = 0;
    821    const char *__pyx_filename = NULL;
    822    int __pyx_clineno = 0;
    823 -  __Pyx_RefNannySetupContext("discnp_array");
    824 +  __Pyx_RefNannySetupContext("discnp_array", 0);
    825  
    826    /* "mtrand.pyx":338
    827   *     cdef broadcast multi
    828 @@ -3184,7 +3313,7 @@
    829      __Pyx_GOTREF(__pyx_t_4);
    830      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    831      __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 348; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    832 -    __Pyx_GOTREF(((PyObject *)__pyx_t_2));
    833 +    __Pyx_GOTREF(__pyx_t_2);
    834      __Pyx_INCREF(__pyx_v_size);
    835      PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_size);
    836      __Pyx_GIVEREF(__pyx_v_size);
    837 @@ -3356,7 +3485,7 @@
    838    int __pyx_lineno = 0;
    839    const char *__pyx_filename = NULL;
    840    int __pyx_clineno = 0;
    841 -  __Pyx_RefNannySetupContext("discdd_array_sc");
    842 +  __Pyx_RefNannySetupContext("discdd_array_sc", 0);
    843  
    844    /* "mtrand.pyx":368
    845   *     cdef npy_intp i
    846 @@ -3398,7 +3527,7 @@
    847      __Pyx_GOTREF(__pyx_t_3);
    848      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    849      __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 371; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    850 -    __Pyx_GOTREF(((PyObject *)__pyx_t_2));
    851 +    __Pyx_GOTREF(__pyx_t_2);
    852      __Pyx_INCREF(__pyx_v_size);
    853      PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_size);
    854      __Pyx_GIVEREF(__pyx_v_size);
    855 @@ -3505,7 +3634,7 @@
    856    int __pyx_lineno = 0;
    857    const char *__pyx_filename = NULL;
    858    int __pyx_clineno = 0;
    859 -  __Pyx_RefNannySetupContext("discdd_array");
    860 +  __Pyx_RefNannySetupContext("discdd_array", 0);
    861  
    862    /* "mtrand.pyx":387
    863   *     cdef broadcast multi
    864 @@ -3615,7 +3744,7 @@
    865      __Pyx_GOTREF(__pyx_t_4);
    866      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    867      __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 397; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    868 -    __Pyx_GOTREF(((PyObject *)__pyx_t_2));
    869 +    __Pyx_GOTREF(__pyx_t_2);
    870      __Pyx_INCREF(__pyx_v_size);
    871      PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_size);
    872      __Pyx_GIVEREF(__pyx_v_size);
    873 @@ -3787,7 +3916,7 @@
    874    int __pyx_lineno = 0;
    875    const char *__pyx_filename = NULL;
    876    int __pyx_clineno = 0;
    877 -  __Pyx_RefNannySetupContext("discnmN_array_sc");
    878 +  __Pyx_RefNannySetupContext("discnmN_array_sc", 0);
    879  
    880    /* "mtrand.pyx":418
    881   *     cdef npy_intp i
    882 @@ -3829,7 +3958,7 @@
    883      __Pyx_GOTREF(__pyx_t_3);
    884      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    885      __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 421; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    886 -    __Pyx_GOTREF(((PyObject *)__pyx_t_2));
    887 +    __Pyx_GOTREF(__pyx_t_2);
    888      __Pyx_INCREF(__pyx_v_size);
    889      PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_size);
    890      __Pyx_GIVEREF(__pyx_v_size);
    891 @@ -3937,7 +4066,7 @@
    892    int __pyx_lineno = 0;
    893    const char *__pyx_filename = NULL;
    894    int __pyx_clineno = 0;
    895 -  __Pyx_RefNannySetupContext("discnmN_array");
    896 +  __Pyx_RefNannySetupContext("discnmN_array", 0);
    897  
    898    /* "mtrand.pyx":439
    899   *     cdef broadcast multi
    900 @@ -4056,7 +4185,7 @@
    901      __Pyx_GOTREF(__pyx_t_4);
    902      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    903      __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 450; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    904 -    __Pyx_GOTREF(((PyObject *)__pyx_t_2));
    905 +    __Pyx_GOTREF(__pyx_t_2);
    906      __Pyx_INCREF(__pyx_v_size);
    907      PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_size);
    908      __Pyx_GIVEREF(__pyx_v_size);
    909 @@ -4228,7 +4357,7 @@
    910    int __pyx_lineno = 0;
    911    const char *__pyx_filename = NULL;
    912    int __pyx_clineno = 0;
    913 -  __Pyx_RefNannySetupContext("discd_array_sc");
    914 +  __Pyx_RefNannySetupContext("discd_array_sc", 0);
    915  
    916    /* "mtrand.pyx":471
    917   *     cdef npy_intp i
    918 @@ -4270,7 +4399,7 @@
    919      __Pyx_GOTREF(__pyx_t_3);
    920      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    921      __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 474; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    922 -    __Pyx_GOTREF(((PyObject *)__pyx_t_2));
    923 +    __Pyx_GOTREF(__pyx_t_2);
    924      __Pyx_INCREF(__pyx_v_size);
    925      PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_size);
    926      __Pyx_GIVEREF(__pyx_v_size);
    927 @@ -4378,7 +4507,7 @@
    928    int __pyx_lineno = 0;
    929    const char *__pyx_filename = NULL;
    930    int __pyx_clineno = 0;
    931 -  __Pyx_RefNannySetupContext("discd_array");
    932 +  __Pyx_RefNannySetupContext("discd_array", 0);
    933  
    934    /* "mtrand.pyx":490
    935   *     cdef flatiter itera
    936 @@ -4479,7 +4608,7 @@
    937      __Pyx_GOTREF(__pyx_t_4);
    938      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    939      __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 499; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    940 -    __Pyx_GOTREF(((PyObject *)__pyx_t_2));
    941 +    __Pyx_GOTREF(__pyx_t_2);
    942      __Pyx_INCREF(__pyx_v_size);
    943      PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_size);
    944      __Pyx_GIVEREF(__pyx_v_size);
    945 @@ -4628,7 +4757,7 @@
    946    double __pyx_r;
    947    __Pyx_RefNannyDeclarations
    948    npy_intp __pyx_t_1;
    949 -  __Pyx_RefNannySetupContext("kahan_sum");
    950 +  __Pyx_RefNannySetupContext("kahan_sum", 0);
    951  
    952    /* "mtrand.pyx":513
    953   *     cdef double c, y, t, sum
    954 @@ -4711,39 +4840,35 @@
    955    return __pyx_r;
    956  }
    957  
    958 -/* "mtrand.pyx":558
    959 +/* Python wrapper */
    960 +static int __pyx_pw_6mtrand_11RandomState_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
    961 +static int __pyx_pw_6mtrand_11RandomState_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
    962 +  PyObject *__pyx_v_seed = 0;
    963 +  int __pyx_r;
    964 +  __Pyx_RefNannyDeclarations
    965 +  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
    966 +  {
    967 +    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__seed,0};
    968 +    PyObject* values[1] = {0};
    969 +
    970 +    /* "mtrand.pyx":558
    971   *     poisson_lam_max = np.iinfo('l').max - np.sqrt(np.iinfo('l').max)*10
    972   *
    973   *     def __init__(self, seed=None):             # <<<<<<<<<<<<<<
    974   *         self.internal_state = <rk_state*>PyMem_Malloc(sizeof(rk_state))
    975   *
    976   */
    977 -
    978 -static int __pyx_pf_6mtrand_11RandomState___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
    979 -static int __pyx_pf_6mtrand_11RandomState___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
    980 -  PyObject *__pyx_v_seed = 0;
    981 -  int __pyx_r;
    982 -  __Pyx_RefNannyDeclarations
    983 -  PyObject *__pyx_t_1 = NULL;
    984 -  PyObject *__pyx_t_2 = NULL;
    985 -  PyObject *__pyx_t_3 = NULL;
    986 -  int __pyx_lineno = 0;
    987 -  const char *__pyx_filename = NULL;
    988 -  int __pyx_clineno = 0;
    989 -  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__seed,0};
    990 -  __Pyx_RefNannySetupContext("__init__");
    991 -  {
    992 -    PyObject* values[1] = {0};
    993      values[0] = ((PyObject *)Py_None);
    994      if (unlikely(__pyx_kwds)) {
    995        Py_ssize_t kw_args;
    996 -      switch (PyTuple_GET_SIZE(__pyx_args)) {
    997 +      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
    998 +      switch (pos_args) {
    999          case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    1000          case  0: break;
    1001          default: goto __pyx_L5_argtuple_error;
    1002        }
    1003        kw_args = PyDict_Size(__pyx_kwds);
    1004 -      switch (PyTuple_GET_SIZE(__pyx_args)) {
    1005 +      switch (pos_args) {
    1006          case  0:
    1007          if (kw_args > 0) {
    1008            PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__seed);
    1009 @@ -4751,7 +4876,7 @@
    1010          }
    1011        }
    1012        if (unlikely(kw_args > 0)) {
    1013 -        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "__init__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 558; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    1014 +        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 558; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    1015        }
    1016      } else {
    1017        switch (PyTuple_GET_SIZE(__pyx_args)) {
    1018 @@ -4770,6 +4895,21 @@
    1019    __Pyx_RefNannyFinishContext();
    1020    return -1;
    1021    __pyx_L4_argument_unpacking_done:;
    1022 +  __pyx_r = __pyx_pf_6mtrand_11RandomState___init__(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self), __pyx_v_seed);
    1023 +  __Pyx_RefNannyFinishContext();
    1024 +  return __pyx_r;
    1025 +}
    1026 +
    1027 +static int __pyx_pf_6mtrand_11RandomState___init__(struct __pyx_obj_6mtrand_RandomState *__pyx_v_self, PyObject *__pyx_v_seed) {
    1028 +  int __pyx_r;
    1029 +  __Pyx_RefNannyDeclarations
    1030 +  PyObject *__pyx_t_1 = NULL;
    1031 +  PyObject *__pyx_t_2 = NULL;
    1032 +  PyObject *__pyx_t_3 = NULL;
    1033 +  int __pyx_lineno = 0;
    1034 +  const char *__pyx_filename = NULL;
    1035 +  int __pyx_clineno = 0;
    1036 +  __Pyx_RefNannySetupContext("__init__", 0);
    1037  
    1038    /* "mtrand.pyx":559
    1039   *
    1040 @@ -4778,7 +4918,7 @@
    1041   *
    1042   *         self.seed(seed)
    1043   */
    1044 -  ((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state = ((rk_state *)PyMem_Malloc((sizeof(rk_state))));
    1045 +  __pyx_v_self->internal_state = ((rk_state *)PyMem_Malloc((sizeof(rk_state))));
    1046  
    1047    /* "mtrand.pyx":561
    1048   *         self.internal_state = <rk_state*>PyMem_Malloc(sizeof(rk_state))
    1049 @@ -4787,10 +4927,10 @@
    1050   *
    1051   *     def __dealloc__(self):
    1052   */
    1053 -  __pyx_t_1 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__seed); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 561; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    1054 +  __pyx_t_1 = PyObject_GetAttr(((PyObject *)__pyx_v_self), __pyx_n_s__seed); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 561; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    1055    __Pyx_GOTREF(__pyx_t_1);
    1056    __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 561; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    1057 -  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
    1058 +  __Pyx_GOTREF(__pyx_t_2);
    1059    __Pyx_INCREF(__pyx_v_seed);
    1060    PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_seed);
    1061    __Pyx_GIVEREF(__pyx_v_seed);
    1062 @@ -4813,6 +4953,15 @@
    1063    return __pyx_r;
    1064  }
    1065  
    1066 +/* Python wrapper */
    1067 +static void __pyx_pw_6mtrand_11RandomState_3__dealloc__(PyObject *__pyx_v_self); /*proto*/
    1068 +static void __pyx_pw_6mtrand_11RandomState_3__dealloc__(PyObject *__pyx_v_self) {
    1069 +  __Pyx_RefNannyDeclarations
    1070 +  __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0);
    1071 +  __pyx_pf_6mtrand_11RandomState_2__dealloc__(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self));
    1072 +  __Pyx_RefNannyFinishContext();
    1073 +}
    1074 +
    1075  /* "mtrand.pyx":563
    1076   *         self.seed(seed)
    1077   *
    1078 @@ -4821,11 +4970,10 @@
    1079   *             PyMem_Free(self.internal_state)
    1080   */
    1081  
    1082 -static void __pyx_pf_6mtrand_11RandomState_1__dealloc__(PyObject *__pyx_v_self); /*proto*/
    1083 -static void __pyx_pf_6mtrand_11RandomState_1__dealloc__(PyObject *__pyx_v_self) {
    1084 +static void __pyx_pf_6mtrand_11RandomState_2__dealloc__(struct __pyx_obj_6mtrand_RandomState *__pyx_v_self) {
    1085    __Pyx_RefNannyDeclarations
    1086    int __pyx_t_1;
    1087 -  __Pyx_RefNannySetupContext("__dealloc__");
    1088 +  __Pyx_RefNannySetupContext("__dealloc__", 0);
    1089  
    1090    /* "mtrand.pyx":564
    1091   *
    1092 @@ -4834,7 +4982,7 @@
    1093   *             PyMem_Free(self.internal_state)
    1094   *             self.internal_state = NULL
    1095   */
    1096 -  __pyx_t_1 = (((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state != NULL);
    1097 +  __pyx_t_1 = (__pyx_v_self->internal_state != NULL);
    1098    if (__pyx_t_1) {
    1099  
    1100      /* "mtrand.pyx":565
    1101 @@ -4844,7 +4992,7 @@
    1102   *             self.internal_state = NULL
    1103   *
    1104   */
    1105 -    PyMem_Free(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state);
    1106 +    PyMem_Free(__pyx_v_self->internal_state);
    1107  
    1108      /* "mtrand.pyx":566
    1109   *         if self.internal_state != NULL:
    1110 @@ -4853,52 +5001,44 @@
    1111   *
    1112   *     def seed(self, seed=None):
    1113   */
    1114 -    ((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state = NULL;
    1115 -    goto __pyx_L5;
    1116 +    __pyx_v_self->internal_state = NULL;
    1117 +    goto __pyx_L3;
    1118    }
    1119 -  __pyx_L5:;
    1120 +  __pyx_L3:;
    1121  
    1122    __Pyx_RefNannyFinishContext();
    1123  }
    1124  
    1125 -/* "mtrand.pyx":568
    1126 +/* Python wrapper */
    1127 +static PyObject *__pyx_pw_6mtrand_11RandomState_5seed(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
    1128 +static char __pyx_doc_6mtrand_11RandomState_4seed[] = "\n        seed(seed=None)\n\n        Seed the generator.\n\n        This method is called when `RandomState` is initialized. It can be\n        called again to re-seed the generator. For details, see `RandomState`.\n\n        Parameters\n        ----------\n        seed : int or array_like, optional\n            Seed for `RandomState`.\n\n        See Also\n        --------\n        RandomState\n\n        ";
    1129 +static PyObject *__pyx_pw_6mtrand_11RandomState_5seed(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
    1130 +  PyObject *__pyx_v_seed = 0;
    1131 +  PyObject *__pyx_r = 0;
    1132 +  __Pyx_RefNannyDeclarations
    1133 +  __Pyx_RefNannySetupContext("seed (wrapper)", 0);
    1134 +  {
    1135 +    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__seed,0};
    1136 +    PyObject* values[1] = {0};
    1137 +
    1138 +    /* "mtrand.pyx":568
    1139   *             self.internal_state = NULL
    1140   *
    1141   *     def seed(self, seed=None):             # <<<<<<<<<<<<<<
    1142   *         """
    1143   *         seed(seed=None)
    1144   */
    1145 -
    1146 -static PyObject *__pyx_pf_6mtrand_11RandomState_2seed(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
    1147 -static char __pyx_doc_6mtrand_11RandomState_2seed[] = "\n        seed(seed=None)\n\n        Seed the generator.\n\n        This method is called when `RandomState` is initialized. It can be\n        called again to re-seed the generator. For details, see `RandomState`.\n\n        Parameters\n        ----------\n        seed : int or array_like, optional\n            Seed for `RandomState`.\n\n        See Also\n        --------\n        RandomState\n\n        ";
    1148 -static PyObject *__pyx_pf_6mtrand_11RandomState_2seed(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
    1149 -  PyObject *__pyx_v_seed = 0;
    1150 -  rk_error __pyx_v_errcode;
    1151 -  PyArrayObject *arrayObject_obj = 0;
    1152 -  PyObject *__pyx_v_iseed = NULL;
    1153 -  PyObject *__pyx_r = NULL;
    1154 -  __Pyx_RefNannyDeclarations
    1155 -  int __pyx_t_1;
    1156 -  unsigned long __pyx_t_2;
    1157 -  PyObject *__pyx_t_3 = NULL;
    1158 -  PyObject *__pyx_t_4 = NULL;
    1159 -  int __pyx_lineno = 0;
    1160 -  const char *__pyx_filename = NULL;
    1161 -  int __pyx_clineno = 0;
    1162 -  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__seed,0};
    1163 -  __Pyx_RefNannySetupContext("seed");
    1164 -  {
    1165 -    PyObject* values[1] = {0};
    1166      values[0] = ((PyObject *)Py_None);
    1167      if (unlikely(__pyx_kwds)) {
    1168        Py_ssize_t kw_args;
    1169 -      switch (PyTuple_GET_SIZE(__pyx_args)) {
    1170 +      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
    1171 +      switch (pos_args) {
    1172          case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    1173          case  0: break;
    1174          default: goto __pyx_L5_argtuple_error;
    1175        }
    1176        kw_args = PyDict_Size(__pyx_kwds);
    1177 -      switch (PyTuple_GET_SIZE(__pyx_args)) {
    1178 +      switch (pos_args) {
    1179          case  0:
    1180          if (kw_args > 0) {
    1181            PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__seed);
    1182 @@ -4906,7 +5046,7 @@
    1183          }
    1184        }
    1185        if (unlikely(kw_args > 0)) {
    1186 -        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "seed") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 568; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    1187 +        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "seed") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 568; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    1188        }
    1189      } else {
    1190        switch (PyTuple_GET_SIZE(__pyx_args)) {
    1191 @@ -4925,6 +5065,25 @@
    1192    __Pyx_RefNannyFinishContext();
    1193    return NULL;
    1194    __pyx_L4_argument_unpacking_done:;
    1195 +  __pyx_r = __pyx_pf_6mtrand_11RandomState_4seed(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self), __pyx_v_seed);
    1196 +  __Pyx_RefNannyFinishContext();
    1197 +  return __pyx_r;
    1198 +}
    1199 +
    1200 +static PyObject *__pyx_pf_6mtrand_11RandomState_4seed(struct __pyx_obj_6mtrand_RandomState *__pyx_v_self, PyObject *__pyx_v_seed) {
    1201 +  CYTHON_UNUSED rk_error __pyx_v_errcode;
    1202 +  PyArrayObject *arrayObject_obj = 0;
    1203 +  PyObject *__pyx_v_iseed = NULL;
    1204 +  PyObject *__pyx_r = NULL;
    1205 +  __Pyx_RefNannyDeclarations
    1206 +  int __pyx_t_1;
    1207 +  unsigned long __pyx_t_2;
    1208 +  PyObject *__pyx_t_3 = NULL;
    1209 +  PyObject *__pyx_t_4 = NULL;
    1210 +  int __pyx_lineno = 0;
    1211 +  const char *__pyx_filename = NULL;
    1212 +  int __pyx_clineno = 0;
    1213 +  __Pyx_RefNannySetupContext("seed", 0);
    1214  
    1215    /* "mtrand.pyx":589
    1216   *         cdef rk_error errcode
    1217 @@ -4943,8 +5102,8 @@
    1218   *         elif type(seed) is int:
    1219   *             rk_seed(seed, self.internal_state)
    1220   */
    1221 -    __pyx_v_errcode = rk_randomseed(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state);
    1222 -    goto __pyx_L6;
    1223 +    __pyx_v_errcode = rk_randomseed(__pyx_v_self->internal_state);
    1224 +    goto __pyx_L3;
    1225    }
    1226  
    1227    /* "mtrand.pyx":591
    1228 @@ -4965,8 +5124,8 @@
    1229   *             iseed = int(seed)
    1230   */
    1231      __pyx_t_2 = __Pyx_PyInt_AsUnsignedLong(__pyx_v_seed); if (unlikely((__pyx_t_2 == (unsigned long)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 592; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    1232 -    rk_seed(__pyx_t_2, ((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state);
    1233 -    goto __pyx_L6;
    1234 +    rk_seed(__pyx_t_2, __pyx_v_self->internal_state);
    1235 +    goto __pyx_L3;
    1236    }
    1237  
    1238    /* "mtrand.pyx":593
    1239 @@ -4993,7 +5152,7 @@
    1240   *         else:
    1241   */
    1242      __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 594; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    1243 -    __Pyx_GOTREF(((PyObject *)__pyx_t_4));
    1244 +    __Pyx_GOTREF(__pyx_t_4);
    1245      __Pyx_INCREF(__pyx_v_seed);
    1246      PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_seed);
    1247      __Pyx_GIVEREF(__pyx_v_seed);
    1248 @@ -5011,8 +5170,8 @@
    1249   *             obj = <ndarray>PyArray_ContiguousFromObject(seed, NPY_LONG, 1, 1)
    1250   */
    1251      __pyx_t_2 = __Pyx_PyInt_AsUnsignedLong(__pyx_v_iseed); if (unlikely((__pyx_t_2 == (unsigned long)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 595; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    1252 -    rk_seed(__pyx_t_2, ((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state);
    1253 -    goto __pyx_L6;
    1254 +    rk_seed(__pyx_t_2, __pyx_v_self->internal_state);
    1255 +    goto __pyx_L3;
    1256    }
    1257    /*else*/ {
    1258  
    1259 @@ -5036,9 +5195,9 @@
    1260   *
    1261   *     def get_state(self):
    1262   */
    1263 -    init_by_array(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state, ((unsigned long *)arrayObject_obj->data), (arrayObject_obj->dimensions[0]));
    1264 +    init_by_array(__pyx_v_self->internal_state, ((unsigned long *)arrayObject_obj->data), (arrayObject_obj->dimensions[0]));
    1265    }
    1266 -  __pyx_L6:;
    1267 +  __pyx_L3:;
    1268  
    1269    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    1270    goto __pyx_L0;
    1271 @@ -5055,6 +5214,18 @@
    1272    return __pyx_r;
    1273  }
    1274  
    1275 +/* Python wrapper */
    1276 +static PyObject *__pyx_pw_6mtrand_11RandomState_7get_state(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
    1277 +static char __pyx_doc_6mtrand_11RandomState_6get_state[] = "\n        get_state()\n\n        Return a tuple representing the internal state of the generator.\n\n        For more details, see `set_state`.\n\n        Returns\n        -------\n        out : tuple(str, ndarray of 624 uints, int, int, float)\n            The returned tuple has the following items:\n\n            1. the string 'MT19937'.\n            2. a 1-D array of 624 unsigned integer keys.\n            3. an integer ``pos``.\n            4. an integer ``has_gauss``.\n            5. a float ``cached_gaussian``.\n\n        See Also\n        --------\n        set_state\n\n        Notes\n        -----\n        `set_state` and `get_state` are not needed to work with any of the\n        random distributions in NumPy. If the internal state is manually altered,\n        the user should know exactly what he/she is doing.\n\n        ";
    1278 +static PyObject *__pyx_pw_6mtrand_11RandomState_7get_state(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
    1279 +  PyObject *__pyx_r = 0;
    1280 +  __Pyx_RefNannyDeclarations
    1281 +  __Pyx_RefNannySetupContext("get_state (wrapper)", 0);
    1282 +  __pyx_r = __pyx_pf_6mtrand_11RandomState_6get_state(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self));
    1283 +  __Pyx_RefNannyFinishContext();
    1284 +  return __pyx_r;
    1285 +}
    1286 +
    1287  /* "mtrand.pyx":601
    1288   *                 obj.dimensions[0])
    1289   *
    1290 @@ -5063,9 +5234,7 @@
    1291   *         get_state()
    1292   */
    1293  
    1294 -static PyObject *__pyx_pf_6mtrand_11RandomState_3get_state(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
    1295 -static char __pyx_doc_6mtrand_11RandomState_3get_state[] = "\n        get_state()\n\n        Return a tuple representing the internal state of the generator.\n\n        For more details, see `set_state`.\n\n        Returns\n        -------\n        out : tuple(str, ndarray of 624 uints, int, int, float)\n            The returned tuple has the following items:\n\n            1. the string 'MT19937'.\n            2. a 1-D array of 624 unsigned integer keys.\n            3. an integer ``pos``.\n            4. an integer ``has_gauss``.\n            5. a float ``cached_gaussian``.\n\n        See Also\n        --------\n        set_state\n\n        Notes\n        -----\n        `set_state` and `get_state` are not needed to work with any of the\n        random distributions in NumPy. If the internal state is manually altered,\n        the user should know exactly what he/she is doing.\n\n        ";
    1296 -static PyObject *__pyx_pf_6mtrand_11RandomState_3get_state(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
    1297 +static PyObject *__pyx_pf_6mtrand_11RandomState_6get_state(struct __pyx_obj_6mtrand_RandomState *__pyx_v_self) {
    1298    PyArrayObject *arrayObject_state = 0;
    1299    PyObject *__pyx_r = NULL;
    1300    __Pyx_RefNannyDeclarations
    1301 @@ -5076,7 +5245,7 @@
    1302    int __pyx_lineno = 0;
    1303    const char *__pyx_filename = NULL;
    1304    int __pyx_clineno = 0;
    1305 -  __Pyx_RefNannySetupContext("get_state");
    1306 +  __Pyx_RefNannySetupContext("get_state", 0);
    1307  
    1308    /* "mtrand.pyx":632
    1309   *         """
    1310 @@ -5096,7 +5265,7 @@
    1311    __Pyx_GOTREF(__pyx_t_3);
    1312    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    1313    __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 632; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    1314 -  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
    1315 +  __Pyx_GOTREF(__pyx_t_1);
    1316    __Pyx_INCREF(__pyx_int_624);
    1317    PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_int_624);
    1318    __Pyx_GIVEREF(__pyx_int_624);
    1319 @@ -5118,7 +5287,7 @@
    1320   *         state = <ndarray>np.asarray(state, np.uint32)
    1321   *         return ('MT19937', state, self.internal_state.pos,
    1322   */
    1323 -  memcpy(((void *)arrayObject_state->data), ((void *)((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state->key), (624 * (sizeof(long))));
    1324 +  memcpy(((void *)arrayObject_state->data), ((void *)__pyx_v_self->internal_state->key), (624 * (sizeof(long))));
    1325  
    1326    /* "mtrand.pyx":634
    1327   *         state = <ndarray>np.empty(624, np.uint)
    1328 @@ -5138,7 +5307,7 @@
    1329    __Pyx_GOTREF(__pyx_t_2);
    1330    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    1331    __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 634; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    1332 -  __Pyx_GOTREF(((PyObject *)__pyx_t_3));
    1333 +  __Pyx_GOTREF(__pyx_t_3);
    1334    __Pyx_INCREF(((PyObject *)arrayObject_state));
    1335    PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)arrayObject_state));
    1336    __Pyx_GIVEREF(((PyObject *)arrayObject_state));
    1337 @@ -5162,7 +5331,7 @@
    1338   *
    1339   */
    1340    __Pyx_XDECREF(__pyx_r);
    1341 -  __pyx_t_2 = PyInt_FromLong(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state->pos); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 635; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    1342 +  __pyx_t_2 = PyInt_FromLong(__pyx_v_self->internal_state->pos); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 635; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    1343    __Pyx_GOTREF(__pyx_t_2);
    1344  
    1345    /* "mtrand.pyx":636
    1346 @@ -5172,12 +5341,12 @@
    1347   *
    1348   *     def set_state(self, state):
    1349   */
    1350 -  __pyx_t_3 = PyInt_FromLong(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state->has_gauss); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 636; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    1351 +  __pyx_t_3 = PyInt_FromLong(__pyx_v_self->internal_state->has_gauss); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 636; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    1352    __Pyx_GOTREF(__pyx_t_3);
    1353 -  __pyx_t_1 = PyFloat_FromDouble(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state->gauss); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 636; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    1354 +  __pyx_t_1 = PyFloat_FromDouble(__pyx_v_self->internal_state->gauss); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 636; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    1355    __Pyx_GOTREF(__pyx_t_1);
    1356    __pyx_t_4 = PyTuple_New(5); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 635; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    1357 -  __Pyx_GOTREF(((PyObject *)__pyx_t_4));
    1358 +  __Pyx_GOTREF(__pyx_t_4);
    1359    __Pyx_INCREF(((PyObject *)__pyx_n_s__MT19937));
    1360    PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)__pyx_n_s__MT19937));
    1361    __Pyx_GIVEREF(((PyObject *)__pyx_n_s__MT19937));
    1362 @@ -5213,6 +5382,18 @@
    1363    return __pyx_r;
    1364  }
    1365  
    1366 +/* Python wrapper */
    1367 +static PyObject *__pyx_pw_6mtrand_11RandomState_9set_state(PyObject *__pyx_v_self, PyObject *__pyx_v_state); /*proto*/
    1368 +static char __pyx_doc_6mtrand_11RandomState_8set_state[] = "\n        set_state(state)\n\n        Set the internal state of the generator from a tuple.\n\n        For use if one has reason to manually (re-)set the internal state of the\n        \"Mersenne Twister\"[1]_ pseudo-random number generating algorithm.\n\n        Parameters\n        ----------\n        state : tuple(str, ndarray of 624 uints, int, int, float)\n            The `state` tuple has the following items:\n\n            1. the string 'MT19937', specifying the Mersenne Twister algorithm.\n            2. a 1-D array of 624 unsigned integers ``keys``.\n            3. an integer ``pos``.\n            4. an integer ``has_gauss``.\n            5. a float ``cached_gaussian``.\n\n        Returns\n        -------\n        out : None\n            Returns 'None' on success.\n\n        See Also\n        --------\n        get_state\n\n        Notes\n        -----\n        `set_state` and `get_state` are not needed to work with any of the\n        random distributions in NumPy. If the internal state is manually altered,\n        the user should know exactly what he/she is doing.\n\n        For backwards compatibility, the form (str, array of 624 uints, int) is\n        also accepted although it is missing some information about the cached\n        Gaussian value: ``state = ('MT19937', keys, pos)``.\n\n        References\n        ----------\n        .. [1] M. Matsumoto and T. Nishimura, \"Mersenne Twister: A\n           623-dimensionally equidistributed uniform pseudorandom number\n           generator,\" *ACM Trans. on Modeling and Computer Simulation*,\n           Vol. 8, No. 1, pp. 3-30, Jan. 1998.\n\n        ";
    1369 +static PyObject *__pyx_pw_6mtrand_11RandomState_9set_state(PyObject *__pyx_v_self, PyObject *__pyx_v_state) {
    1370 +  PyObject *__pyx_r = 0;
    1371 +  __Pyx_RefNannyDeclarations
    1372 +  __Pyx_RefNannySetupContext("set_state (wrapper)", 0);
    1373 +  __pyx_r = __pyx_pf_6mtrand_11RandomState_8set_state(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self), ((PyObject *)__pyx_v_state));
    1374 +  __Pyx_RefNannyFinishContext();
    1375 +  return __pyx_r;
    1376 +}
    1377 +
    1378  /* "mtrand.pyx":638
    1379   *             self.internal_state.has_gauss, self.internal_state.gauss)
    1380   *
    1381 @@ -5221,9 +5402,7 @@
    1382   *         set_state(state)
    1383   */
    1384  
    1385 -static PyObject *__pyx_pf_6mtrand_11RandomState_4set_state(PyObject *__pyx_v_self, PyObject *__pyx_v_state); /*proto*/
    1386 -static char __pyx_doc_6mtrand_11RandomState_4set_state[] = "\n        set_state(state)\n\n        Set the internal state of the generator from a tuple.\n\n        For use if one has reason to manually (re-)set the internal state of the\n        \"Mersenne Twister\"[1]_ pseudo-random number generating algorithm.\n\n        Parameters\n        ----------\n        state : tuple(str, ndarray of 624 uints, int, int, float)\n            The `state` tuple has the following items:\n\n            1. the string 'MT19937', specifying the Mersenne Twister algorithm.\n            2. a 1-D array of 624 unsigned integers ``keys``.\n            3. an integer ``pos``.\n            4. an integer ``has_gauss``.\n            5. a float ``cached_gaussian``.\n\n        Returns\n        -------\n        out : None\n            Returns 'None' on success.\n\n        See Also\n        --------\n        get_state\n\n        Notes\n        -----\n        `set_state` and `get_state` are not needed to work with any of the\n        random distributions in NumPy. If the internal state is manually altered,\n        the user should know exactly what he/she is doing.\n\n        For backwards compatibility, the form (str, array of 624 uints, int) is\n        also accepted although it is missing some information about the cached\n        Gaussian value: ``state = ('MT19937', keys, pos)``.\n\n        References\n        ----------\n        .. [1] M. Matsumoto and T. Nishimura, \"Mersenne Twister: A\n           623-dimensionally equidistributed uniform pseudorandom number\n           generator,\" *ACM Trans. on Modeling and Computer Simulation*,\n           Vol. 8, No. 1, pp. 3-30, Jan. 1998.\n\n        ";
    1387 -static PyObject *__pyx_pf_6mtrand_11RandomState_4set_state(PyObject *__pyx_v_self, PyObject *__pyx_v_state) {
    1388 +static PyObject *__pyx_pf_6mtrand_11RandomState_8set_state(struct __pyx_obj_6mtrand_RandomState *__pyx_v_self, PyObject *__pyx_v_state) {
    1389    PyArrayObject *arrayObject_obj = 0;
    1390    int __pyx_v_pos;
    1391    PyObject *__pyx_v_algorithm_name = NULL;
    1392 @@ -5247,7 +5426,7 @@
    1393    int __pyx_lineno = 0;
    1394    const char *__pyx_filename = NULL;
    1395    int __pyx_clineno = 0;
    1396 -  __Pyx_RefNannySetupContext("set_state");
    1397 +  __Pyx_RefNannySetupContext("set_state", 0);
    1398  
    1399    /* "mtrand.pyx":687
    1400   *         cdef ndarray obj "arrayObject_obj"
    1401 @@ -5268,7 +5447,9 @@
    1402   *             raise ValueError("algorithm must be 'MT19937'")
    1403   *         key, pos = state[1:3]
    1404   */
    1405 -  __pyx_t_2 = __Pyx_PyString_Equals(__pyx_v_algorithm_name, ((PyObject *)__pyx_n_s__MT19937), Py_NE); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 688; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    1406 +  __pyx_t_1 = PyObject_RichCompare(__pyx_v_algorithm_name, ((PyObject *)__pyx_n_s__MT19937), Py_NE); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 688; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    1407 +  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 688; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    1408 +  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    1409    if (__pyx_t_2) {
    1410  
    1411      /* "mtrand.pyx":689
    1412 @@ -5283,9 +5464,9 @@
    1413      __Pyx_Raise(__pyx_t_1, 0, 0, 0);
    1414      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    1415      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 689; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    1416 -    goto __pyx_L5;
    1417 +    goto __pyx_L3;
    1418    }
    1419 -  __pyx_L5:;
    1420 +  __pyx_L3:;
    1421  
    1422    /* "mtrand.pyx":690
    1423   *         if algorithm_name != 'MT19937':
    1424 @@ -5298,45 +5479,52 @@
    1425    __Pyx_GOTREF(__pyx_t_1);
    1426    if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) {
    1427      PyObject* sequence = __pyx_t_1;
    1428 +    #if CYTHON_COMPILING_IN_CPYTHON
    1429 +    Py_ssize_t size = Py_SIZE(sequence);
    1430 +    #else
    1431 +    Py_ssize_t size = PySequence_Size(sequence);
    1432 +    #endif
    1433 +    if (unlikely(size != 2)) {
    1434 +      if (size > 2) __Pyx_RaiseTooManyValuesError(2);
    1435 +      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
    1436 +      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 690; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    1437 +    }
    1438 +    #if CYTHON_COMPILING_IN_CPYTHON
    1439      if (likely(PyTuple_CheckExact(sequence))) {
    1440 -      if (unlikely(PyTuple_GET_SIZE(sequence) != 2)) {
    1441 -        if (PyTuple_GET_SIZE(sequence) > 2) __Pyx_RaiseTooManyValuesError(2);
    1442 -        else __Pyx_RaiseNeedMoreValuesError(PyTuple_GET_SIZE(sequence));
    1443 -        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 690; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    1444 -      }
    1445        __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0);
    1446        __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1);
    1447      } else {
    1448 -      if (unlikely(PyList_GET_SIZE(sequence) != 2)) {
    1449 -        if (PyList_GET_SIZE(sequence) > 2) __Pyx_RaiseTooManyValuesError(2);
    1450 -        else __Pyx_RaiseNeedMoreValuesError(PyList_GET_SIZE(sequence));
    1451 -        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 690; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    1452 -      }
    1453        __pyx_t_3 = PyList_GET_ITEM(sequence, 0);
    1454        __pyx_t_4 = PyList_GET_ITEM(sequence, 1);
    1455      }
    1456      __Pyx_INCREF(__pyx_t_3);
    1457      __Pyx_INCREF(__pyx_t_4);
    1458 +    #else
    1459 +    __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 690; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    1460 +    __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 690; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    1461 +    #endif
    1462      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    1463 -  } else {
    1464 +  } else
    1465 +  {
    1466      Py_ssize_t index = -1;
    1467      __pyx_t_5 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 690; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    1468      __Pyx_GOTREF(__pyx_t_5);
    1469      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    1470      __pyx_t_6 = Py_TYPE(__pyx_t_5)->tp_iternext;
    1471 -    index = 0; __pyx_t_3 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_3)) goto __pyx_L6_unpacking_failed;
    1472 +    index = 0; __pyx_t_3 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_3)) goto __pyx_L4_unpacking_failed;
    1473      __Pyx_GOTREF(__pyx_t_3);
    1474 -    index = 1; __pyx_t_4 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_4)) goto __pyx_L6_unpacking_failed;
    1475 +    index = 1; __pyx_t_4 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_4)) goto __pyx_L4_unpacking_failed;
    1476      __Pyx_GOTREF(__pyx_t_4);
    1477      if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_5), 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 690; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    1478 +    __pyx_t_6 = NULL;
    1479      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    1480 -    goto __pyx_L7_unpacking_done;
    1481 -    __pyx_L6_unpacking_failed:;
    1482 +    goto __pyx_L5_unpacking_done;
    1483 +    __pyx_L4_unpacking_failed:;
    1484      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    1485 -    if (PyErr_Occurred() && PyErr_ExceptionMatches(PyExc_StopIteration)) PyErr_Clear();
    1486 -    if (!PyErr_Occurred()) __Pyx_RaiseNeedMoreValuesError(index);
    1487 +    __pyx_t_6 = NULL;
    1488 +    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    1489      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 690; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    1490 -    __pyx_L7_unpacking_done:;
    1491 +    __pyx_L5_unpacking_done:;
    1492    }
    1493    __pyx_t_7 = __Pyx_PyInt_AsInt(__pyx_t_4); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 690; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    1494    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    1495 @@ -5376,7 +5564,7 @@
    1496      __Pyx_GOTREF(__pyx_t_1);
    1497      __pyx_v_cached_gaussian = __pyx_t_1;
    1498      __pyx_t_1 = 0;
    1499 -    goto __pyx_L8;
    1500 +    goto __pyx_L6;
    1501    }
    1502    /*else*/ {
    1503  
    1504 @@ -5391,52 +5579,59 @@
    1505      __Pyx_GOTREF(__pyx_t_1);
    1506      if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) {
    1507        PyObject* sequence = __pyx_t_1;
    1508 +      #if CYTHON_COMPILING_IN_CPYTHON
    1509 +      Py_ssize_t size = Py_SIZE(sequence);
    1510 +      #else
    1511 +      Py_ssize_t size = PySequence_Size(sequence);
    1512 +      #endif
    1513 +      if (unlikely(size != 2)) {
    1514 +        if (size > 2) __Pyx_RaiseTooManyValuesError(2);
    1515 +        else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
    1516 +        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 695; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    1517 +      }
    1518 +      #if CYTHON_COMPILING_IN_CPYTHON
    1519        if (likely(PyTuple_CheckExact(sequence))) {
    1520 -        if (unlikely(PyTuple_GET_SIZE(sequence) != 2)) {
    1521 -          if (PyTuple_GET_SIZE(sequence) > 2) __Pyx_RaiseTooManyValuesError(2);
    1522 -          else __Pyx_RaiseNeedMoreValuesError(PyTuple_GET_SIZE(sequence));
    1523 -          {__pyx_filename = __pyx_f[0]; __pyx_lineno = 695; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    1524 -        }
    1525          __pyx_t_4 = PyTuple_GET_ITEM(sequence, 0);
    1526          __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1);
    1527        } else {
    1528 -        if (unlikely(PyList_GET_SIZE(sequence) != 2)) {
    1529 -          if (PyList_GET_SIZE(sequence) > 2) __Pyx_RaiseTooManyValuesError(2);
    1530 -          else __Pyx_RaiseNeedMoreValuesError(PyList_GET_SIZE(sequence));
    1531 -          {__pyx_filename = __pyx_f[0]; __pyx_lineno = 695; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    1532 -        }
    1533          __pyx_t_4 = PyList_GET_ITEM(sequence, 0);
    1534          __pyx_t_3 = PyList_GET_ITEM(sequence, 1);
    1535        }
    1536        __Pyx_INCREF(__pyx_t_4);
    1537        __Pyx_INCREF(__pyx_t_3);
    1538 +      #else
    1539 +      __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 695; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    1540 +      __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 695; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    1541 +      #endif
    1542        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    1543 -    } else {
    1544 +    } else
    1545 +    {
    1546        Py_ssize_t index = -1;
    1547        __pyx_t_5 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 695; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    1548        __Pyx_GOTREF(__pyx_t_5);
    1549        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    1550        __pyx_t_6 = Py_TYPE(__pyx_t_5)->tp_iternext;
    1551 -      index = 0; __pyx_t_4 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_4)) goto __pyx_L9_unpacking_failed;
    1552 +      index = 0; __pyx_t_4 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_4)) goto __pyx_L7_unpacking_failed;
    1553        __Pyx_GOTREF(__pyx_t_4);
    1554 -      index = 1; __pyx_t_3 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_3)) goto __pyx_L9_unpacking_failed;
    1555 +      index = 1; __pyx_t_3 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_3)) goto __pyx_L7_unpacking_failed;
    1556        __Pyx_GOTREF(__pyx_t_3);
    1557        if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_5), 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 695; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    1558 +      __pyx_t_6 = NULL;
    1559        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    1560 -      goto __pyx_L10_unpacking_done;
    1561 -      __pyx_L9_unpacking_failed:;
    1562 +      goto __pyx_L8_unpacking_done;
    1563 +      __pyx_L7_unpacking_failed:;
    1564        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    1565 -      if (PyErr_Occurred() && PyErr_ExceptionMatches(PyExc_StopIteration)) PyErr_Clear();
    1566 -      if (!PyErr_Occurred()) __Pyx_RaiseNeedMoreValuesError(index);
    1567 +      __pyx_t_6 = NULL;
    1568 +      if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    1569        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 695; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    1570 -      __pyx_L10_unpacking_done:;
    1571 +      __pyx_L8_unpacking_done:;
    1572      }
    1573      __pyx_v_has_gauss = __pyx_t_4;
    1574      __pyx_t_4 = 0;
    1575      __pyx_v_cached_gaussian = __pyx_t_3;
    1576      __pyx_t_3 = 0;
    1577    }
    1578 -  __pyx_L8:;
    1579 +  __pyx_L6:;
    1580  
    1581    /* "mtrand.pyx":696
    1582   *         else:
    1583 @@ -5459,7 +5654,7 @@
    1584   *         except TypeError:
    1585   *             # compatibility -- could be an older pickle
    1586   */
    1587 -      __pyx_t_1 = PyArray_ContiguousFromObject(__pyx_v_key, NPY_ULONG, 1, 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 697; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
    1588 +      __pyx_t_1 = PyArray_ContiguousFromObject(__pyx_v_key, NPY_ULONG, 1, 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 697; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
    1589        __Pyx_GOTREF(__pyx_t_1);
    1590        __Pyx_INCREF(((PyObject *)((PyArrayObject *)__pyx_t_1)));
    1591        arrayObject_obj = ((PyArrayObject *)__pyx_t_1);
    1592 @@ -5468,8 +5663,8 @@
    1593      __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
    1594      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
    1595      __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
    1596 -    goto __pyx_L18_try_end;
    1597 -    __pyx_L11_error:;
    1598 +    goto __pyx_L16_try_end;
    1599 +    __pyx_L9_error:;
    1600      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    1601      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    1602      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    1603 @@ -5485,7 +5680,7 @@
    1604      __pyx_t_7 = PyErr_ExceptionMatches(__pyx_builtin_TypeError);
    1605      if (__pyx_t_7) {
    1606        __Pyx_AddTraceback("mtrand.RandomState.set_state", __pyx_clineno, __pyx_lineno, __pyx_filename);
    1607 -      if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_3, &__pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 698; __pyx_clineno = __LINE__; goto __pyx_L13_except_error;}
    1608 +      if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_3, &__pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 698; __pyx_clineno = __LINE__; goto __pyx_L11_except_error;}
    1609        __Pyx_GOTREF(__pyx_t_1);
    1610        __Pyx_GOTREF(__pyx_t_3);
    1611        __Pyx_GOTREF(__pyx_t_4);
    1612 @@ -5497,7 +5692,7 @@
    1613   *         if obj.dimensions[0] != 624:
    1614   *             raise ValueError("state must be 624 longs")
    1615   */
    1616 -      __pyx_t_5 = PyArray_ContiguousFromObject(__pyx_v_key, NPY_LONG, 1, 1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 700; __pyx_clineno = __LINE__; goto __pyx_L13_except_error;}
    1617 +      __pyx_t_5 = PyArray_ContiguousFromObject(__pyx_v_key, NPY_LONG, 1, 1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 700; __pyx_clineno = __LINE__; goto __pyx_L11_except_error;}
    1618        __Pyx_GOTREF(__pyx_t_5);
    1619        __Pyx_INCREF(((PyObject *)((PyArrayObject *)__pyx_t_5)));
    1620        __Pyx_XDECREF(((PyObject *)arrayObject_obj));
    1621 @@ -5506,20 +5701,20 @@
    1622        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    1623        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    1624        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    1625 -      goto __pyx_L12_exception_handled;
    1626 +      goto __pyx_L10_exception_handled;
    1627      }
    1628 -    __pyx_L13_except_error:;
    1629 +    __pyx_L11_except_error:;
    1630      __Pyx_XGIVEREF(__pyx_t_9);
    1631      __Pyx_XGIVEREF(__pyx_t_10);
    1632      __Pyx_XGIVEREF(__pyx_t_11);
    1633      __Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11);
    1634      goto __pyx_L1_error;
    1635 -    __pyx_L12_exception_handled:;
    1636 +    __pyx_L10_exception_handled:;
    1637      __Pyx_XGIVEREF(__pyx_t_9);
    1638      __Pyx_XGIVEREF(__pyx_t_10);
    1639      __Pyx_XGIVEREF(__pyx_t_11);
    1640      __Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11);
    1641 -    __pyx_L18_try_end:;
    1642 +    __pyx_L16_try_end:;
    1643    }
    1644  
    1645    /* "mtrand.pyx":701
    1646 @@ -5544,9 +5739,9 @@
    1647      __Pyx_Raise(__pyx_t_4, 0, 0, 0);
    1648      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    1649      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 702; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    1650 -    goto __pyx_L21;
    1651 +    goto __pyx_L19;
    1652    }
    1653 -  __pyx_L21:;
    1654 +  __pyx_L19:;
    1655  
    1656    /* "mtrand.pyx":703
    1657   *         if obj.dimensions[0] != 624:
    1658 @@ -5555,7 +5750,7 @@
    1659   *         self.internal_state.pos = pos
    1660   *         self.internal_state.has_gauss = has_gauss
    1661   */
    1662 -  memcpy(((void *)((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state->key), ((void *)arrayObject_obj->data), (624 * (sizeof(long))));
    1663 +  memcpy(((void *)__pyx_v_self->internal_state->key), ((void *)arrayObject_obj->data), (624 * (sizeof(long))));
    1664  
    1665    /* "mtrand.pyx":704
    1666   *             raise ValueError("state must be 624 longs")
    1667 @@ -5564,7 +5759,7 @@
    1668   *         self.internal_state.has_gauss = has_gauss
    1669   *         self.internal_state.gauss = cached_gaussian
    1670   */
    1671 -  ((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state->pos = __pyx_v_pos;
    1672 +  __pyx_v_self->internal_state->pos = __pyx_v_pos;
    1673  
    1674    /* "mtrand.pyx":705
    1675   *         memcpy(<void*>(self.internal_state.key), <void*>(obj.data), 624*sizeof(long))
    1676 @@ -5574,7 +5769,7 @@
    1677   *
    1678   */
    1679    __pyx_t_7 = __Pyx_PyInt_AsInt(__pyx_v_has_gauss); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 705; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    1680 -  ((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state->has_gauss = __pyx_t_7;
    1681 +  __pyx_v_self->internal_state->has_gauss = __pyx_t_7;
    1682  
    1683    /* "mtrand.pyx":706
    1684   *         self.internal_state.pos = pos
    1685 @@ -5584,7 +5779,7 @@
    1686   *     # Pickling support:
    1687   */
    1688    __pyx_t_12 = __pyx_PyFloat_AsDouble(__pyx_v_cached_gaussian); if (unlikely((__pyx_t_12 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 706; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    1689 -  ((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state->gauss = __pyx_t_12;
    1690 +  __pyx_v_self->internal_state->gauss = __pyx_t_12;
    1691  
    1692    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    1693    goto __pyx_L0;
    1694 @@ -5606,6 +5801,17 @@
    1695    return __pyx_r;
    1696  }
    1697  
    1698 +/* Python wrapper */
    1699 +static PyObject *__pyx_pw_6mtrand_11RandomState_11__getstate__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
    1700 +static PyObject *__pyx_pw_6mtrand_11RandomState_11__getstate__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
    1701 +  PyObject *__pyx_r = 0;
    1702 +  __Pyx_RefNannyDeclarations
    1703 +  __Pyx_RefNannySetupContext("__getstate__ (wrapper)", 0);
    1704 +  __pyx_r = __pyx_pf_6mtrand_11RandomState_10__getstate__(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self));
    1705 +  __Pyx_RefNannyFinishContext();
    1706 +  return __pyx_r;
    1707 +}
    1708 +
    1709  /* "mtrand.pyx":709
    1710   *
    1711   *     # Pickling support:
    1712 @@ -5614,8 +5820,7 @@
    1713   *
    1714   */
    1715  
    1716 -static PyObject *__pyx_pf_6mtrand_11RandomState_5__getstate__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
    1717 -static PyObject *__pyx_pf_6mtrand_11RandomState_5__getstate__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
    1718 +static PyObject *__pyx_pf_6mtrand_11RandomState_10__getstate__(struct __pyx_obj_6mtrand_RandomState *__pyx_v_self) {
    1719    PyObject *__pyx_r = NULL;
    1720    __Pyx_RefNannyDeclarations
    1721    PyObject *__pyx_t_1 = NULL;
    1722 @@ -5623,7 +5828,7 @@
    1723    int __pyx_lineno = 0;
    1724    const char *__pyx_filename = NULL;
    1725    int __pyx_clineno = 0;
    1726 -  __Pyx_RefNannySetupContext("__getstate__");
    1727 +  __Pyx_RefNannySetupContext("__getstate__", 0);
    1728  
    1729    /* "mtrand.pyx":710
    1730   *     # Pickling support:
    1731 @@ -5633,7 +5838,7 @@
    1732   *     def __setstate__(self, state):
    1733   */
    1734    __Pyx_XDECREF(__pyx_r);
    1735 -  __pyx_t_1 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__get_state); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 710; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    1736 +  __pyx_t_1 = PyObject_GetAttr(((PyObject *)__pyx_v_self), __pyx_n_s__get_state); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 710; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    1737    __Pyx_GOTREF(__pyx_t_1);
    1738    __pyx_t_2 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 710; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    1739    __Pyx_GOTREF(__pyx_t_2);
    1740 @@ -5655,6 +5860,17 @@
    1741    return __pyx_r;
    1742  }
    1743  
    1744 +/* Python wrapper */
    1745 +static PyObject *__pyx_pw_6mtrand_11RandomState_13__setstate__(PyObject *__pyx_v_self, PyObject *__pyx_v_state); /*proto*/
    1746 +static PyObject *__pyx_pw_6mtrand_11RandomState_13__setstate__(PyObject *__pyx_v_self, PyObject *__pyx_v_state) {
    1747 +  PyObject *__pyx_r = 0;
    1748 +  __Pyx_RefNannyDeclarations
    1749 +  __Pyx_RefNannySetupContext("__setstate__ (wrapper)", 0);
    1750 +  __pyx_r = __pyx_pf_6mtrand_11RandomState_12__setstate__(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self), ((PyObject *)__pyx_v_state));
    1751 +  __Pyx_RefNannyFinishContext();
    1752 +  return __pyx_r;
    1753 +}
    1754 +
    1755  /* "mtrand.pyx":712
    1756   *         return self.get_state()
    1757   *
    1758 @@ -5663,8 +5879,7 @@
    1759   *
    1760   */
    1761  
    1762 -static PyObject *__pyx_pf_6mtrand_11RandomState_6__setstate__(PyObject *__pyx_v_self, PyObject *__pyx_v_state); /*proto*/
    1763 -static PyObject *__pyx_pf_6mtrand_11RandomState_6__setstate__(PyObject *__pyx_v_self, PyObject *__pyx_v_state) {
    1764 +static PyObject *__pyx_pf_6mtrand_11RandomState_12__setstate__(struct __pyx_obj_6mtrand_RandomState *__pyx_v_self, PyObject *__pyx_v_state) {
    1765    PyObject *__pyx_r = NULL;
    1766    __Pyx_RefNannyDeclarations
    1767    PyObject *__pyx_t_1 = NULL;
    1768 @@ -5673,7 +5888,7 @@
    1769    int __pyx_lineno = 0;
    1770    const char *__pyx_filename = NULL;
    1771    int __pyx_clineno = 0;
    1772 -  __Pyx_RefNannySetupContext("__setstate__");
    1773 +  __Pyx_RefNannySetupContext("__setstate__", 0);
    1774  
    1775    /* "mtrand.pyx":713
    1776   *
    1777 @@ -5682,10 +5897,10 @@
    1778   *
    1779   *     def __reduce__(self):
    1780   */
    1781 -  __pyx_t_1 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__set_state); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 713; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    1782 +  __pyx_t_1 = PyObject_GetAttr(((PyObject *)__pyx_v_self), __pyx_n_s__set_state); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 713; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    1783    __Pyx_GOTREF(__pyx_t_1);
    1784    __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 713; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    1785 -  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
    1786 +  __Pyx_GOTREF(__pyx_t_2);
    1787    __Pyx_INCREF(__pyx_v_state);
    1788    PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_state);
    1789    __Pyx_GIVEREF(__pyx_v_state);
    1790 @@ -5709,6 +5924,17 @@
    1791    return __pyx_r;
    1792  }
    1793  
    1794 +/* Python wrapper */
    1795 +static PyObject *__pyx_pw_6mtrand_11RandomState_15__reduce__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
    1796 +static PyObject *__pyx_pw_6mtrand_11RandomState_15__reduce__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
    1797 +  PyObject *__pyx_r = 0;
    1798 +  __Pyx_RefNannyDeclarations
    1799 +  __Pyx_RefNannySetupContext("__reduce__ (wrapper)", 0);
    1800 +  __pyx_r = __pyx_pf_6mtrand_11RandomState_14__reduce__(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self));
    1801 +  __Pyx_RefNannyFinishContext();
    1802 +  return __pyx_r;
    1803 +}
    1804 +
    1805  /* "mtrand.pyx":715
    1806   *         self.set_state(state)
    1807   *
    1808 @@ -5717,8 +5943,7 @@
    1809   *
    1810   */
    1811  
    1812 -static PyObject *__pyx_pf_6mtrand_11RandomState_7__reduce__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
    1813 -static PyObject *__pyx_pf_6mtrand_11RandomState_7__reduce__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
    1814 +static PyObject *__pyx_pf_6mtrand_11RandomState_14__reduce__(struct __pyx_obj_6mtrand_RandomState *__pyx_v_self) {
    1815    PyObject *__pyx_r = NULL;
    1816    __Pyx_RefNannyDeclarations
    1817    PyObject *__pyx_t_1 = NULL;
    1818 @@ -5727,7 +5952,7 @@
    1819    int __pyx_lineno = 0;
    1820    const char *__pyx_filename = NULL;
    1821    int __pyx_clineno = 0;
    1822 -  __Pyx_RefNannySetupContext("__reduce__");
    1823 +  __Pyx_RefNannySetupContext("__reduce__", 0);
    1824  
    1825    /* "mtrand.pyx":716
    1826   *
    1827 @@ -5745,13 +5970,13 @@
    1828    __pyx_t_1 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s____RandomState_ctor); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 716; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    1829    __Pyx_GOTREF(__pyx_t_1);
    1830    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    1831 -  __pyx_t_2 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__get_state); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 716; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    1832 +  __pyx_t_2 = PyObject_GetAttr(((PyObject *)__pyx_v_self), __pyx_n_s__get_state); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 716; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    1833    __Pyx_GOTREF(__pyx_t_2);
    1834    __pyx_t_3 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 716; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    1835    __Pyx_GOTREF(__pyx_t_3);
    1836    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    1837    __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 716; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    1838 -  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
    1839 +  __Pyx_GOTREF(__pyx_t_2);
    1840    PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
    1841    __Pyx_GIVEREF(__pyx_t_1);
    1842    __Pyx_INCREF(((PyObject *)__pyx_empty_tuple));
    1843 @@ -5779,38 +6004,36 @@
    1844    return __pyx_r;
    1845  }
    1846  
    1847 -/* "mtrand.pyx":719
    1848 +/* Python wrapper */
    1849 +static PyObject *__pyx_pw_6mtrand_11RandomState_17random_sample(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
    1850 +static char __pyx_doc_6mtrand_11RandomState_16random_sample[] = "\n        random_sample(size=None)\n\n        Return random floats in the half-open interval [0.0, 1.0).\n\n        Results are from the \"continuous uniform\" distribution over the\n        stated interval.  To sample :math:`Unif[a, b), b > a` multiply\n        the output of `random_sample` by `(b-a)` and add `a`::\n\n          (b - a) * random_sample() + a\n\n        Parameters\n        ----------\n        size : int or tuple of ints, optional\n            Defines the shape of the returned array of random floats. If None\n            (the default), returns a single float.\n\n        Returns\n        -------\n        out : float or ndarray of floats\n            Array of random floats of shape `size` (unless ``size=None``, in which\n            case a single float is returned).\n\n        Examples\n        --------\n        >>> np.random.random_sample()\n        0.47108547995356098\n        >>> type(np.random.random_sample())\n        <type 'float'>\n        >>> np.random.random_sample((5,))\n        array([ 0.30220482,  0.86820401,  0.1654503 ,  0.11659149,  0.54323428])\n\n        Three-by-two array of random numbers from [-5, 0):\n\n        >>> 5 * np.random.random_sample((3, 2)) - 5\n        array([[-3.99149989, -0.52338984],\n               [-2.99091858, -0.79479508],\n               [-1.23204345, -1.75224494]])\n\n        ";
    1851 +static PyObject *__pyx_pw_6mtrand_11RandomState_17random_sample(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
    1852 +  PyObject *__pyx_v_size = 0;
    1853 +  PyObject *__pyx_r = 0;
    1854 +  __Pyx_RefNannyDeclarations
    1855 +  __Pyx_RefNannySetupContext("random_sample (wrapper)", 0);
    1856 +  {
    1857 +    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__size,0};
    1858 +    PyObject* values[1] = {0};
    1859 +
    1860 +    /* "mtrand.pyx":719
    1861   *
    1862   *     # Basic distributions:
    1863   *     def random_sample(self, size=None):             # <<<<<<<<<<<<<<
    1864   *         """
    1865   *         random_sample(size=None)
    1866   */
    1867 -
    1868 -static PyObject *__pyx_pf_6mtrand_11RandomState_8random_sample(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
    1869 -static char __pyx_doc_6mtrand_11RandomState_8random_sample[] = "\n        random_sample(size=None)\n\n        Return random floats in the half-open interval [0.0, 1.0).\n\n        Results are from the \"continuous uniform\" distribution over the\n        stated interval.  To sample :math:`Unif[a, b), b > a` multiply\n        the output of `random_sample` by `(b-a)` and add `a`::\n\n          (b - a) * random_sample() + a\n\n        Parameters\n        ----------\n        size : int or tuple of ints, optional\n            Defines the shape of the returned array of random floats. If None\n            (the default), returns a single float.\n\n        Returns\n        -------\n        out : float or ndarray of floats\n            Array of random floats of shape `size` (unless ``size=None``, in which\n            case a single float is returned).\n\n        Examples\n        --------\n        >>> np.random.random_sample()\n        0.47108547995356098\n        >>> type(np.random.random_sample())\n        <type 'float'>\n        >>> np.random.random_sample((5,))\n        array([ 0.30220482,  0.86820401,  0.1654503 ,  0.11659149,  0.54323428])\n\n        Three-by-two array of random numbers from [-5, 0):\n\n        >>> 5 * np.random.random_sample((3, 2)) - 5\n        array([[-3.99149989, -0.52338984],\n               [-2.99091858, -0.79479508],\n               [-1.23204345, -1.75224494]])\n\n        ";
    1870 -static PyObject *__pyx_pf_6mtrand_11RandomState_8random_sample(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
    1871 -  PyObject *__pyx_v_size = 0;
    1872 -  PyObject *__pyx_r = NULL;
    1873 -  __Pyx_RefNannyDeclarations
    1874 -  PyObject *__pyx_t_1 = NULL;
    1875 -  int __pyx_lineno = 0;
    1876 -  const char *__pyx_filename = NULL;
    1877 -  int __pyx_clineno = 0;
    1878 -  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__size,0};
    1879 -  __Pyx_RefNannySetupContext("random_sample");
    1880 -  {
    1881 -    PyObject* values[1] = {0};
    1882      values[0] = ((PyObject *)Py_None);
    1883      if (unlikely(__pyx_kwds)) {
    1884        Py_ssize_t kw_args;
    1885 -      switch (PyTuple_GET_SIZE(__pyx_args)) {
    1886 +      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
    1887 +      switch (pos_args) {
    1888          case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    1889          case  0: break;
    1890          default: goto __pyx_L5_argtuple_error;
    1891        }
    1892        kw_args = PyDict_Size(__pyx_kwds);
    1893 -      switch (PyTuple_GET_SIZE(__pyx_args)) {
    1894 +      switch (pos_args) {
    1895          case  0:
    1896          if (kw_args > 0) {
    1897            PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__size);
    1898 @@ -5818,7 +6041,7 @@
    1899          }
    1900        }
    1901        if (unlikely(kw_args > 0)) {
    1902 -        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "random_sample") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 719; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    1903 +        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "random_sample") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 719; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    1904        }
    1905      } else {
    1906        switch (PyTuple_GET_SIZE(__pyx_args)) {
    1907 @@ -5837,6 +6060,19 @@
    1908    __Pyx_RefNannyFinishContext();
    1909    return NULL;
    1910    __pyx_L4_argument_unpacking_done:;
    1911 +  __pyx_r = __pyx_pf_6mtrand_11RandomState_16random_sample(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self), __pyx_v_size);
    1912 +  __Pyx_RefNannyFinishContext();
    1913 +  return __pyx_r;
    1914 +}
    1915 +
    1916 +static PyObject *__pyx_pf_6mtrand_11RandomState_16random_sample(struct __pyx_obj_6mtrand_RandomState *__pyx_v_self, PyObject *__pyx_v_size) {
    1917 +  PyObject *__pyx_r = NULL;
    1918 +  __Pyx_RefNannyDeclarations
    1919 +  PyObject *__pyx_t_1 = NULL;
    1920 +  int __pyx_lineno = 0;
    1921 +  const char *__pyx_filename = NULL;
    1922 +  int __pyx_clineno = 0;
    1923 +  __Pyx_RefNannySetupContext("random_sample", 0);
    1924  
    1925    /* "mtrand.pyx":760
    1926   *
    1927 @@ -5846,7 +6082,7 @@
    1928   *     def tomaxint(self, size=None):
    1929   */
    1930    __Pyx_XDECREF(__pyx_r);
    1931 -  __pyx_t_1 = __pyx_f_6mtrand_cont0_array(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state, rk_double, __pyx_v_size); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 760; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    1932 +  __pyx_t_1 = __pyx_f_6mtrand_cont0_array(__pyx_v_self->internal_state, rk_double, __pyx_v_size); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 760; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    1933    __Pyx_GOTREF(__pyx_t_1);
    1934    __pyx_r = __pyx_t_1;
    1935    __pyx_t_1 = 0;
    1936 @@ -5864,38 +6100,36 @@
    1937    return __pyx_r;
    1938  }
    1939  
    1940 -/* "mtrand.pyx":762
    1941 +/* Python wrapper */
    1942 +static PyObject *__pyx_pw_6mtrand_11RandomState_19tomaxint(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
    1943 +static char __pyx_doc_6mtrand_11RandomState_18tomaxint[] = "\n        tomaxint(size=None)\n\n        Random integers between 0 and ``sys.maxint``, inclusive.\n\n        Return a sample of uniformly distributed random integers in the interval\n        [0, ``sys.maxint``].\n\n        Parameters\n        ----------\n        size : tuple of ints, int, optional\n            Shape of output.  If this is, for example, (m,n,k), m*n*k samples\n            are generated.  If no shape is specified, a single sample is\n            returned.\n\n        Returns\n        -------\n        out : ndarray\n            Drawn samples, with shape `size`.\n\n        See Also\n        --------\n        randint : Uniform sampling over a given half-open interval of integers.\n        random_integers : Uniform sampling over a given closed interval of\n            integers.\n\n        Examples\n        --------\n        >>> RS = np.random.mtrand.RandomState() # need a RandomState object\n        >>> RS.tomaxint((2,2,2))\n        array([[[1170048599, 1600360186],\n                [ 739731006, 1947757578]],\n               [[1871712945,  752307660],\n                [1601631370, 1479324245]]])\n        >>> import sys\n        >>> sys.maxint\n        2147483647\n        >>> RS.tomaxint((2,2,2)) < sys.maxint\n        array([[[ True,  True],\n                [ True,  True]],\n               [[ True,  True],\n                [ True,  True]]], dtype=bool)\n\n        ";
    1944 +static PyObject *__pyx_pw_6mtrand_11RandomState_19tomaxint(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
    1945 +  PyObject *__pyx_v_size = 0;
    1946 +  PyObject *__pyx_r = 0;
    1947 +  __Pyx_RefNannyDeclarations
    1948 +  __Pyx_RefNannySetupContext("tomaxint (wrapper)", 0);
    1949 +  {
    1950 +    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__size,0};
    1951 +    PyObject* values[1] = {0};
    1952 +
    1953 +    /* "mtrand.pyx":762
    1954   *         return cont0_array(self.internal_state, rk_double, size)
    1955   *
    1956   *     def tomaxint(self, size=None):             # <<<<<<<<<<<<<<
    1957   *         """
    1958   *         tomaxint(size=None)
    1959   */
    1960 -
    1961 -static PyObject *__pyx_pf_6mtrand_11RandomState_9tomaxint(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
    1962 -static char __pyx_doc_6mtrand_11RandomState_9tomaxint[] = "\n        tomaxint(size=None)\n\n        Random integers between 0 and ``sys.maxint``, inclusive.\n\n        Return a sample of uniformly distributed random integers in the interval\n        [0, ``sys.maxint``].\n\n        Parameters\n        ----------\n        size : tuple of ints, int, optional\n            Shape of output.  If this is, for example, (m,n,k), m*n*k samples\n            are generated.  If no shape is specified, a single sample is\n            returned.\n\n        Returns\n        -------\n        out : ndarray\n            Drawn samples, with shape `size`.\n\n        See Also\n        --------\n        randint : Uniform sampling over a given half-open interval of integers.\n        random_integers : Uniform sampling over a given closed interval of\n            integers.\n\n        Examples\n        --------\n        >>> RS = np.random.mtrand.RandomState() # need a RandomState object\n        >>> RS.tomaxint((2,2,2))\n        array([[[1170048599, 1600360186],\n                [ 739731006, 1947757578]],\n               [[1871712945,  752307660],\n                [1601631370, 1479324245]]])\n        >>> import sys\n        >>> sys.maxint\n        2147483647\n        >>> RS.tomaxint((2,2,2)) < sys.maxint\n        array([[[ True,  True],\n                [ True,  True]],\n               [[ True,  True],\n                [ True,  True]]], dtype=bool)\n\n        ";
    1963 -static PyObject *__pyx_pf_6mtrand_11RandomState_9tomaxint(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
    1964 -  PyObject *__pyx_v_size = 0;
    1965 -  PyObject *__pyx_r = NULL;
    1966 -  __Pyx_RefNannyDeclarations
    1967 -  PyObject *__pyx_t_1 = NULL;
    1968 -  int __pyx_lineno = 0;
    1969 -  const char *__pyx_filename = NULL;
    1970 -  int __pyx_clineno = 0;
    1971 -  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__size,0};
    1972 -  __Pyx_RefNannySetupContext("tomaxint");
    1973 -  {
    1974 -    PyObject* values[1] = {0};
    1975      values[0] = ((PyObject *)Py_None);
    1976      if (unlikely(__pyx_kwds)) {
    1977        Py_ssize_t kw_args;
    1978 -      switch (PyTuple_GET_SIZE(__pyx_args)) {
    1979 +      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
    1980 +      switch (pos_args) {
    1981          case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    1982          case  0: break;
    1983          default: goto __pyx_L5_argtuple_error;
    1984        }
    1985        kw_args = PyDict_Size(__pyx_kwds);
    1986 -      switch (PyTuple_GET_SIZE(__pyx_args)) {
    1987 +      switch (pos_args) {
    1988          case  0:
    1989          if (kw_args > 0) {
    1990            PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__size);
    1991 @@ -5903,7 +6137,7 @@
    1992          }
    1993        }
    1994        if (unlikely(kw_args > 0)) {
    1995 -        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "tomaxint") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 762; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    1996 +        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "tomaxint") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 762; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    1997        }
    1998      } else {
    1999        switch (PyTuple_GET_SIZE(__pyx_args)) {
    2000 @@ -5922,6 +6156,19 @@
    2001    __Pyx_RefNannyFinishContext();
    2002    return NULL;
    2003    __pyx_L4_argument_unpacking_done:;
    2004 +  __pyx_r = __pyx_pf_6mtrand_11RandomState_18tomaxint(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self), __pyx_v_size);
    2005 +  __Pyx_RefNannyFinishContext();
    2006 +  return __pyx_r;
    2007 +}
    2008 +
    2009 +static PyObject *__pyx_pf_6mtrand_11RandomState_18tomaxint(struct __pyx_obj_6mtrand_RandomState *__pyx_v_self, PyObject *__pyx_v_size) {
    2010 +  PyObject *__pyx_r = NULL;
    2011 +  __Pyx_RefNannyDeclarations
    2012 +  PyObject *__pyx_t_1 = NULL;
    2013 +  int __pyx_lineno = 0;
    2014 +  const char *__pyx_filename = NULL;
    2015 +  int __pyx_clineno = 0;
    2016 +  __Pyx_RefNannySetupContext("tomaxint", 0);
    2017  
    2018    /* "mtrand.pyx":807
    2019   *
    2020 @@ -5931,7 +6178,7 @@
    2021   *     def randint(self, low, high=None, size=None):
    2022   */
    2023    __Pyx_XDECREF(__pyx_r);
    2024 -  __pyx_t_1 = __pyx_f_6mtrand_disc0_array(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state, rk_long, __pyx_v_size); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 807; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    2025 +  __pyx_t_1 = __pyx_f_6mtrand_disc0_array(__pyx_v_self->internal_state, rk_long, __pyx_v_size); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 807; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    2026    __Pyx_GOTREF(__pyx_t_1);
    2027    __pyx_r = __pyx_t_1;
    2028    __pyx_t_1 = 0;
    2029 @@ -5949,48 +6196,33 @@
    2030    return __pyx_r;
    2031  }
    2032  
    2033 -/* "mtrand.pyx":809
    2034 - *         return disc0_array(self.internal_state, rk_long, size)
    2035 - *
    2036 - *     def randint(self, low, high=None, size=None):             # <<<<<<<<<<<<<<
    2037 - *         """
    2038 - *         randint(low, high=None, size=None)
    2039 - */
    2040 -
    2041 -static PyObject *__pyx_pf_6mtrand_11RandomState_10randint(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
    2042 -static char __pyx_doc_6mtrand_11RandomState_10randint[] = "\n        randint(low, high=None, size=None)\n\n        Return random integers from `low` (inclusive) to `high` (exclusive).\n\n        Return random integers from the \"discrete uniform\" distribution in the\n        \"half-open\" interval [`low`, `high`). If `high` is None (the default),\n        then results are from [0, `low`).\n\n        Parameters\n        ----------\n        low : int\n            Lowest (signed) integer to be drawn from the distribution (unless\n            ``high=None``, in which case this parameter is the *highest* such\n            integer).\n        high : int, optional\n            If provided, one above the largest (signed) integer to be drawn\n            from the distribution (see above for behavior if ``high=None``).\n        size : int or tuple of ints, optional\n            Output shape. Default is None, in which case a single int is\n            returned.\n\n        Returns\n        -------\n        out : int or ndarray of ints\n            `size`-shaped array of random integers from the appropriate\n            distribution, or a single such random int if `size` not provided.\n\n        See Also\n        --------\n        random.random_integers : similar to `randint`, only for the closed\n            interval [`low`, `high`], and 1 is the lowest value if `high` is\n            omitted. In particular, this other one is the one to use to generate\n            uniformly distributed discrete non-integers.\n\n        Examples\n        --------\n        >>> np.random.randint(2, size=10)\n        array([1, 0, 0, 0, 1, 1, 0, 0, 1, 0])\n        >>> np.random.randint(1, size=10)\n        array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0])\n\n        Generate a 2 x 4 array of ints between 0 and 4, inclusive:\n\n        >>> np.random.randint(5, size=(2, 4))\n        array([[4, 0, 2, 1],\n               [3, 2, 2, 0]])\n\n        ";
    2043 -static PyObject *__pyx_pf_6mtrand_11RandomState_10randint(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
    2044 +/* Python wrapper */
    2045 +static PyObject *__pyx_pw_6mtrand_11RandomState_21randint(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
    2046 +static char __pyx_doc_6mtrand_11RandomState_20randint[] = "\n        randint(low, high=None, size=None)\n\n        Return random integers from `low` (inclusive) to `high` (exclusive).\n\n        Return random integers from the \"discrete uniform\" distribution in the\n        \"half-open\" interval [`low`, `high`). If `high` is None (the default),\n        then results are from [0, `low`).\n\n        Parameters\n        ----------\n        low : int\n            Lowest (signed) integer to be drawn from the distribution (unless\n            ``high=None``, in which case this parameter is the *highest* such\n            integer).\n        high : int, optional\n            If provided, one above the largest (signed) integer to be drawn\n            from the distribution (see above for behavior if ``high=None``).\n        size : int or tuple of ints, optional\n            Output shape. Default is None, in which case a single int is\n            returned.\n\n        Returns\n        -------\n        out : int or ndarray of ints\n            `size`-shaped array of random integers from the appropriate\n            distribution, or a single such random int if `size` not provided.\n\n        See Also\n        --------\n        random.random_integers : similar to `randint`, only for the closed\n            interval [`low`, `high`], and 1 is the lowest value if `high` is\n            omitted. In particular, this other one is the one to use to generate\n            uniformly distributed discrete non-integers.\n\n        Examples\n        --------\n        >>> np.random.randint(2, size=10)\n        array([1, 0, 0, 0, 1, 1, 0, 0, 1, 0])\n        >>> np.random.randint(1, size=10)\n        array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0])\n\n        Generate a 2 x 4 array of ints between 0 and 4, inclusive:\n\n        >>> np.random.randint(5, size=(2, 4))\n        array([[4, 0, 2, 1],\n               [3, 2, 2, 0]])\n\n        ";
    2047 +static PyObject *__pyx_pw_6mtrand_11RandomState_21randint(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
    2048    PyObject *__pyx_v_low = 0;
    2049    PyObject *__pyx_v_high = 0;
    2050    PyObject *__pyx_v_size = 0;
    2051 -  long __pyx_v_lo;
    2052 -  long __pyx_v_hi;
    2053 -  long __pyx_v_rv;
    2054 -  unsigned long __pyx_v_diff;
    2055 -  long *__pyx_v_array_data;
    2056 -  PyArrayObject *arrayObject = 0;
    2057 -  npy_intp __pyx_v_length;
    2058 -  npy_intp __pyx_v_i;
    2059 -  PyObject *__pyx_r = NULL;
    2060 +  PyObject *__pyx_r = 0;
    2061    __Pyx_RefNannyDeclarations
    2062 -  int __pyx_t_1;
    2063 -  long __pyx_t_2;
    2064 -  PyObject *__pyx_t_3 = NULL;
    2065 -  PyObject *__pyx_t_4 = NULL;
    2066 -  PyObject *__pyx_t_5 = NULL;
    2067 -  npy_intp __pyx_t_6;
    2068 -  int __pyx_lineno = 0;
    2069 -  const char *__pyx_filename = NULL;
    2070 -  int __pyx_clineno = 0;
    2071 -  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__low,&__pyx_n_s__high,&__pyx_n_s__size,0};
    2072 -  __Pyx_RefNannySetupContext("randint");
    2073 +  __Pyx_RefNannySetupContext("randint (wrapper)", 0);
    2074    {
    2075 +    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__low,&__pyx_n_s__high,&__pyx_n_s__size,0};
    2076      PyObject* values[3] = {0,0,0};
    2077 +
    2078 +    /* "mtrand.pyx":809
    2079 + *         return disc0_array(self.internal_state, rk_long, size)
    2080 + *
    2081 + *     def randint(self, low, high=None, size=None):             # <<<<<<<<<<<<<<
    2082 + *         """
    2083 + *         randint(low, high=None, size=None)
    2084 + */
    2085      values[1] = ((PyObject *)Py_None);
    2086      values[2] = ((PyObject *)Py_None);
    2087      if (unlikely(__pyx_kwds)) {
    2088        Py_ssize_t kw_args;
    2089 -      switch (PyTuple_GET_SIZE(__pyx_args)) {
    2090 +      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
    2091 +      switch (pos_args) {
    2092          case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
    2093          case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    2094          case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    2095 @@ -5998,10 +6230,9 @@
    2096          default: goto __pyx_L5_argtuple_error;
    2097        }
    2098        kw_args = PyDict_Size(__pyx_kwds);
    2099 -      switch (PyTuple_GET_SIZE(__pyx_args)) {
    2100 +      switch (pos_args) {
    2101          case  0:
    2102 -        values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__low);
    2103 -        if (likely(values[0])) kw_args--;
    2104 +        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__low)) != 0)) kw_args--;
    2105          else goto __pyx_L5_argtuple_error;
    2106          case  1:
    2107          if (kw_args > 0) {
    2108 @@ -6015,7 +6246,7 @@
    2109          }
    2110        }
    2111        if (unlikely(kw_args > 0)) {
    2112 -        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "randint") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 809; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    2113 +        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "randint") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 809; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    2114        }
    2115      } else {
    2116        switch (PyTuple_GET_SIZE(__pyx_args)) {
    2117 @@ -6038,6 +6269,32 @@
    2118    __Pyx_RefNannyFinishContext();
    2119    return NULL;
    2120    __pyx_L4_argument_unpacking_done:;
    2121 +  __pyx_r = __pyx_pf_6mtrand_11RandomState_20randint(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self), __pyx_v_low, __pyx_v_high, __pyx_v_size);
    2122 +  __Pyx_RefNannyFinishContext();
    2123 +  return __pyx_r;
    2124 +}
    2125 +
    2126 +static PyObject *__pyx_pf_6mtrand_11RandomState_20randint(struct __pyx_obj_6mtrand_RandomState *__pyx_v_self, PyObject *__pyx_v_low, PyObject *__pyx_v_high, PyObject *__pyx_v_size) {
    2127 +  long __pyx_v_lo;
    2128 +  long __pyx_v_hi;
    2129 +  long __pyx_v_rv;
    2130 +  unsigned long __pyx_v_diff;
    2131 +  long *__pyx_v_array_data;
    2132 +  PyArrayObject *arrayObject = 0;
    2133 +  npy_intp __pyx_v_length;
    2134 +  npy_intp __pyx_v_i;
    2135 +  PyObject *__pyx_r = NULL;
    2136 +  __Pyx_RefNannyDeclarations
    2137 +  int __pyx_t_1;
    2138 +  long __pyx_t_2;
    2139 +  PyObject *__pyx_t_3 = NULL;
    2140 +  PyObject *__pyx_t_4 = NULL;
    2141 +  PyObject *__pyx_t_5 = NULL;
    2142 +  npy_intp __pyx_t_6;
    2143 +  int __pyx_lineno = 0;
    2144 +  const char *__pyx_filename = NULL;
    2145 +  int __pyx_clineno = 0;
    2146 +  __Pyx_RefNannySetupContext("randint", 0);
    2147  
    2148    /* "mtrand.pyx":866
    2149   *         cdef npy_intp i
    2150 @@ -6067,7 +6324,7 @@
    2151   */
    2152      __pyx_t_2 = __Pyx_PyInt_AsLong(__pyx_v_low); if (unlikely((__pyx_t_2 == (long)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 868; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    2153      __pyx_v_hi = __pyx_t_2;
    2154 -    goto __pyx_L6;
    2155 +    goto __pyx_L3;
    2156    }
    2157    /*else*/ {
    2158  
    2159 @@ -6091,7 +6348,7 @@
    2160      __pyx_t_2 = __Pyx_PyInt_AsLong(__pyx_v_high); if (unlikely((__pyx_t_2 == (long)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 871; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    2161      __pyx_v_hi = __pyx_t_2;
    2162    }
    2163 -  __pyx_L6:;
    2164 +  __pyx_L3:;
    2165  
    2166    /* "mtrand.pyx":873
    2167   *             hi = high
    2168 @@ -6115,9 +6372,9 @@
    2169      __Pyx_Raise(__pyx_t_3, 0, 0, 0);
    2170      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    2171      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 874; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    2172 -    goto __pyx_L7;
    2173 +    goto __pyx_L4;
    2174    }
    2175 -  __pyx_L7:;
    2176 +  __pyx_L4:;
    2177  
    2178    /* "mtrand.pyx":876
    2179   *             raise ValueError("low >= high")
    2180 @@ -6145,7 +6402,7 @@
    2181   *             return rv
    2182   *         else:
    2183   */
    2184 -    __pyx_v_rv = (__pyx_v_lo + ((long)rk_interval(__pyx_v_diff, ((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state)));
    2185 +    __pyx_v_rv = (__pyx_v_lo + ((long)rk_interval(__pyx_v_diff, __pyx_v_self->internal_state)));
    2186  
    2187      /* "mtrand.pyx":879
    2188   *         if size is None:
    2189 @@ -6160,7 +6417,7 @@
    2190      __pyx_r = __pyx_t_3;
    2191      __pyx_t_3 = 0;
    2192      goto __pyx_L0;
    2193 -    goto __pyx_L8;
    2194 +    goto __pyx_L5;
    2195    }
    2196    /*else*/ {
    2197  
    2198 @@ -6177,7 +6434,7 @@
    2199      __Pyx_GOTREF(__pyx_t_4);
    2200      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    2201      __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 881; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    2202 -    __Pyx_GOTREF(((PyObject *)__pyx_t_3));
    2203 +    __Pyx_GOTREF(__pyx_t_3);
    2204      __Pyx_INCREF(__pyx_v_size);
    2205      PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_size);
    2206      __Pyx_GIVEREF(__pyx_v_size);
    2207 @@ -6227,7 +6484,7 @@
    2208   *                 array_data[i] = rv
    2209   *             return array
    2210   */
    2211 -      __pyx_v_rv = (__pyx_v_lo + ((long)rk_interval(__pyx_v_diff, ((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state)));
    2212 +      __pyx_v_rv = (__pyx_v_lo + ((long)rk_interval(__pyx_v_diff, __pyx_v_self->internal_state)));
    2213  
    2214        /* "mtrand.pyx":886
    2215   *             for i from 0 <= i < length:
    2216 @@ -6251,7 +6508,7 @@
    2217      __pyx_r = ((PyObject *)arrayObject);
    2218      goto __pyx_L0;
    2219    }
    2220 -  __pyx_L8:;
    2221 +  __pyx_L5:;
    2222  
    2223    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    2224    goto __pyx_L0;
    2225 @@ -6268,6 +6525,28 @@
    2226    return __pyx_r;
    2227  }
    2228  
    2229 +/* Python wrapper */
    2230 +static PyObject *__pyx_pw_6mtrand_11RandomState_23bytes(PyObject *__pyx_v_self, PyObject *__pyx_arg_length); /*proto*/
    2231 +static char __pyx_doc_6mtrand_11RandomState_22bytes[] = "\n        bytes(length)\n\n        Return random bytes.\n\n        Parameters\n        ----------\n        length : int\n            Number of random bytes.\n\n        Returns\n        -------\n        out : str\n            String of length `length`.\n\n        Examples\n        --------\n        >>> np.random.bytes(10)\n        ' eh\\x85\\x022SZ\\xbf\\xa4' #random\n\n        ";
    2232 +static PyObject *__pyx_pw_6mtrand_11RandomState_23bytes(PyObject *__pyx_v_self, PyObject *__pyx_arg_length) {
    2233 +  npy_intp __pyx_v_length;
    2234 +  PyObject *__pyx_r = 0;
    2235 +  __Pyx_RefNannyDeclarations
    2236 +  __Pyx_RefNannySetupContext("bytes (wrapper)", 0);
    2237 +  assert(__pyx_arg_length); {
    2238 +    __pyx_v_length = __Pyx_PyInt_from_py_npy_intp(__pyx_arg_length); if (unlikely((__pyx_v_length == (npy_intp)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 889; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    2239 +  }
    2240 +  goto __pyx_L4_argument_unpacking_done;
    2241 +  __pyx_L3_error:;
    2242 +  __Pyx_AddTraceback("mtrand.RandomState.bytes", __pyx_clineno, __pyx_lineno, __pyx_filename);
    2243 +  __Pyx_RefNannyFinishContext();
    2244 +  return NULL;
    2245 +  __pyx_L4_argument_unpacking_done:;
    2246 +  __pyx_r = __pyx_pf_6mtrand_11RandomState_22bytes(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self), ((npy_intp)__pyx_v_length));
    2247 +  __Pyx_RefNannyFinishContext();
    2248 +  return __pyx_r;
    2249 +}
    2250 +
    2251  /* "mtrand.pyx":889
    2252   *             return array
    2253   *
    2254 @@ -6276,10 +6555,7 @@
    2255   *         bytes(length)
    2256   */
    2257  
    2258 -static PyObject *__pyx_pf_6mtrand_11RandomState_11bytes(PyObject *__pyx_v_self, PyObject *__pyx_arg_length); /*proto*/
    2259 -static char __pyx_doc_6mtrand_11RandomState_11bytes[] = "\n        bytes(length)\n\n        Return random bytes.\n\n        Parameters\n        ----------\n        length : int\n            Number of random bytes.\n\n        Returns\n        -------\n        out : str\n            String of length `length`.\n\n        Examples\n        --------\n        >>> np.random.bytes(10)\n        ' eh\\x85\\x022SZ\\xbf\\xa4' #random\n\n        ";
    2260 -static PyObject *__pyx_pf_6mtrand_11RandomState_11bytes(PyObject *__pyx_v_self, PyObject *__pyx_arg_length) {
    2261 -  npy_intp __pyx_v_length;
    2262 +static PyObject *__pyx_pf_6mtrand_11RandomState_22bytes(struct __pyx_obj_6mtrand_RandomState *__pyx_v_self, npy_intp __pyx_v_length) {
    2263    void *__pyx_v_bytes;
    2264    PyObject *__pyx_v_bytestring = NULL;
    2265    PyObject *__pyx_r = NULL;
    2266 @@ -6288,16 +6564,7 @@
    2267    int __pyx_lineno = 0;
    2268    const char *__pyx_filename = NULL;
    2269    int __pyx_clineno = 0;
    2270 -  __Pyx_RefNannySetupContext("bytes");
    2271 -  assert(__pyx_arg_length); {
    2272 -    __pyx_v_length = __Pyx_PyInt_from_py_npy_intp(__pyx_arg_length); if (unlikely((__pyx_v_length == (npy_intp)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 889; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    2273 -  }
    2274 -  goto __pyx_L4_argument_unpacking_done;
    2275 -  __pyx_L3_error:;
    2276 -  __Pyx_AddTraceback("mtrand.RandomState.bytes", __pyx_clineno, __pyx_lineno, __pyx_filename);
    2277 -  __Pyx_RefNannyFinishContext();
    2278 -  return NULL;
    2279 -  __pyx_L4_argument_unpacking_done:;
    2280 +  __Pyx_RefNannySetupContext("bytes", 0);
    2281  
    2282    /* "mtrand.pyx":912
    2283   *         """
    2284 @@ -6318,7 +6585,7 @@
    2285   *         return bytestring
    2286   *
    2287   */
    2288 -  rk_fill(__pyx_v_bytes, __pyx_v_length, ((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state);
    2289 +  rk_fill(__pyx_v_bytes, __pyx_v_length, __pyx_v_self->internal_state);
    2290  
    2291    /* "mtrand.pyx":914
    2292   *         bytestring = empty_py_bytes(length, &bytes)
    2293 @@ -6345,45 +6612,34 @@
    2294    return __pyx_r;
    2295  }
    2296  
    2297 -/* "mtrand.pyx":916
    2298 - *         return bytestring
    2299 - *
    2300 - *     def uniform(self, low=0.0, high=1.0, size=None):             # <<<<<<<<<<<<<<
    2301 - *         """
    2302 - *         uniform(low=0.0, high=1.0, size=1)
    2303 - */
    2304 -
    2305 -static PyObject *__pyx_pf_6mtrand_11RandomState_12uniform(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
    2306 -static char __pyx_doc_6mtrand_11RandomState_12uniform[] = "\n        uniform(low=0.0, high=1.0, size=1)\n\n        Draw samples from a uniform distribution.\n\n        Samples are uniformly distributed over the half-open interval\n        ``[low, high)`` (includes low, but excludes high).  In other words,\n        any value within the given interval is equally likely to be drawn\n        by `uniform`.\n\n        Parameters\n        ----------\n        low : float, optional\n            Lower boundary of the output interval.  All values generated will be\n            greater than or equal to low.  The default value is 0.\n        high : float\n            Upper boundary of the output interval.  All values generated will be\n            less than high.  The default value is 1.0.\n        size : int or tuple of ints, optional\n            Shape of output.  If the given size is, for example, (m,n,k),\n            m*n*k samples are generated.  If no shape is specified, a single sample\n            is returned.\n\n        Returns\n        -------\n        out : ndarray\n            Drawn samples, with shape `size`.\n\n        See Also\n        --------\n        randint : Discrete uniform distribution, yielding integers.\n        random_integers : Discrete uniform distribution over the closed\n                          interval ``[low, high]``.\n        random_sample : Floats uniformly distributed over ``[0, 1)``.\n        random : Alias for `random_sample`.\n        rand : Convenience function that accepts dimensions as input, e.g.,\n               ``rand(2,2)`` would generate a 2-by-2 array of floats,\n               uniformly distributed over ``[0, 1)``.\n\n        Notes\n        -----\n        The probability density function of the uniform distribution is\n\n        .. math:: p(x) = \\frac{1}{b - a}\n\n        anywhere within the interval ``[a, b)``, and zero elsewhere.\n\n        Examples\n        --------\n        Draw samples from the distribution:\n\n        >>> s = np.random.uniform(-1,0,1000)\n\n        All values are w""ithin the given interval:\n\n        >>> np.all(s >= -1)\n        True\n        >>> np.all(s < 0)\n        True\n\n        Display the histogram of the samples, along with the\n        probability density function:\n\n        >>> import matplotlib.pyplot as plt\n        >>> count, bins, ignored = plt.hist(s, 15, normed=True)\n        >>> plt.plot(bins, np.ones_like(bins), linewidth=2, color='r')\n        >>> plt.show()\n\n        ";
    2307 -static PyObject *__pyx_pf_6mtrand_11RandomState_12uniform(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
    2308 +/* Python wrapper */
    2309 +static PyObject *__pyx_pw_6mtrand_11RandomState_25uniform(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
    2310 +static char __pyx_doc_6mtrand_11RandomState_24uniform[] = "\n        uniform(low=0.0, high=1.0, size=1)\n\n        Draw samples from a uniform distribution.\n\n        Samples are uniformly distributed over the half-open interval\n        ``[low, high)`` (includes low, but excludes high).  In other words,\n        any value within the given interval is equally likely to be drawn\n        by `uniform`.\n\n        Parameters\n        ----------\n        low : float, optional\n            Lower boundary of the output interval.  All values generated will be\n            greater than or equal to low.  The default value is 0.\n        high : float\n            Upper boundary of the output interval.  All values generated will be\n            less than high.  The default value is 1.0.\n        size : int or tuple of ints, optional\n            Shape of output.  If the given size is, for example, (m,n,k),\n            m*n*k samples are generated.  If no shape is specified, a single sample\n            is returned.\n\n        Returns\n        -------\n        out : ndarray\n            Drawn samples, with shape `size`.\n\n        See Also\n        --------\n        randint : Discrete uniform distribution, yielding integers.\n        random_integers : Discrete uniform distribution over the closed\n                          interval ``[low, high]``.\n        random_sample : Floats uniformly distributed over ``[0, 1)``.\n        random : Alias for `random_sample`.\n        rand : Convenience function that accepts dimensions as input, e.g.,\n               ``rand(2,2)`` would generate a 2-by-2 array of floats,\n               uniformly distributed over ``[0, 1)``.\n\n        Notes\n        -----\n        The probability density function of the uniform distribution is\n\n        .. math:: p(x) = \\frac{1}{b - a}\n\n        anywhere within the interval ``[a, b)``, and zero elsewhere.\n\n        Examples\n        --------\n        Draw samples from the distribution:\n\n        >>> s = np.random.uniform(-1,0,1000)\n\n        All values are w""ithin the given interval:\n\n        >>> np.all(s >= -1)\n        True\n        >>> np.all(s < 0)\n        True\n\n        Display the histogram of the samples, along with the\n        probability density function:\n\n        >>> import matplotlib.pyplot as plt\n        >>> count, bins, ignored = plt.hist(s, 15, normed=True)\n        >>> plt.plot(bins, np.ones_like(bins), linewidth=2, color='r')\n        >>> plt.show()\n\n        ";
    2311 +static PyObject *__pyx_pw_6mtrand_11RandomState_25uniform(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
    2312    PyObject *__pyx_v_low = 0;
    2313    PyObject *__pyx_v_high = 0;
    2314    PyObject *__pyx_v_size = 0;
    2315 -  PyArrayObject *__pyx_v_olow = 0;
    2316 -  PyArrayObject *__pyx_v_ohigh = 0;
    2317 -  PyArrayObject *__pyx_v_odiff = 0;
    2318 -  double __pyx_v_flow;
    2319 -  double __pyx_v_fhigh;
    2320 -  PyObject *__pyx_v_temp = 0;
    2321 -  PyObject *__pyx_r = NULL;
    2322 +  PyObject *__pyx_r = 0;
    2323    __Pyx_RefNannyDeclarations
    2324 -  int __pyx_t_1;
    2325 -  PyObject *__pyx_t_2 = NULL;
    2326 -  PyObject *__pyx_t_3 = NULL;
    2327 -  PyObject *__pyx_t_4 = NULL;
    2328 -  int __pyx_lineno = 0;
    2329 -  const char *__pyx_filename = NULL;
    2330 -  int __pyx_clineno = 0;
    2331 -  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__low,&__pyx_n_s__high,&__pyx_n_s__size,0};
    2332 -  __Pyx_RefNannySetupContext("uniform");
    2333 +  __Pyx_RefNannySetupContext("uniform (wrapper)", 0);
    2334    {
    2335 +    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__low,&__pyx_n_s__high,&__pyx_n_s__size,0};
    2336      PyObject* values[3] = {0,0,0};
    2337      values[0] = __pyx_k_15;
    2338      values[1] = __pyx_k_16;
    2339 +
    2340 +    /* "mtrand.pyx":916
    2341 + *         return bytestring
    2342 + *
    2343 + *     def uniform(self, low=0.0, high=1.0, size=None):             # <<<<<<<<<<<<<<
    2344 + *         """
    2345 + *         uniform(low=0.0, high=1.0, size=1)
    2346 + */
    2347      values[2] = ((PyObject *)Py_None);
    2348      if (unlikely(__pyx_kwds)) {
    2349        Py_ssize_t kw_args;
    2350 -      switch (PyTuple_GET_SIZE(__pyx_args)) {
    2351 +      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
    2352 +      switch (pos_args) {
    2353          case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
    2354          case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    2355          case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    2356 @@ -6391,7 +6647,7 @@
    2357          default: goto __pyx_L5_argtuple_error;
    2358        }
    2359        kw_args = PyDict_Size(__pyx_kwds);
    2360 -      switch (PyTuple_GET_SIZE(__pyx_args)) {
    2361 +      switch (pos_args) {
    2362          case  0:
    2363          if (kw_args > 0) {
    2364            PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__low);
    2365 @@ -6409,7 +6665,7 @@
    2366          }
    2367        }
    2368        if (unlikely(kw_args > 0)) {
    2369 -        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "uniform") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 916; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    2370 +        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "uniform") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 916; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    2371        }
    2372      } else {
    2373        switch (PyTuple_GET_SIZE(__pyx_args)) {
    2374 @@ -6432,6 +6688,28 @@
    2375    __Pyx_RefNannyFinishContext();
    2376    return NULL;
    2377    __pyx_L4_argument_unpacking_done:;
    2378 +  __pyx_r = __pyx_pf_6mtrand_11RandomState_24uniform(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self), __pyx_v_low, __pyx_v_high, __pyx_v_size);
    2379 +  __Pyx_RefNannyFinishContext();
    2380 +  return __pyx_r;
    2381 +}
    2382 +
    2383 +static PyObject *__pyx_pf_6mtrand_11RandomState_24uniform(struct __pyx_obj_6mtrand_RandomState *__pyx_v_self, PyObject *__pyx_v_low, PyObject *__pyx_v_high, PyObject *__pyx_v_size) {
    2384 +  PyArrayObject *__pyx_v_olow = 0;
    2385 +  PyArrayObject *__pyx_v_ohigh = 0;
    2386 +  PyArrayObject *__pyx_v_odiff = 0;
    2387 +  double __pyx_v_flow;
    2388 +  double __pyx_v_fhigh;
    2389 +  PyObject *__pyx_v_temp = 0;
    2390 +  PyObject *__pyx_r = NULL;
    2391 +  __Pyx_RefNannyDeclarations
    2392 +  int __pyx_t_1;
    2393 +  PyObject *__pyx_t_2 = NULL;
    2394 +  PyObject *__pyx_t_3 = NULL;
    2395 +  PyObject *__pyx_t_4 = NULL;
    2396 +  int __pyx_lineno = 0;
    2397 +  const char *__pyx_filename = NULL;
    2398 +  int __pyx_clineno = 0;
    2399 +  __Pyx_RefNannySetupContext("uniform", 0);
    2400  
    2401    /* "mtrand.pyx":990
    2402   *         cdef object temp
    2403 @@ -6469,14 +6747,14 @@
    2404   *         olow = <ndarray>PyArray_FROM_OTF(low, NPY_DOUBLE, NPY_ALIGNED)
    2405   */
    2406      __Pyx_XDECREF(__pyx_r);
    2407 -    __pyx_t_2 = __pyx_f_6mtrand_cont2_array_sc(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state, rk_uniform, __pyx_v_size, __pyx_v_flow, (__pyx_v_fhigh - __pyx_v_flow)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 993; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    2408 +    __pyx_t_2 = __pyx_f_6mtrand_cont2_array_sc(__pyx_v_self->internal_state, rk_uniform, __pyx_v_size, __pyx_v_flow, (__pyx_v_fhigh - __pyx_v_flow)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 993; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    2409      __Pyx_GOTREF(__pyx_t_2);
    2410      __pyx_r = __pyx_t_2;
    2411      __pyx_t_2 = 0;
    2412      goto __pyx_L0;
    2413 -    goto __pyx_L6;
    2414 +    goto __pyx_L3;
    2415    }
    2416 -  __pyx_L6:;
    2417 +  __pyx_L3:;
    2418  
    2419    /* "mtrand.pyx":994
    2420   *         if not PyErr_Occurred():
    2421 @@ -6526,7 +6804,7 @@
    2422    __Pyx_GOTREF(__pyx_t_3);
    2423    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    2424    __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 997; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    2425 -  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
    2426 +  __Pyx_GOTREF(__pyx_t_2);
    2427    __Pyx_INCREF(((PyObject *)__pyx_v_ohigh));
    2428    PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_v_ohigh));
    2429    __Pyx_GIVEREF(((PyObject *)__pyx_v_ohigh));
    2430 @@ -6570,7 +6848,7 @@
    2431   *     def rand(self, *args):
    2432   */
    2433    __Pyx_XDECREF(__pyx_r);
    2434 -  __pyx_t_4 = __pyx_f_6mtrand_cont2_array(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state, rk_uniform, __pyx_v_size, __pyx_v_olow, __pyx_v_odiff); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1001; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    2435 +  __pyx_t_4 = __pyx_f_6mtrand_cont2_array(__pyx_v_self->internal_state, rk_uniform, __pyx_v_size, __pyx_v_olow, __pyx_v_odiff); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1001; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    2436    __Pyx_GOTREF(__pyx_t_4);
    2437    __pyx_r = __pyx_t_4;
    2438    __pyx_t_4 = 0;
    2439 @@ -6594,6 +6872,23 @@
    2440    return __pyx_r;
    2441  }
    2442  
    2443 +/* Python wrapper */
    2444 +static PyObject *__pyx_pw_6mtrand_11RandomState_27rand(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
    2445 +static char __pyx_doc_6mtrand_11RandomState_26rand[] = "\n        rand(d0, d1, ..., dn)\n\n        Random values in a given shape.\n\n        Create an array of the given shape and propagate it with\n        random samples from a uniform distribution\n        over ``[0, 1)``.\n\n        Parameters\n        ----------\n        d0, d1, ..., dn : int\n            Shape of the output.\n\n        Returns\n        -------\n        out : ndarray, shape ``(d0, d1, ..., dn)``\n            Random values.\n\n        See Also\n        --------\n        random\n\n        Notes\n        -----\n        This is a convenience function. If you want an interface that\n        takes a shape-tuple as the first argument, refer to\n        `random`.\n\n        Examples\n        --------\n        >>> np.random.rand(3,2)\n        array([[ 0.14022471,  0.96360618],  #random\n               [ 0.37601032,  0.25528411],  #random\n               [ 0.49313049,  0.94909878]]) #random\n\n        ";
    2446 +static PyObject *__pyx_pw_6mtrand_11RandomState_27rand(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
    2447 +  PyObject *__pyx_v_args = 0;
    2448 +  PyObject *__pyx_r = 0;
    2449 +  __Pyx_RefNannyDeclarations
    2450 +  __Pyx_RefNannySetupContext("rand (wrapper)", 0);
    2451 +  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "rand", 0))) return NULL;
    2452 +  __Pyx_INCREF(__pyx_args);
    2453 +  __pyx_v_args = __pyx_args;
    2454 +  __pyx_r = __pyx_pf_6mtrand_11RandomState_26rand(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self), __pyx_v_args);
    2455 +  __Pyx_XDECREF(__pyx_v_args);
    2456 +  __Pyx_RefNannyFinishContext();
    2457 +  return __pyx_r;
    2458 +}
    2459 +
    2460  /* "mtrand.pyx":1003
    2461   *         return cont2_array(self.internal_state, rk_uniform, size, olow, odiff)
    2462   *
    2463 @@ -6602,10 +6897,7 @@
    2464   *         rand(d0, d1, ..., dn)
    2465   */
    2466  
    2467 -static PyObject *__pyx_pf_6mtrand_11RandomState_13rand(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
    2468 -static char __pyx_doc_6mtrand_11RandomState_13rand[] = "\n        rand(d0, d1, ..., dn)\n\n        Random values in a given shape.\n\n        Create an array of the given shape and propagate it with\n        random samples from a uniform distribution\n        over ``[0, 1)``.\n\n        Parameters\n        ----------\n        d0, d1, ..., dn : int\n            Shape of the output.\n\n        Returns\n        -------\n        out : ndarray, shape ``(d0, d1, ..., dn)``\n            Random values.\n\n        See Also\n        --------\n        random\n\n        Notes\n        -----\n        This is a convenience function. If you want an interface that\n        takes a shape-tuple as the first argument, refer to\n        `random`.\n\n        Examples\n        --------\n        >>> np.random.rand(3,2)\n        array([[ 0.14022471,  0.96360618],  #random\n               [ 0.37601032,  0.25528411],  #random\n               [ 0.49313049,  0.94909878]]) #random\n\n        ";
    2469 -static PyObject *__pyx_pf_6mtrand_11RandomState_13rand(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
    2470 -  PyObject *__pyx_v_args = 0;
    2471 +static PyObject *__pyx_pf_6mtrand_11RandomState_26rand(struct __pyx_obj_6mtrand_RandomState *__pyx_v_self, PyObject *__pyx_v_args) {
    2472    PyObject *__pyx_r = NULL;
    2473    __Pyx_RefNannyDeclarations
    2474    Py_ssize_t __pyx_t_1;
    2475 @@ -6616,10 +6908,7 @@
    2476    int __pyx_lineno = 0;
    2477    const char *__pyx_filename = NULL;
    2478    int __pyx_clineno = 0;
    2479 -  __Pyx_RefNannySetupContext("rand");
    2480 -  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "rand", 0))) return NULL;
    2481 -  __Pyx_INCREF(__pyx_args);
    2482 -  __pyx_v_args = __pyx_args;
    2483 +  __Pyx_RefNannySetupContext("rand", 0);
    2484  
    2485    /* "mtrand.pyx":1041
    2486   *
    2487 @@ -6628,10 +6917,7 @@
    2488   *             return self.random_sample()
    2489   *         else:
    2490   */
    2491 -  if (unlikely(((PyObject *)__pyx_v_args) == Py_None)) {
    2492 -    PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1041; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    2493 -  }
    2494 -  __pyx_t_1 = PyTuple_GET_SIZE(((PyObject *)__pyx_v_args));
    2495 +  __pyx_t_1 = PyTuple_GET_SIZE(((PyObject *)__pyx_v_args)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1041; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    2496    __pyx_t_2 = (__pyx_t_1 == 0);
    2497    if (__pyx_t_2) {
    2498  
    2499 @@ -6643,7 +6929,7 @@
    2500   *             return self.random_sample(size=args)
    2501   */
    2502      __Pyx_XDECREF(__pyx_r);
    2503 -    __pyx_t_3 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__random_sample); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1042; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    2504 +    __pyx_t_3 = PyObject_GetAttr(((PyObject *)__pyx_v_self), __pyx_n_s__random_sample); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1042; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    2505      __Pyx_GOTREF(__pyx_t_3);
    2506      __pyx_t_4 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1042; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    2507      __Pyx_GOTREF(__pyx_t_4);
    2508 @@ -6651,7 +6937,7 @@
    2509      __pyx_r = __pyx_t_4;
    2510      __pyx_t_4 = 0;
    2511      goto __pyx_L0;
    2512 -    goto __pyx_L5;
    2513 +    goto __pyx_L3;
    2514    }
    2515    /*else*/ {
    2516  
    2517 @@ -6663,12 +6949,12 @@
    2518   *     def randn(self, *args):
    2519   */
    2520      __Pyx_XDECREF(__pyx_r);
    2521 -    __pyx_t_4 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__random_sample); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1044; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    2522 +    __pyx_t_4 = PyObject_GetAttr(((PyObject *)__pyx_v_self), __pyx_n_s__random_sample); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1044; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    2523      __Pyx_GOTREF(__pyx_t_4);
    2524      __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1044; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    2525      __Pyx_GOTREF(((PyObject *)__pyx_t_3));
    2526      if (PyDict_SetItem(__pyx_t_3, ((PyObject *)__pyx_n_s__size), ((PyObject *)__pyx_v_args)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1044; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    2527 -    __pyx_t_5 = PyEval_CallObjectWithKeywords(__pyx_t_4, ((PyObject *)__pyx_empty_tuple), ((PyObject *)__pyx_t_3)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1044; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    2528 +    __pyx_t_5 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_empty_tuple), ((PyObject *)__pyx_t_3)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1044; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    2529      __Pyx_GOTREF(__pyx_t_5);
    2530      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    2531      __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
    2532 @@ -6676,7 +6962,7 @@
    2533      __pyx_t_5 = 0;
    2534      goto __pyx_L0;
    2535    }
    2536 -  __pyx_L5:;
    2537 +  __pyx_L3:;
    2538  
    2539    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    2540    goto __pyx_L0;
    2541 @@ -6687,12 +6973,28 @@
    2542    __Pyx_AddTraceback("mtrand.RandomState.rand", __pyx_clineno, __pyx_lineno, __pyx_filename);
    2543    __pyx_r = NULL;
    2544    __pyx_L0:;
    2545 -  __Pyx_XDECREF(__pyx_v_args);
    2546    __Pyx_XGIVEREF(__pyx_r);
    2547    __Pyx_RefNannyFinishContext();
    2548    return __pyx_r;
    2549  }
    2550  
    2551 +/* Python wrapper */
    2552 +static PyObject *__pyx_pw_6mtrand_11RandomState_29randn(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
    2553 +static char __pyx_doc_6mtrand_11RandomState_28randn[] = "\n        randn([d1, ..., dn])\n\n        Return a sample (or samples) from the \"standard normal\" distribution.\n\n        If positive, int_like or int-convertible arguments are provided,\n        `randn` generates an array of shape ``(d1, ..., dn)``, filled\n        with random floats sampled from a univariate \"normal\" (Gaussian)\n        distribution of mean 0 and variance 1 (if any of the :math:`d_i` are\n        floats, they are first converted to integers by truncation). A single\n        float randomly sampled from the distribution is returned if no\n        argument is provided.\n\n        This is a convenience function.  If you want an interface that takes a\n        tuple as the first argument, use `numpy.random.standard_normal` instead.\n\n        Parameters\n        ----------\n        d1, ..., dn : `n` ints, optional\n            The dimensions of the returned array, should be all positive.\n\n        Returns\n        -------\n        Z : ndarray or float\n            A ``(d1, ..., dn)``-shaped array of floating-point samples from\n            the standard normal distribution, or a single such float if\n            no parameters were supplied.\n\n        See Also\n        --------\n        random.standard_normal : Similar, but takes a tuple as its argument.\n\n        Notes\n        -----\n        For random samples from :math:`N(\\mu, \\sigma^2)`, use:\n\n        ``sigma * np.random.randn(...) + mu``\n\n        Examples\n        --------\n        >>> np.random.randn()\n        2.1923875335537315 #random\n\n        Two-by-four array of samples from N(3, 6.25):\n\n        >>> 2.5 * np.random.randn(2, 4) + 3\n        array([[-4.49401501,  4.00950034, -1.81814867,  7.29718677],  #random\n               [ 0.39924804,  4.68456316,  4.99394529,  4.84057254]]) #random\n\n        ";
    2554 +static PyObject *__pyx_pw_6mtrand_11RandomState_29randn(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
    2555 +  PyObject *__pyx_v_args = 0;
    2556 +  PyObject *__pyx_r = 0;
    2557 +  __Pyx_RefNannyDeclarations
    2558 +  __Pyx_RefNannySetupContext("randn (wrapper)", 0);
    2559 +  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "randn", 0))) return NULL;
    2560 +  __Pyx_INCREF(__pyx_args);
    2561 +  __pyx_v_args = __pyx_args;
    2562 +  __pyx_r = __pyx_pf_6mtrand_11RandomState_28randn(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self), __pyx_v_args);
    2563 +  __Pyx_XDECREF(__pyx_v_args);
    2564 +  __Pyx_RefNannyFinishContext();
    2565 +  return __pyx_r;
    2566 +}
    2567 +
    2568  /* "mtrand.pyx":1046
    2569   *             return self.random_sample(size=args)
    2570   *
    2571 @@ -6701,10 +7003,7 @@
    2572   *         randn([d1, ..., dn])
    2573   */
    2574  
    2575 -static PyObject *__pyx_pf_6mtrand_11RandomState_14randn(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
    2576 -static char __pyx_doc_6mtrand_11RandomState_14randn[] = "\n        randn([d1, ..., dn])\n\n        Return a sample (or samples) from the \"standard normal\" distribution.\n\n        If positive, int_like or int-convertible arguments are provided,\n        `randn` generates an array of shape ``(d1, ..., dn)``, filled\n        with random floats sampled from a univariate \"normal\" (Gaussian)\n        distribution of mean 0 and variance 1 (if any of the :math:`d_i` are\n        floats, they are first converted to integers by truncation). A single\n        float randomly sampled from the distribution is returned if no\n        argument is provided.\n\n        This is a convenience function.  If you want an interface that takes a\n        tuple as the first argument, use `numpy.random.standard_normal` instead.\n\n        Parameters\n        ----------\n        d1, ..., dn : `n` ints, optional\n            The dimensions of the returned array, should be all positive.\n\n        Returns\n        -------\n        Z : ndarray or float\n            A ``(d1, ..., dn)``-shaped array of floating-point samples from\n            the standard normal distribution, or a single such float if\n            no parameters were supplied.\n\n        See Also\n        --------\n        random.standard_normal : Similar, but takes a tuple as its argument.\n\n        Notes\n        -----\n        For random samples from :math:`N(\\mu, \\sigma^2)`, use:\n\n        ``sigma * np.random.randn(...) + mu``\n\n        Examples\n        --------\n        >>> np.random.randn()\n        2.1923875335537315 #random\n\n        Two-by-four array of samples from N(3, 6.25):\n\n        >>> 2.5 * np.random.randn(2, 4) + 3\n        array([[-4.49401501,  4.00950034, -1.81814867,  7.29718677],  #random\n               [ 0.39924804,  4.68456316,  4.99394529,  4.84057254]]) #random\n\n        ";
    2577 -static PyObject *__pyx_pf_6mtrand_11RandomState_14randn(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
    2578 -  PyObject *__pyx_v_args = 0;
    2579 +static PyObject *__pyx_pf_6mtrand_11RandomState_28randn(struct __pyx_obj_6mtrand_RandomState *__pyx_v_self, PyObject *__pyx_v_args) {
    2580    PyObject *__pyx_r = NULL;
    2581    __Pyx_RefNannyDeclarations
    2582    Py_ssize_t __pyx_t_1;
    2583 @@ -6715,10 +7014,7 @@
    2584    int __pyx_lineno = 0;
    2585    const char *__pyx_filename = NULL;
    2586    int __pyx_clineno = 0;
    2587 -  __Pyx_RefNannySetupContext("randn");
    2588 -  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "randn", 0))) return NULL;
    2589 -  __Pyx_INCREF(__pyx_args);
    2590 -  __pyx_v_args = __pyx_args;
    2591 +  __Pyx_RefNannySetupContext("randn", 0);
    2592  
    2593    /* "mtrand.pyx":1097
    2594   *
    2595 @@ -6727,10 +7023,7 @@
    2596   *             return self.standard_normal()
    2597   *         else:
    2598   */
    2599 -  if (unlikely(((PyObject *)__pyx_v_args) == Py_None)) {
    2600 -    PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1097; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    2601 -  }
    2602 -  __pyx_t_1 = PyTuple_GET_SIZE(((PyObject *)__pyx_v_args));
    2603 +  __pyx_t_1 = PyTuple_GET_SIZE(((PyObject *)__pyx_v_args)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1097; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    2604    __pyx_t_2 = (__pyx_t_1 == 0);
    2605    if (__pyx_t_2) {
    2606  
    2607 @@ -6742,7 +7035,7 @@
    2608   *             return self.standard_normal(args)
    2609   */
    2610      __Pyx_XDECREF(__pyx_r);
    2611 -    __pyx_t_3 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__standard_normal); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1098; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    2612 +    __pyx_t_3 = PyObject_GetAttr(((PyObject *)__pyx_v_self), __pyx_n_s__standard_normal); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1098; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    2613      __Pyx_GOTREF(__pyx_t_3);
    2614      __pyx_t_4 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1098; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    2615      __Pyx_GOTREF(__pyx_t_4);
    2616 @@ -6750,7 +7043,7 @@
    2617      __pyx_r = __pyx_t_4;
    2618      __pyx_t_4 = 0;
    2619      goto __pyx_L0;
    2620 -    goto __pyx_L5;
    2621 +    goto __pyx_L3;
    2622    }
    2623    /*else*/ {
    2624  
    2625 @@ -6762,10 +7055,10 @@
    2626   *     def random_integers(self, low, high=None, size=None):
    2627   */
    2628      __Pyx_XDECREF(__pyx_r);
    2629 -    __pyx_t_4 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__standard_normal); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    2630 +    __pyx_t_4 = PyObject_GetAttr(((PyObject *)__pyx_v_self), __pyx_n_s__standard_normal); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    2631      __Pyx_GOTREF(__pyx_t_4);
    2632      __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    2633 -    __Pyx_GOTREF(((PyObject *)__pyx_t_3));
    2634 +    __Pyx_GOTREF(__pyx_t_3);
    2635      __Pyx_INCREF(((PyObject *)__pyx_v_args));
    2636      PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_v_args));
    2637      __Pyx_GIVEREF(((PyObject *)__pyx_v_args));
    2638 @@ -6777,7 +7070,7 @@
    2639      __pyx_t_5 = 0;
    2640      goto __pyx_L0;
    2641    }
    2642 -  __pyx_L5:;
    2643 +  __pyx_L3:;
    2644  
    2645    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    2646    goto __pyx_L0;
    2647 @@ -6788,44 +7081,38 @@
    2648    __Pyx_AddTraceback("mtrand.RandomState.randn", __pyx_clineno, __pyx_lineno, __pyx_filename);
    2649    __pyx_r = NULL;
    2650    __pyx_L0:;
    2651 -  __Pyx_XDECREF(__pyx_v_args);
    2652    __Pyx_XGIVEREF(__pyx_r);
    2653    __Pyx_RefNannyFinishContext();
    2654    return __pyx_r;
    2655  }
    2656  
    2657 -/* "mtrand.pyx":1102
    2658 - *             return self.standard_normal(args)
    2659 - *
    2660 - *     def random_integers(self, low, high=None, size=None):             # <<<<<<<<<<<<<<
    2661 - *         """
    2662 - *         random_integers(low, high=None, size=None)
    2663 - */
    2664 -
    2665 -static PyObject *__pyx_pf_6mtrand_11RandomState_15random_integers(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
    2666 -static char __pyx_doc_6mtrand_11RandomState_15random_integers[] = "\n        random_integers(low, high=None, size=None)\n\n        Return random integers between `low` and `high`, inclusive.\n\n        Return random integers from the \"discrete uniform\" distribution in the\n        closed interval [`low`, `high`].  If `high` is None (the default),\n        then results are from [1, `low`].\n\n        Parameters\n        ----------\n        low : int\n            Lowest (signed) integer to be drawn from the distribution (unless\n            ``high=None``, in which case this parameter is the *highest* such\n            integer).\n        high : int, optional\n            If provided, the largest (signed) integer to be drawn from the\n            distribution (see above for behavior if ``high=None``).\n        size : int or tuple of ints, optional\n            Output shape. Default is None, in which case a single int is returned.\n\n        Returns\n        -------\n        out : int or ndarray of ints\n            `size`-shaped array of random integers from the appropriate\n            distribution, or a single such random int if `size` not provided.\n\n        See Also\n        --------\n        random.randint : Similar to `random_integers`, only for the half-open\n            interval [`low`, `high`), and 0 is the lowest value if `high` is\n            omitted.\n\n        Notes\n        -----\n        To sample from N evenly spaced floating-point numbers between a and b,\n        use::\n\n          a + (b - a) * (np.random.random_integers(N) - 1) / (N - 1.)\n\n        Examples\n        --------\n        >>> np.random.random_integers(5)\n        4\n        >>> type(np.random.random_integers(5))\n        <type 'int'>\n        >>> np.random.random_integers(5, size=(3.,2.))\n        array([[5, 4],\n               [3, 3],\n               [4, 5]])\n\n        Choose five random numbers from the set of five evenly-spaced\n        numbers between 0 and 2.5, inclusive (*i.e.*, from the set\n        :math:`{0, 5/8, 10/8, 15/8, 20/8}`):\n""\n        >>> 2.5 * (np.random.random_integers(5, size=(5,)) - 1) / 4.\n        array([ 0.625,  1.25 ,  0.625,  0.625,  2.5  ])\n\n        Roll two six sided dice 1000 times and sum the results:\n\n        >>> d1 = np.random.random_integers(1, 6, 1000)\n        >>> d2 = np.random.random_integers(1, 6, 1000)\n        >>> dsums = d1 + d2\n\n        Display results as a histogram:\n\n        >>> import matplotlib.pyplot as plt\n        >>> count, bins, ignored = plt.hist(dsums, 11, normed=True)\n        >>> plt.show()\n\n        ";
    2667 -static PyObject *__pyx_pf_6mtrand_11RandomState_15random_integers(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
    2668 +/* Python wrapper */
    2669 +static PyObject *__pyx_pw_6mtrand_11RandomState_31random_integers(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
    2670 +static char __pyx_doc_6mtrand_11RandomState_30random_integers[] = "\n        random_integers(low, high=None, size=None)\n\n        Return random integers between `low` and `high`, inclusive.\n\n        Return random integers from the \"discrete uniform\" distribution in the\n        closed interval [`low`, `high`].  If `high` is None (the default),\n        then results are from [1, `low`].\n\n        Parameters\n        ----------\n        low : int\n            Lowest (signed) integer to be drawn from the distribution (unless\n            ``high=None``, in which case this parameter is the *highest* such\n            integer).\n        high : int, optional\n            If provided, the largest (signed) integer to be drawn from the\n            distribution (see above for behavior if ``high=None``).\n        size : int or tuple of ints, optional\n            Output shape. Default is None, in which case a single int is returned.\n\n        Returns\n        -------\n        out : int or ndarray of ints\n            `size`-shaped array of random integers from the appropriate\n            distribution, or a single such random int if `size` not provided.\n\n        See Also\n        --------\n        random.randint : Similar to `random_integers`, only for the half-open\n            interval [`low`, `high`), and 0 is the lowest value if `high` is\n            omitted.\n\n        Notes\n        -----\n        To sample from N evenly spaced floating-point numbers between a and b,\n        use::\n\n          a + (b - a) * (np.random.random_integers(N) - 1) / (N - 1.)\n\n        Examples\n        --------\n        >>> np.random.random_integers(5)\n        4\n        >>> type(np.random.random_integers(5))\n        <type 'int'>\n        >>> np.random.random_integers(5, size=(3.,2.))\n        array([[5, 4],\n               [3, 3],\n               [4, 5]])\n\n        Choose five random numbers from the set of five evenly-spaced\n        numbers between 0 and 2.5, inclusive (*i.e.*, from the set\n        :math:`{0, 5/8, 10/8, 15/8, 20/8}`):\n""\n        >>> 2.5 * (np.random.random_integers(5, size=(5,)) - 1) / 4.\n        array([ 0.625,  1.25 ,  0.625,  0.625,  2.5  ])\n\n        Roll two six sided dice 1000 times and sum the results:\n\n        >>> d1 = np.random.random_integers(1, 6, 1000)\n        >>> d2 = np.random.random_integers(1, 6, 1000)\n        >>> dsums = d1 + d2\n\n        Display results as a histogram:\n\n        >>> import matplotlib.pyplot as plt\n        >>> count, bins, ignored = plt.hist(dsums, 11, normed=True)\n        >>> plt.show()\n\n        ";
    2671 +static PyObject *__pyx_pw_6mtrand_11RandomState_31random_integers(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
    2672    PyObject *__pyx_v_low = 0;
    2673    PyObject *__pyx_v_high = 0;
    2674    PyObject *__pyx_v_size = 0;
    2675 -  PyObject *__pyx_r = NULL;
    2676 +  PyObject *__pyx_r = 0;
    2677    __Pyx_RefNannyDeclarations
    2678 -  int __pyx_t_1;
    2679 -  PyObject *__pyx_t_2 = NULL;
    2680 -  PyObject *__pyx_t_3 = NULL;
    2681 -  PyObject *__pyx_t_4 = NULL;
    2682 -  int __pyx_lineno = 0;
    2683 -  const char *__pyx_filename = NULL;
    2684 -  int __pyx_clineno = 0;
    2685 -  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__low,&__pyx_n_s__high,&__pyx_n_s__size,0};
    2686 -  __Pyx_RefNannySetupContext("random_integers");
    2687 +  __Pyx_RefNannySetupContext("random_integers (wrapper)", 0);
    2688    {
    2689 +    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__low,&__pyx_n_s__high,&__pyx_n_s__size,0};
    2690      PyObject* values[3] = {0,0,0};
    2691 +
    2692 +    /* "mtrand.pyx":1102
    2693 + *             return self.standard_normal(args)
    2694 + *
    2695 + *     def random_integers(self, low, high=None, size=None):             # <<<<<<<<<<<<<<
    2696 + *         """
    2697 + *         random_integers(low, high=None, size=None)
    2698 + */
    2699      values[1] = ((PyObject *)Py_None);
    2700      values[2] = ((PyObject *)Py_None);
    2701      if (unlikely(__pyx_kwds)) {
    2702        Py_ssize_t kw_args;
    2703 -      switch (PyTuple_GET_SIZE(__pyx_args)) {
    2704 +      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
    2705 +      switch (pos_args) {
    2706          case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
    2707          case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    2708          case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    2709 @@ -6833,10 +7120,9 @@
    2710          default: goto __pyx_L5_argtuple_error;
    2711        }
    2712        kw_args = PyDict_Size(__pyx_kwds);
    2713 -      switch (PyTuple_GET_SIZE(__pyx_args)) {
    2714 +      switch (pos_args) {
    2715          case  0:
    2716 -        values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__low);
    2717 -        if (likely(values[0])) kw_args--;
    2718 +        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__low)) != 0)) kw_args--;
    2719          else goto __pyx_L5_argtuple_error;
    2720          case  1:
    2721          if (kw_args > 0) {
    2722 @@ -6850,7 +7136,7 @@
    2723          }
    2724        }
    2725        if (unlikely(kw_args > 0)) {
    2726 -        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "random_integers") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1102; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    2727 +        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "random_integers") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1102; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    2728        }
    2729      } else {
    2730        switch (PyTuple_GET_SIZE(__pyx_args)) {
    2731 @@ -6873,6 +7159,22 @@
    2732    __Pyx_RefNannyFinishContext();
    2733    return NULL;
    2734    __pyx_L4_argument_unpacking_done:;
    2735 +  __pyx_r = __pyx_pf_6mtrand_11RandomState_30random_integers(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self), __pyx_v_low, __pyx_v_high, __pyx_v_size);
    2736 +  __Pyx_RefNannyFinishContext();
    2737 +  return __pyx_r;
    2738 +}
    2739 +
    2740 +static PyObject *__pyx_pf_6mtrand_11RandomState_30random_integers(struct __pyx_obj_6mtrand_RandomState *__pyx_v_self, PyObject *__pyx_v_low, PyObject *__pyx_v_high, PyObject *__pyx_v_size) {
    2741 +  PyObject *__pyx_r = NULL;
    2742 +  __Pyx_RefNannyDeclarations
    2743 +  int __pyx_t_1;
    2744 +  PyObject *__pyx_t_2 = NULL;
    2745 +  PyObject *__pyx_t_3 = NULL;
    2746 +  PyObject *__pyx_t_4 = NULL;
    2747 +  int __pyx_lineno = 0;
    2748 +  const char *__pyx_filename = NULL;
    2749 +  int __pyx_clineno = 0;
    2750 +  __Pyx_RefNannySetupContext("random_integers", 0);
    2751    __Pyx_INCREF(__pyx_v_low);
    2752    __Pyx_INCREF(__pyx_v_high);
    2753  
    2754 @@ -6907,9 +7209,9 @@
    2755      __Pyx_INCREF(__pyx_int_1);
    2756      __Pyx_DECREF(__pyx_v_low);
    2757      __pyx_v_low = __pyx_int_1;
    2758 -    goto __pyx_L6;
    2759 +    goto __pyx_L3;
    2760    }
    2761 -  __pyx_L6:;
    2762 +  __pyx_L3:;
    2763  
    2764    /* "mtrand.pyx":1177
    2765   *             high = low
    2766 @@ -6919,12 +7221,12 @@
    2767   *     # Complicated, continuous distributions:
    2768   */
    2769    __Pyx_XDECREF(__pyx_r);
    2770 -  __pyx_t_2 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__randint); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1177; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    2771 +  __pyx_t_2 = PyObject_GetAttr(((PyObject *)__pyx_v_self), __pyx_n_s__randint); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1177; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    2772    __Pyx_GOTREF(__pyx_t_2);
    2773    __pyx_t_3 = PyNumber_Add(__pyx_v_high, __pyx_int_1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1177; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    2774    __Pyx_GOTREF(__pyx_t_3);
    2775    __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1177; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    2776 -  __Pyx_GOTREF(((PyObject *)__pyx_t_4));
    2777 +  __Pyx_GOTREF(__pyx_t_4);
    2778    __Pyx_INCREF(__pyx_v_low);
    2779    PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_low);
    2780    __Pyx_GIVEREF(__pyx_v_low);
    2781 @@ -6958,38 +7260,36 @@
    2782    return __pyx_r;
    2783  }
    2784  
    2785 -/* "mtrand.pyx":1180
    2786 +/* Python wrapper */
    2787 +static PyObject *__pyx_pw_6mtrand_11RandomState_33standard_normal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
    2788 +static char __pyx_doc_6mtrand_11RandomState_32standard_normal[] = "\n        standard_normal(size=None)\n\n        Returns samples from a Standard Normal distribution (mean=0, stdev=1).\n\n        Parameters\n        ----------\n        size : int or tuple of ints, optional\n            Output shape. Default is None, in which case a single value is\n            returned.\n\n        Returns\n        -------\n        out : float or ndarray\n            Drawn samples.\n\n        Examples\n        --------\n        >>> s = np.random.standard_normal(8000)\n        >>> s\n        array([ 0.6888893 ,  0.78096262, -0.89086505, ...,  0.49876311, #random\n               -0.38672696, -0.4685006 ])                               #random\n        >>> s.shape\n        (8000,)\n        >>> s = np.random.standard_normal(size=(3, 4, 2))\n        >>> s.shape\n        (3, 4, 2)\n\n        ";
    2789 +static PyObject *__pyx_pw_6mtrand_11RandomState_33standard_normal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
    2790 +  PyObject *__pyx_v_size = 0;
    2791 +  PyObject *__pyx_r = 0;
    2792 +  __Pyx_RefNannyDeclarations
    2793 +  __Pyx_RefNannySetupContext("standard_normal (wrapper)", 0);
    2794 +  {
    2795 +    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__size,0};
    2796 +    PyObject* values[1] = {0};
    2797 +
    2798 +    /* "mtrand.pyx":1180
    2799   *
    2800   *     # Complicated, continuous distributions:
    2801   *     def standard_normal(self, size=None):             # <<<<<<<<<<<<<<
    2802   *         """
    2803   *         standard_normal(size=None)
    2804   */
    2805 -
    2806 -static PyObject *__pyx_pf_6mtrand_11RandomState_16standard_normal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
    2807 -static char __pyx_doc_6mtrand_11RandomState_16standard_normal[] = "\n        standard_normal(size=None)\n\n        Returns samples from a Standard Normal distribution (mean=0, stdev=1).\n\n        Parameters\n        ----------\n        size : int or tuple of ints, optional\n            Output shape. Default is None, in which case a single value is\n            returned.\n\n        Returns\n        -------\n        out : float or ndarray\n            Drawn samples.\n\n        Examples\n        --------\n        >>> s = np.random.standard_normal(8000)\n        >>> s\n        array([ 0.6888893 ,  0.78096262, -0.89086505, ...,  0.49876311, #random\n               -0.38672696, -0.4685006 ])                               #random\n        >>> s.shape\n        (8000,)\n        >>> s = np.random.standard_normal(size=(3, 4, 2))\n        >>> s.shape\n        (3, 4, 2)\n\n        ";
    2808 -static PyObject *__pyx_pf_6mtrand_11RandomState_16standard_normal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
    2809 -  PyObject *__pyx_v_size = 0;
    2810 -  PyObject *__pyx_r = NULL;
    2811 -  __Pyx_RefNannyDeclarations
    2812 -  PyObject *__pyx_t_1 = NULL;
    2813 -  int __pyx_lineno = 0;
    2814 -  const char *__pyx_filename = NULL;
    2815 -  int __pyx_clineno = 0;
    2816 -  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__size,0};
    2817 -  __Pyx_RefNannySetupContext("standard_normal");
    2818 -  {
    2819 -    PyObject* values[1] = {0};
    2820      values[0] = ((PyObject *)Py_None);
    2821      if (unlikely(__pyx_kwds)) {
    2822        Py_ssize_t kw_args;
    2823 -      switch (PyTuple_GET_SIZE(__pyx_args)) {
    2824 +      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
    2825 +      switch (pos_args) {
    2826          case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    2827          case  0: break;
    2828          default: goto __pyx_L5_argtuple_error;
    2829        }
    2830        kw_args = PyDict_Size(__pyx_kwds);
    2831 -      switch (PyTuple_GET_SIZE(__pyx_args)) {
    2832 +      switch (pos_args) {
    2833          case  0:
    2834          if (kw_args > 0) {
    2835            PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__size);
    2836 @@ -6997,7 +7297,7 @@
    2837          }
    2838        }
    2839        if (unlikely(kw_args > 0)) {
    2840 -        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "standard_normal") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1180; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    2841 +        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "standard_normal") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1180; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    2842        }
    2843      } else {
    2844        switch (PyTuple_GET_SIZE(__pyx_args)) {
    2845 @@ -7016,6 +7316,19 @@
    2846    __Pyx_RefNannyFinishContext();
    2847    return NULL;
    2848    __pyx_L4_argument_unpacking_done:;
    2849 +  __pyx_r = __pyx_pf_6mtrand_11RandomState_32standard_normal(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self), __pyx_v_size);
    2850 +  __Pyx_RefNannyFinishContext();
    2851 +  return __pyx_r;
    2852 +}
    2853 +
    2854 +static PyObject *__pyx_pf_6mtrand_11RandomState_32standard_normal(struct __pyx_obj_6mtrand_RandomState *__pyx_v_self, PyObject *__pyx_v_size) {
    2855 +  PyObject *__pyx_r = NULL;
    2856 +  __Pyx_RefNannyDeclarations
    2857 +  PyObject *__pyx_t_1 = NULL;
    2858 +  int __pyx_lineno = 0;
    2859 +  const char *__pyx_filename = NULL;
    2860 +  int __pyx_clineno = 0;
    2861 +  __Pyx_RefNannySetupContext("standard_normal", 0);
    2862  
    2863    /* "mtrand.pyx":1210
    2864   *
    2865 @@ -7025,7 +7338,7 @@
    2866   *     def normal(self, loc=0.0, scale=1.0, size=None):
    2867   */
    2868    __Pyx_XDECREF(__pyx_r);
    2869 -  __pyx_t_1 = __pyx_f_6mtrand_cont0_array(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state, rk_gauss, __pyx_v_size); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1210; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    2870 +  __pyx_t_1 = __pyx_f_6mtrand_cont0_array(__pyx_v_self->internal_state, rk_gauss, __pyx_v_size); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1210; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    2871    __Pyx_GOTREF(__pyx_t_1);
    2872    __pyx_r = __pyx_t_1;
    2873    __pyx_t_1 = 0;
    2874 @@ -7043,44 +7356,34 @@
    2875    return __pyx_r;
    2876  }
    2877  
    2878 -/* "mtrand.pyx":1212
    2879 - *         return cont0_array(self.internal_state, rk_gauss, size)
    2880 - *
    2881 - *     def normal(self, loc=0.0, scale=1.0, size=None):             # <<<<<<<<<<<<<<
    2882 - *         """
    2883 - *         normal(loc=0.0, scale=1.0, size=None)
    2884 - */
    2885 -
    2886 -static PyObject *__pyx_pf_6mtrand_11RandomState_17normal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
    2887 -static char __pyx_doc_6mtrand_11RandomState_17normal[] = "\n        normal(loc=0.0, scale=1.0, size=None)\n\n        Draw random samples from a normal (Gaussian) distribution.\n\n        The probability density function of the normal distribution, first\n        derived by De Moivre and 200 years later by both Gauss and Laplace\n        independently [2]_, is often called the bell curve because of\n        its characteristic shape (see the example below).\n\n        The normal distributions occurs often in nature.  For example, it\n        describes the commonly occurring distribution of samples influenced\n        by a large number of tiny, random disturbances, each with its own\n        unique distribution [2]_.\n\n        Parameters\n        ----------\n        loc : float\n            Mean (\"centre\") of the distribution.\n        scale : float\n            Standard deviation (spread or \"width\") of the distribution.\n        size : tuple of ints\n            Output shape.  If the given shape is, e.g., ``(m, n, k)``, then\n            ``m * n * k`` samples are drawn.\n\n        See Also\n        --------\n        scipy.stats.distributions.norm : probability density function,\n            distribution or cumulative density function, etc.\n\n        Notes\n        -----\n        The probability density for the Gaussian distribution is\n\n        .. math:: p(x) = \\frac{1}{\\sqrt{ 2 \\pi \\sigma^2 }}\n                         e^{ - \\frac{ (x - \\mu)^2 } {2 \\sigma^2} },\n\n        where :math:`\\mu` is the mean and :math:`\\sigma` the standard deviation.\n        The square of the standard deviation, :math:`\\sigma^2`, is called the\n        variance.\n\n        The function has its peak at the mean, and its \"spread\" increases with\n        the standard deviation (the function reaches 0.607 times its maximum at\n        :math:`x + \\sigma` and :math:`x - \\sigma` [2]_).  This implies that\n        `numpy.random.normal` is more likely to return samples lying close to the\n        mean, rather than those far away.\n""\n        References\n        ----------\n        .. [1] Wikipedia, \"Normal distribution\",\n               http://en.wikipedia.org/wiki/Normal_distribution\n        .. [2] P. R. Peebles Jr., \"Central Limit Theorem\" in \"Probability, Random\n               Variables and Random Signal Principles\", 4th ed., 2001,\n               pp. 51, 51, 125.\n\n        Examples\n        --------\n        Draw samples from the distribution:\n\n        >>> mu, sigma = 0, 0.1 # mean and standard deviation\n        >>> s = np.random.normal(mu, sigma, 1000)\n\n        Verify the mean and the variance:\n\n        >>> abs(mu - np.mean(s)) < 0.01\n        True\n\n        >>> abs(sigma - np.std(s, ddof=1)) < 0.01\n        True\n\n        Display the histogram of the samples, along with\n        the probability density function:\n\n        >>> import matplotlib.pyplot as plt\n        >>> count, bins, ignored = plt.hist(s, 30, normed=True)\n        >>> plt.plot(bins, 1/(sigma * np.sqrt(2 * np.pi)) *\n        ...                np.exp( - (bins - mu)**2 / (2 * sigma**2) ),\n        ...          linewidth=2, color='r')\n        >>> plt.show()\n\n        ";
    2888 -static PyObject *__pyx_pf_6mtrand_11RandomState_17normal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
    2889 +/* Python wrapper */
    2890 +static PyObject *__pyx_pw_6mtrand_11RandomState_35normal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
    2891 +static char __pyx_doc_6mtrand_11RandomState_34normal[] = "\n        normal(loc=0.0, scale=1.0, size=None)\n\n        Draw random samples from a normal (Gaussian) distribution.\n\n        The probability density function of the normal distribution, first\n        derived by De Moivre and 200 years later by both Gauss and Laplace\n        independently [2]_, is often called the bell curve because of\n        its characteristic shape (see the example below).\n\n        The normal distributions occurs often in nature.  For example, it\n        describes the commonly occurring distribution of samples influenced\n        by a large number of tiny, random disturbances, each with its own\n        unique distribution [2]_.\n\n        Parameters\n        ----------\n        loc : float\n            Mean (\"centre\") of the distribution.\n        scale : float\n            Standard deviation (spread or \"width\") of the distribution.\n        size : tuple of ints\n            Output shape.  If the given shape is, e.g., ``(m, n, k)``, then\n            ``m * n * k`` samples are drawn.\n\n        See Also\n        --------\n        scipy.stats.distributions.norm : probability density function,\n            distribution or cumulative density function, etc.\n\n        Notes\n        -----\n        The probability density for the Gaussian distribution is\n\n        .. math:: p(x) = \\frac{1}{\\sqrt{ 2 \\pi \\sigma^2 }}\n                         e^{ - \\frac{ (x - \\mu)^2 } {2 \\sigma^2} },\n\n        where :math:`\\mu` is the mean and :math:`\\sigma` the standard deviation.\n        The square of the standard deviation, :math:`\\sigma^2`, is called the\n        variance.\n\n        The function has its peak at the mean, and its \"spread\" increases with\n        the standard deviation (the function reaches 0.607 times its maximum at\n        :math:`x + \\sigma` and :math:`x - \\sigma` [2]_).  This implies that\n        `numpy.random.normal` is more likely to return samples lying close to the\n        mean, rather than those far away.\n""\n        References\n        ----------\n        .. [1] Wikipedia, \"Normal distribution\",\n               http://en.wikipedia.org/wiki/Normal_distribution\n        .. [2] P. R. Peebles Jr., \"Central Limit Theorem\" in \"Probability, Random\n               Variables and Random Signal Principles\", 4th ed., 2001,\n               pp. 51, 51, 125.\n\n        Examples\n        --------\n        Draw samples from the distribution:\n\n        >>> mu, sigma = 0, 0.1 # mean and standard deviation\n        >>> s = np.random.normal(mu, sigma, 1000)\n\n        Verify the mean and the variance:\n\n        >>> abs(mu - np.mean(s)) < 0.01\n        True\n\n        >>> abs(sigma - np.std(s, ddof=1)) < 0.01\n        True\n\n        Display the histogram of the samples, along with\n        the probability density function:\n\n        >>> import matplotlib.pyplot as plt\n        >>> count, bins, ignored = plt.hist(s, 30, normed=True)\n        >>> plt.plot(bins, 1/(sigma * np.sqrt(2 * np.pi)) *\n        ...                np.exp( - (bins - mu)**2 / (2 * sigma**2) ),\n        ...          linewidth=2, color='r')\n        >>> plt.show()\n\n        ";
    2892 +static PyObject *__pyx_pw_6mtrand_11RandomState_35normal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
    2893    PyObject *__pyx_v_loc = 0;
    2894    PyObject *__pyx_v_scale = 0;
    2895    PyObject *__pyx_v_size = 0;
    2896 -  PyArrayObject *__pyx_v_oloc = 0;
    2897 -  PyArrayObject *__pyx_v_oscale = 0;
    2898 -  double __pyx_v_floc;
    2899 -  double __pyx_v_fscale;
    2900 -  PyObject *__pyx_r = NULL;
    2901 +  PyObject *__pyx_r = 0;
    2902    __Pyx_RefNannyDeclarations
    2903 -  int __pyx_t_1;
    2904 -  PyObject *__pyx_t_2 = NULL;
    2905 -  PyObject *__pyx_t_3 = NULL;
    2906 -  PyObject *__pyx_t_4 = NULL;
    2907 -  PyObject *__pyx_t_5 = NULL;
    2908 -  int __pyx_lineno = 0;
    2909 -  const char *__pyx_filename = NULL;
    2910 -  int __pyx_clineno = 0;
    2911 -  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__loc,&__pyx_n_s__scale,&__pyx_n_s__size,0};
    2912 -  __Pyx_RefNannySetupContext("normal");
    2913 +  __Pyx_RefNannySetupContext("normal (wrapper)", 0);
    2914    {
    2915 +    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__loc,&__pyx_n_s__scale,&__pyx_n_s__size,0};
    2916      PyObject* values[3] = {0,0,0};
    2917      values[0] = __pyx_k_17;
    2918      values[1] = __pyx_k_18;
    2919 +
    2920 +    /* "mtrand.pyx":1212
    2921 + *         return cont0_array(self.internal_state, rk_gauss, size)
    2922 + *
    2923 + *     def normal(self, loc=0.0, scale=1.0, size=None):             # <<<<<<<<<<<<<<
    2924 + *         """
    2925 + *         normal(loc=0.0, scale=1.0, size=None)
    2926 + */
    2927      values[2] = ((PyObject *)Py_None);
    2928      if (unlikely(__pyx_kwds)) {
    2929        Py_ssize_t kw_args;
    2930 -      switch (PyTuple_GET_SIZE(__pyx_args)) {
    2931 +      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
    2932 +      switch (pos_args) {
    2933          case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
    2934          case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    2935          case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    2936 @@ -7088,7 +7391,7 @@
    2937          default: goto __pyx_L5_argtuple_error;
    2938        }
    2939        kw_args = PyDict_Size(__pyx_kwds);
    2940 -      switch (PyTuple_GET_SIZE(__pyx_args)) {
    2941 +      switch (pos_args) {
    2942          case  0:
    2943          if (kw_args > 0) {
    2944            PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__loc);
    2945 @@ -7106,7 +7409,7 @@
    2946          }
    2947        }
    2948        if (unlikely(kw_args > 0)) {
    2949 -        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "normal") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1212; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    2950 +        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "normal") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1212; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    2951        }
    2952      } else {
    2953        switch (PyTuple_GET_SIZE(__pyx_args)) {
    2954 @@ -7129,6 +7432,27 @@
    2955    __Pyx_RefNannyFinishContext();
    2956    return NULL;
    2957    __pyx_L4_argument_unpacking_done:;
    2958 +  __pyx_r = __pyx_pf_6mtrand_11RandomState_34normal(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self), __pyx_v_loc, __pyx_v_scale, __pyx_v_size);
    2959 +  __Pyx_RefNannyFinishContext();
    2960 +  return __pyx_r;
    2961 +}
    2962 +
    2963 +static PyObject *__pyx_pf_6mtrand_11RandomState_34normal(struct __pyx_obj_6mtrand_RandomState *__pyx_v_self, PyObject *__pyx_v_loc, PyObject *__pyx_v_scale, PyObject *__pyx_v_size) {
    2964 +  PyArrayObject *__pyx_v_oloc = 0;
    2965 +  PyArrayObject *__pyx_v_oscale = 0;
    2966 +  double __pyx_v_floc;
    2967 +  double __pyx_v_fscale;
    2968 +  PyObject *__pyx_r = NULL;
    2969 +  __Pyx_RefNannyDeclarations
    2970 +  int __pyx_t_1;
    2971 +  PyObject *__pyx_t_2 = NULL;
    2972 +  PyObject *__pyx_t_3 = NULL;
    2973 +  PyObject *__pyx_t_4 = NULL;
    2974 +  PyObject *__pyx_t_5 = NULL;
    2975 +  int __pyx_lineno = 0;
    2976 +  const char *__pyx_filename = NULL;
    2977 +  int __pyx_clineno = 0;
    2978 +  __Pyx_RefNannySetupContext("normal", 0);
    2979  
    2980    /* "mtrand.pyx":1297
    2981   *         cdef double floc, fscale
    2982 @@ -7180,9 +7504,9 @@
    2983        __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    2984        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    2985        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1301; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    2986 -      goto __pyx_L7;
    2987 +      goto __pyx_L4;
    2988      }
    2989 -    __pyx_L7:;
    2990 +    __pyx_L4:;
    2991  
    2992      /* "mtrand.pyx":1302
    2993   *             if fscale <= 0:
    2994 @@ -7192,14 +7516,14 @@
    2995   *         PyErr_Clear()
    2996   */
    2997      __Pyx_XDECREF(__pyx_r);
    2998 -    __pyx_t_2 = __pyx_f_6mtrand_cont2_array_sc(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state, rk_normal, __pyx_v_size, __pyx_v_floc, __pyx_v_fscale); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1302; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    2999 +    __pyx_t_2 = __pyx_f_6mtrand_cont2_array_sc(__pyx_v_self->internal_state, rk_normal, __pyx_v_size, __pyx_v_floc, __pyx_v_fscale); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1302; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    3000      __Pyx_GOTREF(__pyx_t_2);
    3001      __pyx_r = __pyx_t_2;
    3002      __pyx_t_2 = 0;
    3003      goto __pyx_L0;
    3004 -    goto __pyx_L6;
    3005 +    goto __pyx_L3;
    3006    }
    3007 -  __pyx_L6:;
    3008 +  __pyx_L3:;
    3009  
    3010    /* "mtrand.pyx":1304
    3011   *             return cont2_array_sc(self.internal_state, rk_normal, size, floc, fscale)
    3012 @@ -7254,7 +7578,7 @@
    3013    __Pyx_GOTREF(__pyx_t_4);
    3014    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    3015    __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1308; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    3016 -  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
    3017 +  __Pyx_GOTREF(__pyx_t_2);
    3018    __Pyx_INCREF(((PyObject *)__pyx_v_oscale));
    3019    PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_v_oscale));
    3020    __Pyx_GIVEREF(((PyObject *)__pyx_v_oscale));
    3021 @@ -7266,7 +7590,7 @@
    3022    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    3023    __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
    3024    __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1308; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    3025 -  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
    3026 +  __Pyx_GOTREF(__pyx_t_2);
    3027    PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_5);
    3028    __Pyx_GIVEREF(__pyx_t_5);
    3029    __pyx_t_5 = 0;
    3030 @@ -7290,9 +7614,9 @@
    3031      __Pyx_Raise(__pyx_t_5, 0, 0, 0);
    3032      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    3033      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1309; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    3034 -    goto __pyx_L8;
    3035 +    goto __pyx_L5;
    3036    }
    3037 -  __pyx_L8:;
    3038 +  __pyx_L5:;
    3039  
    3040    /* "mtrand.pyx":1310
    3041   *         if np.any(np.less_equal(oscale, 0)):
    3042 @@ -7302,7 +7626,7 @@
    3043   *     def beta(self, a, b, size=None):
    3044   */
    3045    __Pyx_XDECREF(__pyx_r);
    3046 -  __pyx_t_5 = __pyx_f_6mtrand_cont2_array(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state, rk_normal, __pyx_v_size, __pyx_v_oloc, __pyx_v_oscale); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1310; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    3047 +  __pyx_t_5 = __pyx_f_6mtrand_cont2_array(__pyx_v_self->internal_state, rk_normal, __pyx_v_size, __pyx_v_oloc, __pyx_v_oscale); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1310; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    3048    __Pyx_GOTREF(__pyx_t_5);
    3049    __pyx_r = __pyx_t_5;
    3050    __pyx_t_5 = 0;
    3051 @@ -7325,42 +7649,32 @@
    3052    return __pyx_r;
    3053  }
    3054  
    3055 -/* "mtrand.pyx":1312
    3056 - *         return cont2_array(self.internal_state, rk_normal, size, oloc, oscale)
    3057 - *
    3058 - *     def beta(self, a, b, size=None):             # <<<<<<<<<<<<<<
    3059 - *         """
    3060 - *         beta(a, b, size=None)
    3061 - */
    3062 -
    3063 -static PyObject *__pyx_pf_6mtrand_11RandomState_18beta(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
    3064 -static char __pyx_doc_6mtrand_11RandomState_18beta[] = "\n        beta(a, b, size=None)\n\n        The Beta distribution over ``[0, 1]``.\n\n        The Beta distribution is a special case of the Dirichlet distribution,\n        and is related to the Gamma distribution.  It has the probability\n        distribution function\n\n        .. math:: f(x; a,b) = \\frac{1}{B(\\alpha, \\beta)} x^{\\alpha - 1}\n                                                         (1 - x)^{\\beta - 1},\n\n        where the normalisation, B, is the beta function,\n\n        .. math:: B(\\alpha, \\beta) = \\int_0^1 t^{\\alpha - 1}\n                                     (1 - t)^{\\beta - 1} dt.\n\n        It is often seen in Bayesian inference and order statistics.\n\n        Parameters\n        ----------\n        a : float\n            Alpha, non-negative.\n        b : float\n            Beta, non-negative.\n        size : tuple of ints, optional\n            The number of samples to draw.  The ouput is packed according to\n            the size given.\n\n        Returns\n        -------\n        out : ndarray\n            Array of the given shape, containing values drawn from a\n            Beta distribution.\n\n        ";
    3065 -static PyObject *__pyx_pf_6mtrand_11RandomState_18beta(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
    3066 +/* Python wrapper */
    3067 +static PyObject *__pyx_pw_6mtrand_11RandomState_37beta(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
    3068 +static char __pyx_doc_6mtrand_11RandomState_36beta[] = "\n        beta(a, b, size=None)\n\n        The Beta distribution over ``[0, 1]``.\n\n        The Beta distribution is a special case of the Dirichlet distribution,\n        and is related to the Gamma distribution.  It has the probability\n        distribution function\n\n        .. math:: f(x; a,b) = \\frac{1}{B(\\alpha, \\beta)} x^{\\alpha - 1}\n                                                         (1 - x)^{\\beta - 1},\n\n        where the normalisation, B, is the beta function,\n\n        .. math:: B(\\alpha, \\beta) = \\int_0^1 t^{\\alpha - 1}\n                                     (1 - t)^{\\beta - 1} dt.\n\n        It is often seen in Bayesian inference and order statistics.\n\n        Parameters\n        ----------\n        a : float\n            Alpha, non-negative.\n        b : float\n            Beta, non-negative.\n        size : tuple of ints, optional\n            The number of samples to draw.  The ouput is packed according to\n            the size given.\n\n        Returns\n        -------\n        out : ndarray\n            Array of the given shape, containing values drawn from a\n            Beta distribution.\n\n        ";
    3069 +static PyObject *__pyx_pw_6mtrand_11RandomState_37beta(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
    3070    PyObject *__pyx_v_a = 0;
    3071    PyObject *__pyx_v_b = 0;
    3072    PyObject *__pyx_v_size = 0;
    3073 -  PyArrayObject *__pyx_v_oa = 0;
    3074 -  PyArrayObject *__pyx_v_ob = 0;
    3075 -  double __pyx_v_fa;
    3076 -  double __pyx_v_fb;
    3077 -  PyObject *__pyx_r = NULL;
    3078 +  PyObject *__pyx_r = 0;
    3079    __Pyx_RefNannyDeclarations
    3080 -  int __pyx_t_1;
    3081 -  PyObject *__pyx_t_2 = NULL;
    3082 -  PyObject *__pyx_t_3 = NULL;
    3083 -  PyObject *__pyx_t_4 = NULL;
    3084 -  PyObject *__pyx_t_5 = NULL;
    3085 -  int __pyx_lineno = 0;
    3086 -  const char *__pyx_filename = NULL;
    3087 -  int __pyx_clineno = 0;
    3088 -  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__a,&__pyx_n_s__b,&__pyx_n_s__size,0};
    3089 -  __Pyx_RefNannySetupContext("beta");
    3090 +  __Pyx_RefNannySetupContext("beta (wrapper)", 0);
    3091    {
    3092 +    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__a,&__pyx_n_s__b,&__pyx_n_s__size,0};
    3093      PyObject* values[3] = {0,0,0};
    3094 +
    3095 +    /* "mtrand.pyx":1312
    3096 + *         return cont2_array(self.internal_state, rk_normal, size, oloc, oscale)
    3097 + *
    3098 + *     def beta(self, a, b, size=None):             # <<<<<<<<<<<<<<
    3099 + *         """
    3100 + *         beta(a, b, size=None)
    3101 + */
    3102      values[2] = ((PyObject *)Py_None);
    3103      if (unlikely(__pyx_kwds)) {
    3104        Py_ssize_t kw_args;
    3105 -      switch (PyTuple_GET_SIZE(__pyx_args)) {
    3106 +      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
    3107 +      switch (pos_args) {
    3108          case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
    3109          case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    3110          case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    3111 @@ -7368,14 +7682,12 @@
    3112          default: goto __pyx_L5_argtuple_error;
    3113        }
    3114        kw_args = PyDict_Size(__pyx_kwds);
    3115 -      switch (PyTuple_GET_SIZE(__pyx_args)) {
    3116 +      switch (pos_args) {
    3117          case  0:
    3118 -        values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__a);
    3119 -        if (likely(values[0])) kw_args--;
    3120 +        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__a)) != 0)) kw_args--;
    3121          else goto __pyx_L5_argtuple_error;
    3122          case  1:
    3123 -        values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__b);
    3124 -        if (likely(values[1])) kw_args--;
    3125 +        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__b)) != 0)) kw_args--;
    3126          else {
    3127            __Pyx_RaiseArgtupleInvalid("beta", 0, 2, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1312; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    3128          }
    3129 @@ -7386,7 +7698,7 @@
    3130          }
    3131        }
    3132        if (unlikely(kw_args > 0)) {
    3133 -        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "beta") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1312; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    3134 +        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "beta") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1312; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    3135        }
    3136      } else {
    3137        switch (PyTuple_GET_SIZE(__pyx_args)) {
    3138 @@ -7409,6 +7721,27 @@
    3139    __Pyx_RefNannyFinishContext();
    3140    return NULL;
    3141    __pyx_L4_argument_unpacking_done:;
    3142 +  __pyx_r = __pyx_pf_6mtrand_11RandomState_36beta(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self), __pyx_v_a, __pyx_v_b, __pyx_v_size);
    3143 +  __Pyx_RefNannyFinishContext();
    3144 +  return __pyx_r;
    3145 +}
    3146 +
    3147 +static PyObject *__pyx_pf_6mtrand_11RandomState_36beta(struct __pyx_obj_6mtrand_RandomState *__pyx_v_self, PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_size) {
    3148 +  PyArrayObject *__pyx_v_oa = 0;
    3149 +  PyArrayObject *__pyx_v_ob = 0;
    3150 +  double __pyx_v_fa;
    3151 +  double __pyx_v_fb;
    3152 +  PyObject *__pyx_r = NULL;
    3153 +  __Pyx_RefNannyDeclarations
    3154 +  int __pyx_t_1;
    3155 +  PyObject *__pyx_t_2 = NULL;
    3156 +  PyObject *__pyx_t_3 = NULL;
    3157 +  PyObject *__pyx_t_4 = NULL;
    3158 +  PyObject *__pyx_t_5 = NULL;
    3159 +  int __pyx_lineno = 0;
    3160 +  const char *__pyx_filename = NULL;
    3161 +  int __pyx_clineno = 0;
    3162 +  __Pyx_RefNannySetupContext("beta", 0);
    3163  
    3164    /* "mtrand.pyx":1352
    3165   *         cdef double fa, fb
    3166 @@ -7460,9 +7793,9 @@
    3167        __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    3168        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    3169        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1356; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    3170 -      goto __pyx_L7;
    3171 +      goto __pyx_L4;
    3172      }
    3173 -    __pyx_L7:;
    3174 +    __pyx_L4:;
    3175  
    3176      /* "mtrand.pyx":1357
    3177   *             if fa <= 0:
    3178 @@ -7486,9 +7819,9 @@
    3179        __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    3180        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    3181        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1358; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    3182 -      goto __pyx_L8;
    3183 +      goto __pyx_L5;
    3184      }
    3185 -    __pyx_L8:;
    3186 +    __pyx_L5:;
    3187  
    3188      /* "mtrand.pyx":1359
    3189   *             if fb <= 0:
    3190 @@ -7498,14 +7831,14 @@
    3191   *         PyErr_Clear()
    3192   */
    3193      __Pyx_XDECREF(__pyx_r);
    3194 -    __pyx_t_2 = __pyx_f_6mtrand_cont2_array_sc(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state, rk_beta, __pyx_v_size, __pyx_v_fa, __pyx_v_fb); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1359; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    3195 +    __pyx_t_2 = __pyx_f_6mtrand_cont2_array_sc(__pyx_v_self->internal_state, rk_beta, __pyx_v_size, __pyx_v_fa, __pyx_v_fb); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1359; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    3196      __Pyx_GOTREF(__pyx_t_2);
    3197      __pyx_r = __pyx_t_2;
    3198      __pyx_t_2 = 0;
    3199      goto __pyx_L0;
    3200 -    goto __pyx_L6;
    3201 +    goto __pyx_L3;
    3202    }
    3203 -  __pyx_L6:;
    3204 +  __pyx_L3:;
    3205  
    3206    /* "mtrand.pyx":1361
    3207   *             return cont2_array_sc(self.internal_state, rk_beta, size, fa, fb)
    3208 @@ -7560,7 +7893,7 @@
    3209    __Pyx_GOTREF(__pyx_t_4);
    3210    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    3211    __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1365; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    3212 -  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
    3213 +  __Pyx_GOTREF(__pyx_t_2);
    3214    __Pyx_INCREF(((PyObject *)__pyx_v_oa));
    3215    PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_v_oa));
    3216    __Pyx_GIVEREF(((PyObject *)__pyx_v_oa));
    3217 @@ -7572,7 +7905,7 @@
    3218    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    3219    __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
    3220    __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1365; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    3221 -  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
    3222 +  __Pyx_GOTREF(__pyx_t_2);
    3223    PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_5);
    3224    __Pyx_GIVEREF(__pyx_t_5);
    3225    __pyx_t_5 = 0;
    3226 @@ -7596,9 +7929,9 @@
    3227      __Pyx_Raise(__pyx_t_5, 0, 0, 0);
    3228      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    3229      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1366; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    3230 -    goto __pyx_L9;
    3231 +    goto __pyx_L6;
    3232    }
    3233 -  __pyx_L9:;
    3234 +  __pyx_L6:;
    3235  
    3236    /* "mtrand.pyx":1367
    3237   *         if np.any(np.less_equal(oa, 0)):
    3238 @@ -7618,7 +7951,7 @@
    3239    __Pyx_GOTREF(__pyx_t_3);
    3240    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    3241    __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1367; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    3242 -  __Pyx_GOTREF(((PyObject *)__pyx_t_5));
    3243 +  __Pyx_GOTREF(__pyx_t_5);
    3244    __Pyx_INCREF(((PyObject *)__pyx_v_ob));
    3245    PyTuple_SET_ITEM(__pyx_t_5, 0, ((PyObject *)__pyx_v_ob));
    3246    __Pyx_GIVEREF(((PyObject *)__pyx_v_ob));
    3247 @@ -7630,7 +7963,7 @@
    3248    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    3249    __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
    3250    __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1367; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    3251 -  __Pyx_GOTREF(((PyObject *)__pyx_t_5));
    3252 +  __Pyx_GOTREF(__pyx_t_5);
    3253    PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4);
    3254    __Pyx_GIVEREF(__pyx_t_4);
    3255    __pyx_t_4 = 0;
    3256 @@ -7654,9 +7987,9 @@
    3257      __Pyx_Raise(__pyx_t_4, 0, 0, 0);
    3258      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    3259      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1368; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    3260 -    goto __pyx_L10;
    3261 +    goto __pyx_L7;
    3262    }
    3263 -  __pyx_L10:;
    3264 +  __pyx_L7:;
    3265  
    3266    /* "mtrand.pyx":1369
    3267   *         if np.any(np.less_equal(ob, 0)):
    3268 @@ -7666,7 +7999,7 @@
    3269   *     def exponential(self, scale=1.0, size=None):
    3270   */
    3271    __Pyx_XDECREF(__pyx_r);
    3272 -  __pyx_t_4 = __pyx_f_6mtrand_cont2_array(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state, rk_beta, __pyx_v_size, __pyx_v_oa, __pyx_v_ob); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1369; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    3273 +  __pyx_t_4 = __pyx_f_6mtrand_cont2_array(__pyx_v_self->internal_state, rk_beta, __pyx_v_size, __pyx_v_oa, __pyx_v_ob); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1369; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    3274    __Pyx_GOTREF(__pyx_t_4);
    3275    __pyx_r = __pyx_t_4;
    3276    __pyx_t_4 = 0;
    3277 @@ -7689,47 +8022,39 @@
    3278    return __pyx_r;
    3279  }
    3280  
    3281 -/* "mtrand.pyx":1371
    3282 - *         return cont2_array(self.internal_state, rk_beta, size, oa, ob)
    3283 - *
    3284 - *     def exponential(self, scale=1.0, size=None):             # <<<<<<<<<<<<<<
    3285 - *         """
    3286 - *         exponential(scale=1.0, size=None)
    3287 - */
    3288 -
    3289 -static PyObject *__pyx_pf_6mtrand_11RandomState_19exponential(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
    3290 -static char __pyx_doc_6mtrand_11RandomState_19exponential[] = "\n        exponential(scale=1.0, size=None)\n\n        Exponential distribution.\n\n        Its probability density function is\n\n        .. math:: f(x; \\frac{1}{\\beta}) = \\frac{1}{\\beta} \\exp(-\\frac{x}{\\beta}),\n\n        for ``x > 0`` and 0 elsewhere. :math:`\\beta` is the scale parameter,\n        which is the inverse of the rate parameter :math:`\\lambda = 1/\\beta`.\n        The rate parameter is an alternative, widely used parameterization\n        of the exponential distribution [3]_.\n\n        The exponential distribution is a continuous analogue of the\n        geometric distribution.  It describes many common situations, such as\n        the size of raindrops measured over many rainstorms [1]_, or the time\n        between page requests to Wikipedia [2]_.\n\n        Parameters\n        ----------\n        scale : float\n            The scale parameter, :math:`\\beta = 1/\\lambda`.\n        size : tuple of ints\n            Number of samples to draw.  The output is shaped\n            according to `size`.\n\n        References\n        ----------\n        .. [1] Peyton Z. Peebles Jr., \"Probability, Random Variables and\n               Random Signal Principles\", 4th ed, 2001, p. 57.\n        .. [2] \"Poisson Process\", Wikipedia,\n               http://en.wikipedia.org/wiki/Poisson_process\n        .. [3] \"Exponential Distribution, Wikipedia,\n               http://en.wikipedia.org/wiki/Exponential_distribution\n\n        ";
    3291 -static PyObject *__pyx_pf_6mtrand_11RandomState_19exponential(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
    3292 +/* Python wrapper */
    3293 +static PyObject *__pyx_pw_6mtrand_11RandomState_39exponential(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
    3294 +static char __pyx_doc_6mtrand_11RandomState_38exponential[] = "\n        exponential(scale=1.0, size=None)\n\n        Exponential distribution.\n\n        Its probability density function is\n\n        .. math:: f(x; \\frac{1}{\\beta}) = \\frac{1}{\\beta} \\exp(-\\frac{x}{\\beta}),\n\n        for ``x > 0`` and 0 elsewhere. :math:`\\beta` is the scale parameter,\n        which is the inverse of the rate parameter :math:`\\lambda = 1/\\beta`.\n        The rate parameter is an alternative, widely used parameterization\n        of the exponential distribution [3]_.\n\n        The exponential distribution is a continuous analogue of the\n        geometric distribution.  It describes many common situations, such as\n        the size of raindrops measured over many rainstorms [1]_, or the time\n        between page requests to Wikipedia [2]_.\n\n        Parameters\n        ----------\n        scale : float\n            The scale parameter, :math:`\\beta = 1/\\lambda`.\n        size : tuple of ints\n            Number of samples to draw.  The output is shaped\n            according to `size`.\n\n        References\n        ----------\n        .. [1] Peyton Z. Peebles Jr., \"Probability, Random Variables and\n               Random Signal Principles\", 4th ed, 2001, p. 57.\n        .. [2] \"Poisson Process\", Wikipedia,\n               http://en.wikipedia.org/wiki/Poisson_process\n        .. [3] \"Exponential Distribution, Wikipedia,\n               http://en.wikipedia.org/wiki/Exponential_distribution\n\n        ";
    3295 +static PyObject *__pyx_pw_6mtrand_11RandomState_39exponential(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
    3296    PyObject *__pyx_v_scale = 0;
    3297    PyObject *__pyx_v_size = 0;
    3298 -  PyArrayObject *__pyx_v_oscale = 0;
    3299 -  double __pyx_v_fscale;
    3300 -  PyObject *__pyx_r = NULL;
    3301 +  PyObject *__pyx_r = 0;
    3302    __Pyx_RefNannyDeclarations
    3303 -  int __pyx_t_1;
    3304 -  PyObject *__pyx_t_2 = NULL;
    3305 -  PyObject *__pyx_t_3 = NULL;
    3306 -  PyObject *__pyx_t_4 = NULL;
    3307 -  PyObject *__pyx_t_5 = NULL;
    3308 -  int __pyx_lineno = 0;
    3309 -  const char *__pyx_filename = NULL;
    3310 -  int __pyx_clineno = 0;
    3311 -  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__scale,&__pyx_n_s__size,0};
    3312 -  __Pyx_RefNannySetupContext("exponential");
    3313 +  __Pyx_RefNannySetupContext("exponential (wrapper)", 0);
    3314    {
    3315 +    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__scale,&__pyx_n_s__size,0};
    3316      PyObject* values[2] = {0,0};
    3317      values[0] = __pyx_k_28;
    3318 +
    3319 +    /* "mtrand.pyx":1371
    3320 + *         return cont2_array(self.internal_state, rk_beta, size, oa, ob)
    3321 + *
    3322 + *     def exponential(self, scale=1.0, size=None):             # <<<<<<<<<<<<<<
    3323 + *         """
    3324 + *         exponential(scale=1.0, size=None)
    3325 + */
    3326      values[1] = ((PyObject *)Py_None);
    3327      if (unlikely(__pyx_kwds)) {
    3328        Py_ssize_t kw_args;
    3329 -      switch (PyTuple_GET_SIZE(__pyx_args)) {
    3330 +      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
    3331 +      switch (pos_args) {
    3332          case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    3333          case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    3334          case  0: break;
    3335          default: goto __pyx_L5_argtuple_error;
    3336        }
    3337        kw_args = PyDict_Size(__pyx_kwds);
    3338 -      switch (PyTuple_GET_SIZE(__pyx_args)) {
    3339 +      switch (pos_args) {
    3340          case  0:
    3341          if (kw_args > 0) {
    3342            PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__scale);
    3343 @@ -7742,7 +8067,7 @@
    3344          }
    3345        }
    3346        if (unlikely(kw_args > 0)) {
    3347 -        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "exponential") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1371; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    3348 +        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "exponential") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1371; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    3349        }
    3350      } else {
    3351        switch (PyTuple_GET_SIZE(__pyx_args)) {
    3352 @@ -7763,7 +8088,26 @@
    3353    __Pyx_RefNannyFinishContext();
    3354    return NULL;
    3355    __pyx_L4_argument_unpacking_done:;
    3356 -
    3357 +  __pyx_r = __pyx_pf_6mtrand_11RandomState_38exponential(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self), __pyx_v_scale, __pyx_v_size);
    3358 +  __Pyx_RefNannyFinishContext();
    3359 +  return __pyx_r;
    3360 +}
    3361 +
    3362 +static PyObject *__pyx_pf_6mtrand_11RandomState_38exponential(struct __pyx_obj_6mtrand_RandomState *__pyx_v_self, PyObject *__pyx_v_scale, PyObject *__pyx_v_size) {
    3363 +  PyArrayObject *__pyx_v_oscale = 0;
    3364 +  double __pyx_v_fscale;
    3365 +  PyObject *__pyx_r = NULL;
    3366 +  __Pyx_RefNannyDeclarations
    3367 +  int __pyx_t_1;
    3368 +  PyObject *__pyx_t_2 = NULL;
    3369 +  PyObject *__pyx_t_3 = NULL;
    3370 +  PyObject *__pyx_t_4 = NULL;
    3371 +  PyObject *__pyx_t_5 = NULL;
    3372 +  int __pyx_lineno = 0;
    3373 +  const char *__pyx_filename = NULL;
    3374 +  int __pyx_clineno = 0;
    3375 +  __Pyx_RefNannySetupContext("exponential", 0);
    3376 +
    3377    /* "mtrand.pyx":1412
    3378   *         cdef double fscale
    3379   *
    3380 @@ -7805,9 +8149,9 @@
    3381        __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    3382        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    3383        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1415; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    3384 -      goto __pyx_L7;
    3385 +      goto __pyx_L4;
    3386      }
    3387 -    __pyx_L7:;
    3388 +    __pyx_L4:;
    3389  
    3390      /* "mtrand.pyx":1416
    3391   *             if fscale <= 0:
    3392 @@ -7817,14 +8161,14 @@
    3393   *         PyErr_Clear()
    3394   */
    3395      __Pyx_XDECREF(__pyx_r);
    3396 -    __pyx_t_2 = __pyx_f_6mtrand_cont1_array_sc(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state, rk_exponential, __pyx_v_size, __pyx_v_fscale); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1416; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    3397 +    __pyx_t_2 = __pyx_f_6mtrand_cont1_array_sc(__pyx_v_self->internal_state, rk_exponential, __pyx_v_size, __pyx_v_fscale); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1416; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    3398      __Pyx_GOTREF(__pyx_t_2);
    3399      __pyx_r = __pyx_t_2;
    3400      __pyx_t_2 = 0;
    3401      goto __pyx_L0;
    3402 -    goto __pyx_L6;
    3403 +    goto __pyx_L3;
    3404    }
    3405 -  __pyx_L6:;
    3406 +  __pyx_L3:;
    3407  
    3408    /* "mtrand.pyx":1418
    3409   *             return cont1_array_sc(self.internal_state, rk_exponential, size, fscale)
    3410 @@ -7868,7 +8212,7 @@
    3411    __pyx_t_2 = PyFloat_FromDouble(0.0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1421; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    3412    __Pyx_GOTREF(__pyx_t_2);
    3413    __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1421; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    3414 -  __Pyx_GOTREF(((PyObject *)__pyx_t_5));
    3415 +  __Pyx_GOTREF(__pyx_t_5);
    3416    __Pyx_INCREF(((PyObject *)__pyx_v_oscale));
    3417    PyTuple_SET_ITEM(__pyx_t_5, 0, ((PyObject *)__pyx_v_oscale));
    3418    __Pyx_GIVEREF(((PyObject *)__pyx_v_oscale));
    3419 @@ -7880,7 +8224,7 @@
    3420    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    3421    __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
    3422    __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1421; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    3423 -  __Pyx_GOTREF(((PyObject *)__pyx_t_5));
    3424 +  __Pyx_GOTREF(__pyx_t_5);
    3425    PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2);
    3426    __Pyx_GIVEREF(__pyx_t_2);
    3427    __pyx_t_2 = 0;
    3428 @@ -7904,9 +8248,9 @@
    3429      __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    3430      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    3431      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1422; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    3432 -    goto __pyx_L8;
    3433 +    goto __pyx_L5;
    3434    }
    3435 -  __pyx_L8:;
    3436 +  __pyx_L5:;
    3437  
    3438    /* "mtrand.pyx":1423
    3439   *         if np.any(np.less_equal(oscale, 0.0)):
    3440 @@ -7916,7 +8260,7 @@
    3441   *     def standard_exponential(self, size=None):
    3442   */
    3443    __Pyx_XDECREF(__pyx_r);
    3444 -  __pyx_t_2 = __pyx_f_6mtrand_cont1_array(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state, rk_exponential, __pyx_v_size, __pyx_v_oscale); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1423; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    3445 +  __pyx_t_2 = __pyx_f_6mtrand_cont1_array(__pyx_v_self->internal_state, rk_exponential, __pyx_v_size, __pyx_v_oscale); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1423; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    3446    __Pyx_GOTREF(__pyx_t_2);
    3447    __pyx_r = __pyx_t_2;
    3448    __pyx_t_2 = 0;
    3449 @@ -7938,38 +8282,36 @@
    3450    return __pyx_r;
    3451  }
    3452  
    3453 -/* "mtrand.pyx":1425
    3454 +/* Python wrapper */
    3455 +static PyObject *__pyx_pw_6mtrand_11RandomState_41standard_exponential(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
    3456 +static char __pyx_doc_6mtrand_11RandomState_40standard_exponential[] = "\n        standard_exponential(size=None)\n\n        Draw samples from the standard exponential distribution.\n\n        `standard_exponential` is identical to the exponential distribution\n        with a scale parameter of 1.\n\n        Parameters\n        ----------\n        size : int or tuple of ints\n            Shape of the output.\n\n        Returns\n        -------\n        out : float or ndarray\n            Drawn samples.\n\n        Examples\n        --------\n        Output a 3x8000 array:\n\n        >>> n = np.random.standard_exponential((3, 8000))\n\n        ";
    3457 +static PyObject *__pyx_pw_6mtrand_11RandomState_41standard_exponential(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
    3458 +  PyObject *__pyx_v_size = 0;
    3459 +  PyObject *__pyx_r = 0;
    3460 +  __Pyx_RefNannyDeclarations
    3461 +  __Pyx_RefNannySetupContext("standard_exponential (wrapper)", 0);
    3462 +  {
    3463 +    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__size,0};
    3464 +    PyObject* values[1] = {0};
    3465 +
    3466 +    /* "mtrand.pyx":1425
    3467   *         return cont1_array(self.internal_state, rk_exponential, size, oscale)
    3468   *
    3469   *     def standard_exponential(self, size=None):             # <<<<<<<<<<<<<<
    3470   *         """
    3471   *         standard_exponential(size=None)
    3472   */
    3473 -
    3474 -static PyObject *__pyx_pf_6mtrand_11RandomState_20standard_exponential(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
    3475 -static char __pyx_doc_6mtrand_11RandomState_20standard_exponential[] = "\n        standard_exponential(size=None)\n\n        Draw samples from the standard exponential distribution.\n\n        `standard_exponential` is identical to the exponential distribution\n        with a scale parameter of 1.\n\n        Parameters\n        ----------\n        size : int or tuple of ints\n            Shape of the output.\n\n        Returns\n        -------\n        out : float or ndarray\n            Drawn samples.\n\n        Examples\n        --------\n        Output a 3x8000 array:\n\n        >>> n = np.random.standard_exponential((3, 8000))\n\n        ";
    3476 -static PyObject *__pyx_pf_6mtrand_11RandomState_20standard_exponential(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
    3477 -  PyObject *__pyx_v_size = 0;
    3478 -  PyObject *__pyx_r = NULL;
    3479 -  __Pyx_RefNannyDeclarations
    3480 -  PyObject *__pyx_t_1 = NULL;
    3481 -  int __pyx_lineno = 0;
    3482 -  const char *__pyx_filename = NULL;
    3483 -  int __pyx_clineno = 0;
    3484 -  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__size,0};
    3485 -  __Pyx_RefNannySetupContext("standard_exponential");
    3486 -  {
    3487 -    PyObject* values[1] = {0};
    3488      values[0] = ((PyObject *)Py_None);
    3489      if (unlikely(__pyx_kwds)) {
    3490        Py_ssize_t kw_args;
    3491 -      switch (PyTuple_GET_SIZE(__pyx_args)) {
    3492 +      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
    3493 +      switch (pos_args) {
    3494          case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    3495          case  0: break;
    3496          default: goto __pyx_L5_argtuple_error;
    3497        }
    3498        kw_args = PyDict_Size(__pyx_kwds);
    3499 -      switch (PyTuple_GET_SIZE(__pyx_args)) {
    3500 +      switch (pos_args) {
    3501          case  0:
    3502          if (kw_args > 0) {
    3503            PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__size);
    3504 @@ -7977,7 +8319,7 @@
    3505          }
    3506        }
    3507        if (unlikely(kw_args > 0)) {
    3508 -        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "standard_exponential") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1425; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    3509 +        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "standard_exponential") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1425; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    3510        }
    3511      } else {
    3512        switch (PyTuple_GET_SIZE(__pyx_args)) {
    3513 @@ -7996,6 +8338,19 @@
    3514    __Pyx_RefNannyFinishContext();
    3515    return NULL;
    3516    __pyx_L4_argument_unpacking_done:;
    3517 +  __pyx_r = __pyx_pf_6mtrand_11RandomState_40standard_exponential(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self), __pyx_v_size);
    3518 +  __Pyx_RefNannyFinishContext();
    3519 +  return __pyx_r;
    3520 +}
    3521 +
    3522 +static PyObject *__pyx_pf_6mtrand_11RandomState_40standard_exponential(struct __pyx_obj_6mtrand_RandomState *__pyx_v_self, PyObject *__pyx_v_size) {
    3523 +  PyObject *__pyx_r = NULL;
    3524 +  __Pyx_RefNannyDeclarations
    3525 +  PyObject *__pyx_t_1 = NULL;
    3526 +  int __pyx_lineno = 0;
    3527 +  const char *__pyx_filename = NULL;
    3528 +  int __pyx_clineno = 0;
    3529 +  __Pyx_RefNannySetupContext("standard_exponential", 0);
    3530  
    3531    /* "mtrand.pyx":1451
    3532   *
    3533 @@ -8005,7 +8360,7 @@
    3534   *     def standard_gamma(self, shape, size=None):
    3535   */
    3536    __Pyx_XDECREF(__pyx_r);
    3537 -  __pyx_t_1 = __pyx_f_6mtrand_cont0_array(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state, rk_standard_exponential, __pyx_v_size); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1451; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    3538 +  __pyx_t_1 = __pyx_f_6mtrand_cont0_array(__pyx_v_self->internal_state, rk_standard_exponential, __pyx_v_size); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1451; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    3539    __Pyx_GOTREF(__pyx_t_1);
    3540    __pyx_r = __pyx_t_1;
    3541    __pyx_t_1 = 0;
    3542 @@ -8023,49 +8378,40 @@
    3543    return __pyx_r;
    3544  }
    3545  
    3546 -/* "mtrand.pyx":1453
    3547 +/* Python wrapper */
    3548 +static PyObject *__pyx_pw_6mtrand_11RandomState_43standard_gamma(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
    3549 +static char __pyx_doc_6mtrand_11RandomState_42standard_gamma[] = "\n        standard_gamma(shape, size=None)\n\n        Draw samples from a Standard Gamma distribution.\n\n        Samples are drawn from a Gamma distribution with specified parameters,\n        shape (sometimes designated \"k\") and scale=1.\n\n        Parameters\n        ----------\n        shape : float\n            Parameter, should be > 0.\n        size : int or tuple of ints\n            Output shape.  If the given shape is, e.g., ``(m, n, k)``, then\n            ``m * n * k`` samples are drawn.\n\n        Returns\n        -------\n        samples : ndarray or scalar\n            The drawn samples.\n\n        See Also\n        --------\n        scipy.stats.distributions.gamma : probability density function,\n            distribution or cumulative density function, etc.\n\n        Notes\n        -----\n        The probability density for the Gamma distribution is\n\n        .. math:: p(x) = x^{k-1}\\frac{e^{-x/\\theta}}{\\theta^k\\Gamma(k)},\n\n        where :math:`k` is the shape and :math:`\\theta` the scale,\n        and :math:`\\Gamma` is the Gamma function.\n\n        The Gamma distribution is often used to model the times to failure of\n        electronic components, and arises naturally in processes for which the\n        waiting times between Poisson distributed events are relevant.\n\n        References\n        ----------\n        .. [1] Weisstein, Eric W. \"Gamma Distribution.\" From MathWorld--A\n               Wolfram Web Resource.\n               http://mathworld.wolfram.com/GammaDistribution.html\n        .. [2] Wikipedia, \"Gamma-distribution\",\n               http://en.wikipedia.org/wiki/Gamma-distribution\n\n        Examples\n        --------\n        Draw samples from the distribution:\n\n        >>> shape, scale = 2., 1. # mean and width\n        >>> s = np.random.standard_gamma(shape, 1000000)\n\n        Display the histogram of the samples, along with\n        the probability density function:\n\n        >>> import matplotlib.pyplot as plt""\n        >>> import scipy.special as sps\n        >>> count, bins, ignored = plt.hist(s, 50, normed=True)\n        >>> y = bins**(shape-1) * ((np.exp(-bins/scale))/ \\\n        ...                       (sps.gamma(shape) * scale**shape))\n        >>> plt.plot(bins, y, linewidth=2, color='r')\n        >>> plt.show()\n\n        ";
    3550 +static PyObject *__pyx_pw_6mtrand_11RandomState_43standard_gamma(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
    3551 +  PyObject *__pyx_v_shape = 0;
    3552 +  PyObject *__pyx_v_size = 0;
    3553 +  PyObject *__pyx_r = 0;
    3554 +  __Pyx_RefNannyDeclarations
    3555 +  __Pyx_RefNannySetupContext("standard_gamma (wrapper)", 0);
    3556 +  {
    3557 +    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__shape,&__pyx_n_s__size,0};
    3558 +    PyObject* values[2] = {0,0};
    3559 +
    3560 +    /* "mtrand.pyx":1453
    3561   *         return cont0_array(self.internal_state, rk_standard_exponential, size)
    3562   *
    3563   *     def standard_gamma(self, shape, size=None):             # <<<<<<<<<<<<<<
    3564   *         """
    3565   *         standard_gamma(shape, size=None)
    3566   */
    3567 -
    3568 -static PyObject *__pyx_pf_6mtrand_11RandomState_21standard_gamma(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
    3569 -static char __pyx_doc_6mtrand_11RandomState_21standard_gamma[] = "\n        standard_gamma(shape, size=None)\n\n        Draw samples from a Standard Gamma distribution.\n\n        Samples are drawn from a Gamma distribution with specified parameters,\n        shape (sometimes designated \"k\") and scale=1.\n\n        Parameters\n        ----------\n        shape : float\n            Parameter, should be > 0.\n        size : int or tuple of ints\n            Output shape.  If the given shape is, e.g., ``(m, n, k)``, then\n            ``m * n * k`` samples are drawn.\n\n        Returns\n        -------\n        samples : ndarray or scalar\n            The drawn samples.\n\n        See Also\n        --------\n        scipy.stats.distributions.gamma : probability density function,\n            distribution or cumulative density function, etc.\n\n        Notes\n        -----\n        The probability density for the Gamma distribution is\n\n        .. math:: p(x) = x^{k-1}\\frac{e^{-x/\\theta}}{\\theta^k\\Gamma(k)},\n\n        where :math:`k` is the shape and :math:`\\theta` the scale,\n        and :math:`\\Gamma` is the Gamma function.\n\n        The Gamma distribution is often used to model the times to failure of\n        electronic components, and arises naturally in processes for which the\n        waiting times between Poisson distributed events are relevant.\n\n        References\n        ----------\n        .. [1] Weisstein, Eric W. \"Gamma Distribution.\" From MathWorld--A\n               Wolfram Web Resource.\n               http://mathworld.wolfram.com/GammaDistribution.html\n        .. [2] Wikipedia, \"Gamma-distribution\",\n               http://en.wikipedia.org/wiki/Gamma-distribution\n\n        Examples\n        --------\n        Draw samples from the distribution:\n\n        >>> shape, scale = 2., 1. # mean and width\n        >>> s = np.random.standard_gamma(shape, 1000000)\n\n        Display the histogram of the samples, along with\n        the probability density function:\n\n        >>> import matplotlib.pyplot as plt""\n        >>> import scipy.special as sps\n        >>> count, bins, ignored = plt.hist(s, 50, normed=True)\n        >>> y = bins**(shape-1) * ((np.exp(-bins/scale))/ \\\n        ...                       (sps.gamma(shape) * scale**shape))\n        >>> plt.plot(bins, y, linewidth=2, color='r')\n        >>> plt.show()\n\n        ";
    3570 -static PyObject *__pyx_pf_6mtrand_11RandomState_21standard_gamma(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
    3571 -  PyObject *__pyx_v_shape = 0;
    3572 -  PyObject *__pyx_v_size = 0;
    3573 -  PyArrayObject *__pyx_v_oshape = 0;
    3574 -  double __pyx_v_fshape;
    3575 -  PyObject *__pyx_r = NULL;
    3576 -  __Pyx_RefNannyDeclarations
    3577 -  int __pyx_t_1;
    3578 -  PyObject *__pyx_t_2 = NULL;
    3579 -  PyObject *__pyx_t_3 = NULL;
    3580 -  PyObject *__pyx_t_4 = NULL;
    3581 -  PyObject *__pyx_t_5 = NULL;
    3582 -  int __pyx_lineno = 0;
    3583 -  const char *__pyx_filename = NULL;
    3584 -  int __pyx_clineno = 0;
    3585 -  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__shape,&__pyx_n_s__size,0};
    3586 -  __Pyx_RefNannySetupContext("standard_gamma");
    3587 -  {
    3588 -    PyObject* values[2] = {0,0};
    3589      values[1] = ((PyObject *)Py_None);
    3590      if (unlikely(__pyx_kwds)) {
    3591        Py_ssize_t kw_args;
    3592 -      switch (PyTuple_GET_SIZE(__pyx_args)) {
    3593 +      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
    3594 +      switch (pos_args) {
    3595          case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    3596          case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    3597          case  0: break;
    3598          default: goto __pyx_L5_argtuple_error;
    3599        }
    3600        kw_args = PyDict_Size(__pyx_kwds);
    3601 -      switch (PyTuple_GET_SIZE(__pyx_args)) {
    3602 +      switch (pos_args) {
    3603          case  0:
    3604 -        values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__shape);
    3605 -        if (likely(values[0])) kw_args--;
    3606 +        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__shape)) != 0)) kw_args--;
    3607          else goto __pyx_L5_argtuple_error;
    3608          case  1:
    3609          if (kw_args > 0) {
    3610 @@ -8074,7 +8420,7 @@
    3611          }
    3612        }
    3613        if (unlikely(kw_args > 0)) {
    3614 -        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "standard_gamma") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1453; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    3615 +        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "standard_gamma") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1453; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    3616        }
    3617      } else {
    3618        switch (PyTuple_GET_SIZE(__pyx_args)) {
    3619 @@ -8095,6 +8441,25 @@
    3620    __Pyx_RefNannyFinishContext();
    3621    return NULL;
    3622    __pyx_L4_argument_unpacking_done:;
    3623 +  __pyx_r = __pyx_pf_6mtrand_11RandomState_42standard_gamma(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self), __pyx_v_shape, __pyx_v_size);
    3624 +  __Pyx_RefNannyFinishContext();
    3625 +  return __pyx_r;
    3626 +}
    3627 +
    3628 +static PyObject *__pyx_pf_6mtrand_11RandomState_42standard_gamma(struct __pyx_obj_6mtrand_RandomState *__pyx_v_self, PyObject *__pyx_v_shape, PyObject *__pyx_v_size) {
    3629 +  PyArrayObject *__pyx_v_oshape = 0;
    3630 +  double __pyx_v_fshape;
    3631 +  PyObject *__pyx_r = NULL;
    3632 +  __Pyx_RefNannyDeclarations
    3633 +  int __pyx_t_1;
    3634 +  PyObject *__pyx_t_2 = NULL;
    3635 +  PyObject *__pyx_t_3 = NULL;
    3636 +  PyObject *__pyx_t_4 = NULL;
    3637 +  PyObject *__pyx_t_5 = NULL;
    3638 +  int __pyx_lineno = 0;
    3639 +  const char *__pyx_filename = NULL;
    3640 +  int __pyx_clineno = 0;
    3641 +  __Pyx_RefNannySetupContext("standard_gamma", 0);
    3642  
    3643    /* "mtrand.pyx":1523
    3644   *         cdef double fshape
    3645 @@ -8137,9 +8502,9 @@
    3646        __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    3647        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    3648        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1526; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    3649 -      goto __pyx_L7;
    3650 +      goto __pyx_L4;
    3651      }
    3652 -    __pyx_L7:;
    3653 +    __pyx_L4:;
    3654  
    3655      /* "mtrand.pyx":1527
    3656   *             if fshape <= 0:
    3657 @@ -8149,14 +8514,14 @@
    3658   *         PyErr_Clear()
    3659   */
    3660      __Pyx_XDECREF(__pyx_r);
    3661 -    __pyx_t_2 = __pyx_f_6mtrand_cont1_array_sc(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state, rk_standard_gamma, __pyx_v_size, __pyx_v_fshape); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1527; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    3662 +    __pyx_t_2 = __pyx_f_6mtrand_cont1_array_sc(__pyx_v_self->internal_state, rk_standard_gamma, __pyx_v_size, __pyx_v_fshape); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1527; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    3663      __Pyx_GOTREF(__pyx_t_2);
    3664      __pyx_r = __pyx_t_2;
    3665      __pyx_t_2 = 0;
    3666      goto __pyx_L0;
    3667 -    goto __pyx_L6;
    3668 +    goto __pyx_L3;
    3669    }
    3670 -  __pyx_L6:;
    3671 +  __pyx_L3:;
    3672  
    3673    /* "mtrand.pyx":1529
    3674   *             return cont1_array_sc(self.internal_state, rk_standard_gamma, size, fshape)
    3675 @@ -8200,7 +8565,7 @@
    3676    __pyx_t_2 = PyFloat_FromDouble(0.0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1531; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    3677    __Pyx_GOTREF(__pyx_t_2);
    3678    __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1531; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    3679 -  __Pyx_GOTREF(((PyObject *)__pyx_t_5));
    3680 +  __Pyx_GOTREF(__pyx_t_5);
    3681    __Pyx_INCREF(((PyObject *)__pyx_v_oshape));
    3682    PyTuple_SET_ITEM(__pyx_t_5, 0, ((PyObject *)__pyx_v_oshape));
    3683    __Pyx_GIVEREF(((PyObject *)__pyx_v_oshape));
    3684 @@ -8212,7 +8577,7 @@
    3685    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    3686    __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
    3687    __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1531; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    3688 -  __Pyx_GOTREF(((PyObject *)__pyx_t_5));
    3689 +  __Pyx_GOTREF(__pyx_t_5);
    3690    PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2);
    3691    __Pyx_GIVEREF(__pyx_t_2);
    3692    __pyx_t_2 = 0;
    3693 @@ -8236,9 +8601,9 @@
    3694      __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    3695      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    3696      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1532; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    3697 -    goto __pyx_L8;
    3698 +    goto __pyx_L5;
    3699    }
    3700 -  __pyx_L8:;
    3701 +  __pyx_L5:;
    3702  
    3703    /* "mtrand.pyx":1533
    3704   *         if np.any(np.less_equal(oshape, 0.0)):
    3705 @@ -8248,7 +8613,7 @@
    3706   *     def gamma(self, shape, scale=1.0, size=None):
    3707   */
    3708    __Pyx_XDECREF(__pyx_r);
    3709 -  __pyx_t_2 = __pyx_f_6mtrand_cont1_array(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state, rk_standard_gamma, __pyx_v_size, __pyx_v_oshape); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1533; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    3710 +  __pyx_t_2 = __pyx_f_6mtrand_cont1_array(__pyx_v_self->internal_state, rk_standard_gamma, __pyx_v_size, __pyx_v_oshape); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1533; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    3711    __Pyx_GOTREF(__pyx_t_2);
    3712    __pyx_r = __pyx_t_2;
    3713    __pyx_t_2 = 0;
    3714 @@ -8270,43 +8635,33 @@
    3715    return __pyx_r;
    3716  }
    3717  
    3718 -/* "mtrand.pyx":1535
    3719 - *         return cont1_array(self.internal_state, rk_standard_gamma, size, oshape)
    3720 - *
    3721 - *     def gamma(self, shape, scale=1.0, size=None):             # <<<<<<<<<<<<<<
    3722 - *         """
    3723 - *         gamma(shape, scale=1.0, size=None)
    3724 - */
    3725 -
    3726 -static PyObject *__pyx_pf_6mtrand_11RandomState_22gamma(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
    3727 -static char __pyx_doc_6mtrand_11RandomState_22gamma[] = "\n        gamma(shape, scale=1.0, size=None)\n\n        Draw samples from a Gamma distribution.\n\n        Samples are drawn from a Gamma distribution with specified parameters,\n        `shape` (sometimes designated \"k\") and `scale` (sometimes designated\n        \"theta\"), where both parameters are > 0.\n\n        Parameters\n        ----------\n        shape : scalar > 0\n            The shape of the gamma distribution.\n        scale : scalar > 0, optional\n            The scale of the gamma distribution.  Default is equal to 1.\n        size : shape_tuple, optional\n            Output shape.  If the given shape is, e.g., ``(m, n, k)``, then\n            ``m * n * k`` samples are drawn.\n\n        Returns\n        -------\n        out : ndarray, float\n            Returns one sample unless `size` parameter is specified.\n\n        See Also\n        --------\n        scipy.stats.distributions.gamma : probability density function,\n            distribution or cumulative density function, etc.\n\n        Notes\n        -----\n        The probability density for the Gamma distribution is\n\n        .. math:: p(x) = x^{k-1}\\frac{e^{-x/\\theta}}{\\theta^k\\Gamma(k)},\n\n        where :math:`k` is the shape and :math:`\\theta` the scale,\n        and :math:`\\Gamma` is the Gamma function.\n\n        The Gamma distribution is often used to model the times to failure of\n        electronic components, and arises naturally in processes for which the\n        waiting times between Poisson distributed events are relevant.\n\n        References\n        ----------\n        .. [1] Weisstein, Eric W. \"Gamma Distribution.\" From MathWorld--A\n               Wolfram Web Resource.\n               http://mathworld.wolfram.com/GammaDistribution.html\n        .. [2] Wikipedia, \"Gamma-distribution\",\n               http://en.wikipedia.org/wiki/Gamma-distribution\n\n        Examples\n        --------\n        Draw samples from the distribution:\n\n        >>> shape, scale = 2.,"" 2. # mean and dispersion\n        >>> s = np.random.gamma(shape, scale, 1000)\n\n        Display the histogram of the samples, along with\n        the probability density function:\n\n        >>> import matplotlib.pyplot as plt\n        >>> import scipy.special as sps\n        >>> count, bins, ignored = plt.hist(s, 50, normed=True)\n        >>> y = bins**(shape-1)*(np.exp(-bins/scale) /\n        ...                      (sps.gamma(shape)*scale**shape))\n        >>> plt.plot(bins, y, linewidth=2, color='r')\n        >>> plt.show()\n\n        ";
    3728 -static PyObject *__pyx_pf_6mtrand_11RandomState_22gamma(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
    3729 +/* Python wrapper */
    3730 +static PyObject *__pyx_pw_6mtrand_11RandomState_45gamma(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
    3731 +static char __pyx_doc_6mtrand_11RandomState_44gamma[] = "\n        gamma(shape, scale=1.0, size=None)\n\n        Draw samples from a Gamma distribution.\n\n        Samples are drawn from a Gamma distribution with specified parameters,\n        `shape` (sometimes designated \"k\") and `scale` (sometimes designated\n        \"theta\"), where both parameters are > 0.\n\n        Parameters\n        ----------\n        shape : scalar > 0\n            The shape of the gamma distribution.\n        scale : scalar > 0, optional\n            The scale of the gamma distribution.  Default is equal to 1.\n        size : shape_tuple, optional\n            Output shape.  If the given shape is, e.g., ``(m, n, k)``, then\n            ``m * n * k`` samples are drawn.\n\n        Returns\n        -------\n        out : ndarray, float\n            Returns one sample unless `size` parameter is specified.\n\n        See Also\n        --------\n        scipy.stats.distributions.gamma : probability density function,\n            distribution or cumulative density function, etc.\n\n        Notes\n        -----\n        The probability density for the Gamma distribution is\n\n        .. math:: p(x) = x^{k-1}\\frac{e^{-x/\\theta}}{\\theta^k\\Gamma(k)},\n\n        where :math:`k` is the shape and :math:`\\theta` the scale,\n        and :math:`\\Gamma` is the Gamma function.\n\n        The Gamma distribution is often used to model the times to failure of\n        electronic components, and arises naturally in processes for which the\n        waiting times between Poisson distributed events are relevant.\n\n        References\n        ----------\n        .. [1] Weisstein, Eric W. \"Gamma Distribution.\" From MathWorld--A\n               Wolfram Web Resource.\n               http://mathworld.wolfram.com/GammaDistribution.html\n        .. [2] Wikipedia, \"Gamma-distribution\",\n               http://en.wikipedia.org/wiki/Gamma-distribution\n\n        Examples\n        --------\n        Draw samples from the distribution:\n\n        >>> shape, scale = 2.,"" 2. # mean and dispersion\n        >>> s = np.random.gamma(shape, scale, 1000)\n\n        Display the histogram of the samples, along with\n        the probability density function:\n\n        >>> import matplotlib.pyplot as plt\n        >>> import scipy.special as sps\n        >>> count, bins, ignored = plt.hist(s, 50, normed=True)\n        >>> y = bins**(shape-1)*(np.exp(-bins/scale) /\n        ...                      (sps.gamma(shape)*scale**shape))\n        >>> plt.plot(bins, y, linewidth=2, color='r')\n        >>> plt.show()\n\n        ";
    3732 +static PyObject *__pyx_pw_6mtrand_11RandomState_45gamma(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
    3733    PyObject *__pyx_v_shape = 0;
    3734    PyObject *__pyx_v_scale = 0;
    3735    PyObject *__pyx_v_size = 0;
    3736 -  PyArrayObject *__pyx_v_oshape = 0;
    3737 -  PyArrayObject *__pyx_v_oscale = 0;
    3738 -  double __pyx_v_fshape;
    3739 -  double __pyx_v_fscale;
    3740 -  PyObject *__pyx_r = NULL;
    3741 +  PyObject *__pyx_r = 0;
    3742    __Pyx_RefNannyDeclarations
    3743 -  int __pyx_t_1;
    3744 -  PyObject *__pyx_t_2 = NULL;
    3745 -  PyObject *__pyx_t_3 = NULL;
    3746 -  PyObject *__pyx_t_4 = NULL;
    3747 -  PyObject *__pyx_t_5 = NULL;
    3748 -  int __pyx_lineno = 0;
    3749 -  const char *__pyx_filename = NULL;
    3750 -  int __pyx_clineno = 0;
    3751 -  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__shape,&__pyx_n_s__scale,&__pyx_n_s__size,0};
    3752 -  __Pyx_RefNannySetupContext("gamma");
    3753 +  __Pyx_RefNannySetupContext("gamma (wrapper)", 0);
    3754    {
    3755 +    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__shape,&__pyx_n_s__scale,&__pyx_n_s__size,0};
    3756      PyObject* values[3] = {0,0,0};
    3757      values[1] = __pyx_k_34;
    3758 +
    3759 +    /* "mtrand.pyx":1535
    3760 + *         return cont1_array(self.internal_state, rk_standard_gamma, size, oshape)
    3761 + *
    3762 + *     def gamma(self, shape, scale=1.0, size=None):             # <<<<<<<<<<<<<<
    3763 + *         """
    3764 + *         gamma(shape, scale=1.0, size=None)
    3765 + */
    3766      values[2] = ((PyObject *)Py_None);
    3767      if (unlikely(__pyx_kwds)) {
    3768        Py_ssize_t kw_args;
    3769 -      switch (PyTuple_GET_SIZE(__pyx_args)) {
    3770 +      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
    3771 +      switch (pos_args) {
    3772          case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
    3773          case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    3774          case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    3775 @@ -8314,10 +8669,9 @@
    3776          default: goto __pyx_L5_argtuple_error;
    3777        }
    3778        kw_args = PyDict_Size(__pyx_kwds);
    3779 -      switch (PyTuple_GET_SIZE(__pyx_args)) {
    3780 +      switch (pos_args) {
    3781          case  0:
    3782 -        values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__shape);
    3783 -        if (likely(values[0])) kw_args--;
    3784 +        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__shape)) != 0)) kw_args--;
    3785          else goto __pyx_L5_argtuple_error;
    3786          case  1:
    3787          if (kw_args > 0) {
    3788 @@ -8331,7 +8685,7 @@
    3789          }
    3790        }
    3791        if (unlikely(kw_args > 0)) {
    3792 -        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "gamma") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1535; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    3793 +        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "gamma") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1535; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    3794        }
    3795      } else {
    3796        switch (PyTuple_GET_SIZE(__pyx_args)) {
    3797 @@ -8354,6 +8708,27 @@
    3798    __Pyx_RefNannyFinishContext();
    3799    return NULL;
    3800    __pyx_L4_argument_unpacking_done:;
    3801 +  __pyx_r = __pyx_pf_6mtrand_11RandomState_44gamma(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self), __pyx_v_shape, __pyx_v_scale, __pyx_v_size);
    3802 +  __Pyx_RefNannyFinishContext();
    3803 +  return __pyx_r;
    3804 +}
    3805 +
    3806 +static PyObject *__pyx_pf_6mtrand_11RandomState_44gamma(struct __pyx_obj_6mtrand_RandomState *__pyx_v_self, PyObject *__pyx_v_shape, PyObject *__pyx_v_scale, PyObject *__pyx_v_size) {
    3807 +  PyArrayObject *__pyx_v_oshape = 0;
    3808 +  PyArrayObject *__pyx_v_oscale = 0;
    3809 +  double __pyx_v_fshape;
    3810 +  double __pyx_v_fscale;
    3811 +  PyObject *__pyx_r = NULL;
    3812 +  __Pyx_RefNannyDeclarations
    3813 +  int __pyx_t_1;
    3814 +  PyObject *__pyx_t_2 = NULL;
    3815 +  PyObject *__pyx_t_3 = NULL;
    3816 +  PyObject *__pyx_t_4 = NULL;
    3817 +  PyObject *__pyx_t_5 = NULL;
    3818 +  int __pyx_lineno = 0;
    3819 +  const char *__pyx_filename = NULL;
    3820 +  int __pyx_clineno = 0;
    3821 +  __Pyx_RefNannySetupContext("gamma", 0);
    3822  
    3823    /* "mtrand.pyx":1608
    3824   *         cdef double fshape, fscale
    3825 @@ -8405,9 +8780,9 @@
    3826        __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    3827        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    3828        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1612; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    3829 -      goto __pyx_L7;
    3830 +      goto __pyx_L4;
    3831      }
    3832 -    __pyx_L7:;
    3833 +    __pyx_L4:;
    3834  
    3835      /* "mtrand.pyx":1613
    3836   *             if fshape <= 0:
    3837 @@ -8431,9 +8806,9 @@
    3838        __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    3839        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    3840        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1614; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    3841 -      goto __pyx_L8;
    3842 +      goto __pyx_L5;
    3843      }
    3844 -    __pyx_L8:;
    3845 +    __pyx_L5:;
    3846  
    3847      /* "mtrand.pyx":1615
    3848   *             if fscale <= 0:
    3849 @@ -8443,14 +8818,14 @@
    3850   *         PyErr_Clear()
    3851   */
    3852      __Pyx_XDECREF(__pyx_r);
    3853 -    __pyx_t_2 = __pyx_f_6mtrand_cont2_array_sc(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state, rk_gamma, __pyx_v_size, __pyx_v_fshape, __pyx_v_fscale); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1615; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    3854 +    __pyx_t_2 = __pyx_f_6mtrand_cont2_array_sc(__pyx_v_self->internal_state, rk_gamma, __pyx_v_size, __pyx_v_fshape, __pyx_v_fscale); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1615; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    3855      __Pyx_GOTREF(__pyx_t_2);
    3856      __pyx_r = __pyx_t_2;
    3857      __pyx_t_2 = 0;
    3858      goto __pyx_L0;
    3859 -    goto __pyx_L6;
    3860 +    goto __pyx_L3;
    3861    }
    3862 -  __pyx_L6:;
    3863 +  __pyx_L3:;
    3864  
    3865    /* "mtrand.pyx":1617
    3866   *             return cont2_array_sc(self.internal_state, rk_gamma, size, fshape, fscale)
    3867 @@ -8507,7 +8882,7 @@
    3868    __pyx_t_2 = PyFloat_FromDouble(0.0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1620; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    3869    __Pyx_GOTREF(__pyx_t_2);
    3870    __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1620; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    3871 -  __Pyx_GOTREF(((PyObject *)__pyx_t_5));
    3872 +  __Pyx_GOTREF(__pyx_t_5);
    3873    __Pyx_INCREF(((PyObject *)__pyx_v_oshape));
    3874    PyTuple_SET_ITEM(__pyx_t_5, 0, ((PyObject *)__pyx_v_oshape));
    3875    __Pyx_GIVEREF(((PyObject *)__pyx_v_oshape));
    3876 @@ -8519,7 +8894,7 @@
    3877    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    3878    __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
    3879    __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1620; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    3880 -  __Pyx_GOTREF(((PyObject *)__pyx_t_5));
    3881 +  __Pyx_GOTREF(__pyx_t_5);
    3882    PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2);
    3883    __Pyx_GIVEREF(__pyx_t_2);
    3884    __pyx_t_2 = 0;
    3885 @@ -8543,9 +8918,9 @@
    3886      __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    3887      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    3888      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1621; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    3889 -    goto __pyx_L9;
    3890 +    goto __pyx_L6;
    3891    }
    3892 -  __pyx_L9:;
    3893 +  __pyx_L6:;
    3894  
    3895    /* "mtrand.pyx":1622
    3896   *         if np.any(np.less_equal(oshape, 0.0)):
    3897 @@ -8567,7 +8942,7 @@
    3898    __pyx_t_2 = PyFloat_FromDouble(0.0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1622; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    3899    __Pyx_GOTREF(__pyx_t_2);
    3900    __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1622; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    3901 -  __Pyx_GOTREF(((PyObject *)__pyx_t_4));
    3902 +  __Pyx_GOTREF(__pyx_t_4);
    3903    __Pyx_INCREF(((PyObject *)__pyx_v_oscale));
    3904    PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)__pyx_v_oscale));
    3905    __Pyx_GIVEREF(((PyObject *)__pyx_v_oscale));
    3906 @@ -8579,7 +8954,7 @@
    3907    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    3908    __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
    3909    __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1622; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    3910 -  __Pyx_GOTREF(((PyObject *)__pyx_t_4));
    3911 +  __Pyx_GOTREF(__pyx_t_4);
    3912    PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
    3913    __Pyx_GIVEREF(__pyx_t_2);
    3914    __pyx_t_2 = 0;
    3915 @@ -8603,9 +8978,9 @@
    3916      __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    3917      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    3918      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1623; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    3919 -    goto __pyx_L10;
    3920 +    goto __pyx_L7;
    3921    }
    3922 -  __pyx_L10:;
    3923 +  __pyx_L7:;
    3924  
    3925    /* "mtrand.pyx":1624
    3926   *         if np.any(np.less_equal(oscale, 0.0)):
    3927 @@ -8615,7 +8990,7 @@
    3928   *     def f(self, dfnum, dfden, size=None):
    3929   */
    3930    __Pyx_XDECREF(__pyx_r);
    3931 -  __pyx_t_2 = __pyx_f_6mtrand_cont2_array(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state, rk_gamma, __pyx_v_size, __pyx_v_oshape, __pyx_v_oscale); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1624; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    3932 +  __pyx_t_2 = __pyx_f_6mtrand_cont2_array(__pyx_v_self->internal_state, rk_gamma, __pyx_v_size, __pyx_v_oshape, __pyx_v_oscale); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1624; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    3933    __Pyx_GOTREF(__pyx_t_2);
    3934    __pyx_r = __pyx_t_2;
    3935    __pyx_t_2 = 0;
    3936 @@ -8638,42 +9013,32 @@
    3937    return __pyx_r;
    3938  }
    3939  
    3940 -/* "mtrand.pyx":1626
    3941 - *         return cont2_array(self.internal_state, rk_gamma, size, oshape, oscale)
    3942 - *
    3943 - *     def f(self, dfnum, dfden, size=None):             # <<<<<<<<<<<<<<
    3944 - *         """
    3945 - *         f(dfnum, dfden, size=None)
    3946 - */
    3947 -
    3948 -static PyObject *__pyx_pf_6mtrand_11RandomState_23f(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
    3949 -static char __pyx_doc_6mtrand_11RandomState_23f[] = "\n        f(dfnum, dfden, size=None)\n\n        Draw samples from a F distribution.\n\n        Samples are drawn from an F distribution with specified parameters,\n        `dfnum` (degrees of freedom in numerator) and `dfden` (degrees of freedom\n        in denominator), where both parameters should be greater than zero.\n\n        The random variate of the F distribution (also known as the\n        Fisher distribution) is a continuous probability distribution\n        that arises in ANOVA tests, and is the ratio of two chi-square\n        variates.\n\n        Parameters\n        ----------\n        dfnum : float\n            Degrees of freedom in numerator. Should be greater than zero.\n        dfden : float\n            Degrees of freedom in denominator. Should be greater than zero.\n        size : {tuple, int}, optional\n            Output shape.  If the given shape is, e.g., ``(m, n, k)``,\n            then ``m * n * k`` samples are drawn. By default only one sample\n            is returned.\n\n        Returns\n        -------\n        samples : {ndarray, scalar}\n            Samples from the Fisher distribution.\n\n        See Also\n        --------\n        scipy.stats.distributions.f : probability density function,\n            distribution or cumulative density function, etc.\n\n        Notes\n        -----\n\n        The F statistic is used to compare in-group variances to between-group\n        variances. Calculating the distribution depends on the sampling, and\n        so it is a function of the respective degrees of freedom in the\n        problem.  The variable `dfnum` is the number of samples minus one, the\n        between-groups degrees of freedom, while `dfden` is the within-groups\n        degrees of freedom, the sum of the number of samples in each group\n        minus the number of groups.\n\n        References\n        ----------\n        .. [1] Glantz, Stanton A. \"Primer of Biostatistics.\", McGraw-Hill,\n               Fifth Edition, 2002.""\n        .. [2] Wikipedia, \"F-distribution\",\n               http://en.wikipedia.org/wiki/F-distribution\n\n        Examples\n        --------\n        An example from Glantz[1], pp 47-40.\n        Two groups, children of diabetics (25 people) and children from people\n        without diabetes (25 controls). Fasting blood glucose was measured,\n        case group had a mean value of 86.1, controls had a mean value of\n        82.2. Standard deviations were 2.09 and 2.49 respectively. Are these\n        data consistent with the null hypothesis that the parents diabetic\n        status does not affect their children's blood glucose levels?\n        Calculating the F statistic from the data gives a value of 36.01.\n\n        Draw samples from the distribution:\n\n        >>> dfnum = 1. # between group degrees of freedom\n        >>> dfden = 48. # within groups degrees of freedom\n        >>> s = np.random.f(dfnum, dfden, 1000)\n\n        The lower bound for the top 1% of the samples is :\n\n        >>> sort(s)[-10]\n        7.61988120985\n\n        So there is about a 1% chance that the F statistic will exceed 7.62,\n        the measured value is 36, so the null hypothesis is rejected at the 1%\n        level.\n\n        ";
    3950 -static PyObject *__pyx_pf_6mtrand_11RandomState_23f(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
    3951 +/* Python wrapper */
    3952 +static PyObject *__pyx_pw_6mtrand_11RandomState_47f(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
    3953 +static char __pyx_doc_6mtrand_11RandomState_46f[] = "\n        f(dfnum, dfden, size=None)\n\n        Draw samples from a F distribution.\n\n        Samples are drawn from an F distribution with specified parameters,\n        `dfnum` (degrees of freedom in numerator) and `dfden` (degrees of freedom\n        in denominator), where both parameters should be greater than zero.\n\n        The random variate of the F distribution (also known as the\n        Fisher distribution) is a continuous probability distribution\n        that arises in ANOVA tests, and is the ratio of two chi-square\n        variates.\n\n        Parameters\n        ----------\n        dfnum : float\n            Degrees of freedom in numerator. Should be greater than zero.\n        dfden : float\n            Degrees of freedom in denominator. Should be greater than zero.\n        size : {tuple, int}, optional\n            Output shape.  If the given shape is, e.g., ``(m, n, k)``,\n            then ``m * n * k`` samples are drawn. By default only one sample\n            is returned.\n\n        Returns\n        -------\n        samples : {ndarray, scalar}\n            Samples from the Fisher distribution.\n\n        See Also\n        --------\n        scipy.stats.distributions.f : probability density function,\n            distribution or cumulative density function, etc.\n\n        Notes\n        -----\n\n        The F statistic is used to compare in-group variances to between-group\n        variances. Calculating the distribution depends on the sampling, and\n        so it is a function of the respective degrees of freedom in the\n        problem.  The variable `dfnum` is the number of samples minus one, the\n        between-groups degrees of freedom, while `dfden` is the within-groups\n        degrees of freedom, the sum of the number of samples in each group\n        minus the number of groups.\n\n        References\n        ----------\n        .. [1] Glantz, Stanton A. \"Primer of Biostatistics.\", McGraw-Hill,\n               Fifth Edition, 2002.""\n        .. [2] Wikipedia, \"F-distribution\",\n               http://en.wikipedia.org/wiki/F-distribution\n\n        Examples\n        --------\n        An example from Glantz[1], pp 47-40.\n        Two groups, children of diabetics (25 people) and children from people\n        without diabetes (25 controls). Fasting blood glucose was measured,\n        case group had a mean value of 86.1, controls had a mean value of\n        82.2. Standard deviations were 2.09 and 2.49 respectively. Are these\n        data consistent with the null hypothesis that the parents diabetic\n        status does not affect their children's blood glucose levels?\n        Calculating the F statistic from the data gives a value of 36.01.\n\n        Draw samples from the distribution:\n\n        >>> dfnum = 1. # between group degrees of freedom\n        >>> dfden = 48. # within groups degrees of freedom\n        >>> s = np.random.f(dfnum, dfden, 1000)\n\n        The lower bound for the top 1% of the samples is :\n\n        >>> sort(s)[-10]\n        7.61988120985\n\n        So there is about a 1% chance that the F statistic will exceed 7.62,\n        the measured value is 36, so the null hypothesis is rejected at the 1%\n        level.\n\n        ";
    3954 +static PyObject *__pyx_pw_6mtrand_11RandomState_47f(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
    3955    PyObject *__pyx_v_dfnum = 0;
    3956    PyObject *__pyx_v_dfden = 0;
    3957    PyObject *__pyx_v_size = 0;
    3958 -  PyArrayObject *__pyx_v_odfnum = 0;
    3959 -  PyArrayObject *__pyx_v_odfden = 0;
    3960 -  double __pyx_v_fdfnum;
    3961 -  double __pyx_v_fdfden;
    3962 -  PyObject *__pyx_r = NULL;
    3963 +  PyObject *__pyx_r = 0;
    3964    __Pyx_RefNannyDeclarations
    3965 -  int __pyx_t_1;
    3966 -  PyObject *__pyx_t_2 = NULL;
    3967 -  PyObject *__pyx_t_3 = NULL;
    3968 -  PyObject *__pyx_t_4 = NULL;
    3969 -  PyObject *__pyx_t_5 = NULL;
    3970 -  int __pyx_lineno = 0;
    3971 -  const char *__pyx_filename = NULL;
    3972 -  int __pyx_clineno = 0;
    3973 -  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__dfnum,&__pyx_n_s__dfden,&__pyx_n_s__size,0};
    3974 -  __Pyx_RefNannySetupContext("f");
    3975 +  __Pyx_RefNannySetupContext("f (wrapper)", 0);
    3976    {
    3977 +    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__dfnum,&__pyx_n_s__dfden,&__pyx_n_s__size,0};
    3978      PyObject* values[3] = {0,0,0};
    3979 +
    3980 +    /* "mtrand.pyx":1626
    3981 + *         return cont2_array(self.internal_state, rk_gamma, size, oshape, oscale)
    3982 + *
    3983 + *     def f(self, dfnum, dfden, size=None):             # <<<<<<<<<<<<<<
    3984 + *         """
    3985 + *         f(dfnum, dfden, size=None)
    3986 + */
    3987      values[2] = ((PyObject *)Py_None);
    3988      if (unlikely(__pyx_kwds)) {
    3989        Py_ssize_t kw_args;
    3990 -      switch (PyTuple_GET_SIZE(__pyx_args)) {
    3991 +      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
    3992 +      switch (pos_args) {
    3993          case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
    3994          case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    3995          case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    3996 @@ -8681,14 +9046,12 @@
    3997          default: goto __pyx_L5_argtuple_error;
    3998        }
    3999        kw_args = PyDict_Size(__pyx_kwds);
    4000 -      switch (PyTuple_GET_SIZE(__pyx_args)) {
    4001 +      switch (pos_args) {
    4002          case  0:
    4003 -        values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__dfnum);
    4004 -        if (likely(values[0])) kw_args--;
    4005 +        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__dfnum)) != 0)) kw_args--;
    4006          else goto __pyx_L5_argtuple_error;
    4007          case  1:
    4008 -        values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__dfden);
    4009 -        if (likely(values[1])) kw_args--;
    4010 +        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__dfden)) != 0)) kw_args--;
    4011          else {
    4012            __Pyx_RaiseArgtupleInvalid("f", 0, 2, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1626; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    4013          }
    4014 @@ -8699,7 +9062,7 @@
    4015          }
    4016        }
    4017        if (unlikely(kw_args > 0)) {
    4018 -        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "f") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1626; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    4019 +        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "f") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1626; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    4020        }
    4021      } else {
    4022        switch (PyTuple_GET_SIZE(__pyx_args)) {
    4023 @@ -8722,6 +9085,27 @@
    4024    __Pyx_RefNannyFinishContext();
    4025    return NULL;
    4026    __pyx_L4_argument_unpacking_done:;
    4027 +  __pyx_r = __pyx_pf_6mtrand_11RandomState_46f(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self), __pyx_v_dfnum, __pyx_v_dfden, __pyx_v_size);
    4028 +  __Pyx_RefNannyFinishContext();
    4029 +  return __pyx_r;
    4030 +}
    4031 +
    4032 +static PyObject *__pyx_pf_6mtrand_11RandomState_46f(struct __pyx_obj_6mtrand_RandomState *__pyx_v_self, PyObject *__pyx_v_dfnum, PyObject *__pyx_v_dfden, PyObject *__pyx_v_size) {
    4033 +  PyArrayObject *__pyx_v_odfnum = 0;
    4034 +  PyArrayObject *__pyx_v_odfden = 0;
    4035 +  double __pyx_v_fdfnum;
    4036 +  double __pyx_v_fdfden;
    4037 +  PyObject *__pyx_r = NULL;
    4038 +  __Pyx_RefNannyDeclarations
    4039 +  int __pyx_t_1;
    4040 +  PyObject *__pyx_t_2 = NULL;
    4041 +  PyObject *__pyx_t_3 = NULL;
    4042 +  PyObject *__pyx_t_4 = NULL;
    4043 +  PyObject *__pyx_t_5 = NULL;
    4044 +  int __pyx_lineno = 0;
    4045 +  const char *__pyx_filename = NULL;
    4046 +  int __pyx_clineno = 0;
    4047 +  __Pyx_RefNannySetupContext("f", 0);
    4048  
    4049    /* "mtrand.pyx":1710
    4050   *         cdef double fdfnum, fdfden
    4051 @@ -8773,9 +9157,9 @@
    4052        __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    4053        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    4054        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1714; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    4055 -      goto __pyx_L7;
    4056 +      goto __pyx_L4;
    4057      }
    4058 -    __pyx_L7:;
    4059 +    __pyx_L4:;
    4060  
    4061      /* "mtrand.pyx":1715
    4062   *             if fdfnum <= 0:
    4063 @@ -8799,9 +9183,9 @@
    4064        __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    4065        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    4066        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1716; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    4067 -      goto __pyx_L8;
    4068 +      goto __pyx_L5;
    4069      }
    4070 -    __pyx_L8:;
    4071 +    __pyx_L5:;
    4072  
    4073      /* "mtrand.pyx":1717
    4074   *             if fdfden <= 0:
    4075 @@ -8811,14 +9195,14 @@
    4076   *         PyErr_Clear()
    4077   */
    4078      __Pyx_XDECREF(__pyx_r);
    4079 -    __pyx_t_2 = __pyx_f_6mtrand_cont2_array_sc(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state, rk_f, __pyx_v_size, __pyx_v_fdfnum, __pyx_v_fdfden); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1717; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    4080 +    __pyx_t_2 = __pyx_f_6mtrand_cont2_array_sc(__pyx_v_self->internal_state, rk_f, __pyx_v_size, __pyx_v_fdfnum, __pyx_v_fdfden); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1717; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    4081      __Pyx_GOTREF(__pyx_t_2);
    4082      __pyx_r = __pyx_t_2;
    4083      __pyx_t_2 = 0;
    4084      goto __pyx_L0;
    4085 -    goto __pyx_L6;
    4086 +    goto __pyx_L3;
    4087    }
    4088 -  __pyx_L6:;
    4089 +  __pyx_L3:;
    4090  
    4091    /* "mtrand.pyx":1719
    4092   *             return cont2_array_sc(self.internal_state, rk_f, size, fdfnum, fdfden)
    4093 @@ -8875,7 +9259,7 @@
    4094    __pyx_t_2 = PyFloat_FromDouble(0.0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1723; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    4095    __Pyx_GOTREF(__pyx_t_2);
    4096    __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1723; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    4097 -  __Pyx_GOTREF(((PyObject *)__pyx_t_5));
    4098 +  __Pyx_GOTREF(__pyx_t_5);
    4099    __Pyx_INCREF(((PyObject *)__pyx_v_odfnum));
    4100    PyTuple_SET_ITEM(__pyx_t_5, 0, ((PyObject *)__pyx_v_odfnum));
    4101    __Pyx_GIVEREF(((PyObject *)__pyx_v_odfnum));
    4102 @@ -8887,7 +9271,7 @@
    4103    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    4104    __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
    4105    __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1723; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    4106 -  __Pyx_GOTREF(((PyObject *)__pyx_t_5));
    4107 +  __Pyx_GOTREF(__pyx_t_5);
    4108    PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2);
    4109    __Pyx_GIVEREF(__pyx_t_2);
    4110    __pyx_t_2 = 0;
    4111 @@ -8911,9 +9295,9 @@
    4112      __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    4113      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    4114      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1724; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    4115 -    goto __pyx_L9;
    4116 +    goto __pyx_L6;
    4117    }
    4118 -  __pyx_L9:;
    4119 +  __pyx_L6:;
    4120  
    4121    /* "mtrand.pyx":1725
    4122   *         if np.any(np.less_equal(odfnum, 0.0)):
    4123 @@ -8935,7 +9319,7 @@
    4124    __pyx_t_2 = PyFloat_FromDouble(0.0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1725; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    4125    __Pyx_GOTREF(__pyx_t_2);
    4126    __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1725; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    4127 -  __Pyx_GOTREF(((PyObject *)__pyx_t_4));
    4128 +  __Pyx_GOTREF(__pyx_t_4);
    4129    __Pyx_INCREF(((PyObject *)__pyx_v_odfden));
    4130    PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)__pyx_v_odfden));
    4131    __Pyx_GIVEREF(((PyObject *)__pyx_v_odfden));
    4132 @@ -8947,7 +9331,7 @@
    4133    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    4134    __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
    4135    __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1725; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    4136 -  __Pyx_GOTREF(((PyObject *)__pyx_t_4));
    4137 +  __Pyx_GOTREF(__pyx_t_4);
    4138    PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
    4139    __Pyx_GIVEREF(__pyx_t_2);
    4140    __pyx_t_2 = 0;
    4141 @@ -8971,9 +9355,9 @@
    4142      __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    4143      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    4144      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1726; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    4145 -    goto __pyx_L10;
    4146 +    goto __pyx_L7;
    4147    }
    4148 -  __pyx_L10:;
    4149 +  __pyx_L7:;
    4150  
    4151    /* "mtrand.pyx":1727
    4152   *         if np.any(np.less_equal(odfden, 0.0)):
    4153 @@ -8983,7 +9367,7 @@
    4154   *     def noncentral_f(self, dfnum, dfden, nonc, size=None):
    4155   */
    4156    __Pyx_XDECREF(__pyx_r);
    4157 -  __pyx_t_2 = __pyx_f_6mtrand_cont2_array(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state, rk_f, __pyx_v_size, __pyx_v_odfnum, __pyx_v_odfden); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1727; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    4158 +  __pyx_t_2 = __pyx_f_6mtrand_cont2_array(__pyx_v_self->internal_state, rk_f, __pyx_v_size, __pyx_v_odfnum, __pyx_v_odfden); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1727; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    4159    __Pyx_GOTREF(__pyx_t_2);
    4160    __pyx_r = __pyx_t_2;
    4161    __pyx_t_2 = 0;
    4162 @@ -9006,45 +9390,33 @@
    4163    return __pyx_r;
    4164  }
    4165  
    4166 -/* "mtrand.pyx":1729
    4167 +/* Python wrapper */
    4168 +static PyObject *__pyx_pw_6mtrand_11RandomState_49noncentral_f(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
    4169 +static char __pyx_doc_6mtrand_11RandomState_48noncentral_f[] = "\n        noncentral_f(dfnum, dfden, nonc, size=None)\n\n        Draw samples from the noncentral F distribution.\n\n        Samples are drawn from an F distribution with specified parameters,\n        `dfnum` (degrees of freedom in numerator) and `dfden` (degrees of\n        freedom in denominator), where both parameters > 1.\n        `nonc` is the non-centrality parameter.\n\n        Parameters\n        ----------\n        dfnum : int\n            Parameter, should be > 1.\n        dfden : int\n            Parameter, should be > 1.\n        nonc : float\n            Parameter, should be >= 0.\n        size : int or tuple of ints\n            Output shape. If the given shape is, e.g., ``(m, n, k)``, then\n            ``m * n * k`` samples are drawn.\n\n        Returns\n        -------\n        samples : scalar or ndarray\n            Drawn samples.\n\n        Notes\n        -----\n        When calculating the power of an experiment (power = probability of\n        rejecting the null hypothesis when a specific alternative is true) the\n        non-central F statistic becomes important.  When the null hypothesis is\n        true, the F statistic follows a central F distribution. When the null\n        hypothesis is not true, then it follows a non-central F statistic.\n\n        References\n        ----------\n        Weisstein, Eric W. \"Noncentral F-Distribution.\" From MathWorld--A Wolfram\n        Web Resource.  http://mathworld.wolfram.com/NoncentralF-Distribution.html\n\n        Wikipedia, \"Noncentral F distribution\",\n        http://en.wikipedia.org/wiki/Noncentral_F-distribution\n\n        Examples\n        --------\n        In a study, testing for a specific alternative to the null hypothesis\n        requires use of the Noncentral F distribution. We need to calculate the\n        area in the tail of the distribution that exceeds the value of the F\n        distribution for the null hypothesis.  We'll plot the two probability\n        distributions for comp""arison.\n\n        >>> dfnum = 3 # between group deg of freedom\n        >>> dfden = 20 # within groups degrees of freedom\n        >>> nonc = 3.0\n        >>> nc_vals = np.random.noncentral_f(dfnum, dfden, nonc, 1000000)\n        >>> NF = np.histogram(nc_vals, bins=50, normed=True)\n        >>> c_vals = np.random.f(dfnum, dfden, 1000000)\n        >>> F = np.histogram(c_vals, bins=50, normed=True)\n        >>> plt.plot(F[1][1:], F[0])\n        >>> plt.plot(NF[1][1:], NF[0])\n        >>> plt.show()\n\n        ";
    4170 +static PyObject *__pyx_pw_6mtrand_11RandomState_49noncentral_f(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
    4171 +  PyObject *__pyx_v_dfnum = 0;
    4172 +  PyObject *__pyx_v_dfden = 0;
    4173 +  PyObject *__pyx_v_nonc = 0;
    4174 +  PyObject *__pyx_v_size = 0;
    4175 +  PyObject *__pyx_r = 0;
    4176 +  __Pyx_RefNannyDeclarations
    4177 +  __Pyx_RefNannySetupContext("noncentral_f (wrapper)", 0);
    4178 +  {
    4179 +    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__dfnum,&__pyx_n_s__dfden,&__pyx_n_s__nonc,&__pyx_n_s__size,0};
    4180 +    PyObject* values[4] = {0,0,0,0};
    4181 +
    4182 +    /* "mtrand.pyx":1729
    4183   *         return cont2_array(self.internal_state, rk_f, size, odfnum, odfden)
    4184   *
    4185   *     def noncentral_f(self, dfnum, dfden, nonc, size=None):             # <<<<<<<<<<<<<<
    4186   *         """
    4187   *         noncentral_f(dfnum, dfden, nonc, size=None)
    4188   */
    4189 -
    4190 -static PyObject *__pyx_pf_6mtrand_11RandomState_24noncentral_f(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
    4191 -static char __pyx_doc_6mtrand_11RandomState_24noncentral_f[] = "\n        noncentral_f(dfnum, dfden, nonc, size=None)\n\n        Draw samples from the noncentral F distribution.\n\n        Samples are drawn from an F distribution with specified parameters,\n        `dfnum` (degrees of freedom in numerator) and `dfden` (degrees of\n        freedom in denominator), where both parameters > 1.\n        `nonc` is the non-centrality parameter.\n\n        Parameters\n        ----------\n        dfnum : int\n            Parameter, should be > 1.\n        dfden : int\n            Parameter, should be > 1.\n        nonc : float\n            Parameter, should be >= 0.\n        size : int or tuple of ints\n            Output shape. If the given shape is, e.g., ``(m, n, k)``, then\n            ``m * n * k`` samples are drawn.\n\n        Returns\n        -------\n        samples : scalar or ndarray\n            Drawn samples.\n\n        Notes\n        -----\n        When calculating the power of an experiment (power = probability of\n        rejecting the null hypothesis when a specific alternative is true) the\n        non-central F statistic becomes important.  When the null hypothesis is\n        true, the F statistic follows a central F distribution. When the null\n        hypothesis is not true, then it follows a non-central F statistic.\n\n        References\n        ----------\n        Weisstein, Eric W. \"Noncentral F-Distribution.\" From MathWorld--A Wolfram\n        Web Resource.  http://mathworld.wolfram.com/NoncentralF-Distribution.html\n\n        Wikipedia, \"Noncentral F distribution\",\n        http://en.wikipedia.org/wiki/Noncentral_F-distribution\n\n        Examples\n        --------\n        In a study, testing for a specific alternative to the null hypothesis\n        requires use of the Noncentral F distribution. We need to calculate the\n        area in the tail of the distribution that exceeds the value of the F\n        distribution for the null hypothesis.  We'll plot the two probability\n        distributions for comp""arison.\n\n        >>> dfnum = 3 # between group deg of freedom\n        >>> dfden = 20 # within groups degrees of freedom\n        >>> nonc = 3.0\n        >>> nc_vals = np.random.noncentral_f(dfnum, dfden, nonc, 1000000)\n        >>> NF = np.histogram(nc_vals, bins=50, normed=True)\n        >>> c_vals = np.random.f(dfnum, dfden, 1000000)\n        >>> F = np.histogram(c_vals, bins=50, normed=True)\n        >>> plt.plot(F[1][1:], F[0])\n        >>> plt.plot(NF[1][1:], NF[0])\n        >>> plt.show()\n\n        ";
    4192 -static PyObject *__pyx_pf_6mtrand_11RandomState_24noncentral_f(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
    4193 -  PyObject *__pyx_v_dfnum = 0;
    4194 -  PyObject *__pyx_v_dfden = 0;
    4195 -  PyObject *__pyx_v_nonc = 0;
    4196 -  PyObject *__pyx_v_size = 0;
    4197 -  PyArrayObject *__pyx_v_odfnum = 0;
    4198 -  PyArrayObject *__pyx_v_odfden = 0;
    4199 -  PyArrayObject *__pyx_v_ononc = 0;
    4200 -  double __pyx_v_fdfnum;
    4201 -  double __pyx_v_fdfden;
    4202 -  double __pyx_v_fnonc;
    4203 -  PyObject *__pyx_r = NULL;
    4204 -  __Pyx_RefNannyDeclarations
    4205 -  int __pyx_t_1;
    4206 -  PyObject *__pyx_t_2 = NULL;
    4207 -  PyObject *__pyx_t_3 = NULL;
    4208 -  PyObject *__pyx_t_4 = NULL;
    4209 -  PyObject *__pyx_t_5 = NULL;
    4210 -  int __pyx_lineno = 0;
    4211 -  const char *__pyx_filename = NULL;
    4212 -  int __pyx_clineno = 0;
    4213 -  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__dfnum,&__pyx_n_s__dfden,&__pyx_n_s__nonc,&__pyx_n_s__size,0};
    4214 -  __Pyx_RefNannySetupContext("noncentral_f");
    4215 -  {
    4216 -    PyObject* values[4] = {0,0,0,0};
    4217      values[3] = ((PyObject *)Py_None);
    4218      if (unlikely(__pyx_kwds)) {
    4219        Py_ssize_t kw_args;
    4220 -      switch (PyTuple_GET_SIZE(__pyx_args)) {
    4221 +      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
    4222 +      switch (pos_args) {
    4223          case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
    4224          case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
    4225          case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    4226 @@ -9053,20 +9425,17 @@
    4227          default: goto __pyx_L5_argtuple_error;
    4228        }
    4229        kw_args = PyDict_Size(__pyx_kwds);
    4230 -      switch (PyTuple_GET_SIZE(__pyx_args)) {
    4231 +      switch (pos_args) {
    4232          case  0:
    4233 -        values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__dfnum);
    4234 -        if (likely(values[0])) kw_args--;
    4235 +        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__dfnum)) != 0)) kw_args--;
    4236          else goto __pyx_L5_argtuple_error;
    4237          case  1:
    4238 -        values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__dfden);
    4239 -        if (likely(values[1])) kw_args--;
    4240 +        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__dfden)) != 0)) kw_args--;
    4241          else {
    4242            __Pyx_RaiseArgtupleInvalid("noncentral_f", 0, 3, 4, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1729; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    4243          }
    4244          case  2:
    4245 -        values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__nonc);
    4246 -        if (likely(values[2])) kw_args--;
    4247 +        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__nonc)) != 0)) kw_args--;
    4248          else {
    4249            __Pyx_RaiseArgtupleInvalid("noncentral_f", 0, 3, 4, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1729; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    4250          }
    4251 @@ -9077,7 +9446,7 @@
    4252          }
    4253        }
    4254        if (unlikely(kw_args > 0)) {
    4255 -        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "noncentral_f") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1729; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    4256 +        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "noncentral_f") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1729; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    4257        }
    4258      } else {
    4259        switch (PyTuple_GET_SIZE(__pyx_args)) {
    4260 @@ -9102,6 +9471,29 @@
    4261    __Pyx_RefNannyFinishContext();
    4262    return NULL;
    4263    __pyx_L4_argument_unpacking_done:;
    4264 +  __pyx_r = __pyx_pf_6mtrand_11RandomState_48noncentral_f(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self), __pyx_v_dfnum, __pyx_v_dfden, __pyx_v_nonc, __pyx_v_size);
    4265 +  __Pyx_RefNannyFinishContext();
    4266 +  return __pyx_r;
    4267 +}
    4268 +
    4269 +static PyObject *__pyx_pf_6mtrand_11RandomState_48noncentral_f(struct __pyx_obj_6mtrand_RandomState *__pyx_v_self, PyObject *__pyx_v_dfnum, PyObject *__pyx_v_dfden, PyObject *__pyx_v_nonc, PyObject *__pyx_v_size) {
    4270 +  PyArrayObject *__pyx_v_odfnum = 0;
    4271 +  PyArrayObject *__pyx_v_odfden = 0;
    4272 +  PyArrayObject *__pyx_v_ononc = 0;
    4273 +  double __pyx_v_fdfnum;
    4274 +  double __pyx_v_fdfden;
    4275 +  double __pyx_v_fnonc;
    4276 +  PyObject *__pyx_r = NULL;
    4277 +  __Pyx_RefNannyDeclarations
    4278 +  int __pyx_t_1;
    4279 +  PyObject *__pyx_t_2 = NULL;
    4280 +  PyObject *__pyx_t_3 = NULL;
    4281 +  PyObject *__pyx_t_4 = NULL;
    4282 +  PyObject *__pyx_t_5 = NULL;
    4283 +  int __pyx_lineno = 0;
    4284 +  const char *__pyx_filename = NULL;
    4285 +  int __pyx_clineno = 0;
    4286 +  __Pyx_RefNannySetupContext("noncentral_f", 0);
    4287  
    4288    /* "mtrand.pyx":1796
    4289   *         cdef double fdfnum, fdfden, fnonc
    4290 @@ -9162,9 +9554,9 @@
    4291        __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    4292        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    4293        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1801; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    4294 -      goto __pyx_L7;
    4295 +      goto __pyx_L4;
    4296      }
    4297 -    __pyx_L7:;
    4298 +    __pyx_L4:;
    4299  
    4300      /* "mtrand.pyx":1802
    4301   *             if fdfnum <= 1:
    4302 @@ -9188,9 +9580,9 @@
    4303        __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    4304        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    4305        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1803; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    4306 -      goto __pyx_L8;
    4307 +      goto __pyx_L5;
    4308      }
    4309 -    __pyx_L8:;
    4310 +    __pyx_L5:;
    4311  
    4312      /* "mtrand.pyx":1804
    4313   *             if fdfden <= 0:
    4314 @@ -9214,9 +9606,9 @@
    4315        __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    4316        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    4317        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1805; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    4318 -      goto __pyx_L9;
    4319 +      goto __pyx_L6;
    4320      }
    4321 -    __pyx_L9:;
    4322 +    __pyx_L6:;
    4323  
    4324      /* "mtrand.pyx":1806
    4325   *             if fnonc < 0:
    4326 @@ -9234,14 +9626,14 @@
    4327   *
    4328   *         PyErr_Clear()
    4329   */
    4330 -    __pyx_t_2 = __pyx_f_6mtrand_cont3_array_sc(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state, rk_noncentral_f, __pyx_v_size, __pyx_v_fdfnum, __pyx_v_fdfden, __pyx_v_fnonc); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1806; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    4331 +    __pyx_t_2 = __pyx_f_6mtrand_cont3_array_sc(__pyx_v_self->internal_state, rk_noncentral_f, __pyx_v_size, __pyx_v_fdfnum, __pyx_v_fdfden, __pyx_v_fnonc); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1806; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    4332      __Pyx_GOTREF(__pyx_t_2);
    4333      __pyx_r = __pyx_t_2;
    4334      __pyx_t_2 = 0;
    4335      goto __pyx_L0;
    4336 -    goto __pyx_L6;
    4337 +    goto __pyx_L3;
    4338    }
    4339 -  __pyx_L6:;
    4340 +  __pyx_L3:;
    4341  
    4342    /* "mtrand.pyx":1809
    4343   *                                   fdfnum, fdfden, fnonc)
    4344 @@ -9311,7 +9703,7 @@
    4345    __pyx_t_2 = PyFloat_FromDouble(1.0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1815; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    4346    __Pyx_GOTREF(__pyx_t_2);
    4347    __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1815; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    4348 -  __Pyx_GOTREF(((PyObject *)__pyx_t_5));
    4349 +  __Pyx_GOTREF(__pyx_t_5);
    4350    __Pyx_INCREF(((PyObject *)__pyx_v_odfnum));
    4351    PyTuple_SET_ITEM(__pyx_t_5, 0, ((PyObject *)__pyx_v_odfnum));
    4352    __Pyx_GIVEREF(((PyObject *)__pyx_v_odfnum));
    4353 @@ -9323,7 +9715,7 @@
    4354    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    4355    __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
    4356    __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1815; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    4357 -  __Pyx_GOTREF(((PyObject *)__pyx_t_5));
    4358 +  __Pyx_GOTREF(__pyx_t_5);
    4359    PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2);
    4360    __Pyx_GIVEREF(__pyx_t_2);
    4361    __pyx_t_2 = 0;
    4362 @@ -9347,9 +9739,9 @@
    4363      __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    4364      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    4365      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1816; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    4366 -    goto __pyx_L10;
    4367 +    goto __pyx_L7;
    4368    }
    4369 -  __pyx_L10:;
    4370 +  __pyx_L7:;
    4371  
    4372    /* "mtrand.pyx":1817
    4373   *         if np.any(np.less_equal(odfnum, 1.0)):
    4374 @@ -9371,7 +9763,7 @@
    4375    __pyx_t_2 = PyFloat_FromDouble(0.0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1817; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    4376    __Pyx_GOTREF(__pyx_t_2);
    4377    __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1817; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    4378 -  __Pyx_GOTREF(((PyObject *)__pyx_t_4));
    4379 +  __Pyx_GOTREF(__pyx_t_4);
    4380    __Pyx_INCREF(((PyObject *)__pyx_v_odfden));
    4381    PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)__pyx_v_odfden));
    4382    __Pyx_GIVEREF(((PyObject *)__pyx_v_odfden));
    4383 @@ -9383,7 +9775,7 @@
    4384    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    4385    __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
    4386    __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1817; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    4387 -  __Pyx_GOTREF(((PyObject *)__pyx_t_4));
    4388 +  __Pyx_GOTREF(__pyx_t_4);
    4389    PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
    4390    __Pyx_GIVEREF(__pyx_t_2);
    4391    __pyx_t_2 = 0;
    4392 @@ -9407,9 +9799,9 @@
    4393      __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    4394      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    4395      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1818; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    4396 -    goto __pyx_L11;
    4397 +    goto __pyx_L8;
    4398    }
    4399 -  __pyx_L11:;
    4400 +  __pyx_L8:;
    4401  
    4402    /* "mtrand.pyx":1819
    4403   *         if np.any(np.less_equal(odfden, 0.0)):
    4404 @@ -9431,7 +9823,7 @@
    4405    __pyx_t_2 = PyFloat_FromDouble(0.0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1819; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    4406    __Pyx_GOTREF(__pyx_t_2);
    4407    __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1819; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    4408 -  __Pyx_GOTREF(((PyObject *)__pyx_t_3));
    4409 +  __Pyx_GOTREF(__pyx_t_3);
    4410    __Pyx_INCREF(((PyObject *)__pyx_v_ononc));
    4411    PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_v_ononc));
    4412    __Pyx_GIVEREF(((PyObject *)__pyx_v_ononc));
    4413 @@ -9443,7 +9835,7 @@
    4414    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    4415    __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
    4416    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1819; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    4417 -  __Pyx_GOTREF(((PyObject *)__pyx_t_3));
    4418 +  __Pyx_GOTREF(__pyx_t_3);
    4419    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2);
    4420    __Pyx_GIVEREF(__pyx_t_2);
    4421    __pyx_t_2 = 0;
    4422 @@ -9467,9 +9859,9 @@
    4423      __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    4424      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    4425      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1820; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    4426 -    goto __pyx_L12;
    4427 +    goto __pyx_L9;
    4428    }
    4429 -  __pyx_L12:;
    4430 +  __pyx_L9:;
    4431  
    4432    /* "mtrand.pyx":1821
    4433   *         if np.any(np.less(ononc, 0.0)):
    4434 @@ -9487,7 +9879,7 @@
    4435   *
    4436   *     def chisquare(self, df, size=None):
    4437   */
    4438 -  __pyx_t_2 = __pyx_f_6mtrand_cont3_array(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state, rk_noncentral_f, __pyx_v_size, __pyx_v_odfnum, __pyx_v_odfden, __pyx_v_ononc); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1821; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    4439 +  __pyx_t_2 = __pyx_f_6mtrand_cont3_array(__pyx_v_self->internal_state, rk_noncentral_f, __pyx_v_size, __pyx_v_odfnum, __pyx_v_odfden, __pyx_v_ononc); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1821; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    4440    __Pyx_GOTREF(__pyx_t_2);
    4441    __pyx_r = __pyx_t_2;
    4442    __pyx_t_2 = 0;
    4443 @@ -9511,49 +9903,40 @@
    4444    return __pyx_r;
    4445  }
    4446  
    4447 -/* "mtrand.pyx":1824
    4448 +/* Python wrapper */
    4449 +static PyObject *__pyx_pw_6mtrand_11RandomState_51chisquare(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
    4450 +static char __pyx_doc_6mtrand_11RandomState_50chisquare[] = "\n        chisquare(df, size=None)\n\n        Draw samples from a chi-square distribution.\n\n        When `df` independent random variables, each with standard normal\n        distributions (mean 0, variance 1), are squared and summed, the\n        resulting distribution is chi-square (see Notes).  This distribution\n        is often used in hypothesis testing.\n\n        Parameters\n        ----------\n        df : int\n             Number of degrees of freedom.\n        size : tuple of ints, int, optional\n             Size of the returned array.  By default, a scalar is\n             returned.\n\n        Returns\n        -------\n        output : ndarray\n            Samples drawn from the distribution, packed in a `size`-shaped\n            array.\n\n        Raises\n        ------\n        ValueError\n            When `df` <= 0 or when an inappropriate `size` (e.g. ``size=-1``)\n            is given.\n\n        Notes\n        -----\n        The variable obtained by summing the squares of `df` independent,\n        standard normally distributed random variables:\n\n        .. math:: Q = \\sum_{i=0}^{\\mathtt{df}} X^2_i\n\n        is chi-square distributed, denoted\n\n        .. math:: Q \\sim \\chi^2_k.\n\n        The probability density function of the chi-squared distribution is\n\n        .. math:: p(x) = \\frac{(1/2)^{k/2}}{\\Gamma(k/2)}\n                         x^{k/2 - 1} e^{-x/2},\n\n        where :math:`\\Gamma` is the gamma function,\n\n        .. math:: \\Gamma(x) = \\int_0^{-\\infty} t^{x - 1} e^{-t} dt.\n\n        References\n        ----------\n        `NIST/SEMATECH e-Handbook of Statistical Methods\n        <http://www.itl.nist.gov/div898/handbook/eda/section3/eda3666.htm>`_\n\n        Examples\n        --------\n        >>> np.random.chisquare(2,4)\n        array([ 1.89920014,  9.00867716,  3.13710533,  5.62318272])\n\n        ";
    4451 +static PyObject *__pyx_pw_6mtrand_11RandomState_51chisquare(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
    4452 +  PyObject *__pyx_v_df = 0;
    4453 +  PyObject *__pyx_v_size = 0;
    4454 +  PyObject *__pyx_r = 0;
    4455 +  __Pyx_RefNannyDeclarations
    4456 +  __Pyx_RefNannySetupContext("chisquare (wrapper)", 0);
    4457 +  {
    4458 +    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__df,&__pyx_n_s__size,0};
    4459 +    PyObject* values[2] = {0,0};
    4460 +
    4461 +    /* "mtrand.pyx":1824
    4462   *             odfden, ononc)
    4463   *
    4464   *     def chisquare(self, df, size=None):             # <<<<<<<<<<<<<<
    4465   *         """
    4466   *         chisquare(df, size=None)
    4467   */
    4468 -
    4469 -static PyObject *__pyx_pf_6mtrand_11RandomState_25chisquare(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
    4470 -static char __pyx_doc_6mtrand_11RandomState_25chisquare[] = "\n        chisquare(df, size=None)\n\n        Draw samples from a chi-square distribution.\n\n        When `df` independent random variables, each with standard normal\n        distributions (mean 0, variance 1), are squared and summed, the\n        resulting distribution is chi-square (see Notes).  This distribution\n        is often used in hypothesis testing.\n\n        Parameters\n        ----------\n        df : int\n             Number of degrees of freedom.\n        size : tuple of ints, int, optional\n             Size of the returned array.  By default, a scalar is\n             returned.\n\n        Returns\n        -------\n        output : ndarray\n            Samples drawn from the distribution, packed in a `size`-shaped\n            array.\n\n        Raises\n        ------\n        ValueError\n            When `df` <= 0 or when an inappropriate `size` (e.g. ``size=-1``)\n            is given.\n\n        Notes\n        -----\n        The variable obtained by summing the squares of `df` independent,\n        standard normally distributed random variables:\n\n        .. math:: Q = \\sum_{i=0}^{\\mathtt{df}} X^2_i\n\n        is chi-square distributed, denoted\n\n        .. math:: Q \\sim \\chi^2_k.\n\n        The probability density function of the chi-squared distribution is\n\n        .. math:: p(x) = \\frac{(1/2)^{k/2}}{\\Gamma(k/2)}\n                         x^{k/2 - 1} e^{-x/2},\n\n        where :math:`\\Gamma` is the gamma function,\n\n        .. math:: \\Gamma(x) = \\int_0^{-\\infty} t^{x - 1} e^{-t} dt.\n\n        References\n        ----------\n        `NIST/SEMATECH e-Handbook of Statistical Methods\n        <http://www.itl.nist.gov/div898/handbook/eda/section3/eda3666.htm>`_\n\n        Examples\n        --------\n        >>> np.random.chisquare(2,4)\n        array([ 1.89920014,  9.00867716,  3.13710533,  5.62318272])\n\n        ";
    4471 -static PyObject *__pyx_pf_6mtrand_11RandomState_25chisquare(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
    4472 -  PyObject *__pyx_v_df = 0;
    4473 -  PyObject *__pyx_v_size = 0;
    4474 -  PyArrayObject *__pyx_v_odf = 0;
    4475 -  double __pyx_v_fdf;
    4476 -  PyObject *__pyx_r = NULL;
    4477 -  __Pyx_RefNannyDeclarations
    4478 -  int __pyx_t_1;
    4479 -  PyObject *__pyx_t_2 = NULL;
    4480 -  PyObject *__pyx_t_3 = NULL;
    4481 -  PyObject *__pyx_t_4 = NULL;
    4482 -  PyObject *__pyx_t_5 = NULL;
    4483 -  int __pyx_lineno = 0;
    4484 -  const char *__pyx_filename = NULL;
    4485 -  int __pyx_clineno = 0;
    4486 -  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__df,&__pyx_n_s__size,0};
    4487 -  __Pyx_RefNannySetupContext("chisquare");
    4488 -  {
    4489 -    PyObject* values[2] = {0,0};
    4490      values[1] = ((PyObject *)Py_None);
    4491      if (unlikely(__pyx_kwds)) {
    4492        Py_ssize_t kw_args;
    4493 -      switch (PyTuple_GET_SIZE(__pyx_args)) {
    4494 +      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
    4495 +      switch (pos_args) {
    4496          case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    4497          case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    4498          case  0: break;
    4499          default: goto __pyx_L5_argtuple_error;
    4500        }
    4501        kw_args = PyDict_Size(__pyx_kwds);
    4502 -      switch (PyTuple_GET_SIZE(__pyx_args)) {
    4503 +      switch (pos_args) {
    4504          case  0:
    4505 -        values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__df);
    4506 -        if (likely(values[0])) kw_args--;
    4507 +        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__df)) != 0)) kw_args--;
    4508          else goto __pyx_L5_argtuple_error;
    4509          case  1:
    4510          if (kw_args > 0) {
    4511 @@ -9562,7 +9945,7 @@
    4512          }
    4513        }
    4514        if (unlikely(kw_args > 0)) {
    4515 -        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "chisquare") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1824; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    4516 +        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "chisquare") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1824; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    4517        }
    4518      } else {
    4519        switch (PyTuple_GET_SIZE(__pyx_args)) {
    4520 @@ -9583,6 +9966,25 @@
    4521    __Pyx_RefNannyFinishContext();
    4522    return NULL;
    4523    __pyx_L4_argument_unpacking_done:;
    4524 +  __pyx_r = __pyx_pf_6mtrand_11RandomState_50chisquare(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self), __pyx_v_df, __pyx_v_size);
    4525 +  __Pyx_RefNannyFinishContext();
    4526 +  return __pyx_r;
    4527 +}
    4528 +
    4529 +static PyObject *__pyx_pf_6mtrand_11RandomState_50chisquare(struct __pyx_obj_6mtrand_RandomState *__pyx_v_self, PyObject *__pyx_v_df, PyObject *__pyx_v_size) {
    4530 +  PyArrayObject *__pyx_v_odf = 0;
    4531 +  double __pyx_v_fdf;
    4532 +  PyObject *__pyx_r = NULL;
    4533 +  __Pyx_RefNannyDeclarations
    4534 +  int __pyx_t_1;
    4535 +  PyObject *__pyx_t_2 = NULL;
    4536 +  PyObject *__pyx_t_3 = NULL;
    4537 +  PyObject *__pyx_t_4 = NULL;
    4538 +  PyObject *__pyx_t_5 = NULL;
    4539 +  int __pyx_lineno = 0;
    4540 +  const char *__pyx_filename = NULL;
    4541 +  int __pyx_clineno = 0;
    4542 +  __Pyx_RefNannySetupContext("chisquare", 0);
    4543  
    4544    /* "mtrand.pyx":1889
    4545   *         cdef double fdf
    4546 @@ -9625,9 +10027,9 @@
    4547        __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    4548        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    4549        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1892; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    4550 -      goto __pyx_L7;
    4551 +      goto __pyx_L4;
    4552      }
    4553 -    __pyx_L7:;
    4554 +    __pyx_L4:;
    4555  
    4556      /* "mtrand.pyx":1893
    4557   *             if fdf <= 0:
    4558 @@ -9637,14 +10039,14 @@
    4559   *         PyErr_Clear()
    4560   */
    4561      __Pyx_XDECREF(__pyx_r);
    4562 -    __pyx_t_2 = __pyx_f_6mtrand_cont1_array_sc(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state, rk_chisquare, __pyx_v_size, __pyx_v_fdf); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1893; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    4563 +    __pyx_t_2 = __pyx_f_6mtrand_cont1_array_sc(__pyx_v_self->internal_state, rk_chisquare, __pyx_v_size, __pyx_v_fdf); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1893; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    4564      __Pyx_GOTREF(__pyx_t_2);
    4565      __pyx_r = __pyx_t_2;
    4566      __pyx_t_2 = 0;
    4567      goto __pyx_L0;
    4568 -    goto __pyx_L6;
    4569 +    goto __pyx_L3;
    4570    }
    4571 -  __pyx_L6:;
    4572 +  __pyx_L3:;
    4573  
    4574    /* "mtrand.pyx":1895
    4575   *             return cont1_array_sc(self.internal_state, rk_chisquare, size, fdf)
    4576 @@ -9688,7 +10090,7 @@
    4577    __pyx_t_2 = PyFloat_FromDouble(0.0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1898; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    4578    __Pyx_GOTREF(__pyx_t_2);
    4579    __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1898; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    4580 -  __Pyx_GOTREF(((PyObject *)__pyx_t_5));
    4581 +  __Pyx_GOTREF(__pyx_t_5);
    4582    __Pyx_INCREF(((PyObject *)__pyx_v_odf));
    4583    PyTuple_SET_ITEM(__pyx_t_5, 0, ((PyObject *)__pyx_v_odf));
    4584    __Pyx_GIVEREF(((PyObject *)__pyx_v_odf));
    4585 @@ -9700,7 +10102,7 @@
    4586    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    4587    __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
    4588    __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1898; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    4589 -  __Pyx_GOTREF(((PyObject *)__pyx_t_5));
    4590 +  __Pyx_GOTREF(__pyx_t_5);
    4591    PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2);
    4592    __Pyx_GIVEREF(__pyx_t_2);
    4593    __pyx_t_2 = 0;
    4594 @@ -9724,9 +10126,9 @@
    4595      __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    4596      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    4597      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1899; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    4598 -    goto __pyx_L8;
    4599 +    goto __pyx_L5;
    4600    }
    4601 -  __pyx_L8:;
    4602 +  __pyx_L5:;
    4603  
    4604    /* "mtrand.pyx":1900
    4605   *         if np.any(np.less_equal(odf, 0.0)):
    4606 @@ -9736,7 +10138,7 @@
    4607   *     def noncentral_chisquare(self, df, nonc, size=None):
    4608   */
    4609    __Pyx_XDECREF(__pyx_r);
    4610 -  __pyx_t_2 = __pyx_f_6mtrand_cont1_array(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state, rk_chisquare, __pyx_v_size, __pyx_v_odf); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1900; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    4611 +  __pyx_t_2 = __pyx_f_6mtrand_cont1_array(__pyx_v_self->internal_state, rk_chisquare, __pyx_v_size, __pyx_v_odf); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1900; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    4612    __Pyx_GOTREF(__pyx_t_2);
    4613    __pyx_r = __pyx_t_2;
    4614    __pyx_t_2 = 0;
    4615 @@ -9758,42 +10160,32 @@
    4616    return __pyx_r;
    4617  }
    4618  
    4619 -/* "mtrand.pyx":1902
    4620 - *         return cont1_array(self.internal_state, rk_chisquare, size, odf)
    4621 - *
    4622 - *     def noncentral_chisquare(self, df, nonc, size=None):             # <<<<<<<<<<<<<<
    4623 - *         """
    4624 - *         noncentral_chisquare(df, nonc, size=None)
    4625 - */
    4626 -
    4627 -static PyObject *__pyx_pf_6mtrand_11RandomState_26noncentral_chisquare(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
    4628 -static char __pyx_doc_6mtrand_11RandomState_26noncentral_chisquare[] = "\n        noncentral_chisquare(df, nonc, size=None)\n\n        Draw samples from a noncentral chi-square distribution.\n\n        The noncentral :math:`\\chi^2` distribution is a generalisation of\n        the :math:`\\chi^2` distribution.\n\n        Parameters\n        ----------\n        df : int\n            Degrees of freedom, should be >= 1.\n        nonc : float\n            Non-centrality, should be > 0.\n        size : int or tuple of ints\n            Shape of the output.\n\n        Notes\n        -----\n        The probability density function for the noncentral Chi-square distribution\n        is\n\n        .. math:: P(x;df,nonc) = \\sum^{\\infty}_{i=0}\n                               \\frac{e^{-nonc/2}(nonc/2)^{i}}{i!}P_{Y_{df+2i}}(x),\n\n        where :math:`Y_{q}` is the Chi-square with q degrees of freedom.\n\n        In Delhi (2007), it is noted that the noncentral chi-square is useful in\n        bombing and coverage problems, the probability of killing the point target\n        given by the noncentral chi-squared distribution.\n\n        References\n        ----------\n        .. [1] Delhi, M.S. Holla, \"On a noncentral chi-square distribution in the\n               analysis of weapon systems effectiveness\", Metrika, Volume 15,\n               Number 1 / December, 1970.\n        .. [2] Wikipedia, \"Noncentral chi-square distribution\"\n               http://en.wikipedia.org/wiki/Noncentral_chi-square_distribution\n\n        Examples\n        --------\n        Draw values from the distribution and plot the histogram\n\n        >>> import matplotlib.pyplot as plt\n        >>> values = plt.hist(np.random.noncentral_chisquare(3, 20, 100000),\n        ...                   bins=200, normed=True)\n        >>> plt.show()\n\n        Draw values from a noncentral chisquare with very small noncentrality,\n        and compare to a chisquare.\n\n        >>> plt.figure()\n        >>> values = plt.hist(np.random.noncentral_chisquare(3, .0000001, 100000),\n     ""   ...                   bins=np.arange(0., 25, .1), normed=True)\n        >>> values2 = plt.hist(np.random.chisquare(3, 100000),\n        ...                    bins=np.arange(0., 25, .1), normed=True)\n        >>> plt.plot(values[1][0:-1], values[0]-values2[0], 'ob')\n        >>> plt.show()\n\n        Demonstrate how large values of non-centrality lead to a more symmetric\n        distribution.\n\n        >>> plt.figure()\n        >>> values = plt.hist(np.random.noncentral_chisquare(3, 20, 100000),\n        ...                   bins=200, normed=True)\n        >>> plt.show()\n\n        ";
    4629 -static PyObject *__pyx_pf_6mtrand_11RandomState_26noncentral_chisquare(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
    4630 +/* Python wrapper */
    4631 +static PyObject *__pyx_pw_6mtrand_11RandomState_53noncentral_chisquare(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
    4632 +static char __pyx_doc_6mtrand_11RandomState_52noncentral_chisquare[] = "\n        noncentral_chisquare(df, nonc, size=None)\n\n        Draw samples from a noncentral chi-square distribution.\n\n        The noncentral :math:`\\chi^2` distribution is a generalisation of\n        the :math:`\\chi^2` distribution.\n\n        Parameters\n        ----------\n        df : int\n            Degrees of freedom, should be >= 1.\n        nonc : float\n            Non-centrality, should be > 0.\n        size : int or tuple of ints\n            Shape of the output.\n\n        Notes\n        -----\n        The probability density function for the noncentral Chi-square distribution\n        is\n\n        .. math:: P(x;df,nonc) = \\sum^{\\infty}_{i=0}\n                               \\frac{e^{-nonc/2}(nonc/2)^{i}}{i!}P_{Y_{df+2i}}(x),\n\n        where :math:`Y_{q}` is the Chi-square with q degrees of freedom.\n\n        In Delhi (2007), it is noted that the noncentral chi-square is useful in\n        bombing and coverage problems, the probability of killing the point target\n        given by the noncentral chi-squared distribution.\n\n        References\n        ----------\n        .. [1] Delhi, M.S. Holla, \"On a noncentral chi-square distribution in the\n               analysis of weapon systems effectiveness\", Metrika, Volume 15,\n               Number 1 / December, 1970.\n        .. [2] Wikipedia, \"Noncentral chi-square distribution\"\n               http://en.wikipedia.org/wiki/Noncentral_chi-square_distribution\n\n        Examples\n        --------\n        Draw values from the distribution and plot the histogram\n\n        >>> import matplotlib.pyplot as plt\n        >>> values = plt.hist(np.random.noncentral_chisquare(3, 20, 100000),\n        ...                   bins=200, normed=True)\n        >>> plt.show()\n\n        Draw values from a noncentral chisquare with very small noncentrality,\n        and compare to a chisquare.\n\n        >>> plt.figure()\n        >>> values = plt.hist(np.random.noncentral_chisquare(3, .0000001, 100000),\n     ""   ...                   bins=np.arange(0., 25, .1), normed=True)\n        >>> values2 = plt.hist(np.random.chisquare(3, 100000),\n        ...                    bins=np.arange(0., 25, .1), normed=True)\n        >>> plt.plot(values[1][0:-1], values[0]-values2[0], 'ob')\n        >>> plt.show()\n\n        Demonstrate how large values of non-centrality lead to a more symmetric\n        distribution.\n\n        >>> plt.figure()\n        >>> values = plt.hist(np.random.noncentral_chisquare(3, 20, 100000),\n        ...                   bins=200, normed=True)\n        >>> plt.show()\n\n        ";
    4633 +static PyObject *__pyx_pw_6mtrand_11RandomState_53noncentral_chisquare(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
    4634    PyObject *__pyx_v_df = 0;
    4635    PyObject *__pyx_v_nonc = 0;
    4636    PyObject *__pyx_v_size = 0;
    4637 -  PyArrayObject *__pyx_v_odf = 0;
    4638 -  PyArrayObject *__pyx_v_ononc = 0;
    4639 -  double __pyx_v_fdf;
    4640 -  double __pyx_v_fnonc;
    4641 -  PyObject *__pyx_r = NULL;
    4642 +  PyObject *__pyx_r = 0;
    4643    __Pyx_RefNannyDeclarations
    4644 -  int __pyx_t_1;
    4645 -  PyObject *__pyx_t_2 = NULL;
    4646 -  PyObject *__pyx_t_3 = NULL;
    4647 -  PyObject *__pyx_t_4 = NULL;
    4648 -  PyObject *__pyx_t_5 = NULL;
    4649 -  int __pyx_lineno = 0;
    4650 -  const char *__pyx_filename = NULL;
    4651 -  int __pyx_clineno = 0;
    4652 -  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__df,&__pyx_n_s__nonc,&__pyx_n_s__size,0};
    4653 -  __Pyx_RefNannySetupContext("noncentral_chisquare");
    4654 +  __Pyx_RefNannySetupContext("noncentral_chisquare (wrapper)", 0);
    4655    {
    4656 +    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__df,&__pyx_n_s__nonc,&__pyx_n_s__size,0};
    4657      PyObject* values[3] = {0,0,0};
    4658 +
    4659 +    /* "mtrand.pyx":1902
    4660 + *         return cont1_array(self.internal_state, rk_chisquare, size, odf)
    4661 + *
    4662 + *     def noncentral_chisquare(self, df, nonc, size=None):             # <<<<<<<<<<<<<<
    4663 + *         """
    4664 + *         noncentral_chisquare(df, nonc, size=None)
    4665 + */
    4666      values[2] = ((PyObject *)Py_None);
    4667      if (unlikely(__pyx_kwds)) {
    4668        Py_ssize_t kw_args;
    4669 -      switch (PyTuple_GET_SIZE(__pyx_args)) {
    4670 +      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
    4671 +      switch (pos_args) {
    4672          case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
    4673          case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    4674          case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    4675 @@ -9801,14 +10193,12 @@
    4676          default: goto __pyx_L5_argtuple_error;
    4677        }
    4678        kw_args = PyDict_Size(__pyx_kwds);
    4679 -      switch (PyTuple_GET_SIZE(__pyx_args)) {
    4680 +      switch (pos_args) {
    4681          case  0:
    4682 -        values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__df);
    4683 -        if (likely(values[0])) kw_args--;
    4684 +        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__df)) != 0)) kw_args--;
    4685          else goto __pyx_L5_argtuple_error;
    4686          case  1:
    4687 -        values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__nonc);
    4688 -        if (likely(values[1])) kw_args--;
    4689 +        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__nonc)) != 0)) kw_args--;
    4690          else {
    4691            __Pyx_RaiseArgtupleInvalid("noncentral_chisquare", 0, 2, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1902; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    4692          }
    4693 @@ -9819,7 +10209,7 @@
    4694          }
    4695        }
    4696        if (unlikely(kw_args > 0)) {
    4697 -        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "noncentral_chisquare") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1902; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    4698 +        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "noncentral_chisquare") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1902; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    4699        }
    4700      } else {
    4701        switch (PyTuple_GET_SIZE(__pyx_args)) {
    4702 @@ -9842,6 +10232,27 @@
    4703    __Pyx_RefNannyFinishContext();
    4704    return NULL;
    4705    __pyx_L4_argument_unpacking_done:;
    4706 +  __pyx_r = __pyx_pf_6mtrand_11RandomState_52noncentral_chisquare(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self), __pyx_v_df, __pyx_v_nonc, __pyx_v_size);
    4707 +  __Pyx_RefNannyFinishContext();
    4708 +  return __pyx_r;
    4709 +}
    4710 +
    4711 +static PyObject *__pyx_pf_6mtrand_11RandomState_52noncentral_chisquare(struct __pyx_obj_6mtrand_RandomState *__pyx_v_self, PyObject *__pyx_v_df, PyObject *__pyx_v_nonc, PyObject *__pyx_v_size) {
    4712 +  PyArrayObject *__pyx_v_odf = 0;
    4713 +  PyArrayObject *__pyx_v_ononc = 0;
    4714 +  double __pyx_v_fdf;
    4715 +  double __pyx_v_fnonc;
    4716 +  PyObject *__pyx_r = NULL;
    4717 +  __Pyx_RefNannyDeclarations
    4718 +  int __pyx_t_1;
    4719 +  PyObject *__pyx_t_2 = NULL;
    4720 +  PyObject *__pyx_t_3 = NULL;
    4721 +  PyObject *__pyx_t_4 = NULL;
    4722 +  PyObject *__pyx_t_5 = NULL;
    4723 +  int __pyx_lineno = 0;
    4724 +  const char *__pyx_filename = NULL;
    4725 +  int __pyx_clineno = 0;
    4726 +  __Pyx_RefNannySetupContext("noncentral_chisquare", 0);
    4727  
    4728    /* "mtrand.pyx":1973
    4729   *         cdef ndarray odf, ononc
    4730 @@ -9893,9 +10304,9 @@
    4731        __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    4732        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    4733        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1977; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    4734 -      goto __pyx_L7;
    4735 +      goto __pyx_L4;
    4736      }
    4737 -    __pyx_L7:;
    4738 +    __pyx_L4:;
    4739  
    4740      /* "mtrand.pyx":1978
    4741   *             if fdf <= 1:
    4742 @@ -9919,9 +10330,9 @@
    4743        __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    4744        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    4745        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1979; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    4746 -      goto __pyx_L8;
    4747 +      goto __pyx_L5;
    4748      }
    4749 -    __pyx_L8:;
    4750 +    __pyx_L5:;
    4751  
    4752      /* "mtrand.pyx":1980
    4753   *             if fnonc <= 0:
    4754 @@ -9939,14 +10350,14 @@
    4755   *
    4756   *         PyErr_Clear()
    4757   */
    4758 -    __pyx_t_2 = __pyx_f_6mtrand_cont2_array_sc(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state, rk_noncentral_chisquare, __pyx_v_size, __pyx_v_fdf, __pyx_v_fnonc); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1980; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    4759 +    __pyx_t_2 = __pyx_f_6mtrand_cont2_array_sc(__pyx_v_self->internal_state, rk_noncentral_chisquare, __pyx_v_size, __pyx_v_fdf, __pyx_v_fnonc); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1980; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    4760      __Pyx_GOTREF(__pyx_t_2);
    4761      __pyx_r = __pyx_t_2;
    4762      __pyx_t_2 = 0;
    4763      goto __pyx_L0;
    4764 -    goto __pyx_L6;
    4765 +    goto __pyx_L3;
    4766    }
    4767 -  __pyx_L6:;
    4768 +  __pyx_L3:;
    4769  
    4770    /* "mtrand.pyx":1983
    4771   *                                   size, fdf, fnonc)
    4772 @@ -10003,7 +10414,7 @@
    4773    __pyx_t_2 = PyFloat_FromDouble(0.0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1987; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    4774    __Pyx_GOTREF(__pyx_t_2);
    4775    __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1987; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    4776 -  __Pyx_GOTREF(((PyObject *)__pyx_t_5));
    4777 +  __Pyx_GOTREF(__pyx_t_5);
    4778    __Pyx_INCREF(((PyObject *)__pyx_v_odf));
    4779    PyTuple_SET_ITEM(__pyx_t_5, 0, ((PyObject *)__pyx_v_odf));
    4780    __Pyx_GIVEREF(((PyObject *)__pyx_v_odf));
    4781 @@ -10015,7 +10426,7 @@
    4782    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    4783    __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
    4784    __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1987; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    4785 -  __Pyx_GOTREF(((PyObject *)__pyx_t_5));
    4786 +  __Pyx_GOTREF(__pyx_t_5);
    4787    PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2);
    4788    __Pyx_GIVEREF(__pyx_t_2);
    4789    __pyx_t_2 = 0;
    4790 @@ -10039,9 +10450,9 @@
    4791      __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    4792      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    4793      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1988; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    4794 -    goto __pyx_L9;
    4795 +    goto __pyx_L6;
    4796    }
    4797 -  __pyx_L9:;
    4798 +  __pyx_L6:;
    4799  
    4800    /* "mtrand.pyx":1989
    4801   *         if np.any(np.less_equal(odf, 0.0)):
    4802 @@ -10063,7 +10474,7 @@
    4803    __pyx_t_2 = PyFloat_FromDouble(0.0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1989; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    4804    __Pyx_GOTREF(__pyx_t_2);
    4805    __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1989; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    4806 -  __Pyx_GOTREF(((PyObject *)__pyx_t_4));
    4807 +  __Pyx_GOTREF(__pyx_t_4);
    4808    __Pyx_INCREF(((PyObject *)__pyx_v_ononc));
    4809    PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)__pyx_v_ononc));
    4810    __Pyx_GIVEREF(((PyObject *)__pyx_v_ononc));
    4811 @@ -10075,7 +10486,7 @@
    4812    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    4813    __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
    4814    __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1989; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    4815 -  __Pyx_GOTREF(((PyObject *)__pyx_t_4));
    4816 +  __Pyx_GOTREF(__pyx_t_4);
    4817    PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
    4818    __Pyx_GIVEREF(__pyx_t_2);
    4819    __pyx_t_2 = 0;
    4820 @@ -10099,9 +10510,9 @@
    4821      __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    4822      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    4823      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1990; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    4824 -    goto __pyx_L10;
    4825 +    goto __pyx_L7;
    4826    }
    4827 -  __pyx_L10:;
    4828 +  __pyx_L7:;
    4829  
    4830    /* "mtrand.pyx":1991
    4831   *         if np.any(np.less_equal(ononc, 0.0)):
    4832 @@ -10119,7 +10530,7 @@
    4833   *
    4834   *     def standard_cauchy(self, size=None):
    4835   */
    4836 -  __pyx_t_2 = __pyx_f_6mtrand_cont2_array(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state, rk_noncentral_chisquare, __pyx_v_size, __pyx_v_odf, __pyx_v_ononc); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1991; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    4837 +  __pyx_t_2 = __pyx_f_6mtrand_cont2_array(__pyx_v_self->internal_state, rk_noncentral_chisquare, __pyx_v_size, __pyx_v_odf, __pyx_v_ononc); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1991; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    4838    __Pyx_GOTREF(__pyx_t_2);
    4839    __pyx_r = __pyx_t_2;
    4840    __pyx_t_2 = 0;
    4841 @@ -10142,38 +10553,36 @@
    4842    return __pyx_r;
    4843  }
    4844  
    4845 -/* "mtrand.pyx":1994
    4846 +/* Python wrapper */
    4847 +static PyObject *__pyx_pw_6mtrand_11RandomState_55standard_cauchy(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
    4848 +static char __pyx_doc_6mtrand_11RandomState_54standard_cauchy[] = "\n        standard_cauchy(size=None)\n\n        Standard Cauchy distribution with mode = 0.\n\n        Also known as the Lorentz distribution.\n\n        Parameters\n        ----------\n        size : int or tuple of ints\n            Shape of the output.\n\n        Returns\n        -------\n        samples : ndarray or scalar\n            The drawn samples.\n\n        Notes\n        -----\n        The probability density function for the full Cauchy distribution is\n\n        .. math:: P(x; x_0, \\gamma) = \\frac{1}{\\pi \\gamma \\bigl[ 1+\n                  (\\frac{x-x_0}{\\gamma})^2 \\bigr] }\n\n        and the Standard Cauchy distribution just sets :math:`x_0=0` and\n        :math:`\\gamma=1`\n\n        The Cauchy distribution arises in the solution to the driven harmonic\n        oscillator problem, and also describes spectral line broadening. It\n        also describes the distribution of values at which a line tilted at\n        a random angle will cut the x axis.\n\n        When studying hypothesis tests that assume normality, seeing how the\n        tests perform on data from a Cauchy distribution is a good indicator of\n        their sensitivity to a heavy-tailed distribution, since the Cauchy looks\n        very much like a Gaussian distribution, but with heavier tails.\n\n        References\n        ----------\n        ..[1] NIST/SEMATECH e-Handbook of Statistical Methods, \"Cauchy\n              Distribution\",\n              http://www.itl.nist.gov/div898/handbook/eda/section3/eda3663.htm\n        ..[2] Weisstein, Eric W. \"Cauchy Distribution.\" From MathWorld--A\n              Wolfram Web Resource.\n              http://mathworld.wolfram.com/CauchyDistribution.html\n        ..[3] Wikipedia, \"Cauchy distribution\"\n              http://en.wikipedia.org/wiki/Cauchy_distribution\n\n        Examples\n        --------\n        Draw samples and plot the distribution:\n\n        >>> s = np.random.standard_cauchy(1000000)\n        >>> s = s[(s>-25) & (s<25)""]  # truncate distribution so it plots well\n        >>> plt.hist(s, bins=100)\n        >>> plt.show()\n\n        ";
    4849 +static PyObject *__pyx_pw_6mtrand_11RandomState_55standard_cauchy(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
    4850 +  PyObject *__pyx_v_size = 0;
    4851 +  PyObject *__pyx_r = 0;
    4852 +  __Pyx_RefNannyDeclarations
    4853 +  __Pyx_RefNannySetupContext("standard_cauchy (wrapper)", 0);
    4854 +  {
    4855 +    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__size,0};
    4856 +    PyObject* values[1] = {0};
    4857 +
    4858 +    /* "mtrand.pyx":1994
    4859   *             odf, ononc)
    4860   *
    4861   *     def standard_cauchy(self, size=None):             # <<<<<<<<<<<<<<
    4862   *         """
    4863   *         standard_cauchy(size=None)
    4864   */
    4865 -
    4866 -static PyObject *__pyx_pf_6mtrand_11RandomState_27standard_cauchy(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
    4867 -static char __pyx_doc_6mtrand_11RandomState_27standard_cauchy[] = "\n        standard_cauchy(size=None)\n\n        Standard Cauchy distribution with mode = 0.\n\n        Also known as the Lorentz distribution.\n\n        Parameters\n        ----------\n        size : int or tuple of ints\n            Shape of the output.\n\n        Returns\n        -------\n        samples : ndarray or scalar\n            The drawn samples.\n\n        Notes\n        -----\n        The probability density function for the full Cauchy distribution is\n\n        .. math:: P(x; x_0, \\gamma) = \\frac{1}{\\pi \\gamma \\bigl[ 1+\n                  (\\frac{x-x_0}{\\gamma})^2 \\bigr] }\n\n        and the Standard Cauchy distribution just sets :math:`x_0=0` and\n        :math:`\\gamma=1`\n\n        The Cauchy distribution arises in the solution to the driven harmonic\n        oscillator problem, and also describes spectral line broadening. It\n        also describes the distribution of values at which a line tilted at\n        a random angle will cut the x axis.\n\n        When studying hypothesis tests that assume normality, seeing how the\n        tests perform on data from a Cauchy distribution is a good indicator of\n        their sensitivity to a heavy-tailed distribution, since the Cauchy looks\n        very much like a Gaussian distribution, but with heavier tails.\n\n        References\n        ----------\n        ..[1] NIST/SEMATECH e-Handbook of Statistical Methods, \"Cauchy\n              Distribution\",\n              http://www.itl.nist.gov/div898/handbook/eda/section3/eda3663.htm\n        ..[2] Weisstein, Eric W. \"Cauchy Distribution.\" From MathWorld--A\n              Wolfram Web Resource.\n              http://mathworld.wolfram.com/CauchyDistribution.html\n        ..[3] Wikipedia, \"Cauchy distribution\"\n              http://en.wikipedia.org/wiki/Cauchy_distribution\n\n        Examples\n        --------\n        Draw samples and plot the distribution:\n\n        >>> s = np.random.standard_cauchy(1000000)\n        >>> s = s[(s>-25) & (s<25)""]  # truncate distribution so it plots well\n        >>> plt.hist(s, bins=100)\n        >>> plt.show()\n\n        ";
    4868 -static PyObject *__pyx_pf_6mtrand_11RandomState_27standard_cauchy(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
    4869 -  PyObject *__pyx_v_size = 0;
    4870 -  PyObject *__pyx_r = NULL;
    4871 -  __Pyx_RefNannyDeclarations
    4872 -  PyObject *__pyx_t_1 = NULL;
    4873 -  int __pyx_lineno = 0;
    4874 -  const char *__pyx_filename = NULL;
    4875 -  int __pyx_clineno = 0;
    4876 -  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__size,0};
    4877 -  __Pyx_RefNannySetupContext("standard_cauchy");
    4878 -  {
    4879 -    PyObject* values[1] = {0};
    4880      values[0] = ((PyObject *)Py_None);
    4881      if (unlikely(__pyx_kwds)) {
    4882        Py_ssize_t kw_args;
    4883 -      switch (PyTuple_GET_SIZE(__pyx_args)) {
    4884 +      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
    4885 +      switch (pos_args) {
    4886          case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    4887          case  0: break;
    4888          default: goto __pyx_L5_argtuple_error;
    4889        }
    4890        kw_args = PyDict_Size(__pyx_kwds);
    4891 -      switch (PyTuple_GET_SIZE(__pyx_args)) {
    4892 +      switch (pos_args) {
    4893          case  0:
    4894          if (kw_args > 0) {
    4895            PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__size);
    4896 @@ -10181,7 +10590,7 @@
    4897          }
    4898        }
    4899        if (unlikely(kw_args > 0)) {
    4900 -        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "standard_cauchy") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1994; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    4901 +        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "standard_cauchy") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1994; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    4902        }
    4903      } else {
    4904        switch (PyTuple_GET_SIZE(__pyx_args)) {
    4905 @@ -10200,6 +10609,19 @@
    4906    __Pyx_RefNannyFinishContext();
    4907    return NULL;
    4908    __pyx_L4_argument_unpacking_done:;
    4909 +  __pyx_r = __pyx_pf_6mtrand_11RandomState_54standard_cauchy(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self), __pyx_v_size);
    4910 +  __Pyx_RefNannyFinishContext();
    4911 +  return __pyx_r;
    4912 +}
    4913 +
    4914 +static PyObject *__pyx_pf_6mtrand_11RandomState_54standard_cauchy(struct __pyx_obj_6mtrand_RandomState *__pyx_v_self, PyObject *__pyx_v_size) {
    4915 +  PyObject *__pyx_r = NULL;
    4916 +  __Pyx_RefNannyDeclarations
    4917 +  PyObject *__pyx_t_1 = NULL;
    4918 +  int __pyx_lineno = 0;
    4919 +  const char *__pyx_filename = NULL;
    4920 +  int __pyx_clineno = 0;
    4921 +  __Pyx_RefNannySetupContext("standard_cauchy", 0);
    4922  
    4923    /* "mtrand.pyx":2053
    4924   *
    4925 @@ -10209,7 +10631,7 @@
    4926   *     def standard_t(self, df, size=None):
    4927   */
    4928    __Pyx_XDECREF(__pyx_r);
    4929 -  __pyx_t_1 = __pyx_f_6mtrand_cont0_array(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state, rk_standard_cauchy, __pyx_v_size); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2053; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    4930 +  __pyx_t_1 = __pyx_f_6mtrand_cont0_array(__pyx_v_self->internal_state, rk_standard_cauchy, __pyx_v_size); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2053; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    4931    __Pyx_GOTREF(__pyx_t_1);
    4932    __pyx_r = __pyx_t_1;
    4933    __pyx_t_1 = 0;
    4934 @@ -10227,49 +10649,40 @@
    4935    return __pyx_r;
    4936  }
    4937  
    4938 -/* "mtrand.pyx":2055
    4939 +/* Python wrapper */
    4940 +static PyObject *__pyx_pw_6mtrand_11RandomState_57standard_t(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
    4941 +static char __pyx_doc_6mtrand_11RandomState_56standard_t[] = "\n        standard_t(df, size=None)\n\n        Standard Student's t distribution with df degrees of freedom.\n\n        A special case of the hyperbolic distribution.\n        As `df` gets large, the result resembles that of the standard normal\n        distribution (`standard_normal`).\n\n        Parameters\n        ----------\n        df : int\n            Degrees of freedom, should be > 0.\n        size : int or tuple of ints, optional\n            Output shape. Default is None, in which case a single value is\n            returned.\n\n        Returns\n        -------\n        samples : ndarray or scalar\n            Drawn samples.\n\n        Notes\n        -----\n        The probability density function for the t distribution is\n\n        .. math:: P(x, df) = \\frac{\\Gamma(\\frac{df+1}{2})}{\\sqrt{\\pi df}\n                  \\Gamma(\\frac{df}{2})}\\Bigl( 1+\\frac{x^2}{df} \\Bigr)^{-(df+1)/2}\n\n        The t test is based on an assumption that the data come from a Normal\n        distribution. The t test provides a way to test whether the sample mean\n        (that is the mean calculated from the data) is a good estimate of the true\n        mean.\n\n        The derivation of the t-distribution was forst published in 1908 by William\n        Gisset while working for the Guinness Brewery in Dublin. Due to proprietary\n        issues, he had to publish under a pseudonym, and so he used the name\n        Student.\n\n        References\n        ----------\n        .. [1] Dalgaard, Peter, \"Introductory Statistics With R\",\n               Springer, 2002.\n        .. [2] Wikipedia, \"Student's t-distribution\"\n               http://en.wikipedia.org/wiki/Student's_t-distribution\n\n        Examples\n        --------\n        From Dalgaard page 83 [1]_, suppose the daily energy intake for 11\n        women in Kj is:\n\n        >>> intake = np.array([5260., 5470, 5640, 6180, 6390, 6515, 6805, 7515, \\\n        ...                    7515, 8230, 8770])\n\n        Doe""s their energy intake deviate systematically from the recommended\n        value of 7725 kJ?\n\n        We have 10 degrees of freedom, so is the sample mean within 95% of the\n        recommended value?\n\n        >>> s = np.random.standard_t(10, size=100000)\n        >>> np.mean(intake)\n        6753.636363636364\n        >>> intake.std(ddof=1)\n        1142.1232221373727\n\n        Calculate the t statistic, setting the ddof parameter to the unbiased\n        value so the divisor in the standard deviation will be degrees of\n        freedom, N-1.\n\n        >>> t = (np.mean(intake)-7725)/(intake.std(ddof=1)/np.sqrt(len(intake)))\n        >>> import matplotlib.pyplot as plt\n        >>> h = plt.hist(s, bins=100, normed=True)\n\n        For a one-sided t-test, how far out in the distribution does the t\n        statistic appear?\n\n        >>> >>> np.sum(s<t) / float(len(s))\n        0.0090699999999999999  #random\n\n        So the p-value is about 0.009, which says the null hypothesis has a\n        probability of about 99% of being true.\n\n        ";
    4942 +static PyObject *__pyx_pw_6mtrand_11RandomState_57standard_t(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
    4943 +  PyObject *__pyx_v_df = 0;
    4944 +  PyObject *__pyx_v_size = 0;
    4945 +  PyObject *__pyx_r = 0;
    4946 +  __Pyx_RefNannyDeclarations
    4947 +  __Pyx_RefNannySetupContext("standard_t (wrapper)", 0);
    4948 +  {
    4949 +    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__df,&__pyx_n_s__size,0};
    4950 +    PyObject* values[2] = {0,0};
    4951 +
    4952 +    /* "mtrand.pyx":2055
    4953   *         return cont0_array(self.internal_state, rk_standard_cauchy, size)
    4954   *
    4955   *     def standard_t(self, df, size=None):             # <<<<<<<<<<<<<<
    4956   *         """
    4957   *         standard_t(df, size=None)
    4958   */
    4959 -
    4960 -static PyObject *__pyx_pf_6mtrand_11RandomState_28standard_t(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
    4961 -static char __pyx_doc_6mtrand_11RandomState_28standard_t[] = "\n        standard_t(df, size=None)\n\n        Standard Student's t distribution with df degrees of freedom.\n\n        A special case of the hyperbolic distribution.\n        As `df` gets large, the result resembles that of the standard normal\n        distribution (`standard_normal`).\n\n        Parameters\n        ----------\n        df : int\n            Degrees of freedom, should be > 0.\n        size : int or tuple of ints, optional\n            Output shape. Default is None, in which case a single value is\n            returned.\n\n        Returns\n        -------\n        samples : ndarray or scalar\n            Drawn samples.\n\n        Notes\n        -----\n        The probability density function for the t distribution is\n\n        .. math:: P(x, df) = \\frac{\\Gamma(\\frac{df+1}{2})}{\\sqrt{\\pi df}\n                  \\Gamma(\\frac{df}{2})}\\Bigl( 1+\\frac{x^2}{df} \\Bigr)^{-(df+1)/2}\n\n        The t test is based on an assumption that the data come from a Normal\n        distribution. The t test provides a way to test whether the sample mean\n        (that is the mean calculated from the data) is a good estimate of the true\n        mean.\n\n        The derivation of the t-distribution was forst published in 1908 by William\n        Gisset while working for the Guinness Brewery in Dublin. Due to proprietary\n        issues, he had to publish under a pseudonym, and so he used the name\n        Student.\n\n        References\n        ----------\n        .. [1] Dalgaard, Peter, \"Introductory Statistics With R\",\n               Springer, 2002.\n        .. [2] Wikipedia, \"Student's t-distribution\"\n               http://en.wikipedia.org/wiki/Student's_t-distribution\n\n        Examples\n        --------\n        From Dalgaard page 83 [1]_, suppose the daily energy intake for 11\n        women in Kj is:\n\n        >>> intake = np.array([5260., 5470, 5640, 6180, 6390, 6515, 6805, 7515, \\\n        ...                    7515, 8230, 8770])\n\n        Doe""s their energy intake deviate systematically from the recommended\n        value of 7725 kJ?\n\n        We have 10 degrees of freedom, so is the sample mean within 95% of the\n        recommended value?\n\n        >>> s = np.random.standard_t(10, size=100000)\n        >>> np.mean(intake)\n        6753.636363636364\n        >>> intake.std(ddof=1)\n        1142.1232221373727\n\n        Calculate the t statistic, setting the ddof parameter to the unbiased\n        value so the divisor in the standard deviation will be degrees of\n        freedom, N-1.\n\n        >>> t = (np.mean(intake)-7725)/(intake.std(ddof=1)/np.sqrt(len(intake)))\n        >>> import matplotlib.pyplot as plt\n        >>> h = plt.hist(s, bins=100, normed=True)\n\n        For a one-sided t-test, how far out in the distribution does the t\n        statistic appear?\n\n        >>> >>> np.sum(s<t) / float(len(s))\n        0.0090699999999999999  #random\n\n        So the p-value is about 0.009, which says the null hypothesis has a\n        probability of about 99% of being true.\n\n        ";
    4962 -static PyObject *__pyx_pf_6mtrand_11RandomState_28standard_t(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
    4963 -  PyObject *__pyx_v_df = 0;
    4964 -  PyObject *__pyx_v_size = 0;
    4965 -  PyArrayObject *__pyx_v_odf = 0;
    4966 -  double __pyx_v_fdf;
    4967 -  PyObject *__pyx_r = NULL;
    4968 -  __Pyx_RefNannyDeclarations
    4969 -  int __pyx_t_1;
    4970 -  PyObject *__pyx_t_2 = NULL;
    4971 -  PyObject *__pyx_t_3 = NULL;
    4972 -  PyObject *__pyx_t_4 = NULL;
    4973 -  PyObject *__pyx_t_5 = NULL;
    4974 -  int __pyx_lineno = 0;
    4975 -  const char *__pyx_filename = NULL;
    4976 -  int __pyx_clineno = 0;
    4977 -  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__df,&__pyx_n_s__size,0};
    4978 -  __Pyx_RefNannySetupContext("standard_t");
    4979 -  {
    4980 -    PyObject* values[2] = {0,0};
    4981      values[1] = ((PyObject *)Py_None);
    4982      if (unlikely(__pyx_kwds)) {
    4983        Py_ssize_t kw_args;
    4984 -      switch (PyTuple_GET_SIZE(__pyx_args)) {
    4985 +      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
    4986 +      switch (pos_args) {
    4987          case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    4988          case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    4989          case  0: break;
    4990          default: goto __pyx_L5_argtuple_error;
    4991        }
    4992        kw_args = PyDict_Size(__pyx_kwds);
    4993 -      switch (PyTuple_GET_SIZE(__pyx_args)) {
    4994 +      switch (pos_args) {
    4995          case  0:
    4996 -        values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__df);
    4997 -        if (likely(values[0])) kw_args--;
    4998 +        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__df)) != 0)) kw_args--;
    4999          else goto __pyx_L5_argtuple_error;
    5000          case  1:
    5001          if (kw_args > 0) {
    5002 @@ -10278,7 +10691,7 @@
    5003          }
    5004        }
    5005        if (unlikely(kw_args > 0)) {
    5006 -        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "standard_t") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2055; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    5007 +        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "standard_t") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2055; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    5008        }
    5009      } else {
    5010        switch (PyTuple_GET_SIZE(__pyx_args)) {
    5011 @@ -10299,6 +10712,25 @@
    5012    __Pyx_RefNannyFinishContext();
    5013    return NULL;
    5014    __pyx_L4_argument_unpacking_done:;
    5015 +  __pyx_r = __pyx_pf_6mtrand_11RandomState_56standard_t(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self), __pyx_v_df, __pyx_v_size);
    5016 +  __Pyx_RefNannyFinishContext();
    5017 +  return __pyx_r;
    5018 +}
    5019 +
    5020 +static PyObject *__pyx_pf_6mtrand_11RandomState_56standard_t(struct __pyx_obj_6mtrand_RandomState *__pyx_v_self, PyObject *__pyx_v_df, PyObject *__pyx_v_size) {
    5021 +  PyArrayObject *__pyx_v_odf = 0;
    5022 +  double __pyx_v_fdf;
    5023 +  PyObject *__pyx_r = NULL;
    5024 +  __Pyx_RefNannyDeclarations
    5025 +  int __pyx_t_1;
    5026 +  PyObject *__pyx_t_2 = NULL;
    5027 +  PyObject *__pyx_t_3 = NULL;
    5028 +  PyObject *__pyx_t_4 = NULL;
    5029 +  PyObject *__pyx_t_5 = NULL;
    5030 +  int __pyx_lineno = 0;
    5031 +  const char *__pyx_filename = NULL;
    5032 +  int __pyx_clineno = 0;
    5033 +  __Pyx_RefNannySetupContext("standard_t", 0);
    5034  
    5035    /* "mtrand.pyx":2143
    5036   *         cdef double fdf
    5037 @@ -10341,9 +10773,9 @@
    5038        __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    5039        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    5040        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2146; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    5041 -      goto __pyx_L7;
    5042 +      goto __pyx_L4;
    5043      }
    5044 -    __pyx_L7:;
    5045 +    __pyx_L4:;
    5046  
    5047      /* "mtrand.pyx":2147
    5048   *             if fdf <= 0:
    5049 @@ -10353,14 +10785,14 @@
    5050   *         PyErr_Clear()
    5051   */
    5052      __Pyx_XDECREF(__pyx_r);
    5053 -    __pyx_t_2 = __pyx_f_6mtrand_cont1_array_sc(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state, rk_standard_t, __pyx_v_size, __pyx_v_fdf); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2147; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    5054 +    __pyx_t_2 = __pyx_f_6mtrand_cont1_array_sc(__pyx_v_self->internal_state, rk_standard_t, __pyx_v_size, __pyx_v_fdf); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2147; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    5055      __Pyx_GOTREF(__pyx_t_2);
    5056      __pyx_r = __pyx_t_2;
    5057      __pyx_t_2 = 0;
    5058      goto __pyx_L0;
    5059 -    goto __pyx_L6;
    5060 +    goto __pyx_L3;
    5061    }
    5062 -  __pyx_L6:;
    5063 +  __pyx_L3:;
    5064  
    5065    /* "mtrand.pyx":2149
    5066   *             return cont1_array_sc(self.internal_state, rk_standard_t, size, fdf)
    5067 @@ -10404,7 +10836,7 @@
    5068    __pyx_t_2 = PyFloat_FromDouble(0.0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2152; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    5069    __Pyx_GOTREF(__pyx_t_2);
    5070    __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2152; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    5071 -  __Pyx_GOTREF(((PyObject *)__pyx_t_5));
    5072 +  __Pyx_GOTREF(__pyx_t_5);
    5073    __Pyx_INCREF(((PyObject *)__pyx_v_odf));
    5074    PyTuple_SET_ITEM(__pyx_t_5, 0, ((PyObject *)__pyx_v_odf));
    5075    __Pyx_GIVEREF(((PyObject *)__pyx_v_odf));
    5076 @@ -10416,7 +10848,7 @@
    5077    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    5078    __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
    5079    __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2152; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    5080 -  __Pyx_GOTREF(((PyObject *)__pyx_t_5));
    5081 +  __Pyx_GOTREF(__pyx_t_5);
    5082    PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2);
    5083    __Pyx_GIVEREF(__pyx_t_2);
    5084    __pyx_t_2 = 0;
    5085 @@ -10440,9 +10872,9 @@
    5086      __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    5087      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    5088      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2153; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    5089 -    goto __pyx_L8;
    5090 +    goto __pyx_L5;
    5091    }
    5092 -  __pyx_L8:;
    5093 +  __pyx_L5:;
    5094  
    5095    /* "mtrand.pyx":2154
    5096   *         if np.any(np.less_equal(odf, 0.0)):
    5097 @@ -10452,7 +10884,7 @@
    5098   *     def vonmises(self, mu, kappa, size=None):
    5099   */
    5100    __Pyx_XDECREF(__pyx_r);
    5101 -  __pyx_t_2 = __pyx_f_6mtrand_cont1_array(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state, rk_standard_t, __pyx_v_size, __pyx_v_odf); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2154; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    5102 +  __pyx_t_2 = __pyx_f_6mtrand_cont1_array(__pyx_v_self->internal_state, rk_standard_t, __pyx_v_size, __pyx_v_odf); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2154; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    5103    __Pyx_GOTREF(__pyx_t_2);
    5104    __pyx_r = __pyx_t_2;
    5105    __pyx_t_2 = 0;
    5106 @@ -10474,42 +10906,32 @@
    5107    return __pyx_r;
    5108  }
    5109  
    5110 -/* "mtrand.pyx":2156
    5111 - *         return cont1_array(self.internal_state, rk_standard_t, size, odf)
    5112 - *
    5113 - *     def vonmises(self, mu, kappa, size=None):             # <<<<<<<<<<<<<<
    5114 - *         """
    5115 - *         vonmises(mu, kappa, size=None)
    5116 - */
    5117 -
    5118 -static PyObject *__pyx_pf_6mtrand_11RandomState_29vonmises(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
    5119 -static char __pyx_doc_6mtrand_11RandomState_29vonmises[] = "\n        vonmises(mu, kappa, size=None)\n\n        Draw samples from a von Mises distribution.\n\n        Samples are drawn from a von Mises distribution with specified mode\n        (mu) and dispersion (kappa), on the interval [-pi, pi].\n\n        The von Mises distribution (also known as the circular normal\n        distribution) is a continuous probability distribution on the unit\n        circle.  It may be thought of as the circular analogue of the normal\n        distribution.\n\n        Parameters\n        ----------\n        mu : float\n            Mode (\"center\") of the distribution.\n        kappa : float\n            Dispersion of the distribution, has to be >=0.\n        size : int or tuple of int\n            Output shape.  If the given shape is, e.g., ``(m, n, k)``, then\n            ``m * n * k`` samples are drawn.\n\n        Returns\n        -------\n        samples : scalar or ndarray\n            The returned samples, which are in the interval [-pi, pi].\n\n        See Also\n        --------\n        scipy.stats.distributions.vonmises : probability density function,\n            distribution, or cumulative density function, etc.\n\n        Notes\n        -----\n        The probability density for the von Mises distribution is\n\n        .. math:: p(x) = \\frac{e^{\\kappa cos(x-\\mu)}}{2\\pi I_0(\\kappa)},\n\n        where :math:`\\mu` is the mode and :math:`\\kappa` the dispersion,\n        and :math:`I_0(\\kappa)` is the modified Bessel function of order 0.\n\n        The von Mises is named for Richard Edler von Mises, who was born in\n        Austria-Hungary, in what is now the Ukraine.  He fled to the United\n        States in 1939 and became a professor at Harvard.  He worked in\n        probability theory, aerodynamics, fluid mechanics, and philosophy of\n        science.\n\n        References\n        ----------\n        Abramowitz, M. and Stegun, I. A. (ed.), *Handbook of Mathematical\n        Functions*, New York: Dover, 1965.\n\n      ""  von Mises, R., *Mathematical Theory of Probability and Statistics*,\n        New York: Academic Press, 1964.\n\n        Examples\n        --------\n        Draw samples from the distribution:\n\n        >>> mu, kappa = 0.0, 4.0 # mean and dispersion\n        >>> s = np.random.vonmises(mu, kappa, 1000)\n\n        Display the histogram of the samples, along with\n        the probability density function:\n\n        >>> import matplotlib.pyplot as plt\n        >>> import scipy.special as sps\n        >>> count, bins, ignored = plt.hist(s, 50, normed=True)\n        >>> x = np.arange(-np.pi, np.pi, 2*np.pi/50.)\n        >>> y = -np.exp(kappa*np.cos(x-mu))/(2*np.pi*sps.jn(0,kappa))\n        >>> plt.plot(x, y/max(y), linewidth=2, color='r')\n        >>> plt.show()\n\n        ";
    5120 -static PyObject *__pyx_pf_6mtrand_11RandomState_29vonmises(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
    5121 +/* Python wrapper */
    5122 +static PyObject *__pyx_pw_6mtrand_11RandomState_59vonmises(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
    5123 +static char __pyx_doc_6mtrand_11RandomState_58vonmises[] = "\n        vonmises(mu, kappa, size=None)\n\n        Draw samples from a von Mises distribution.\n\n        Samples are drawn from a von Mises distribution with specified mode\n        (mu) and dispersion (kappa), on the interval [-pi, pi].\n\n        The von Mises distribution (also known as the circular normal\n        distribution) is a continuous probability distribution on the unit\n        circle.  It may be thought of as the circular analogue of the normal\n        distribution.\n\n        Parameters\n        ----------\n        mu : float\n            Mode (\"center\") of the distribution.\n        kappa : float\n            Dispersion of the distribution, has to be >=0.\n        size : int or tuple of int\n            Output shape.  If the given shape is, e.g., ``(m, n, k)``, then\n            ``m * n * k`` samples are drawn.\n\n        Returns\n        -------\n        samples : scalar or ndarray\n            The returned samples, which are in the interval [-pi, pi].\n\n        See Also\n        --------\n        scipy.stats.distributions.vonmises : probability density function,\n            distribution, or cumulative density function, etc.\n\n        Notes\n        -----\n        The probability density for the von Mises distribution is\n\n        .. math:: p(x) = \\frac{e^{\\kappa cos(x-\\mu)}}{2\\pi I_0(\\kappa)},\n\n        where :math:`\\mu` is the mode and :math:`\\kappa` the dispersion,\n        and :math:`I_0(\\kappa)` is the modified Bessel function of order 0.\n\n        The von Mises is named for Richard Edler von Mises, who was born in\n        Austria-Hungary, in what is now the Ukraine.  He fled to the United\n        States in 1939 and became a professor at Harvard.  He worked in\n        probability theory, aerodynamics, fluid mechanics, and philosophy of\n        science.\n\n        References\n        ----------\n        Abramowitz, M. and Stegun, I. A. (ed.), *Handbook of Mathematical\n        Functions*, New York: Dover, 1965.\n\n      ""  von Mises, R., *Mathematical Theory of Probability and Statistics*,\n        New York: Academic Press, 1964.\n\n        Examples\n        --------\n        Draw samples from the distribution:\n\n        >>> mu, kappa = 0.0, 4.0 # mean and dispersion\n        >>> s = np.random.vonmises(mu, kappa, 1000)\n\n        Display the histogram of the samples, along with\n        the probability density function:\n\n        >>> import matplotlib.pyplot as plt\n        >>> import scipy.special as sps\n        >>> count, bins, ignored = plt.hist(s, 50, normed=True)\n        >>> x = np.arange(-np.pi, np.pi, 2*np.pi/50.)\n        >>> y = -np.exp(kappa*np.cos(x-mu))/(2*np.pi*sps.jn(0,kappa))\n        >>> plt.plot(x, y/max(y), linewidth=2, color='r')\n        >>> plt.show()\n\n        ";
    5124 +static PyObject *__pyx_pw_6mtrand_11RandomState_59vonmises(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
    5125    PyObject *__pyx_v_mu = 0;
    5126    PyObject *__pyx_v_kappa = 0;
    5127    PyObject *__pyx_v_size = 0;
    5128 -  PyArrayObject *__pyx_v_omu = 0;
    5129 -  PyArrayObject *__pyx_v_okappa = 0;
    5130 -  double __pyx_v_fmu;
    5131 -  double __pyx_v_fkappa;
    5132 -  PyObject *__pyx_r = NULL;
    5133 +  PyObject *__pyx_r = 0;
    5134    __Pyx_RefNannyDeclarations
    5135 -  int __pyx_t_1;
    5136 -  PyObject *__pyx_t_2 = NULL;
    5137 -  PyObject *__pyx_t_3 = NULL;
    5138 -  PyObject *__pyx_t_4 = NULL;
    5139 -  PyObject *__pyx_t_5 = NULL;
    5140 -  int __pyx_lineno = 0;
    5141 -  const char *__pyx_filename = NULL;
    5142 -  int __pyx_clineno = 0;
    5143 -  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__mu,&__pyx_n_s__kappa,&__pyx_n_s__size,0};
    5144 -  __Pyx_RefNannySetupContext("vonmises");
    5145 +  __Pyx_RefNannySetupContext("vonmises (wrapper)", 0);
    5146    {
    5147 +    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__mu,&__pyx_n_s__kappa,&__pyx_n_s__size,0};
    5148      PyObject* values[3] = {0,0,0};
    5149 +
    5150 +    /* "mtrand.pyx":2156
    5151 + *         return cont1_array(self.internal_state, rk_standard_t, size, odf)
    5152 + *
    5153 + *     def vonmises(self, mu, kappa, size=None):             # <<<<<<<<<<<<<<
    5154 + *         """
    5155 + *         vonmises(mu, kappa, size=None)
    5156 + */
    5157      values[2] = ((PyObject *)Py_None);
    5158      if (unlikely(__pyx_kwds)) {
    5159        Py_ssize_t kw_args;
    5160 -      switch (PyTuple_GET_SIZE(__pyx_args)) {
    5161 +      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
    5162 +      switch (pos_args) {
    5163          case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
    5164          case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    5165          case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    5166 @@ -10517,14 +10939,12 @@
    5167          default: goto __pyx_L5_argtuple_error;
    5168        }
    5169        kw_args = PyDict_Size(__pyx_kwds);
    5170 -      switch (PyTuple_GET_SIZE(__pyx_args)) {
    5171 +      switch (pos_args) {
    5172          case  0:
    5173 -        values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__mu);
    5174 -        if (likely(values[0])) kw_args--;
    5175 +        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__mu)) != 0)) kw_args--;
    5176          else goto __pyx_L5_argtuple_error;
    5177          case  1:
    5178 -        values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__kappa);
    5179 -        if (likely(values[1])) kw_args--;
    5180 +        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__kappa)) != 0)) kw_args--;
    5181          else {
    5182            __Pyx_RaiseArgtupleInvalid("vonmises", 0, 2, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2156; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    5183          }
    5184 @@ -10535,7 +10955,7 @@
    5185          }
    5186        }
    5187        if (unlikely(kw_args > 0)) {
    5188 -        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "vonmises") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2156; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    5189 +        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "vonmises") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2156; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    5190        }
    5191      } else {
    5192        switch (PyTuple_GET_SIZE(__pyx_args)) {
    5193 @@ -10558,6 +10978,27 @@
    5194    __Pyx_RefNannyFinishContext();
    5195    return NULL;
    5196    __pyx_L4_argument_unpacking_done:;
    5197 +  __pyx_r = __pyx_pf_6mtrand_11RandomState_58vonmises(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self), __pyx_v_mu, __pyx_v_kappa, __pyx_v_size);
    5198 +  __Pyx_RefNannyFinishContext();
    5199 +  return __pyx_r;
    5200 +}
    5201 +
    5202 +static PyObject *__pyx_pf_6mtrand_11RandomState_58vonmises(struct __pyx_obj_6mtrand_RandomState *__pyx_v_self, PyObject *__pyx_v_mu, PyObject *__pyx_v_kappa, PyObject *__pyx_v_size) {
    5203 +  PyArrayObject *__pyx_v_omu = 0;
    5204 +  PyArrayObject *__pyx_v_okappa = 0;
    5205 +  double __pyx_v_fmu;
    5206 +  double __pyx_v_fkappa;
    5207 +  PyObject *__pyx_r = NULL;
    5208 +  __Pyx_RefNannyDeclarations
    5209 +  int __pyx_t_1;
    5210 +  PyObject *__pyx_t_2 = NULL;
    5211 +  PyObject *__pyx_t_3 = NULL;
    5212 +  PyObject *__pyx_t_4 = NULL;
    5213 +  PyObject *__pyx_t_5 = NULL;
    5214 +  int __pyx_lineno = 0;
    5215 +  const char *__pyx_filename = NULL;
    5216 +  int __pyx_clineno = 0;
    5217 +  __Pyx_RefNannySetupContext("vonmises", 0);
    5218  
    5219    /* "mtrand.pyx":2235
    5220   *         cdef double fmu, fkappa
    5221 @@ -10609,9 +11050,9 @@
    5222        __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    5223        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    5224        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2239; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    5225 -      goto __pyx_L7;
    5226 +      goto __pyx_L4;
    5227      }
    5228 -    __pyx_L7:;
    5229 +    __pyx_L4:;
    5230  
    5231      /* "mtrand.pyx":2240
    5232   *             if fkappa < 0:
    5233 @@ -10621,14 +11062,14 @@
    5234   *         PyErr_Clear()
    5235   */
    5236      __Pyx_XDECREF(__pyx_r);
    5237 -    __pyx_t_2 = __pyx_f_6mtrand_cont2_array_sc(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state, rk_vonmises, __pyx_v_size, __pyx_v_fmu, __pyx_v_fkappa); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2240; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    5238 +    __pyx_t_2 = __pyx_f_6mtrand_cont2_array_sc(__pyx_v_self->internal_state, rk_vonmises, __pyx_v_size, __pyx_v_fmu, __pyx_v_fkappa); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2240; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    5239      __Pyx_GOTREF(__pyx_t_2);
    5240      __pyx_r = __pyx_t_2;
    5241      __pyx_t_2 = 0;
    5242      goto __pyx_L0;
    5243 -    goto __pyx_L6;
    5244 +    goto __pyx_L3;
    5245    }
    5246 -  __pyx_L6:;
    5247 +  __pyx_L3:;
    5248  
    5249    /* "mtrand.pyx":2242
    5250   *             return cont2_array_sc(self.internal_state, rk_vonmises, size, fmu, fkappa)
    5251 @@ -10685,7 +11126,7 @@
    5252    __pyx_t_2 = PyFloat_FromDouble(0.0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2246; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    5253    __Pyx_GOTREF(__pyx_t_2);
    5254    __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2246; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    5255 -  __Pyx_GOTREF(((PyObject *)__pyx_t_5));
    5256 +  __Pyx_GOTREF(__pyx_t_5);
    5257    __Pyx_INCREF(((PyObject *)__pyx_v_okappa));
    5258    PyTuple_SET_ITEM(__pyx_t_5, 0, ((PyObject *)__pyx_v_okappa));
    5259    __Pyx_GIVEREF(((PyObject *)__pyx_v_okappa));
    5260 @@ -10697,7 +11138,7 @@
    5261    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    5262    __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
    5263    __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2246; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    5264 -  __Pyx_GOTREF(((PyObject *)__pyx_t_5));
    5265 +  __Pyx_GOTREF(__pyx_t_5);
    5266    PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2);
    5267    __Pyx_GIVEREF(__pyx_t_2);
    5268    __pyx_t_2 = 0;
    5269 @@ -10721,9 +11162,9 @@
    5270      __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    5271      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    5272      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2247; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    5273 -    goto __pyx_L8;
    5274 +    goto __pyx_L5;
    5275    }
    5276 -  __pyx_L8:;
    5277 +  __pyx_L5:;
    5278  
    5279    /* "mtrand.pyx":2248
    5280   *         if np.any(np.less(okappa, 0.0)):
    5281 @@ -10733,7 +11174,7 @@
    5282   *     def pareto(self, a, size=None):
    5283   */
    5284    __Pyx_XDECREF(__pyx_r);
    5285 -  __pyx_t_2 = __pyx_f_6mtrand_cont2_array(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state, rk_vonmises, __pyx_v_size, __pyx_v_omu, __pyx_v_okappa); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2248; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    5286 +  __pyx_t_2 = __pyx_f_6mtrand_cont2_array(__pyx_v_self->internal_state, rk_vonmises, __pyx_v_size, __pyx_v_omu, __pyx_v_okappa); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2248; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    5287    __Pyx_GOTREF(__pyx_t_2);
    5288    __pyx_r = __pyx_t_2;
    5289    __pyx_t_2 = 0;
    5290 @@ -10756,49 +11197,40 @@
    5291    return __pyx_r;
    5292  }
    5293  
    5294 -/* "mtrand.pyx":2250
    5295 +/* Python wrapper */
    5296 +static PyObject *__pyx_pw_6mtrand_11RandomState_61pareto(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
    5297 +static char __pyx_doc_6mtrand_11RandomState_60pareto[] = "\n        pareto(a, size=None)\n\n        Draw samples from a Pareto II or Lomax distribution with specified shape.\n\n        The Lomax or Pareto II distribution is a shifted Pareto distribution. The\n        classical Pareto distribution can be obtained from the Lomax distribution\n        by adding the location parameter m, see below. The smallest value of the\n        Lomax distribution is zero while for the classical Pareto distribution it\n        is m, where the standard Pareto distribution has location m=1.\n        Lomax can also be considered as a simplified version of the Generalized\n        Pareto distribution (available in SciPy), with the scale set to one and\n        the location set to zero.\n\n        The Pareto distribution must be greater than zero, and is unbounded above.\n        It is also known as the \"80-20 rule\".  In this distribution, 80 percent of\n        the weights are in the lowest 20 percent of the range, while the other 20\n        percent fill the remaining 80 percent of the range.\n\n        Parameters\n        ----------\n        shape : float, > 0.\n            Shape of the distribution.\n        size : tuple of ints\n            Output shape.  If the given shape is, e.g., ``(m, n, k)``, then\n            ``m * n * k`` samples are drawn.\n\n        See Also\n        --------\n        scipy.stats.distributions.lomax.pdf : probability density function,\n            distribution or cumulative density function, etc.\n        scipy.stats.distributions.genpareto.pdf : probability density function,\n            distribution or cumulative density function, etc.\n\n        Notes\n        -----\n        The probability density for the Pareto distribution is\n\n        .. math:: p(x) = \\frac{am^a}{x^{a+1}}\n\n        where :math:`a` is the shape and :math:`m` the location\n\n        The Pareto distribution, named after the Italian economist Vilfredo Pareto,\n        is a power law probability distribution useful in many real world probl""ems.\n        Outside the field of economics it is generally referred to as the Bradford\n        distribution. Pareto developed the distribution to describe the\n        distribution of wealth in an economy.  It has also found use in insurance,\n        web page access statistics, oil field sizes, and many other problems,\n        including the download frequency for projects in Sourceforge [1].  It is\n        one of the so-called \"fat-tailed\" distributions.\n\n\n        References\n        ----------\n        .. [1] Francis Hunt and Paul Johnson, On the Pareto Distribution of\n               Sourceforge projects.\n        .. [2] Pareto, V. (1896). Course of Political Economy. Lausanne.\n        .. [3] Reiss, R.D., Thomas, M.(2001), Statistical Analysis of Extreme\n               Values, Birkhauser Verlag, Basel, pp 23-30.\n        .. [4] Wikipedia, \"Pareto distribution\",\n               http://en.wikipedia.org/wiki/Pareto_distribution\n\n        Examples\n        --------\n        Draw samples from the distribution:\n\n        >>> a, m = 3., 1. # shape and mode\n        >>> s = np.random.pareto(a, 1000) + m\n\n        Display the histogram of the samples, along with\n        the probability density function:\n\n        >>> import matplotlib.pyplot as plt\n        >>> count, bins, ignored = plt.hist(s, 100, normed=True, align='center')\n        >>> fit = a*m**a/bins**(a+1)\n        >>> plt.plot(bins, max(count)*fit/max(fit),linewidth=2, color='r')\n        >>> plt.show()\n\n        ";
    5298 +static PyObject *__pyx_pw_6mtrand_11RandomState_61pareto(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
    5299 +  PyObject *__pyx_v_a = 0;
    5300 +  PyObject *__pyx_v_size = 0;
    5301 +  PyObject *__pyx_r = 0;
    5302 +  __Pyx_RefNannyDeclarations
    5303 +  __Pyx_RefNannySetupContext("pareto (wrapper)", 0);
    5304 +  {
    5305 +    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__a,&__pyx_n_s__size,0};
    5306 +    PyObject* values[2] = {0,0};
    5307 +
    5308 +    /* "mtrand.pyx":2250
    5309   *         return cont2_array(self.internal_state, rk_vonmises, size, omu, okappa)
    5310   *
    5311   *     def pareto(self, a, size=None):             # <<<<<<<<<<<<<<
    5312   *         """
    5313   *         pareto(a, size=None)
    5314   */
    5315 -
    5316 -static PyObject *__pyx_pf_6mtrand_11RandomState_30pareto(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
    5317 -static char __pyx_doc_6mtrand_11RandomState_30pareto[] = "\n        pareto(a, size=None)\n\n        Draw samples from a Pareto II or Lomax distribution with specified shape.\n\n        The Lomax or Pareto II distribution is a shifted Pareto distribution. The\n        classical Pareto distribution can be obtained from the Lomax distribution\n        by adding the location parameter m, see below. The smallest value of the\n        Lomax distribution is zero while for the classical Pareto distribution it\n        is m, where the standard Pareto distribution has location m=1.\n        Lomax can also be considered as a simplified version of the Generalized\n        Pareto distribution (available in SciPy), with the scale set to one and\n        the location set to zero.\n\n        The Pareto distribution must be greater than zero, and is unbounded above.\n        It is also known as the \"80-20 rule\".  In this distribution, 80 percent of\n        the weights are in the lowest 20 percent of the range, while the other 20\n        percent fill the remaining 80 percent of the range.\n\n        Parameters\n        ----------\n        shape : float, > 0.\n            Shape of the distribution.\n        size : tuple of ints\n            Output shape.  If the given shape is, e.g., ``(m, n, k)``, then\n            ``m * n * k`` samples are drawn.\n\n        See Also\n        --------\n        scipy.stats.distributions.lomax.pdf : probability density function,\n            distribution or cumulative density function, etc.\n        scipy.stats.distributions.genpareto.pdf : probability density function,\n            distribution or cumulative density function, etc.\n\n        Notes\n        -----\n        The probability density for the Pareto distribution is\n\n        .. math:: p(x) = \\frac{am^a}{x^{a+1}}\n\n        where :math:`a` is the shape and :math:`m` the location\n\n        The Pareto distribution, named after the Italian economist Vilfredo Pareto,\n        is a power law probability distribution useful in many real world probl""ems.\n        Outside the field of economics it is generally referred to as the Bradford\n        distribution. Pareto developed the distribution to describe the\n        distribution of wealth in an economy.  It has also found use in insurance,\n        web page access statistics, oil field sizes, and many other problems,\n        including the download frequency for projects in Sourceforge [1].  It is\n        one of the so-called \"fat-tailed\" distributions.\n\n\n        References\n        ----------\n        .. [1] Francis Hunt and Paul Johnson, On the Pareto Distribution of\n               Sourceforge projects.\n        .. [2] Pareto, V. (1896). Course of Political Economy. Lausanne.\n        .. [3] Reiss, R.D., Thomas, M.(2001), Statistical Analysis of Extreme\n               Values, Birkhauser Verlag, Basel, pp 23-30.\n        .. [4] Wikipedia, \"Pareto distribution\",\n               http://en.wikipedia.org/wiki/Pareto_distribution\n\n        Examples\n        --------\n        Draw samples from the distribution:\n\n        >>> a, m = 3., 1. # shape and mode\n        >>> s = np.random.pareto(a, 1000) + m\n\n        Display the histogram of the samples, along with\n        the probability density function:\n\n        >>> import matplotlib.pyplot as plt\n        >>> count, bins, ignored = plt.hist(s, 100, normed=True, align='center')\n        >>> fit = a*m**a/bins**(a+1)\n        >>> plt.plot(bins, max(count)*fit/max(fit),linewidth=2, color='r')\n        >>> plt.show()\n\n        ";
    5318 -static PyObject *__pyx_pf_6mtrand_11RandomState_30pareto(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
    5319 -  PyObject *__pyx_v_a = 0;
    5320 -  PyObject *__pyx_v_size = 0;
    5321 -  PyArrayObject *__pyx_v_oa = 0;
    5322 -  double __pyx_v_fa;
    5323 -  PyObject *__pyx_r = NULL;
    5324 -  __Pyx_RefNannyDeclarations
    5325 -  int __pyx_t_1;
    5326 -  PyObject *__pyx_t_2 = NULL;
    5327 -  PyObject *__pyx_t_3 = NULL;
    5328 -  PyObject *__pyx_t_4 = NULL;
    5329 -  PyObject *__pyx_t_5 = NULL;
    5330 -  int __pyx_lineno = 0;
    5331 -  const char *__pyx_filename = NULL;
    5332 -  int __pyx_clineno = 0;
    5333 -  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__a,&__pyx_n_s__size,0};
    5334 -  __Pyx_RefNannySetupContext("pareto");
    5335 -  {
    5336 -    PyObject* values[2] = {0,0};
    5337      values[1] = ((PyObject *)Py_None);
    5338      if (unlikely(__pyx_kwds)) {
    5339        Py_ssize_t kw_args;
    5340 -      switch (PyTuple_GET_SIZE(__pyx_args)) {
    5341 +      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
    5342 +      switch (pos_args) {
    5343          case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    5344          case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    5345          case  0: break;
    5346          default: goto __pyx_L5_argtuple_error;
    5347        }
    5348        kw_args = PyDict_Size(__pyx_kwds);
    5349 -      switch (PyTuple_GET_SIZE(__pyx_args)) {
    5350 +      switch (pos_args) {
    5351          case  0:
    5352 -        values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__a);
    5353 -        if (likely(values[0])) kw_args--;
    5354 +        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__a)) != 0)) kw_args--;
    5355          else goto __pyx_L5_argtuple_error;
    5356          case  1:
    5357          if (kw_args > 0) {
    5358 @@ -10807,7 +11239,7 @@
    5359          }
    5360        }
    5361        if (unlikely(kw_args > 0)) {
    5362 -        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "pareto") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2250; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    5363 +        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "pareto") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2250; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    5364        }
    5365      } else {
    5366        switch (PyTuple_GET_SIZE(__pyx_args)) {
    5367 @@ -10828,6 +11260,25 @@
    5368    __Pyx_RefNannyFinishContext();
    5369    return NULL;
    5370    __pyx_L4_argument_unpacking_done:;
    5371 +  __pyx_r = __pyx_pf_6mtrand_11RandomState_60pareto(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self), __pyx_v_a, __pyx_v_size);
    5372 +  __Pyx_RefNannyFinishContext();
    5373 +  return __pyx_r;
    5374 +}
    5375 +
    5376 +static PyObject *__pyx_pf_6mtrand_11RandomState_60pareto(struct __pyx_obj_6mtrand_RandomState *__pyx_v_self, PyObject *__pyx_v_a, PyObject *__pyx_v_size) {
    5377 +  PyArrayObject *__pyx_v_oa = 0;
    5378 +  double __pyx_v_fa;
    5379 +  PyObject *__pyx_r = NULL;
    5380 +  __Pyx_RefNannyDeclarations
    5381 +  int __pyx_t_1;
    5382 +  PyObject *__pyx_t_2 = NULL;
    5383 +  PyObject *__pyx_t_3 = NULL;
    5384 +  PyObject *__pyx_t_4 = NULL;
    5385 +  PyObject *__pyx_t_5 = NULL;
    5386 +  int __pyx_lineno = 0;
    5387 +  const char *__pyx_filename = NULL;
    5388 +  int __pyx_clineno = 0;
    5389 +  __Pyx_RefNannySetupContext("pareto", 0);
    5390  
    5391    /* "mtrand.pyx":2333
    5392   *         cdef double fa
    5393 @@ -10870,9 +11321,9 @@
    5394        __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    5395        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    5396        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2336; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    5397 -      goto __pyx_L7;
    5398 +      goto __pyx_L4;
    5399      }
    5400 -    __pyx_L7:;
    5401 +    __pyx_L4:;
    5402  
    5403      /* "mtrand.pyx":2337
    5404   *             if fa <= 0:
    5405 @@ -10882,14 +11333,14 @@
    5406   *         PyErr_Clear()
    5407   */
    5408      __Pyx_XDECREF(__pyx_r);
    5409 -    __pyx_t_2 = __pyx_f_6mtrand_cont1_array_sc(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state, rk_pareto, __pyx_v_size, __pyx_v_fa); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2337; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    5410 +    __pyx_t_2 = __pyx_f_6mtrand_cont1_array_sc(__pyx_v_self->internal_state, rk_pareto, __pyx_v_size, __pyx_v_fa); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2337; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    5411      __Pyx_GOTREF(__pyx_t_2);
    5412      __pyx_r = __pyx_t_2;
    5413      __pyx_t_2 = 0;
    5414      goto __pyx_L0;
    5415 -    goto __pyx_L6;
    5416 +    goto __pyx_L3;
    5417    }
    5418 -  __pyx_L6:;
    5419 +  __pyx_L3:;
    5420  
    5421    /* "mtrand.pyx":2339
    5422   *             return cont1_array_sc(self.internal_state, rk_pareto, size, fa)
    5423 @@ -10933,7 +11384,7 @@
    5424    __pyx_t_2 = PyFloat_FromDouble(0.0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2342; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    5425    __Pyx_GOTREF(__pyx_t_2);
    5426    __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2342; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    5427 -  __Pyx_GOTREF(((PyObject *)__pyx_t_5));
    5428 +  __Pyx_GOTREF(__pyx_t_5);
    5429    __Pyx_INCREF(((PyObject *)__pyx_v_oa));
    5430    PyTuple_SET_ITEM(__pyx_t_5, 0, ((PyObject *)__pyx_v_oa));
    5431    __Pyx_GIVEREF(((PyObject *)__pyx_v_oa));
    5432 @@ -10945,7 +11396,7 @@
    5433    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    5434    __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
    5435    __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2342; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    5436 -  __Pyx_GOTREF(((PyObject *)__pyx_t_5));
    5437 +  __Pyx_GOTREF(__pyx_t_5);
    5438    PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2);
    5439    __Pyx_GIVEREF(__pyx_t_2);
    5440    __pyx_t_2 = 0;
    5441 @@ -10969,9 +11420,9 @@
    5442      __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    5443      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    5444      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2343; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    5445 -    goto __pyx_L8;
    5446 +    goto __pyx_L5;
    5447    }
    5448 -  __pyx_L8:;
    5449 +  __pyx_L5:;
    5450  
    5451    /* "mtrand.pyx":2344
    5452   *         if np.any(np.less_equal(oa, 0.0)):
    5453 @@ -10981,7 +11432,7 @@
    5454   *     def weibull(self, a, size=None):
    5455   */
    5456    __Pyx_XDECREF(__pyx_r);
    5457 -  __pyx_t_2 = __pyx_f_6mtrand_cont1_array(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state, rk_pareto, __pyx_v_size, __pyx_v_oa); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2344; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    5458 +  __pyx_t_2 = __pyx_f_6mtrand_cont1_array(__pyx_v_self->internal_state, rk_pareto, __pyx_v_size, __pyx_v_oa); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2344; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    5459    __Pyx_GOTREF(__pyx_t_2);
    5460    __pyx_r = __pyx_t_2;
    5461    __pyx_t_2 = 0;
    5462 @@ -11003,49 +11454,40 @@
    5463    return __pyx_r;
    5464  }
    5465  
    5466 -/* "mtrand.pyx":2346
    5467 +/* Python wrapper */
    5468 +static PyObject *__pyx_pw_6mtrand_11RandomState_63weibull(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
    5469 +static char __pyx_doc_6mtrand_11RandomState_62weibull[] = "\n        weibull(a, size=None)\n\n        Weibull distribution.\n\n        Draw samples from a 1-parameter Weibull distribution with the given\n        shape parameter `a`.\n\n        .. math:: X = (-ln(U))^{1/a}\n\n        Here, U is drawn from the uniform distribution over (0,1].\n\n        The more common 2-parameter Weibull, including a scale parameter\n        :math:`\\lambda` is just :math:`X = \\lambda(-ln(U))^{1/a}`.\n\n        Parameters\n        ----------\n        a : float\n            Shape of the distribution.\n        size : tuple of ints\n            Output shape.  If the given shape is, e.g., ``(m, n, k)``, then\n            ``m * n * k`` samples are drawn.\n\n        See Also\n        --------\n        scipy.stats.distributions.weibull : probability density function,\n            distribution or cumulative density function, etc.\n\n        gumbel, scipy.stats.distributions.genextreme\n\n        Notes\n        -----\n        The Weibull (or Type III asymptotic extreme value distribution for smallest\n        values, SEV Type III, or Rosin-Rammler distribution) is one of a class of\n        Generalized Extreme Value (GEV) distributions used in modeling extreme\n        value problems.  This class includes the Gumbel and Frechet distributions.\n\n        The probability density for the Weibull distribution is\n\n        .. math:: p(x) = \\frac{a}\n                         {\\lambda}(\\frac{x}{\\lambda})^{a-1}e^{-(x/\\lambda)^a},\n\n        where :math:`a` is the shape and :math:`\\lambda` the scale.\n\n        The function has its peak (the mode) at\n        :math:`\\lambda(\\frac{a-1}{a})^{1/a}`.\n\n        When ``a = 1``, the Weibull distribution reduces to the exponential\n        distribution.\n\n        References\n        ----------\n        .. [1] Waloddi Weibull, Professor, Royal Technical University, Stockholm,\n               1939 \"A Statistical Theory Of The Strength Of Materials\",\n               Ingeniorsvetenskapsakademiens Handlingar"" Nr 151, 1939,\n               Generalstabens Litografiska Anstalts Forlag, Stockholm.\n        .. [2] Waloddi Weibull, 1951 \"A Statistical Distribution Function of Wide\n               Applicability\",  Journal Of Applied Mechanics ASME Paper.\n        .. [3] Wikipedia, \"Weibull distribution\",\n               http://en.wikipedia.org/wiki/Weibull_distribution\n\n        Examples\n        --------\n        Draw samples from the distribution:\n\n        >>> a = 5. # shape\n        >>> s = np.random.weibull(a, 1000)\n\n        Display the histogram of the samples, along with\n        the probability density function:\n\n        >>> import matplotlib.pyplot as plt\n        >>> x = np.arange(1,100.)/50.\n        >>> def weib(x,n,a):\n        ...     return (a / n) * (x / n)**(a - 1) * np.exp(-(x / n)**a)\n\n        >>> count, bins, ignored = plt.hist(np.random.weibull(5.,1000))\n        >>> x = np.arange(1,100.)/50.\n        >>> scale = count.max()/weib(x, 1., 5.).max()\n        >>> plt.plot(x, weib(x, 1., 5.)*scale)\n        >>> plt.show()\n\n        ";
    5470 +static PyObject *__pyx_pw_6mtrand_11RandomState_63weibull(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
    5471 +  PyObject *__pyx_v_a = 0;
    5472 +  PyObject *__pyx_v_size = 0;
    5473 +  PyObject *__pyx_r = 0;
    5474 +  __Pyx_RefNannyDeclarations
    5475 +  __Pyx_RefNannySetupContext("weibull (wrapper)", 0);
    5476 +  {
    5477 +    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__a,&__pyx_n_s__size,0};
    5478 +    PyObject* values[2] = {0,0};
    5479 +
    5480 +    /* "mtrand.pyx":2346
    5481   *         return cont1_array(self.internal_state, rk_pareto, size, oa)
    5482   *
    5483   *     def weibull(self, a, size=None):             # <<<<<<<<<<<<<<
    5484   *         """
    5485   *         weibull(a, size=None)
    5486   */
    5487 -
    5488 -static PyObject *__pyx_pf_6mtrand_11RandomState_31weibull(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
    5489 -static char __pyx_doc_6mtrand_11RandomState_31weibull[] = "\n        weibull(a, size=None)\n\n        Weibull distribution.\n\n        Draw samples from a 1-parameter Weibull distribution with the given\n        shape parameter `a`.\n\n        .. math:: X = (-ln(U))^{1/a}\n\n        Here, U is drawn from the uniform distribution over (0,1].\n\n        The more common 2-parameter Weibull, including a scale parameter\n        :math:`\\lambda` is just :math:`X = \\lambda(-ln(U))^{1/a}`.\n\n        Parameters\n        ----------\n        a : float\n            Shape of the distribution.\n        size : tuple of ints\n            Output shape.  If the given shape is, e.g., ``(m, n, k)``, then\n            ``m * n * k`` samples are drawn.\n\n        See Also\n        --------\n        scipy.stats.distributions.weibull : probability density function,\n            distribution or cumulative density function, etc.\n\n        gumbel, scipy.stats.distributions.genextreme\n\n        Notes\n        -----\n        The Weibull (or Type III asymptotic extreme value distribution for smallest\n        values, SEV Type III, or Rosin-Rammler distribution) is one of a class of\n        Generalized Extreme Value (GEV) distributions used in modeling extreme\n        value problems.  This class includes the Gumbel and Frechet distributions.\n\n        The probability density for the Weibull distribution is\n\n        .. math:: p(x) = \\frac{a}\n                         {\\lambda}(\\frac{x}{\\lambda})^{a-1}e^{-(x/\\lambda)^a},\n\n        where :math:`a` is the shape and :math:`\\lambda` the scale.\n\n        The function has its peak (the mode) at\n        :math:`\\lambda(\\frac{a-1}{a})^{1/a}`.\n\n        When ``a = 1``, the Weibull distribution reduces to the exponential\n        distribution.\n\n        References\n        ----------\n        .. [1] Waloddi Weibull, Professor, Royal Technical University, Stockholm,\n               1939 \"A Statistical Theory Of The Strength Of Materials\",\n               Ingeniorsvetenskapsakademiens Handlingar"" Nr 151, 1939,\n               Generalstabens Litografiska Anstalts Forlag, Stockholm.\n        .. [2] Waloddi Weibull, 1951 \"A Statistical Distribution Function of Wide\n               Applicability\",  Journal Of Applied Mechanics ASME Paper.\n        .. [3] Wikipedia, \"Weibull distribution\",\n               http://en.wikipedia.org/wiki/Weibull_distribution\n\n        Examples\n        --------\n        Draw samples from the distribution:\n\n        >>> a = 5. # shape\n        >>> s = np.random.weibull(a, 1000)\n\n        Display the histogram of the samples, along with\n        the probability density function:\n\n        >>> import matplotlib.pyplot as plt\n        >>> x = np.arange(1,100.)/50.\n        >>> def weib(x,n,a):\n        ...     return (a / n) * (x / n)**(a - 1) * np.exp(-(x / n)**a)\n\n        >>> count, bins, ignored = plt.hist(np.random.weibull(5.,1000))\n        >>> x = np.arange(1,100.)/50.\n        >>> scale = count.max()/weib(x, 1., 5.).max()\n        >>> plt.plot(x, weib(x, 1., 5.)*scale)\n        >>> plt.show()\n\n        ";
    5490 -static PyObject *__pyx_pf_6mtrand_11RandomState_31weibull(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
    5491 -  PyObject *__pyx_v_a = 0;
    5492 -  PyObject *__pyx_v_size = 0;
    5493 -  PyArrayObject *__pyx_v_oa = 0;
    5494 -  double __pyx_v_fa;
    5495 -  PyObject *__pyx_r = NULL;
    5496 -  __Pyx_RefNannyDeclarations
    5497 -  int __pyx_t_1;
    5498 -  PyObject *__pyx_t_2 = NULL;
    5499 -  PyObject *__pyx_t_3 = NULL;
    5500 -  PyObject *__pyx_t_4 = NULL;
    5501 -  PyObject *__pyx_t_5 = NULL;
    5502 -  int __pyx_lineno = 0;
    5503 -  const char *__pyx_filename = NULL;
    5504 -  int __pyx_clineno = 0;
    5505 -  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__a,&__pyx_n_s__size,0};
    5506 -  __Pyx_RefNannySetupContext("weibull");
    5507 -  {
    5508 -    PyObject* values[2] = {0,0};
    5509      values[1] = ((PyObject *)Py_None);
    5510      if (unlikely(__pyx_kwds)) {
    5511        Py_ssize_t kw_args;
    5512 -      switch (PyTuple_GET_SIZE(__pyx_args)) {
    5513 +      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
    5514 +      switch (pos_args) {
    5515          case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    5516          case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    5517          case  0: break;
    5518          default: goto __pyx_L5_argtuple_error;
    5519        }
    5520        kw_args = PyDict_Size(__pyx_kwds);
    5521 -      switch (PyTuple_GET_SIZE(__pyx_args)) {
    5522 +      switch (pos_args) {
    5523          case  0:
    5524 -        values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__a);
    5525 -        if (likely(values[0])) kw_args--;
    5526 +        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__a)) != 0)) kw_args--;
    5527          else goto __pyx_L5_argtuple_error;
    5528          case  1:
    5529          if (kw_args > 0) {
    5530 @@ -11054,7 +11496,7 @@
    5531          }
    5532        }
    5533        if (unlikely(kw_args > 0)) {
    5534 -        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "weibull") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2346; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    5535 +        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "weibull") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2346; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    5536        }
    5537      } else {
    5538        switch (PyTuple_GET_SIZE(__pyx_args)) {
    5539 @@ -11075,6 +11517,25 @@
    5540    __Pyx_RefNannyFinishContext();
    5541    return NULL;
    5542    __pyx_L4_argument_unpacking_done:;
    5543 +  __pyx_r = __pyx_pf_6mtrand_11RandomState_62weibull(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self), __pyx_v_a, __pyx_v_size);
    5544 +  __Pyx_RefNannyFinishContext();
    5545 +  return __pyx_r;
    5546 +}
    5547 +
    5548 +static PyObject *__pyx_pf_6mtrand_11RandomState_62weibull(struct __pyx_obj_6mtrand_RandomState *__pyx_v_self, PyObject *__pyx_v_a, PyObject *__pyx_v_size) {
    5549 +  PyArrayObject *__pyx_v_oa = 0;
    5550 +  double __pyx_v_fa;
    5551 +  PyObject *__pyx_r = NULL;
    5552 +  __Pyx_RefNannyDeclarations
    5553 +  int __pyx_t_1;
    5554 +  PyObject *__pyx_t_2 = NULL;
    5555 +  PyObject *__pyx_t_3 = NULL;
    5556 +  PyObject *__pyx_t_4 = NULL;
    5557 +  PyObject *__pyx_t_5 = NULL;
    5558 +  int __pyx_lineno = 0;
    5559 +  const char *__pyx_filename = NULL;
    5560 +  int __pyx_clineno = 0;
    5561 +  __Pyx_RefNannySetupContext("weibull", 0);
    5562  
    5563    /* "mtrand.pyx":2433
    5564   *         cdef double fa
    5565 @@ -11117,9 +11578,9 @@
    5566        __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    5567        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    5568        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2436; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    5569 -      goto __pyx_L7;
    5570 +      goto __pyx_L4;
    5571      }
    5572 -    __pyx_L7:;
    5573 +    __pyx_L4:;
    5574  
    5575      /* "mtrand.pyx":2437
    5576   *             if fa <= 0:
    5577 @@ -11129,14 +11590,14 @@
    5578   *         PyErr_Clear()
    5579   */
    5580      __Pyx_XDECREF(__pyx_r);
    5581 -    __pyx_t_2 = __pyx_f_6mtrand_cont1_array_sc(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state, rk_weibull, __pyx_v_size, __pyx_v_fa); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2437; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    5582 +    __pyx_t_2 = __pyx_f_6mtrand_cont1_array_sc(__pyx_v_self->internal_state, rk_weibull, __pyx_v_size, __pyx_v_fa); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2437; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    5583      __Pyx_GOTREF(__pyx_t_2);
    5584      __pyx_r = __pyx_t_2;
    5585      __pyx_t_2 = 0;
    5586      goto __pyx_L0;
    5587 -    goto __pyx_L6;
    5588 +    goto __pyx_L3;
    5589    }
    5590 -  __pyx_L6:;
    5591 +  __pyx_L3:;
    5592  
    5593    /* "mtrand.pyx":2439
    5594   *             return cont1_array_sc(self.internal_state, rk_weibull, size, fa)
    5595 @@ -11180,7 +11641,7 @@
    5596    __pyx_t_2 = PyFloat_FromDouble(0.0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2442; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    5597    __Pyx_GOTREF(__pyx_t_2);
    5598    __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2442; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    5599 -  __Pyx_GOTREF(((PyObject *)__pyx_t_5));
    5600 +  __Pyx_GOTREF(__pyx_t_5);
    5601    __Pyx_INCREF(((PyObject *)__pyx_v_oa));
    5602    PyTuple_SET_ITEM(__pyx_t_5, 0, ((PyObject *)__pyx_v_oa));
    5603    __Pyx_GIVEREF(((PyObject *)__pyx_v_oa));
    5604 @@ -11192,7 +11653,7 @@
    5605    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    5606    __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
    5607    __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2442; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    5608 -  __Pyx_GOTREF(((PyObject *)__pyx_t_5));
    5609 +  __Pyx_GOTREF(__pyx_t_5);
    5610    PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2);
    5611    __Pyx_GIVEREF(__pyx_t_2);
    5612    __pyx_t_2 = 0;
    5613 @@ -11216,9 +11677,9 @@
    5614      __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    5615      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    5616      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2443; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    5617 -    goto __pyx_L8;
    5618 +    goto __pyx_L5;
    5619    }
    5620 -  __pyx_L8:;
    5621 +  __pyx_L5:;
    5622  
    5623    /* "mtrand.pyx":2444
    5624   *         if np.any(np.less_equal(oa, 0.0)):
    5625 @@ -11228,7 +11689,7 @@
    5626   *     def power(self, a, size=None):
    5627   */
    5628    __Pyx_XDECREF(__pyx_r);
    5629 -  __pyx_t_2 = __pyx_f_6mtrand_cont1_array(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state, rk_weibull, __pyx_v_size, __pyx_v_oa); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2444; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    5630 +  __pyx_t_2 = __pyx_f_6mtrand_cont1_array(__pyx_v_self->internal_state, rk_weibull, __pyx_v_size, __pyx_v_oa); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2444; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    5631    __Pyx_GOTREF(__pyx_t_2);
    5632    __pyx_r = __pyx_t_2;
    5633    __pyx_t_2 = 0;
    5634 @@ -11250,49 +11711,40 @@
    5635    return __pyx_r;
    5636  }
    5637  
    5638 -/* "mtrand.pyx":2446
    5639 +/* Python wrapper */
    5640 +static PyObject *__pyx_pw_6mtrand_11RandomState_65power(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
    5641 +static char __pyx_doc_6mtrand_11RandomState_64power[] = "\n        power(a, size=None)\n\n        Draws samples in [0, 1] from a power distribution with positive\n        exponent a - 1.\n\n        Also known as the power function distribution.\n\n        Parameters\n        ----------\n        a : float\n            parameter, > 0\n        size : tuple of ints\n            Output shape.  If the given shape is, e.g., ``(m, n, k)``, then\n                    ``m * n * k`` samples are drawn.\n\n        Returns\n        -------\n        samples : {ndarray, scalar}\n            The returned samples lie in [0, 1].\n\n        Raises\n        ------\n        ValueError\n            If a<1.\n\n        Notes\n        -----\n        The probability density function is\n\n        .. math:: P(x; a) = ax^{a-1}, 0 \\le x \\le 1, a>0.\n\n        The power function distribution is just the inverse of the Pareto\n        distribution. It may also be seen as a special case of the Beta\n        distribution.\n\n        It is used, for example, in modeling the over-reporting of insurance\n        claims.\n\n        References\n        ----------\n        .. [1] Christian Kleiber, Samuel Kotz, \"Statistical size distributions\n               in economics and actuarial sciences\", Wiley, 2003.\n        .. [2] Heckert, N. A. and Filliben, James J. (2003). NIST Handbook 148:\n               Dataplot Reference Manual, Volume 2: Let Subcommands and Library\n               Functions\", National Institute of Standards and Technology Handbook\n               Series, June 2003.\n               http://www.itl.nist.gov/div898/software/dataplot/refman2/auxillar/powpdf.pdf\n\n        Examples\n        --------\n        Draw samples from the distribution:\n\n        >>> a = 5. # shape\n        >>> samples = 1000\n        >>> s = np.random.power(a, samples)\n\n        Display the histogram of the samples, along with\n        the probability density function:\n\n        >>> import matplotlib.pyplot as plt\n        >>> count, bins, ignored = plt.hist(s, bins=""30)\n        >>> x = np.linspace(0, 1, 100)\n        >>> y = a*x**(a-1.)\n        >>> normed_y = samples*np.diff(bins)[0]*y\n        >>> plt.plot(x, normed_y)\n        >>> plt.show()\n\n        Compare the power function distribution to the inverse of the Pareto.\n\n        >>> from scipy import stats\n        >>> rvs = np.random.power(5, 1000000)\n        >>> rvsp = np.random.pareto(5, 1000000)\n        >>> xx = np.linspace(0,1,100)\n        >>> powpdf = stats.powerlaw.pdf(xx,5)\n\n        >>> plt.figure()\n        >>> plt.hist(rvs, bins=50, normed=True)\n        >>> plt.plot(xx,powpdf,'r-')\n        >>> plt.title('np.random.power(5)')\n\n        >>> plt.figure()\n        >>> plt.hist(1./(1.+rvsp), bins=50, normed=True)\n        >>> plt.plot(xx,powpdf,'r-')\n        >>> plt.title('inverse of 1 + np.random.pareto(5)')\n\n        >>> plt.figure()\n        >>> plt.hist(1./(1.+rvsp), bins=50, normed=True)\n        >>> plt.plot(xx,powpdf,'r-')\n        >>> plt.title('inverse of stats.pareto(5)')\n\n        ";
    5642 +static PyObject *__pyx_pw_6mtrand_11RandomState_65power(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
    5643 +  PyObject *__pyx_v_a = 0;
    5644 +  PyObject *__pyx_v_size = 0;
    5645 +  PyObject *__pyx_r = 0;
    5646 +  __Pyx_RefNannyDeclarations
    5647 +  __Pyx_RefNannySetupContext("power (wrapper)", 0);
    5648 +  {
    5649 +    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__a,&__pyx_n_s__size,0};
    5650 +    PyObject* values[2] = {0,0};
    5651 +
    5652 +    /* "mtrand.pyx":2446
    5653   *         return cont1_array(self.internal_state, rk_weibull, size, oa)
    5654   *
    5655   *     def power(self, a, size=None):             # <<<<<<<<<<<<<<
    5656   *         """
    5657   *         power(a, size=None)
    5658   */
    5659 -
    5660 -static PyObject *__pyx_pf_6mtrand_11RandomState_32power(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
    5661 -static char __pyx_doc_6mtrand_11RandomState_32power[] = "\n        power(a, size=None)\n\n        Draws samples in [0, 1] from a power distribution with positive\n        exponent a - 1.\n\n        Also known as the power function distribution.\n\n        Parameters\n        ----------\n        a : float\n            parameter, > 0\n        size : tuple of ints\n            Output shape.  If the given shape is, e.g., ``(m, n, k)``, then\n                    ``m * n * k`` samples are drawn.\n\n        Returns\n        -------\n        samples : {ndarray, scalar}\n            The returned samples lie in [0, 1].\n\n        Raises\n        ------\n        ValueError\n            If a<1.\n\n        Notes\n        -----\n        The probability density function is\n\n        .. math:: P(x; a) = ax^{a-1}, 0 \\le x \\le 1, a>0.\n\n        The power function distribution is just the inverse of the Pareto\n        distribution. It may also be seen as a special case of the Beta\n        distribution.\n\n        It is used, for example, in modeling the over-reporting of insurance\n        claims.\n\n        References\n        ----------\n        .. [1] Christian Kleiber, Samuel Kotz, \"Statistical size distributions\n               in economics and actuarial sciences\", Wiley, 2003.\n        .. [2] Heckert, N. A. and Filliben, James J. (2003). NIST Handbook 148:\n               Dataplot Reference Manual, Volume 2: Let Subcommands and Library\n               Functions\", National Institute of Standards and Technology Handbook\n               Series, June 2003.\n               http://www.itl.nist.gov/div898/software/dataplot/refman2/auxillar/powpdf.pdf\n\n        Examples\n        --------\n        Draw samples from the distribution:\n\n        >>> a = 5. # shape\n        >>> samples = 1000\n        >>> s = np.random.power(a, samples)\n\n        Display the histogram of the samples, along with\n        the probability density function:\n\n        >>> import matplotlib.pyplot as plt\n        >>> count, bins, ignored = plt.hist(s, bins=""30)\n        >>> x = np.linspace(0, 1, 100)\n        >>> y = a*x**(a-1.)\n        >>> normed_y = samples*np.diff(bins)[0]*y\n        >>> plt.plot(x, normed_y)\n        >>> plt.show()\n\n        Compare the power function distribution to the inverse of the Pareto.\n\n        >>> from scipy import stats\n        >>> rvs = np.random.power(5, 1000000)\n        >>> rvsp = np.random.pareto(5, 1000000)\n        >>> xx = np.linspace(0,1,100)\n        >>> powpdf = stats.powerlaw.pdf(xx,5)\n\n        >>> plt.figure()\n        >>> plt.hist(rvs, bins=50, normed=True)\n        >>> plt.plot(xx,powpdf,'r-')\n        >>> plt.title('np.random.power(5)')\n\n        >>> plt.figure()\n        >>> plt.hist(1./(1.+rvsp), bins=50, normed=True)\n        >>> plt.plot(xx,powpdf,'r-')\n        >>> plt.title('inverse of 1 + np.random.pareto(5)')\n\n        >>> plt.figure()\n        >>> plt.hist(1./(1.+rvsp), bins=50, normed=True)\n        >>> plt.plot(xx,powpdf,'r-')\n        >>> plt.title('inverse of stats.pareto(5)')\n\n        ";
    5662 -static PyObject *__pyx_pf_6mtrand_11RandomState_32power(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
    5663 -  PyObject *__pyx_v_a = 0;
    5664 -  PyObject *__pyx_v_size = 0;
    5665 -  PyArrayObject *__pyx_v_oa = 0;
    5666 -  double __pyx_v_fa;
    5667 -  PyObject *__pyx_r = NULL;
    5668 -  __Pyx_RefNannyDeclarations
    5669 -  int __pyx_t_1;
    5670 -  PyObject *__pyx_t_2 = NULL;
    5671 -  PyObject *__pyx_t_3 = NULL;
    5672 -  PyObject *__pyx_t_4 = NULL;
    5673 -  PyObject *__pyx_t_5 = NULL;
    5674 -  int __pyx_lineno = 0;
    5675 -  const char *__pyx_filename = NULL;
    5676 -  int __pyx_clineno = 0;
    5677 -  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__a,&__pyx_n_s__size,0};
    5678 -  __Pyx_RefNannySetupContext("power");
    5679 -  {
    5680 -    PyObject* values[2] = {0,0};
    5681      values[1] = ((PyObject *)Py_None);
    5682      if (unlikely(__pyx_kwds)) {
    5683        Py_ssize_t kw_args;
    5684 -      switch (PyTuple_GET_SIZE(__pyx_args)) {
    5685 +      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
    5686 +      switch (pos_args) {
    5687          case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    5688          case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    5689          case  0: break;
    5690          default: goto __pyx_L5_argtuple_error;
    5691        }
    5692        kw_args = PyDict_Size(__pyx_kwds);
    5693 -      switch (PyTuple_GET_SIZE(__pyx_args)) {
    5694 +      switch (pos_args) {
    5695          case  0:
    5696 -        values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__a);
    5697 -        if (likely(values[0])) kw_args--;
    5698 +        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__a)) != 0)) kw_args--;
    5699          else goto __pyx_L5_argtuple_error;
    5700          case  1:
    5701          if (kw_args > 0) {
    5702 @@ -11301,7 +11753,7 @@
    5703          }
    5704        }
    5705        if (unlikely(kw_args > 0)) {
    5706 -        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "power") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2446; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    5707 +        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "power") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2446; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    5708        }
    5709      } else {
    5710        switch (PyTuple_GET_SIZE(__pyx_args)) {
    5711 @@ -11322,6 +11774,25 @@
    5712    __Pyx_RefNannyFinishContext();
    5713    return NULL;
    5714    __pyx_L4_argument_unpacking_done:;
    5715 +  __pyx_r = __pyx_pf_6mtrand_11RandomState_64power(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self), __pyx_v_a, __pyx_v_size);
    5716 +  __Pyx_RefNannyFinishContext();
    5717 +  return __pyx_r;
    5718 +}
    5719 +
    5720 +static PyObject *__pyx_pf_6mtrand_11RandomState_64power(struct __pyx_obj_6mtrand_RandomState *__pyx_v_self, PyObject *__pyx_v_a, PyObject *__pyx_v_size) {
    5721 +  PyArrayObject *__pyx_v_oa = 0;
    5722 +  double __pyx_v_fa;
    5723 +  PyObject *__pyx_r = NULL;
    5724 +  __Pyx_RefNannyDeclarations
    5725 +  int __pyx_t_1;
    5726 +  PyObject *__pyx_t_2 = NULL;
    5727 +  PyObject *__pyx_t_3 = NULL;
    5728 +  PyObject *__pyx_t_4 = NULL;
    5729 +  PyObject *__pyx_t_5 = NULL;
    5730 +  int __pyx_lineno = 0;
    5731 +  const char *__pyx_filename = NULL;
    5732 +  int __pyx_clineno = 0;
    5733 +  __Pyx_RefNannySetupContext("power", 0);
    5734  
    5735    /* "mtrand.pyx":2542
    5736   *         cdef double fa
    5737 @@ -11364,9 +11835,9 @@
    5738        __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    5739        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    5740        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2545; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    5741 -      goto __pyx_L7;
    5742 +      goto __pyx_L4;
    5743      }
    5744 -    __pyx_L7:;
    5745 +    __pyx_L4:;
    5746  
    5747      /* "mtrand.pyx":2546
    5748   *             if fa <= 0:
    5749 @@ -11376,14 +11847,14 @@
    5750   *         PyErr_Clear()
    5751   */
    5752      __Pyx_XDECREF(__pyx_r);
    5753 -    __pyx_t_2 = __pyx_f_6mtrand_cont1_array_sc(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state, rk_power, __pyx_v_size, __pyx_v_fa); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2546; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    5754 +    __pyx_t_2 = __pyx_f_6mtrand_cont1_array_sc(__pyx_v_self->internal_state, rk_power, __pyx_v_size, __pyx_v_fa); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2546; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    5755      __Pyx_GOTREF(__pyx_t_2);
    5756      __pyx_r = __pyx_t_2;
    5757      __pyx_t_2 = 0;
    5758      goto __pyx_L0;
    5759 -    goto __pyx_L6;
    5760 +    goto __pyx_L3;
    5761    }
    5762 -  __pyx_L6:;
    5763 +  __pyx_L3:;
    5764  
    5765    /* "mtrand.pyx":2548
    5766   *             return cont1_array_sc(self.internal_state, rk_power, size, fa)
    5767 @@ -11427,7 +11898,7 @@
    5768    __pyx_t_2 = PyFloat_FromDouble(0.0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2551; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    5769    __Pyx_GOTREF(__pyx_t_2);
    5770    __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2551; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    5771 -  __Pyx_GOTREF(((PyObject *)__pyx_t_5));
    5772 +  __Pyx_GOTREF(__pyx_t_5);
    5773    __Pyx_INCREF(((PyObject *)__pyx_v_oa));
    5774    PyTuple_SET_ITEM(__pyx_t_5, 0, ((PyObject *)__pyx_v_oa));
    5775    __Pyx_GIVEREF(((PyObject *)__pyx_v_oa));
    5776 @@ -11439,7 +11910,7 @@
    5777    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    5778    __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
    5779    __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2551; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    5780 -  __Pyx_GOTREF(((PyObject *)__pyx_t_5));
    5781 +  __Pyx_GOTREF(__pyx_t_5);
    5782    PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2);
    5783    __Pyx_GIVEREF(__pyx_t_2);
    5784    __pyx_t_2 = 0;
    5785 @@ -11463,9 +11934,9 @@
    5786      __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    5787      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    5788      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2552; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    5789 -    goto __pyx_L8;
    5790 +    goto __pyx_L5;
    5791    }
    5792 -  __pyx_L8:;
    5793 +  __pyx_L5:;
    5794  
    5795    /* "mtrand.pyx":2553
    5796   *         if np.any(np.less_equal(oa, 0.0)):
    5797 @@ -11475,7 +11946,7 @@
    5798   *     def laplace(self, loc=0.0, scale=1.0, size=None):
    5799   */
    5800    __Pyx_XDECREF(__pyx_r);
    5801 -  __pyx_t_2 = __pyx_f_6mtrand_cont1_array(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state, rk_power, __pyx_v_size, __pyx_v_oa); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2553; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    5802 +  __pyx_t_2 = __pyx_f_6mtrand_cont1_array(__pyx_v_self->internal_state, rk_power, __pyx_v_size, __pyx_v_oa); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2553; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    5803    __Pyx_GOTREF(__pyx_t_2);
    5804    __pyx_r = __pyx_t_2;
    5805    __pyx_t_2 = 0;
    5806 @@ -11497,44 +11968,34 @@
    5807    return __pyx_r;
    5808  }
    5809  
    5810 -/* "mtrand.pyx":2555
    5811 - *         return cont1_array(self.internal_state, rk_power, size, oa)
    5812 - *
    5813 - *     def laplace(self, loc=0.0, scale=1.0, size=None):             # <<<<<<<<<<<<<<
    5814 - *         """
    5815 - *         laplace(loc=0.0, scale=1.0, size=None)
    5816 - */
    5817 -
    5818 -static PyObject *__pyx_pf_6mtrand_11RandomState_33laplace(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
    5819 -static char __pyx_doc_6mtrand_11RandomState_33laplace[] = "\n        laplace(loc=0.0, scale=1.0, size=None)\n\n        Draw samples from the Laplace or double exponential distribution with\n        specified location (or mean) and scale (decay).\n\n        The Laplace distribution is similar to the Gaussian/normal distribution,\n        but is sharper at the peak and has fatter tails. It represents the\n        difference between two independent, identically distributed exponential\n        random variables.\n\n        Parameters\n        ----------\n        loc : float\n            The position, :math:`\\mu`, of the distribution peak.\n        scale : float\n            :math:`\\lambda`, the exponential decay.\n\n        Notes\n        -----\n        It has the probability density function\n\n        .. math:: f(x; \\mu, \\lambda) = \\frac{1}{2\\lambda}\n                                       \\exp\\left(-\\frac{|x - \\mu|}{\\lambda}\\right).\n\n        The first law of Laplace, from 1774, states that the frequency of an error\n        can be expressed as an exponential function of the absolute magnitude of\n        the error, which leads to the Laplace distribution. For many problems in\n        Economics and Health sciences, this distribution seems to model the data\n        better than the standard Gaussian distribution\n\n\n        References\n        ----------\n        .. [1] Abramowitz, M. and Stegun, I. A. (Eds.). Handbook of Mathematical\n               Functions with Formulas, Graphs, and Mathematical Tables, 9th\n               printing.  New York: Dover, 1972.\n\n        .. [2] The Laplace distribution and generalizations\n               By Samuel Kotz, Tomasz J. Kozubowski, Krzysztof Podgorski,\n               Birkhauser, 2001.\n\n        .. [3] Weisstein, Eric W. \"Laplace Distribution.\"\n               From MathWorld--A Wolfram Web Resource.\n               http://mathworld.wolfram.com/LaplaceDistribution.html\n\n        .. [4] Wikipedia, \"Laplace distribution\",\n               http://en.wikipedia.org/wik""i/Laplace_distribution\n\n        Examples\n        --------\n        Draw samples from the distribution\n\n        >>> loc, scale = 0., 1.\n        >>> s = np.random.laplace(loc, scale, 1000)\n\n        Display the histogram of the samples, along with\n        the probability density function:\n\n        >>> import matplotlib.pyplot as plt\n        >>> count, bins, ignored = plt.hist(s, 30, normed=True)\n        >>> x = np.arange(-8., 8., .01)\n        >>> pdf = np.exp(-abs(x-loc/scale))/(2.*scale)\n        >>> plt.plot(x, pdf)\n\n        Plot Gaussian for comparison:\n\n        >>> g = (1/(scale * np.sqrt(2 * np.pi)) * \n        ...      np.exp( - (x - loc)**2 / (2 * scale**2) ))\n        >>> plt.plot(x,g)\n\n        ";
    5820 -static PyObject *__pyx_pf_6mtrand_11RandomState_33laplace(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
    5821 +/* Python wrapper */
    5822 +static PyObject *__pyx_pw_6mtrand_11RandomState_67laplace(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
    5823 +static char __pyx_doc_6mtrand_11RandomState_66laplace[] = "\n        laplace(loc=0.0, scale=1.0, size=None)\n\n        Draw samples from the Laplace or double exponential distribution with\n        specified location (or mean) and scale (decay).\n\n        The Laplace distribution is similar to the Gaussian/normal distribution,\n        but is sharper at the peak and has fatter tails. It represents the\n        difference between two independent, identically distributed exponential\n        random variables.\n\n        Parameters\n        ----------\n        loc : float\n            The position, :math:`\\mu`, of the distribution peak.\n        scale : float\n            :math:`\\lambda`, the exponential decay.\n\n        Notes\n        -----\n        It has the probability density function\n\n        .. math:: f(x; \\mu, \\lambda) = \\frac{1}{2\\lambda}\n                                       \\exp\\left(-\\frac{|x - \\mu|}{\\lambda}\\right).\n\n        The first law of Laplace, from 1774, states that the frequency of an error\n        can be expressed as an exponential function of the absolute magnitude of\n        the error, which leads to the Laplace distribution. For many problems in\n        Economics and Health sciences, this distribution seems to model the data\n        better than the standard Gaussian distribution\n\n\n        References\n        ----------\n        .. [1] Abramowitz, M. and Stegun, I. A. (Eds.). Handbook of Mathematical\n               Functions with Formulas, Graphs, and Mathematical Tables, 9th\n               printing.  New York: Dover, 1972.\n\n        .. [2] The Laplace distribution and generalizations\n               By Samuel Kotz, Tomasz J. Kozubowski, Krzysztof Podgorski,\n               Birkhauser, 2001.\n\n        .. [3] Weisstein, Eric W. \"Laplace Distribution.\"\n               From MathWorld--A Wolfram Web Resource.\n               http://mathworld.wolfram.com/LaplaceDistribution.html\n\n        .. [4] Wikipedia, \"Laplace distribution\",\n               http://en.wikipedia.org/wik""i/Laplace_distribution\n\n        Examples\n        --------\n        Draw samples from the distribution\n\n        >>> loc, scale = 0., 1.\n        >>> s = np.random.laplace(loc, scale, 1000)\n\n        Display the histogram of the samples, along with\n        the probability density function:\n\n        >>> import matplotlib.pyplot as plt\n        >>> count, bins, ignored = plt.hist(s, 30, normed=True)\n        >>> x = np.arange(-8., 8., .01)\n        >>> pdf = np.exp(-abs(x-loc/scale))/(2.*scale)\n        >>> plt.plot(x, pdf)\n\n        Plot Gaussian for comparison:\n\n        >>> g = (1/(scale * np.sqrt(2 * np.pi)) * \n        ...      np.exp( - (x - loc)**2 / (2 * scale**2) ))\n        >>> plt.plot(x,g)\n\n        ";
    5824 +static PyObject *__pyx_pw_6mtrand_11RandomState_67laplace(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
    5825    PyObject *__pyx_v_loc = 0;
    5826    PyObject *__pyx_v_scale = 0;
    5827    PyObject *__pyx_v_size = 0;
    5828 -  PyArrayObject *__pyx_v_oloc = 0;
    5829 -  PyArrayObject *__pyx_v_oscale = 0;
    5830 -  double __pyx_v_floc;
    5831 -  double __pyx_v_fscale;
    5832 -  PyObject *__pyx_r = NULL;
    5833 +  PyObject *__pyx_r = 0;
    5834    __Pyx_RefNannyDeclarations
    5835 -  int __pyx_t_1;
    5836 -  PyObject *__pyx_t_2 = NULL;
    5837 -  PyObject *__pyx_t_3 = NULL;
    5838 -  PyObject *__pyx_t_4 = NULL;
    5839 -  PyObject *__pyx_t_5 = NULL;
    5840 -  int __pyx_lineno = 0;
    5841 -  const char *__pyx_filename = NULL;
    5842 -  int __pyx_clineno = 0;
    5843 -  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__loc,&__pyx_n_s__scale,&__pyx_n_s__size,0};
    5844 -  __Pyx_RefNannySetupContext("laplace");
    5845 +  __Pyx_RefNannySetupContext("laplace (wrapper)", 0);
    5846    {
    5847 +    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__loc,&__pyx_n_s__scale,&__pyx_n_s__size,0};
    5848      PyObject* values[3] = {0,0,0};
    5849      values[0] = __pyx_k_73;
    5850      values[1] = __pyx_k_74;
    5851 +
    5852 +    /* "mtrand.pyx":2555
    5853 + *         return cont1_array(self.internal_state, rk_power, size, oa)
    5854 + *
    5855 + *     def laplace(self, loc=0.0, scale=1.0, size=None):             # <<<<<<<<<<<<<<
    5856 + *         """
    5857 + *         laplace(loc=0.0, scale=1.0, size=None)
    5858 + */
    5859      values[2] = ((PyObject *)Py_None);
    5860      if (unlikely(__pyx_kwds)) {
    5861        Py_ssize_t kw_args;
    5862 -      switch (PyTuple_GET_SIZE(__pyx_args)) {
    5863 +      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
    5864 +      switch (pos_args) {
    5865          case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
    5866          case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    5867          case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    5868 @@ -11542,7 +12003,7 @@
    5869          default: goto __pyx_L5_argtuple_error;
    5870        }
    5871        kw_args = PyDict_Size(__pyx_kwds);
    5872 -      switch (PyTuple_GET_SIZE(__pyx_args)) {
    5873 +      switch (pos_args) {
    5874          case  0:
    5875          if (kw_args > 0) {
    5876            PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__loc);
    5877 @@ -11560,7 +12021,7 @@
    5878          }
    5879        }
    5880        if (unlikely(kw_args > 0)) {
    5881 -        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "laplace") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2555; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    5882 +        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "laplace") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2555; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    5883        }
    5884      } else {
    5885        switch (PyTuple_GET_SIZE(__pyx_args)) {
    5886 @@ -11583,6 +12044,27 @@
    5887    __Pyx_RefNannyFinishContext();
    5888    return NULL;
    5889    __pyx_L4_argument_unpacking_done:;
    5890 +  __pyx_r = __pyx_pf_6mtrand_11RandomState_66laplace(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self), __pyx_v_loc, __pyx_v_scale, __pyx_v_size);
    5891 +  __Pyx_RefNannyFinishContext();
    5892 +  return __pyx_r;
    5893 +}
    5894 +
    5895 +static PyObject *__pyx_pf_6mtrand_11RandomState_66laplace(struct __pyx_obj_6mtrand_RandomState *__pyx_v_self, PyObject *__pyx_v_loc, PyObject *__pyx_v_scale, PyObject *__pyx_v_size) {
    5896 +  PyArrayObject *__pyx_v_oloc = 0;
    5897 +  PyArrayObject *__pyx_v_oscale = 0;
    5898 +  double __pyx_v_floc;
    5899 +  double __pyx_v_fscale;
    5900 +  PyObject *__pyx_r = NULL;
    5901 +  __Pyx_RefNannyDeclarations
    5902 +  int __pyx_t_1;
    5903 +  PyObject *__pyx_t_2 = NULL;
    5904 +  PyObject *__pyx_t_3 = NULL;
    5905 +  PyObject *__pyx_t_4 = NULL;
    5906 +  PyObject *__pyx_t_5 = NULL;
    5907 +  int __pyx_lineno = 0;
    5908 +  const char *__pyx_filename = NULL;
    5909 +  int __pyx_clineno = 0;
    5910 +  __Pyx_RefNannySetupContext("laplace", 0);
    5911  
    5912    /* "mtrand.pyx":2631
    5913   *         cdef double floc, fscale
    5914 @@ -11634,9 +12116,9 @@
    5915        __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    5916        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    5917        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2635; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    5918 -      goto __pyx_L7;
    5919 +      goto __pyx_L4;
    5920      }
    5921 -    __pyx_L7:;
    5922 +    __pyx_L4:;
    5923  
    5924      /* "mtrand.pyx":2636
    5925   *             if fscale <= 0:
    5926 @@ -11646,14 +12128,14 @@
    5927   *         PyErr_Clear()
    5928   */
    5929      __Pyx_XDECREF(__pyx_r);
    5930 -    __pyx_t_2 = __pyx_f_6mtrand_cont2_array_sc(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state, rk_laplace, __pyx_v_size, __pyx_v_floc, __pyx_v_fscale); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2636; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    5931 +    __pyx_t_2 = __pyx_f_6mtrand_cont2_array_sc(__pyx_v_self->internal_state, rk_laplace, __pyx_v_size, __pyx_v_floc, __pyx_v_fscale); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2636; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    5932      __Pyx_GOTREF(__pyx_t_2);
    5933      __pyx_r = __pyx_t_2;
    5934      __pyx_t_2 = 0;
    5935      goto __pyx_L0;
    5936 -    goto __pyx_L6;
    5937 +    goto __pyx_L3;
    5938    }
    5939 -  __pyx_L6:;
    5940 +  __pyx_L3:;
    5941  
    5942    /* "mtrand.pyx":2638
    5943   *             return cont2_array_sc(self.internal_state, rk_laplace, size, floc, fscale)
    5944 @@ -11710,7 +12192,7 @@
    5945    __pyx_t_2 = PyFloat_FromDouble(0.0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2641; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    5946    __Pyx_GOTREF(__pyx_t_2);
    5947    __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2641; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    5948 -  __Pyx_GOTREF(((PyObject *)__pyx_t_5));
    5949 +  __Pyx_GOTREF(__pyx_t_5);
    5950    __Pyx_INCREF(((PyObject *)__pyx_v_oscale));
    5951    PyTuple_SET_ITEM(__pyx_t_5, 0, ((PyObject *)__pyx_v_oscale));
    5952    __Pyx_GIVEREF(((PyObject *)__pyx_v_oscale));
    5953 @@ -11722,7 +12204,7 @@
    5954    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    5955    __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
    5956    __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2641; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    5957 -  __Pyx_GOTREF(((PyObject *)__pyx_t_5));
    5958 +  __Pyx_GOTREF(__pyx_t_5);
    5959    PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2);
    5960    __Pyx_GIVEREF(__pyx_t_2);
    5961    __pyx_t_2 = 0;
    5962 @@ -11746,9 +12228,9 @@
    5963      __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    5964      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    5965      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2642; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    5966 -    goto __pyx_L8;
    5967 +    goto __pyx_L5;
    5968    }
    5969 -  __pyx_L8:;
    5970 +  __pyx_L5:;
    5971  
    5972    /* "mtrand.pyx":2643
    5973   *         if np.any(np.less_equal(oscale, 0.0)):
    5974 @@ -11758,7 +12240,7 @@
    5975   *     def gumbel(self, loc=0.0, scale=1.0, size=None):
    5976   */
    5977    __Pyx_XDECREF(__pyx_r);
    5978 -  __pyx_t_2 = __pyx_f_6mtrand_cont2_array(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state, rk_laplace, __pyx_v_size, __pyx_v_oloc, __pyx_v_oscale); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2643; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    5979 +  __pyx_t_2 = __pyx_f_6mtrand_cont2_array(__pyx_v_self->internal_state, rk_laplace, __pyx_v_size, __pyx_v_oloc, __pyx_v_oscale); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2643; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    5980    __Pyx_GOTREF(__pyx_t_2);
    5981    __pyx_r = __pyx_t_2;
    5982    __pyx_t_2 = 0;
    5983 @@ -11781,44 +12263,34 @@
    5984    return __pyx_r;
    5985  }
    5986  
    5987 -/* "mtrand.pyx":2645
    5988 - *         return cont2_array(self.internal_state, rk_laplace, size, oloc, oscale)
    5989 - *
    5990 - *     def gumbel(self, loc=0.0, scale=1.0, size=None):             # <<<<<<<<<<<<<<
    5991 - *         """
    5992 - *         gumbel(loc=0.0, scale=1.0, size=None)
    5993 - */
    5994 -
    5995 -static PyObject *__pyx_pf_6mtrand_11RandomState_34gumbel(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
    5996 -static char __pyx_doc_6mtrand_11RandomState_34gumbel[] = "\n        gumbel(loc=0.0, scale=1.0, size=None)\n\n        Gumbel distribution.\n\n        Draw samples from a Gumbel distribution with specified location and scale.\n        For more information on the Gumbel distribution, see Notes and References\n        below.\n\n        Parameters\n        ----------\n        loc : float\n            The location of the mode of the distribution.\n        scale : float\n            The scale parameter of the distribution.\n        size : tuple of ints\n            Output shape.  If the given shape is, e.g., ``(m, n, k)``, then\n            ``m * n * k`` samples are drawn.\n\n        Returns\n        -------\n        out : ndarray\n            The samples\n\n        See Also\n        --------\n        scipy.stats.gumbel_l\n        scipy.stats.gumbel_r\n        scipy.stats.genextreme\n            probability density function, distribution, or cumulative density\n            function, etc. for each of the above\n        weibull\n\n        Notes\n        -----\n        The Gumbel (or Smallest Extreme Value (SEV) or the Smallest Extreme Value\n        Type I) distribution is one of a class of Generalized Extreme Value (GEV)\n        distributions used in modeling extreme value problems.  The Gumbel is a\n        special case of the Extreme Value Type I distribution for maximums from\n        distributions with \"exponential-like\" tails.\n\n        The probability density for the Gumbel distribution is\n\n        .. math:: p(x) = \\frac{e^{-(x - \\mu)/ \\beta}}{\\beta} e^{ -e^{-(x - \\mu)/\n                  \\beta}},\n\n        where :math:`\\mu` is the mode, a location parameter, and :math:`\\beta` is\n        the scale parameter.\n\n        The Gumbel (named for German mathematician Emil Julius Gumbel) was used\n        very early in the hydrology literature, for modeling the occurrence of\n        flood events. It is also used for modeling maximum wind speed and rainfall\n        rates.  It is a \"fat-tailed\" distribution - the ""probability of an event in\n        the tail of the distribution is larger than if one used a Gaussian, hence\n        the surprisingly frequent occurrence of 100-year floods. Floods were\n        initially modeled as a Gaussian process, which underestimated the frequency\n        of extreme events.\n\n\n        It is one of a class of extreme value distributions, the Generalized\n        Extreme Value (GEV) distributions, which also includes the Weibull and\n        Frechet.\n\n        The function has a mean of :math:`\\mu + 0.57721\\beta` and a variance of\n        :math:`\\frac{\\pi^2}{6}\\beta^2`.\n\n        References\n        ----------\n        Gumbel, E. J., *Statistics of Extremes*, New York: Columbia University\n        Press, 1958.\n\n        Reiss, R.-D. and Thomas, M., *Statistical Analysis of Extreme Values from\n        Insurance, Finance, Hydrology and Other Fields*, Basel: Birkhauser Verlag,\n        2001.\n\n        Examples\n        --------\n        Draw samples from the distribution:\n\n        >>> mu, beta = 0, 0.1 # location and scale\n        >>> s = np.random.gumbel(mu, beta, 1000)\n\n        Display the histogram of the samples, along with\n        the probability density function:\n\n        >>> import matplotlib.pyplot as plt\n        >>> count, bins, ignored = plt.hist(s, 30, normed=True)\n        >>> plt.plot(bins, (1/beta)*np.exp(-(bins - mu)/beta)\n        ...          * np.exp( -np.exp( -(bins - mu) /beta) ),\n        ...          linewidth=2, color='r')\n        >>> plt.show()\n\n        Show how an extreme value distribution can arise from a Gaussian process\n        and compare to a Gaussian:\n\n        >>> means = []\n        >>> maxima = []\n        >>> for i in range(0,1000) :\n        ...    a = np.random.normal(mu, beta, 1000)\n        ...    means.append(a.mean())\n        ...    maxima.append(a.max())\n        >>> count, bins, ignored = plt.hist(maxima, 30, normed=True)\n        >>> beta = np.std(maxima)*np.pi/np.sqrt(6)""\n        >>> mu = np.mean(maxima) - 0.57721*beta\n        >>> plt.plot(bins, (1/beta)*np.exp(-(bins - mu)/beta)\n        ...          * np.exp(-np.exp(-(bins - mu)/beta)),\n        ...          linewidth=2, color='r')\n        >>> plt.plot(bins, 1/(beta * np.sqrt(2 * np.pi))\n        ...          * np.exp(-(bins - mu)**2 / (2 * beta**2)),\n        ...          linewidth=2, color='g')\n        >>> plt.show()\n\n        ";
    5997 -static PyObject *__pyx_pf_6mtrand_11RandomState_34gumbel(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
    5998 +/* Python wrapper */
    5999 +static PyObject *__pyx_pw_6mtrand_11RandomState_69gumbel(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
    6000 +static char __pyx_doc_6mtrand_11RandomState_68gumbel[] = "\n        gumbel(loc=0.0, scale=1.0, size=None)\n\n        Gumbel distribution.\n\n        Draw samples from a Gumbel distribution with specified location and scale.\n        For more information on the Gumbel distribution, see Notes and References\n        below.\n\n        Parameters\n        ----------\n        loc : float\n            The location of the mode of the distribution.\n        scale : float\n            The scale parameter of the distribution.\n        size : tuple of ints\n            Output shape.  If the given shape is, e.g., ``(m, n, k)``, then\n            ``m * n * k`` samples are drawn.\n\n        Returns\n        -------\n        out : ndarray\n            The samples\n\n        See Also\n        --------\n        scipy.stats.gumbel_l\n        scipy.stats.gumbel_r\n        scipy.stats.genextreme\n            probability density function, distribution, or cumulative density\n            function, etc. for each of the above\n        weibull\n\n        Notes\n        -----\n        The Gumbel (or Smallest Extreme Value (SEV) or the Smallest Extreme Value\n        Type I) distribution is one of a class of Generalized Extreme Value (GEV)\n        distributions used in modeling extreme value problems.  The Gumbel is a\n        special case of the Extreme Value Type I distribution for maximums from\n        distributions with \"exponential-like\" tails.\n\n        The probability density for the Gumbel distribution is\n\n        .. math:: p(x) = \\frac{e^{-(x - \\mu)/ \\beta}}{\\beta} e^{ -e^{-(x - \\mu)/\n                  \\beta}},\n\n        where :math:`\\mu` is the mode, a location parameter, and :math:`\\beta` is\n        the scale parameter.\n\n        The Gumbel (named for German mathematician Emil Julius Gumbel) was used\n        very early in the hydrology literature, for modeling the occurrence of\n        flood events. It is also used for modeling maximum wind speed and rainfall\n        rates.  It is a \"fat-tailed\" distribution - the ""probability of an event in\n        the tail of the distribution is larger than if one used a Gaussian, hence\n        the surprisingly frequent occurrence of 100-year floods. Floods were\n        initially modeled as a Gaussian process, which underestimated the frequency\n        of extreme events.\n\n\n        It is one of a class of extreme value distributions, the Generalized\n        Extreme Value (GEV) distributions, which also includes the Weibull and\n        Frechet.\n\n        The function has a mean of :math:`\\mu + 0.57721\\beta` and a variance of\n        :math:`\\frac{\\pi^2}{6}\\beta^2`.\n\n        References\n        ----------\n        Gumbel, E. J., *Statistics of Extremes*, New York: Columbia University\n        Press, 1958.\n\n        Reiss, R.-D. and Thomas, M., *Statistical Analysis of Extreme Values from\n        Insurance, Finance, Hydrology and Other Fields*, Basel: Birkhauser Verlag,\n        2001.\n\n        Examples\n        --------\n        Draw samples from the distribution:\n\n        >>> mu, beta = 0, 0.1 # location and scale\n        >>> s = np.random.gumbel(mu, beta, 1000)\n\n        Display the histogram of the samples, along with\n        the probability density function:\n\n        >>> import matplotlib.pyplot as plt\n        >>> count, bins, ignored = plt.hist(s, 30, normed=True)\n        >>> plt.plot(bins, (1/beta)*np.exp(-(bins - mu)/beta)\n        ...          * np.exp( -np.exp( -(bins - mu) /beta) ),\n        ...          linewidth=2, color='r')\n        >>> plt.show()\n\n        Show how an extreme value distribution can arise from a Gaussian process\n        and compare to a Gaussian:\n\n        >>> means = []\n        >>> maxima = []\n        >>> for i in range(0,1000) :\n        ...    a = np.random.normal(mu, beta, 1000)\n        ...    means.append(a.mean())\n        ...    maxima.append(a.max())\n        >>> count, bins, ignored = plt.hist(maxima, 30, normed=True)\n        >>> beta = np.std(maxima)*np.pi/np.sqrt(6)""\n        >>> mu = np.mean(maxima) - 0.57721*beta\n        >>> plt.plot(bins, (1/beta)*np.exp(-(bins - mu)/beta)\n        ...          * np.exp(-np.exp(-(bins - mu)/beta)),\n        ...          linewidth=2, color='r')\n        >>> plt.plot(bins, 1/(beta * np.sqrt(2 * np.pi))\n        ...          * np.exp(-(bins - mu)**2 / (2 * beta**2)),\n        ...          linewidth=2, color='g')\n        >>> plt.show()\n\n        ";
    6001 +static PyObject *__pyx_pw_6mtrand_11RandomState_69gumbel(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
    6002    PyObject *__pyx_v_loc = 0;
    6003    PyObject *__pyx_v_scale = 0;
    6004    PyObject *__pyx_v_size = 0;
    6005 -  PyArrayObject *__pyx_v_oloc = 0;
    6006 -  PyArrayObject *__pyx_v_oscale = 0;
    6007 -  double __pyx_v_floc;
    6008 -  double __pyx_v_fscale;
    6009 -  PyObject *__pyx_r = NULL;
    6010 +  PyObject *__pyx_r = 0;
    6011    __Pyx_RefNannyDeclarations
    6012 -  int __pyx_t_1;
    6013 -  PyObject *__pyx_t_2 = NULL;
    6014 -  PyObject *__pyx_t_3 = NULL;
    6015 -  PyObject *__pyx_t_4 = NULL;
    6016 -  PyObject *__pyx_t_5 = NULL;
    6017 -  int __pyx_lineno = 0;
    6018 -  const char *__pyx_filename = NULL;
    6019 -  int __pyx_clineno = 0;
    6020 -  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__loc,&__pyx_n_s__scale,&__pyx_n_s__size,0};
    6021 -  __Pyx_RefNannySetupContext("gumbel");
    6022 +  __Pyx_RefNannySetupContext("gumbel (wrapper)", 0);
    6023    {
    6024 +    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__loc,&__pyx_n_s__scale,&__pyx_n_s__size,0};
    6025      PyObject* values[3] = {0,0,0};
    6026      values[0] = __pyx_k_77;
    6027      values[1] = __pyx_k_78;
    6028 +
    6029 +    /* "mtrand.pyx":2645
    6030 + *         return cont2_array(self.internal_state, rk_laplace, size, oloc, oscale)
    6031 + *
    6032 + *     def gumbel(self, loc=0.0, scale=1.0, size=None):             # <<<<<<<<<<<<<<
    6033 + *         """
    6034 + *         gumbel(loc=0.0, scale=1.0, size=None)
    6035 + */
    6036      values[2] = ((PyObject *)Py_None);
    6037      if (unlikely(__pyx_kwds)) {
    6038        Py_ssize_t kw_args;
    6039 -      switch (PyTuple_GET_SIZE(__pyx_args)) {
    6040 +      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
    6041 +      switch (pos_args) {
    6042          case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
    6043          case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    6044          case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    6045 @@ -11826,7 +12298,7 @@
    6046          default: goto __pyx_L5_argtuple_error;
    6047        }
    6048        kw_args = PyDict_Size(__pyx_kwds);
    6049 -      switch (PyTuple_GET_SIZE(__pyx_args)) {
    6050 +      switch (pos_args) {
    6051          case  0:
    6052          if (kw_args > 0) {
    6053            PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__loc);
    6054 @@ -11844,7 +12316,7 @@
    6055          }
    6056        }
    6057        if (unlikely(kw_args > 0)) {
    6058 -        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "gumbel") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2645; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    6059 +        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "gumbel") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2645; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    6060        }
    6061      } else {
    6062        switch (PyTuple_GET_SIZE(__pyx_args)) {
    6063 @@ -11867,6 +12339,27 @@
    6064    __Pyx_RefNannyFinishContext();
    6065    return NULL;
    6066    __pyx_L4_argument_unpacking_done:;
    6067 +  __pyx_r = __pyx_pf_6mtrand_11RandomState_68gumbel(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self), __pyx_v_loc, __pyx_v_scale, __pyx_v_size);
    6068 +  __Pyx_RefNannyFinishContext();
    6069 +  return __pyx_r;
    6070 +}
    6071 +
    6072 +static PyObject *__pyx_pf_6mtrand_11RandomState_68gumbel(struct __pyx_obj_6mtrand_RandomState *__pyx_v_self, PyObject *__pyx_v_loc, PyObject *__pyx_v_scale, PyObject *__pyx_v_size) {
    6073 +  PyArrayObject *__pyx_v_oloc = 0;
    6074 +  PyArrayObject *__pyx_v_oscale = 0;
    6075 +  double __pyx_v_floc;
    6076 +  double __pyx_v_fscale;
    6077 +  PyObject *__pyx_r = NULL;
    6078 +  __Pyx_RefNannyDeclarations
    6079 +  int __pyx_t_1;
    6080 +  PyObject *__pyx_t_2 = NULL;
    6081 +  PyObject *__pyx_t_3 = NULL;
    6082 +  PyObject *__pyx_t_4 = NULL;
    6083 +  PyObject *__pyx_t_5 = NULL;
    6084 +  int __pyx_lineno = 0;
    6085 +  const char *__pyx_filename = NULL;
    6086 +  int __pyx_clineno = 0;
    6087 +  __Pyx_RefNannySetupContext("gumbel", 0);
    6088  
    6089    /* "mtrand.pyx":2762
    6090   *         cdef double floc, fscale
    6091 @@ -11918,9 +12411,9 @@
    6092        __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    6093        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    6094        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2766; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    6095 -      goto __pyx_L7;
    6096 +      goto __pyx_L4;
    6097      }
    6098 -    __pyx_L7:;
    6099 +    __pyx_L4:;
    6100  
    6101      /* "mtrand.pyx":2767
    6102   *             if fscale <= 0:
    6103 @@ -11930,14 +12423,14 @@
    6104   *         PyErr_Clear()
    6105   */
    6106      __Pyx_XDECREF(__pyx_r);
    6107 -    __pyx_t_2 = __pyx_f_6mtrand_cont2_array_sc(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state, rk_gumbel, __pyx_v_size, __pyx_v_floc, __pyx_v_fscale); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2767; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    6108 +    __pyx_t_2 = __pyx_f_6mtrand_cont2_array_sc(__pyx_v_self->internal_state, rk_gumbel, __pyx_v_size, __pyx_v_floc, __pyx_v_fscale); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2767; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    6109      __Pyx_GOTREF(__pyx_t_2);
    6110      __pyx_r = __pyx_t_2;
    6111      __pyx_t_2 = 0;
    6112      goto __pyx_L0;
    6113 -    goto __pyx_L6;
    6114 +    goto __pyx_L3;
    6115    }
    6116 -  __pyx_L6:;
    6117 +  __pyx_L3:;
    6118  
    6119    /* "mtrand.pyx":2769
    6120   *             return cont2_array_sc(self.internal_state, rk_gumbel, size, floc, fscale)
    6121 @@ -11994,7 +12487,7 @@
    6122    __pyx_t_2 = PyFloat_FromDouble(0.0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2772; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    6123    __Pyx_GOTREF(__pyx_t_2);
    6124    __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2772; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    6125 -  __Pyx_GOTREF(((PyObject *)__pyx_t_5));
    6126 +  __Pyx_GOTREF(__pyx_t_5);
    6127    __Pyx_INCREF(((PyObject *)__pyx_v_oscale));
    6128    PyTuple_SET_ITEM(__pyx_t_5, 0, ((PyObject *)__pyx_v_oscale));
    6129    __Pyx_GIVEREF(((PyObject *)__pyx_v_oscale));
    6130 @@ -12006,7 +12499,7 @@
    6131    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    6132    __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
    6133    __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2772; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    6134 -  __Pyx_GOTREF(((PyObject *)__pyx_t_5));
    6135 +  __Pyx_GOTREF(__pyx_t_5);
    6136    PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2);
    6137    __Pyx_GIVEREF(__pyx_t_2);
    6138    __pyx_t_2 = 0;
    6139 @@ -12030,9 +12523,9 @@
    6140      __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    6141      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    6142      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2773; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    6143 -    goto __pyx_L8;
    6144 +    goto __pyx_L5;
    6145    }
    6146 -  __pyx_L8:;
    6147 +  __pyx_L5:;
    6148  
    6149    /* "mtrand.pyx":2774
    6150   *         if np.any(np.less_equal(oscale, 0.0)):
    6151 @@ -12042,7 +12535,7 @@
    6152   *     def logistic(self, loc=0.0, scale=1.0, size=None):
    6153   */
    6154    __Pyx_XDECREF(__pyx_r);
    6155 -  __pyx_t_2 = __pyx_f_6mtrand_cont2_array(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state, rk_gumbel, __pyx_v_size, __pyx_v_oloc, __pyx_v_oscale); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2774; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    6156 +  __pyx_t_2 = __pyx_f_6mtrand_cont2_array(__pyx_v_self->internal_state, rk_gumbel, __pyx_v_size, __pyx_v_oloc, __pyx_v_oscale); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2774; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    6157    __Pyx_GOTREF(__pyx_t_2);
    6158    __pyx_r = __pyx_t_2;
    6159    __pyx_t_2 = 0;
    6160 @@ -12065,44 +12558,34 @@
    6161    return __pyx_r;
    6162  }
    6163  
    6164 -/* "mtrand.pyx":2776
    6165 - *         return cont2_array(self.internal_state, rk_gumbel, size, oloc, oscale)
    6166 - *
    6167 - *     def logistic(self, loc=0.0, scale=1.0, size=None):             # <<<<<<<<<<<<<<
    6168 - *         """
    6169 - *         logistic(loc=0.0, scale=1.0, size=None)
    6170 - */
    6171 -
    6172 -static PyObject *__pyx_pf_6mtrand_11RandomState_35logistic(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
    6173 -static char __pyx_doc_6mtrand_11RandomState_35logistic[] = "\n        logistic(loc=0.0, scale=1.0, size=None)\n\n        Draw samples from a Logistic distribution.\n\n        Samples are drawn from a Logistic distribution with specified\n        parameters, loc (location or mean, also median), and scale (>0).\n\n        Parameters\n        ----------\n        loc : float\n\n        scale : float > 0.\n\n        size : {tuple, int}\n            Output shape.  If the given shape is, e.g., ``(m, n, k)``, then\n            ``m * n * k`` samples are drawn.\n\n        Returns\n        -------\n        samples : {ndarray, scalar}\n                  where the values are all integers in  [0, n].\n\n        See Also\n        --------\n        scipy.stats.distributions.logistic : probability density function,\n            distribution or cumulative density function, etc.\n\n        Notes\n        -----\n        The probability density for the Logistic distribution is\n\n        .. math:: P(x) = P(x) = \\frac{e^{-(x-\\mu)/s}}{s(1+e^{-(x-\\mu)/s})^2},\n\n        where :math:`\\mu` = location and :math:`s` = scale.\n\n        The Logistic distribution is used in Extreme Value problems where it\n        can act as a mixture of Gumbel distributions, in Epidemiology, and by\n        the World Chess Federation (FIDE) where it is used in the Elo ranking\n        system, assuming the performance of each player is a logistically\n        distributed random variable.\n\n        References\n        ----------\n        .. [1] Reiss, R.-D. and Thomas M. (2001), Statistical Analysis of Extreme\n               Values, from Insurance, Finance, Hydrology and Other Fields,\n               Birkhauser Verlag, Basel, pp 132-133.\n        .. [2] Weisstein, Eric W. \"Logistic Distribution.\" From\n               MathWorld--A Wolfram Web Resource.\n               http://mathworld.wolfram.com/LogisticDistribution.html\n        .. [3] Wikipedia, \"Logistic-distribution\",\n               http://en.wikipedia.org/wiki/Logistic-distribution\n\n        Examples\n   ""     --------\n        Draw samples from the distribution:\n\n        >>> loc, scale = 10, 1\n        >>> s = np.random.logistic(loc, scale, 10000)\n        >>> count, bins, ignored = plt.hist(s, bins=50)\n\n        #   plot against distribution\n\n        >>> def logist(x, loc, scale):\n        ...     return exp((loc-x)/scale)/(scale*(1+exp((loc-x)/scale))**2)\n        >>> plt.plot(bins, logist(bins, loc, scale)*count.max()/\\\n        ... logist(bins, loc, scale).max())\n        >>> plt.show()\n\n        ";
    6174 -static PyObject *__pyx_pf_6mtrand_11RandomState_35logistic(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
    6175 +/* Python wrapper */
    6176 +static PyObject *__pyx_pw_6mtrand_11RandomState_71logistic(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
    6177 +static char __pyx_doc_6mtrand_11RandomState_70logistic[] = "\n        logistic(loc=0.0, scale=1.0, size=None)\n\n        Draw samples from a Logistic distribution.\n\n        Samples are drawn from a Logistic distribution with specified\n        parameters, loc (location or mean, also median), and scale (>0).\n\n        Parameters\n        ----------\n        loc : float\n\n        scale : float > 0.\n\n        size : {tuple, int}\n            Output shape.  If the given shape is, e.g., ``(m, n, k)``, then\n            ``m * n * k`` samples are drawn.\n\n        Returns\n        -------\n        samples : {ndarray, scalar}\n                  where the values are all integers in  [0, n].\n\n        See Also\n        --------\n        scipy.stats.distributions.logistic : probability density function,\n            distribution or cumulative density function, etc.\n\n        Notes\n        -----\n        The probability density for the Logistic distribution is\n\n        .. math:: P(x) = P(x) = \\frac{e^{-(x-\\mu)/s}}{s(1+e^{-(x-\\mu)/s})^2},\n\n        where :math:`\\mu` = location and :math:`s` = scale.\n\n        The Logistic distribution is used in Extreme Value problems where it\n        can act as a mixture of Gumbel distributions, in Epidemiology, and by\n        the World Chess Federation (FIDE) where it is used in the Elo ranking\n        system, assuming the performance of each player is a logistically\n        distributed random variable.\n\n        References\n        ----------\n        .. [1] Reiss, R.-D. and Thomas M. (2001), Statistical Analysis of Extreme\n               Values, from Insurance, Finance, Hydrology and Other Fields,\n               Birkhauser Verlag, Basel, pp 132-133.\n        .. [2] Weisstein, Eric W. \"Logistic Distribution.\" From\n               MathWorld--A Wolfram Web Resource.\n               http://mathworld.wolfram.com/LogisticDistribution.html\n        .. [3] Wikipedia, \"Logistic-distribution\",\n               http://en.wikipedia.org/wiki/Logistic-distribution\n\n        Examples\n   ""     --------\n        Draw samples from the distribution:\n\n        >>> loc, scale = 10, 1\n        >>> s = np.random.logistic(loc, scale, 10000)\n        >>> count, bins, ignored = plt.hist(s, bins=50)\n\n        #   plot against distribution\n\n        >>> def logist(x, loc, scale):\n        ...     return exp((loc-x)/scale)/(scale*(1+exp((loc-x)/scale))**2)\n        >>> plt.plot(bins, logist(bins, loc, scale)*count.max()/\\\n        ... logist(bins, loc, scale).max())\n        >>> plt.show()\n\n        ";
    6178 +static PyObject *__pyx_pw_6mtrand_11RandomState_71logistic(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
    6179    PyObject *__pyx_v_loc = 0;
    6180    PyObject *__pyx_v_scale = 0;
    6181    PyObject *__pyx_v_size = 0;
    6182 -  PyArrayObject *__pyx_v_oloc = 0;
    6183 -  PyArrayObject *__pyx_v_oscale = 0;
    6184 -  double __pyx_v_floc;
    6185 -  double __pyx_v_fscale;
    6186 -  PyObject *__pyx_r = NULL;
    6187 +  PyObject *__pyx_r = 0;
    6188    __Pyx_RefNannyDeclarations
    6189 -  int __pyx_t_1;
    6190 -  PyObject *__pyx_t_2 = NULL;
    6191 -  PyObject *__pyx_t_3 = NULL;
    6192 -  PyObject *__pyx_t_4 = NULL;
    6193 -  PyObject *__pyx_t_5 = NULL;
    6194 -  int __pyx_lineno = 0;
    6195 -  const char *__pyx_filename = NULL;
    6196 -  int __pyx_clineno = 0;
    6197 -  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__loc,&__pyx_n_s__scale,&__pyx_n_s__size,0};
    6198 -  __Pyx_RefNannySetupContext("logistic");
    6199 +  __Pyx_RefNannySetupContext("logistic (wrapper)", 0);
    6200    {
    6201 +    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__loc,&__pyx_n_s__scale,&__pyx_n_s__size,0};
    6202      PyObject* values[3] = {0,0,0};
    6203      values[0] = __pyx_k_81;
    6204      values[1] = __pyx_k_82;
    6205 +
    6206 +    /* "mtrand.pyx":2776
    6207 + *         return cont2_array(self.internal_state, rk_gumbel, size, oloc, oscale)
    6208 + *
    6209 + *     def logistic(self, loc=0.0, scale=1.0, size=None):             # <<<<<<<<<<<<<<
    6210 + *         """
    6211 + *         logistic(loc=0.0, scale=1.0, size=None)
    6212 + */
    6213      values[2] = ((PyObject *)Py_None);
    6214      if (unlikely(__pyx_kwds)) {
    6215        Py_ssize_t kw_args;
    6216 -      switch (PyTuple_GET_SIZE(__pyx_args)) {
    6217 +      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
    6218 +      switch (pos_args) {
    6219          case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
    6220          case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    6221          case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    6222 @@ -12110,7 +12593,7 @@
    6223          default: goto __pyx_L5_argtuple_error;
    6224        }
    6225        kw_args = PyDict_Size(__pyx_kwds);
    6226 -      switch (PyTuple_GET_SIZE(__pyx_args)) {
    6227 +      switch (pos_args) {
    6228          case  0:
    6229          if (kw_args > 0) {
    6230            PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__loc);
    6231 @@ -12128,7 +12611,7 @@
    6232          }
    6233        }
    6234        if (unlikely(kw_args > 0)) {
    6235 -        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "logistic") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2776; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    6236 +        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "logistic") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2776; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    6237        }
    6238      } else {
    6239        switch (PyTuple_GET_SIZE(__pyx_args)) {
    6240 @@ -12151,6 +12634,27 @@
    6241    __Pyx_RefNannyFinishContext();
    6242    return NULL;
    6243    __pyx_L4_argument_unpacking_done:;
    6244 +  __pyx_r = __pyx_pf_6mtrand_11RandomState_70logistic(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self), __pyx_v_loc, __pyx_v_scale, __pyx_v_size);
    6245 +  __Pyx_RefNannyFinishContext();
    6246 +  return __pyx_r;
    6247 +}
    6248 +
    6249 +static PyObject *__pyx_pf_6mtrand_11RandomState_70logistic(struct __pyx_obj_6mtrand_RandomState *__pyx_v_self, PyObject *__pyx_v_loc, PyObject *__pyx_v_scale, PyObject *__pyx_v_size) {
    6250 +  PyArrayObject *__pyx_v_oloc = 0;
    6251 +  PyArrayObject *__pyx_v_oscale = 0;
    6252 +  double __pyx_v_floc;
    6253 +  double __pyx_v_fscale;
    6254 +  PyObject *__pyx_r = NULL;
    6255 +  __Pyx_RefNannyDeclarations
    6256 +  int __pyx_t_1;
    6257 +  PyObject *__pyx_t_2 = NULL;
    6258 +  PyObject *__pyx_t_3 = NULL;
    6259 +  PyObject *__pyx_t_4 = NULL;
    6260 +  PyObject *__pyx_t_5 = NULL;
    6261 +  int __pyx_lineno = 0;
    6262 +  const char *__pyx_filename = NULL;
    6263 +  int __pyx_clineno = 0;
    6264 +  __Pyx_RefNannySetupContext("logistic", 0);
    6265  
    6266    /* "mtrand.pyx":2850
    6267   *         cdef double floc, fscale
    6268 @@ -12202,9 +12706,9 @@
    6269        __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    6270        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    6271        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2854; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    6272 -      goto __pyx_L7;
    6273 +      goto __pyx_L4;
    6274      }
    6275 -    __pyx_L7:;
    6276 +    __pyx_L4:;
    6277  
    6278      /* "mtrand.pyx":2855
    6279   *             if fscale <= 0:
    6280 @@ -12214,14 +12718,14 @@
    6281   *         PyErr_Clear()
    6282   */
    6283      __Pyx_XDECREF(__pyx_r);
    6284 -    __pyx_t_2 = __pyx_f_6mtrand_cont2_array_sc(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state, rk_logistic, __pyx_v_size, __pyx_v_floc, __pyx_v_fscale); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2855; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    6285 +    __pyx_t_2 = __pyx_f_6mtrand_cont2_array_sc(__pyx_v_self->internal_state, rk_logistic, __pyx_v_size, __pyx_v_floc, __pyx_v_fscale); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2855; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    6286      __Pyx_GOTREF(__pyx_t_2);
    6287      __pyx_r = __pyx_t_2;
    6288      __pyx_t_2 = 0;
    6289      goto __pyx_L0;
    6290 -    goto __pyx_L6;
    6291 +    goto __pyx_L3;
    6292    }
    6293 -  __pyx_L6:;
    6294 +  __pyx_L3:;
    6295  
    6296    /* "mtrand.pyx":2857
    6297   *             return cont2_array_sc(self.internal_state, rk_logistic, size, floc, fscale)
    6298 @@ -12278,7 +12782,7 @@
    6299    __pyx_t_2 = PyFloat_FromDouble(0.0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2860; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    6300    __Pyx_GOTREF(__pyx_t_2);
    6301    __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2860; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    6302 -  __Pyx_GOTREF(((PyObject *)__pyx_t_5));
    6303 +  __Pyx_GOTREF(__pyx_t_5);
    6304    __Pyx_INCREF(((PyObject *)__pyx_v_oscale));
    6305    PyTuple_SET_ITEM(__pyx_t_5, 0, ((PyObject *)__pyx_v_oscale));
    6306    __Pyx_GIVEREF(((PyObject *)__pyx_v_oscale));
    6307 @@ -12290,7 +12794,7 @@
    6308    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    6309    __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
    6310    __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2860; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    6311 -  __Pyx_GOTREF(((PyObject *)__pyx_t_5));
    6312 +  __Pyx_GOTREF(__pyx_t_5);
    6313    PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2);
    6314    __Pyx_GIVEREF(__pyx_t_2);
    6315    __pyx_t_2 = 0;
    6316 @@ -12314,9 +12818,9 @@
    6317      __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    6318      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    6319      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2861; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    6320 -    goto __pyx_L8;
    6321 +    goto __pyx_L5;
    6322    }
    6323 -  __pyx_L8:;
    6324 +  __pyx_L5:;
    6325  
    6326    /* "mtrand.pyx":2862
    6327   *         if np.any(np.less_equal(oscale, 0.0)):
    6328 @@ -12326,7 +12830,7 @@
    6329   *     def lognormal(self, mean=0.0, sigma=1.0, size=None):
    6330   */
    6331    __Pyx_XDECREF(__pyx_r);
    6332 -  __pyx_t_2 = __pyx_f_6mtrand_cont2_array(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state, rk_logistic, __pyx_v_size, __pyx_v_oloc, __pyx_v_oscale); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2862; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    6333 +  __pyx_t_2 = __pyx_f_6mtrand_cont2_array(__pyx_v_self->internal_state, rk_logistic, __pyx_v_size, __pyx_v_oloc, __pyx_v_oscale); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2862; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    6334    __Pyx_GOTREF(__pyx_t_2);
    6335    __pyx_r = __pyx_t_2;
    6336    __pyx_t_2 = 0;
    6337 @@ -12349,44 +12853,34 @@
    6338    return __pyx_r;
    6339  }
    6340  
    6341 -/* "mtrand.pyx":2864
    6342 - *         return cont2_array(self.internal_state, rk_logistic, size, oloc, oscale)
    6343 - *
    6344 - *     def lognormal(self, mean=0.0, sigma=1.0, size=None):             # <<<<<<<<<<<<<<
    6345 - *         """
    6346 - *         lognormal(mean=0.0, sigma=1.0, size=None)
    6347 - */
    6348 -
    6349 -static PyObject *__pyx_pf_6mtrand_11RandomState_36lognormal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
    6350 -static char __pyx_doc_6mtrand_11RandomState_36lognormal[] = "\n        lognormal(mean=0.0, sigma=1.0, size=None)\n\n        Return samples drawn from a log-normal distribution.\n\n        Draw samples from a log-normal distribution with specified mean, standard\n        deviation, and shape. Note that the mean and standard deviation are not the\n        values for the distribution itself, but of the underlying normal\n        distribution it is derived from.\n\n\n        Parameters\n        ----------\n        mean : float\n            Mean value of the underlying normal distribution\n        sigma : float, >0.\n            Standard deviation of the underlying normal distribution\n        size : tuple of ints\n            Output shape.  If the given shape is, e.g., ``(m, n, k)``, then\n            ``m * n * k`` samples are drawn.\n\n        See Also\n        --------\n        scipy.stats.lognorm : probability density function, distribution,\n            cumulative density function, etc.\n\n        Notes\n        -----\n        A variable `x` has a log-normal distribution if `log(x)` is normally\n        distributed.\n\n        The probability density function for the log-normal distribution is\n\n        .. math:: p(x) = \\frac{1}{\\sigma x \\sqrt{2\\pi}}\n                         e^{(-\\frac{(ln(x)-\\mu)^2}{2\\sigma^2})}\n\n        where :math:`\\mu` is the mean and :math:`\\sigma` is the standard deviation\n        of the normally distributed logarithm of the variable.\n\n        A log-normal distribution results if a random variable is the *product* of\n        a large number of independent, identically-distributed variables in the\n        same way that a normal distribution results if the variable is the *sum*\n        of a large number of independent, identically-distributed variables\n        (see the last example). It is one of the so-called \"fat-tailed\"\n        distributions.\n\n        The log-normal distribution is commonly used to model the lifespan of units\n        with fatigue-stress failure modes. Since thi""s includes\n        most mechanical systems, the log-normal distribution has widespread\n        application.\n\n        It is also commonly used to model oil field sizes, species abundance, and\n        latent periods of infectious diseases.\n\n        References\n        ----------\n        .. [1] Eckhard Limpert, Werner A. Stahel, and Markus Abbt, \"Log-normal\n               Distributions across the Sciences: Keys and Clues\", May 2001\n               Vol. 51 No. 5 BioScience\n               http://stat.ethz.ch/~stahel/lognormal/bioscience.pdf\n        .. [2] Reiss, R.D., Thomas, M.(2001), Statistical Analysis of Extreme\n               Values, Birkhauser Verlag, Basel, pp 31-32.\n        .. [3] Wikipedia, \"Lognormal distribution\",\n               http://en.wikipedia.org/wiki/Lognormal_distribution\n\n        Examples\n        --------\n        Draw samples from the distribution:\n\n        >>> mu, sigma = 3., 1. # mean and standard deviation\n        >>> s = np.random.lognormal(mu, sigma, 1000)\n\n        Display the histogram of the samples, along with\n        the probability density function:\n\n        >>> import matplotlib.pyplot as plt\n        >>> count, bins, ignored = plt.hist(s, 100, normed=True, align='mid')\n\n        >>> x = np.linspace(min(bins), max(bins), 10000)\n        >>> pdf = (np.exp(-(np.log(x) - mu)**2 / (2 * sigma**2))\n        ...        / (x * sigma * np.sqrt(2 * np.pi)))\n\n        >>> plt.plot(x, pdf, linewidth=2, color='r')\n        >>> plt.axis('tight')\n        >>> plt.show()\n\n        Demonstrate that taking the products of random samples from a uniform\n        distribution can be fit well by a log-normal probability density function.\n\n        >>> # Generate a thousand samples: each is the product of 100 random\n        >>> # values, drawn from a normal distribution.\n        >>> b = []\n        >>> for i in range(1000):\n        ...    a = 10. + np.random.random(100)\n        ...    b.append(np.product(a))\n\n        >>> b"" = np.array(b) / np.min(b) # scale values to be positive\n\n        >>> count, bins, ignored = plt.hist(b, 100, normed=True, align='center')\n\n        >>> sigma = np.std(np.log(b))\n        >>> mu = np.mean(np.log(b))\n\n        >>> x = np.linspace(min(bins), max(bins), 10000)\n        >>> pdf = (np.exp(-(np.log(x) - mu)**2 / (2 * sigma**2))\n        ...        / (x * sigma * np.sqrt(2 * np.pi)))\n\n        >>> plt.plot(x, pdf, color='r', linewidth=2)\n        >>> plt.show()\n\n        ";
    6351 -static PyObject *__pyx_pf_6mtrand_11RandomState_36lognormal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
    6352 +/* Python wrapper */
    6353 +static PyObject *__pyx_pw_6mtrand_11RandomState_73lognormal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
    6354 +static char __pyx_doc_6mtrand_11RandomState_72lognormal[] = "\n        lognormal(mean=0.0, sigma=1.0, size=None)\n\n        Return samples drawn from a log-normal distribution.\n\n        Draw samples from a log-normal distribution with specified mean, standard\n        deviation, and shape. Note that the mean and standard deviation are not the\n        values for the distribution itself, but of the underlying normal\n        distribution it is derived from.\n\n\n        Parameters\n        ----------\n        mean : float\n            Mean value of the underlying normal distribution\n        sigma : float, >0.\n            Standard deviation of the underlying normal distribution\n        size : tuple of ints\n            Output shape.  If the given shape is, e.g., ``(m, n, k)``, then\n            ``m * n * k`` samples are drawn.\n\n        See Also\n        --------\n        scipy.stats.lognorm : probability density function, distribution,\n            cumulative density function, etc.\n\n        Notes\n        -----\n        A variable `x` has a log-normal distribution if `log(x)` is normally\n        distributed.\n\n        The probability density function for the log-normal distribution is\n\n        .. math:: p(x) = \\frac{1}{\\sigma x \\sqrt{2\\pi}}\n                         e^{(-\\frac{(ln(x)-\\mu)^2}{2\\sigma^2})}\n\n        where :math:`\\mu` is the mean and :math:`\\sigma` is the standard deviation\n        of the normally distributed logarithm of the variable.\n\n        A log-normal distribution results if a random variable is the *product* of\n        a large number of independent, identically-distributed variables in the\n        same way that a normal distribution results if the variable is the *sum*\n        of a large number of independent, identically-distributed variables\n        (see the last example). It is one of the so-called \"fat-tailed\"\n        distributions.\n\n        The log-normal distribution is commonly used to model the lifespan of units\n        with fatigue-stress failure modes. Since thi""s includes\n        most mechanical systems, the log-normal distribution has widespread\n        application.\n\n        It is also commonly used to model oil field sizes, species abundance, and\n        latent periods of infectious diseases.\n\n        References\n        ----------\n        .. [1] Eckhard Limpert, Werner A. Stahel, and Markus Abbt, \"Log-normal\n               Distributions across the Sciences: Keys and Clues\", May 2001\n               Vol. 51 No. 5 BioScience\n               http://stat.ethz.ch/~stahel/lognormal/bioscience.pdf\n        .. [2] Reiss, R.D., Thomas, M.(2001), Statistical Analysis of Extreme\n               Values, Birkhauser Verlag, Basel, pp 31-32.\n        .. [3] Wikipedia, \"Lognormal distribution\",\n               http://en.wikipedia.org/wiki/Lognormal_distribution\n\n        Examples\n        --------\n        Draw samples from the distribution:\n\n        >>> mu, sigma = 3., 1. # mean and standard deviation\n        >>> s = np.random.lognormal(mu, sigma, 1000)\n\n        Display the histogram of the samples, along with\n        the probability density function:\n\n        >>> import matplotlib.pyplot as plt\n        >>> count, bins, ignored = plt.hist(s, 100, normed=True, align='mid')\n\n        >>> x = np.linspace(min(bins), max(bins), 10000)\n        >>> pdf = (np.exp(-(np.log(x) - mu)**2 / (2 * sigma**2))\n        ...        / (x * sigma * np.sqrt(2 * np.pi)))\n\n        >>> plt.plot(x, pdf, linewidth=2, color='r')\n        >>> plt.axis('tight')\n        >>> plt.show()\n\n        Demonstrate that taking the products of random samples from a uniform\n        distribution can be fit well by a log-normal probability density function.\n\n        >>> # Generate a thousand samples: each is the product of 100 random\n        >>> # values, drawn from a normal distribution.\n        >>> b = []\n        >>> for i in range(1000):\n        ...    a = 10. + np.random.random(100)\n        ...    b.append(np.product(a))\n\n        >>> b"" = np.array(b) / np.min(b) # scale values to be positive\n\n        >>> count, bins, ignored = plt.hist(b, 100, normed=True, align='center')\n\n        >>> sigma = np.std(np.log(b))\n        >>> mu = np.mean(np.log(b))\n\n        >>> x = np.linspace(min(bins), max(bins), 10000)\n        >>> pdf = (np.exp(-(np.log(x) - mu)**2 / (2 * sigma**2))\n        ...        / (x * sigma * np.sqrt(2 * np.pi)))\n\n        >>> plt.plot(x, pdf, color='r', linewidth=2)\n        >>> plt.show()\n\n        ";
    6355 +static PyObject *__pyx_pw_6mtrand_11RandomState_73lognormal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
    6356    PyObject *__pyx_v_mean = 0;
    6357    PyObject *__pyx_v_sigma = 0;
    6358    PyObject *__pyx_v_size = 0;
    6359 -  PyArrayObject *__pyx_v_omean = 0;
    6360 -  PyArrayObject *__pyx_v_osigma = 0;
    6361 -  double __pyx_v_fmean;
    6362 -  double __pyx_v_fsigma;
    6363 -  PyObject *__pyx_r = NULL;
    6364 +  PyObject *__pyx_r = 0;
    6365    __Pyx_RefNannyDeclarations
    6366 -  int __pyx_t_1;
    6367 -  PyObject *__pyx_t_2 = NULL;
    6368 -  PyObject *__pyx_t_3 = NULL;
    6369 -  PyObject *__pyx_t_4 = NULL;
    6370 -  PyObject *__pyx_t_5 = NULL;
    6371 -  int __pyx_lineno = 0;
    6372 -  const char *__pyx_filename = NULL;
    6373 -  int __pyx_clineno = 0;
    6374 -  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__mean,&__pyx_n_s__sigma,&__pyx_n_s__size,0};
    6375 -  __Pyx_RefNannySetupContext("lognormal");
    6376 +  __Pyx_RefNannySetupContext("lognormal (wrapper)", 0);
    6377    {
    6378 +    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__mean,&__pyx_n_s__sigma,&__pyx_n_s__size,0};
    6379      PyObject* values[3] = {0,0,0};
    6380      values[0] = __pyx_k_85;
    6381      values[1] = __pyx_k_86;
    6382 +
    6383 +    /* "mtrand.pyx":2864
    6384 + *         return cont2_array(self.internal_state, rk_logistic, size, oloc, oscale)
    6385 + *
    6386 + *     def lognormal(self, mean=0.0, sigma=1.0, size=None):             # <<<<<<<<<<<<<<
    6387 + *         """
    6388 + *         lognormal(mean=0.0, sigma=1.0, size=None)
    6389 + */
    6390      values[2] = ((PyObject *)Py_None);
    6391      if (unlikely(__pyx_kwds)) {
    6392        Py_ssize_t kw_args;
    6393 -      switch (PyTuple_GET_SIZE(__pyx_args)) {
    6394 +      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
    6395 +      switch (pos_args) {
    6396          case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
    6397          case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    6398          case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    6399 @@ -12394,7 +12888,7 @@
    6400          default: goto __pyx_L5_argtuple_error;
    6401        }
    6402        kw_args = PyDict_Size(__pyx_kwds);
    6403 -      switch (PyTuple_GET_SIZE(__pyx_args)) {
    6404 +      switch (pos_args) {
    6405          case  0:
    6406          if (kw_args > 0) {
    6407            PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__mean);
    6408 @@ -12412,7 +12906,7 @@
    6409          }
    6410        }
    6411        if (unlikely(kw_args > 0)) {
    6412 -        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "lognormal") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2864; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    6413 +        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "lognormal") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2864; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    6414        }
    6415      } else {
    6416        switch (PyTuple_GET_SIZE(__pyx_args)) {
    6417 @@ -12435,6 +12929,27 @@
    6418    __Pyx_RefNannyFinishContext();
    6419    return NULL;
    6420    __pyx_L4_argument_unpacking_done:;
    6421 +  __pyx_r = __pyx_pf_6mtrand_11RandomState_72lognormal(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self), __pyx_v_mean, __pyx_v_sigma, __pyx_v_size);
    6422 +  __Pyx_RefNannyFinishContext();
    6423 +  return __pyx_r;
    6424 +}
    6425 +
    6426 +static PyObject *__pyx_pf_6mtrand_11RandomState_72lognormal(struct __pyx_obj_6mtrand_RandomState *__pyx_v_self, PyObject *__pyx_v_mean, PyObject *__pyx_v_sigma, PyObject *__pyx_v_size) {
    6427 +  PyArrayObject *__pyx_v_omean = 0;
    6428 +  PyArrayObject *__pyx_v_osigma = 0;
    6429 +  double __pyx_v_fmean;
    6430 +  double __pyx_v_fsigma;
    6431 +  PyObject *__pyx_r = NULL;
    6432 +  __Pyx_RefNannyDeclarations
    6433 +  int __pyx_t_1;
    6434 +  PyObject *__pyx_t_2 = NULL;
    6435 +  PyObject *__pyx_t_3 = NULL;
    6436 +  PyObject *__pyx_t_4 = NULL;
    6437 +  PyObject *__pyx_t_5 = NULL;
    6438 +  int __pyx_lineno = 0;
    6439 +  const char *__pyx_filename = NULL;
    6440 +  int __pyx_clineno = 0;
    6441 +  __Pyx_RefNannySetupContext("lognormal", 0);
    6442  
    6443    /* "mtrand.pyx":2979
    6444   *         cdef double fmean, fsigma
    6445 @@ -12486,9 +13001,9 @@
    6446        __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    6447        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    6448        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2984; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    6449 -      goto __pyx_L7;
    6450 +      goto __pyx_L4;
    6451      }
    6452 -    __pyx_L7:;
    6453 +    __pyx_L4:;
    6454  
    6455      /* "mtrand.pyx":2985
    6456   *             if fsigma <= 0:
    6457 @@ -12498,14 +13013,14 @@
    6458   *         PyErr_Clear()
    6459   */
    6460      __Pyx_XDECREF(__pyx_r);
    6461 -    __pyx_t_2 = __pyx_f_6mtrand_cont2_array_sc(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state, rk_lognormal, __pyx_v_size, __pyx_v_fmean, __pyx_v_fsigma); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2985; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    6462 +    __pyx_t_2 = __pyx_f_6mtrand_cont2_array_sc(__pyx_v_self->internal_state, rk_lognormal, __pyx_v_size, __pyx_v_fmean, __pyx_v_fsigma); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2985; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    6463      __Pyx_GOTREF(__pyx_t_2);
    6464      __pyx_r = __pyx_t_2;
    6465      __pyx_t_2 = 0;
    6466      goto __pyx_L0;
    6467 -    goto __pyx_L6;
    6468 +    goto __pyx_L3;
    6469    }
    6470 -  __pyx_L6:;
    6471 +  __pyx_L3:;
    6472  
    6473    /* "mtrand.pyx":2987
    6474   *             return cont2_array_sc(self.internal_state, rk_lognormal, size, fmean, fsigma)
    6475 @@ -12562,7 +13077,7 @@
    6476    __pyx_t_2 = PyFloat_FromDouble(0.0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2991; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    6477    __Pyx_GOTREF(__pyx_t_2);
    6478    __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2991; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    6479 -  __Pyx_GOTREF(((PyObject *)__pyx_t_5));
    6480 +  __Pyx_GOTREF(__pyx_t_5);
    6481    __Pyx_INCREF(((PyObject *)__pyx_v_osigma));
    6482    PyTuple_SET_ITEM(__pyx_t_5, 0, ((PyObject *)__pyx_v_osigma));
    6483    __Pyx_GIVEREF(((PyObject *)__pyx_v_osigma));
    6484 @@ -12574,7 +13089,7 @@
    6485    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    6486    __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
    6487    __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2991; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    6488 -  __Pyx_GOTREF(((PyObject *)__pyx_t_5));
    6489 +  __Pyx_GOTREF(__pyx_t_5);
    6490    PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2);
    6491    __Pyx_GIVEREF(__pyx_t_2);
    6492    __pyx_t_2 = 0;
    6493 @@ -12598,9 +13113,9 @@
    6494      __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    6495      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    6496      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2992; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    6497 -    goto __pyx_L8;
    6498 +    goto __pyx_L5;
    6499    }
    6500 -  __pyx_L8:;
    6501 +  __pyx_L5:;
    6502  
    6503    /* "mtrand.pyx":2993
    6504   *         if np.any(np.less_equal(osigma, 0.0)):
    6505 @@ -12610,7 +13125,7 @@
    6506   *     def rayleigh(self, scale=1.0, size=None):
    6507   */
    6508    __Pyx_XDECREF(__pyx_r);
    6509 -  __pyx_t_2 = __pyx_f_6mtrand_cont2_array(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state, rk_lognormal, __pyx_v_size, __pyx_v_omean, __pyx_v_osigma); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2993; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    6510 +  __pyx_t_2 = __pyx_f_6mtrand_cont2_array(__pyx_v_self->internal_state, rk_lognormal, __pyx_v_size, __pyx_v_omean, __pyx_v_osigma); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2993; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    6511    __Pyx_GOTREF(__pyx_t_2);
    6512    __pyx_r = __pyx_t_2;
    6513    __pyx_t_2 = 0;
    6514 @@ -12633,47 +13148,39 @@
    6515    return __pyx_r;
    6516  }
    6517  
    6518 -/* "mtrand.pyx":2995
    6519 - *         return cont2_array(self.internal_state, rk_lognormal, size, omean, osigma)
    6520 - *
    6521 - *     def rayleigh(self, scale=1.0, size=None):             # <<<<<<<<<<<<<<
    6522 - *         """
    6523 - *         rayleigh(scale=1.0, size=None)
    6524 - */
    6525 -
    6526 -static PyObject *__pyx_pf_6mtrand_11RandomState_37rayleigh(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
    6527 -static char __pyx_doc_6mtrand_11RandomState_37rayleigh[] = "\n        rayleigh(scale=1.0, size=None)\n\n        Draw samples from a Rayleigh distribution.\n\n        The :math:`\\chi` and Weibull distributions are generalizations of the\n        Rayleigh.\n\n        Parameters\n        ----------\n        scale : scalar\n            Scale, also equals the mode. Should be >= 0.\n        size : int or tuple of ints, optional\n            Shape of the output. Default is None, in which case a single\n            value is returned.\n\n        Notes\n        -----\n        The probability density function for the Rayleigh distribution is\n\n        .. math:: P(x;scale) = \\frac{x}{scale^2}e^{\\frac{-x^2}{2 \\cdotp scale^2}}\n\n        The Rayleigh distribution arises if the wind speed and wind direction are\n        both gaussian variables, then the vector wind velocity forms a Rayleigh\n        distribution. The Rayleigh distribution is used to model the expected\n        output from wind turbines.\n\n        References\n        ----------\n        ..[1] Brighton Webs Ltd., Rayleigh Distribution,\n              http://www.brighton-webs.co.uk/distributions/rayleigh.asp\n        ..[2] Wikipedia, \"Rayleigh distribution\"\n              http://en.wikipedia.org/wiki/Rayleigh_distribution\n\n        Examples\n        --------\n        Draw values from the distribution and plot the histogram\n\n        >>> values = hist(np.random.rayleigh(3, 100000), bins=200, normed=True)\n\n        Wave heights tend to follow a Rayleigh distribution. If the mean wave\n        height is 1 meter, what fraction of waves are likely to be larger than 3\n        meters?\n\n        >>> meanvalue = 1\n        >>> modevalue = np.sqrt(2 / np.pi) * meanvalue\n        >>> s = np.random.rayleigh(modevalue, 1000000)\n\n        The percentage of waves larger than 3 meters is:\n\n        >>> 100.*sum(s>3)/1000000.\n        0.087300000000000003\n\n        ";
    6528 -static PyObject *__pyx_pf_6mtrand_11RandomState_37rayleigh(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
    6529 +/* Python wrapper */
    6530 +static PyObject *__pyx_pw_6mtrand_11RandomState_75rayleigh(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
    6531 +static char __pyx_doc_6mtrand_11RandomState_74rayleigh[] = "\n        rayleigh(scale=1.0, size=None)\n\n        Draw samples from a Rayleigh distribution.\n\n        The :math:`\\chi` and Weibull distributions are generalizations of the\n        Rayleigh.\n\n        Parameters\n        ----------\n        scale : scalar\n            Scale, also equals the mode. Should be >= 0.\n        size : int or tuple of ints, optional\n            Shape of the output. Default is None, in which case a single\n            value is returned.\n\n        Notes\n        -----\n        The probability density function for the Rayleigh distribution is\n\n        .. math:: P(x;scale) = \\frac{x}{scale^2}e^{\\frac{-x^2}{2 \\cdotp scale^2}}\n\n        The Rayleigh distribution arises if the wind speed and wind direction are\n        both gaussian variables, then the vector wind velocity forms a Rayleigh\n        distribution. The Rayleigh distribution is used to model the expected\n        output from wind turbines.\n\n        References\n        ----------\n        ..[1] Brighton Webs Ltd., Rayleigh Distribution,\n              http://www.brighton-webs.co.uk/distributions/rayleigh.asp\n        ..[2] Wikipedia, \"Rayleigh distribution\"\n              http://en.wikipedia.org/wiki/Rayleigh_distribution\n\n        Examples\n        --------\n        Draw values from the distribution and plot the histogram\n\n        >>> values = hist(np.random.rayleigh(3, 100000), bins=200, normed=True)\n\n        Wave heights tend to follow a Rayleigh distribution. If the mean wave\n        height is 1 meter, what fraction of waves are likely to be larger than 3\n        meters?\n\n        >>> meanvalue = 1\n        >>> modevalue = np.sqrt(2 / np.pi) * meanvalue\n        >>> s = np.random.rayleigh(modevalue, 1000000)\n\n        The percentage of waves larger than 3 meters is:\n\n        >>> 100.*sum(s>3)/1000000.\n        0.087300000000000003\n\n        ";
    6532 +static PyObject *__pyx_pw_6mtrand_11RandomState_75rayleigh(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
    6533    PyObject *__pyx_v_scale = 0;
    6534    PyObject *__pyx_v_size = 0;
    6535 -  PyArrayObject *__pyx_v_oscale = 0;
    6536 -  double __pyx_v_fscale;
    6537 -  PyObject *__pyx_r = NULL;
    6538 +  PyObject *__pyx_r = 0;
    6539    __Pyx_RefNannyDeclarations
    6540 -  int __pyx_t_1;
    6541 -  PyObject *__pyx_t_2 = NULL;
    6542 -  PyObject *__pyx_t_3 = NULL;
    6543 -  PyObject *__pyx_t_4 = NULL;
    6544 -  PyObject *__pyx_t_5 = NULL;
    6545 -  int __pyx_lineno = 0;
    6546 -  const char *__pyx_filename = NULL;
    6547 -  int __pyx_clineno = 0;
    6548 -  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__scale,&__pyx_n_s__size,0};
    6549 -  __Pyx_RefNannySetupContext("rayleigh");
    6550 +  __Pyx_RefNannySetupContext("rayleigh (wrapper)", 0);
    6551    {
    6552 +    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__scale,&__pyx_n_s__size,0};
    6553      PyObject* values[2] = {0,0};
    6554      values[0] = __pyx_k_91;
    6555 +
    6556 +    /* "mtrand.pyx":2995
    6557 + *         return cont2_array(self.internal_state, rk_lognormal, size, omean, osigma)
    6558 + *
    6559 + *     def rayleigh(self, scale=1.0, size=None):             # <<<<<<<<<<<<<<
    6560 + *         """
    6561 + *         rayleigh(scale=1.0, size=None)
    6562 + */
    6563      values[1] = ((PyObject *)Py_None);
    6564      if (unlikely(__pyx_kwds)) {
    6565        Py_ssize_t kw_args;
    6566 -      switch (PyTuple_GET_SIZE(__pyx_args)) {
    6567 +      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
    6568 +      switch (pos_args) {
    6569          case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    6570          case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    6571          case  0: break;
    6572          default: goto __pyx_L5_argtuple_error;
    6573        }
    6574        kw_args = PyDict_Size(__pyx_kwds);
    6575 -      switch (PyTuple_GET_SIZE(__pyx_args)) {
    6576 +      switch (pos_args) {
    6577          case  0:
    6578          if (kw_args > 0) {
    6579            PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__scale);
    6580 @@ -12686,7 +13193,7 @@
    6581          }
    6582        }
    6583        if (unlikely(kw_args > 0)) {
    6584 -        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "rayleigh") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2995; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    6585 +        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "rayleigh") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2995; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    6586        }
    6587      } else {
    6588        switch (PyTuple_GET_SIZE(__pyx_args)) {
    6589 @@ -12707,6 +13214,25 @@
    6590    __Pyx_RefNannyFinishContext();
    6591    return NULL;
    6592    __pyx_L4_argument_unpacking_done:;
    6593 +  __pyx_r = __pyx_pf_6mtrand_11RandomState_74rayleigh(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self), __pyx_v_scale, __pyx_v_size);
    6594 +  __Pyx_RefNannyFinishContext();
    6595 +  return __pyx_r;
    6596 +}
    6597 +
    6598 +static PyObject *__pyx_pf_6mtrand_11RandomState_74rayleigh(struct __pyx_obj_6mtrand_RandomState *__pyx_v_self, PyObject *__pyx_v_scale, PyObject *__pyx_v_size) {
    6599 +  PyArrayObject *__pyx_v_oscale = 0;
    6600 +  double __pyx_v_fscale;
    6601 +  PyObject *__pyx_r = NULL;
    6602 +  __Pyx_RefNannyDeclarations
    6603 +  int __pyx_t_1;
    6604 +  PyObject *__pyx_t_2 = NULL;
    6605 +  PyObject *__pyx_t_3 = NULL;
    6606 +  PyObject *__pyx_t_4 = NULL;
    6607 +  PyObject *__pyx_t_5 = NULL;
    6608 +  int __pyx_lineno = 0;
    6609 +  const char *__pyx_filename = NULL;
    6610 +  int __pyx_clineno = 0;
    6611 +  __Pyx_RefNannySetupContext("rayleigh", 0);
    6612  
    6613    /* "mtrand.pyx":3053
    6614   *         cdef double fscale
    6615 @@ -12749,9 +13275,9 @@
    6616        __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    6617        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    6618        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3057; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    6619 -      goto __pyx_L7;
    6620 +      goto __pyx_L4;
    6621      }
    6622 -    __pyx_L7:;
    6623 +    __pyx_L4:;
    6624  
    6625      /* "mtrand.pyx":3058
    6626   *             if fscale <= 0:
    6627 @@ -12761,14 +13287,14 @@
    6628   *         PyErr_Clear()
    6629   */
    6630      __Pyx_XDECREF(__pyx_r);
    6631 -    __pyx_t_2 = __pyx_f_6mtrand_cont1_array_sc(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state, rk_rayleigh, __pyx_v_size, __pyx_v_fscale); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3058; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    6632 +    __pyx_t_2 = __pyx_f_6mtrand_cont1_array_sc(__pyx_v_self->internal_state, rk_rayleigh, __pyx_v_size, __pyx_v_fscale); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3058; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    6633      __Pyx_GOTREF(__pyx_t_2);
    6634      __pyx_r = __pyx_t_2;
    6635      __pyx_t_2 = 0;
    6636      goto __pyx_L0;
    6637 -    goto __pyx_L6;
    6638 +    goto __pyx_L3;
    6639    }
    6640 -  __pyx_L6:;
    6641 +  __pyx_L3:;
    6642  
    6643    /* "mtrand.pyx":3060
    6644   *             return cont1_array_sc(self.internal_state, rk_rayleigh, size, fscale)
    6645 @@ -12812,7 +13338,7 @@
    6646    __pyx_t_2 = PyFloat_FromDouble(0.0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3063; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    6647    __Pyx_GOTREF(__pyx_t_2);
    6648    __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3063; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    6649 -  __Pyx_GOTREF(((PyObject *)__pyx_t_5));
    6650 +  __Pyx_GOTREF(__pyx_t_5);
    6651    __Pyx_INCREF(((PyObject *)__pyx_v_oscale));
    6652    PyTuple_SET_ITEM(__pyx_t_5, 0, ((PyObject *)__pyx_v_oscale));
    6653    __Pyx_GIVEREF(((PyObject *)__pyx_v_oscale));
    6654 @@ -12824,7 +13350,7 @@
    6655    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    6656    __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
    6657    __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3063; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    6658 -  __Pyx_GOTREF(((PyObject *)__pyx_t_5));
    6659 +  __Pyx_GOTREF(__pyx_t_5);
    6660    PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2);
    6661    __Pyx_GIVEREF(__pyx_t_2);
    6662    __pyx_t_2 = 0;
    6663 @@ -12848,9 +13374,9 @@
    6664      __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    6665      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    6666      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3064; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    6667 -    goto __pyx_L8;
    6668 +    goto __pyx_L5;
    6669    }
    6670 -  __pyx_L8:;
    6671 +  __pyx_L5:;
    6672  
    6673    /* "mtrand.pyx":3065
    6674   *         if np.any(np.less_equal(oscale, 0.0)):
    6675 @@ -12860,7 +13386,7 @@
    6676   *     def wald(self, mean, scale, size=None):
    6677   */
    6678    __Pyx_XDECREF(__pyx_r);
    6679 -  __pyx_t_2 = __pyx_f_6mtrand_cont1_array(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state, rk_rayleigh, __pyx_v_size, __pyx_v_oscale); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3065; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    6680 +  __pyx_t_2 = __pyx_f_6mtrand_cont1_array(__pyx_v_self->internal_state, rk_rayleigh, __pyx_v_size, __pyx_v_oscale); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3065; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    6681    __Pyx_GOTREF(__pyx_t_2);
    6682    __pyx_r = __pyx_t_2;
    6683    __pyx_t_2 = 0;
    6684 @@ -12882,42 +13408,32 @@
    6685    return __pyx_r;
    6686  }
    6687  
    6688 -/* "mtrand.pyx":3067
    6689 - *         return cont1_array(self.internal_state, rk_rayleigh, size, oscale)
    6690 - *
    6691 - *     def wald(self, mean, scale, size=None):             # <<<<<<<<<<<<<<
    6692 - *         """
    6693 - *         wald(mean, scale, size=None)
    6694 - */
    6695 -
    6696 -static PyObject *__pyx_pf_6mtrand_11RandomState_38wald(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
    6697 -static char __pyx_doc_6mtrand_11RandomState_38wald[] = "\n        wald(mean, scale, size=None)\n\n        Draw samples from a Wald, or Inverse Gaussian, distribution.\n\n        As the scale approaches infinity, the distribution becomes more like a\n        Gaussian.\n\n        Some references claim that the Wald is an Inverse Gaussian with mean=1, but\n        this is by no means universal.\n\n        The Inverse Gaussian distribution was first studied in relationship to\n        Brownian motion. In 1956 M.C.K. Tweedie used the name Inverse Gaussian\n        because there is an inverse relationship between the time to cover a unit\n        distance and distance covered in unit time.\n\n        Parameters\n        ----------\n        mean : scalar\n            Distribution mean, should be > 0.\n        scale : scalar\n            Scale parameter, should be >= 0.\n        size : int or tuple of ints, optional\n            Output shape. Default is None, in which case a single value is\n            returned.\n\n        Returns\n        -------\n        samples : ndarray or scalar\n            Drawn sample, all greater than zero.\n\n        Notes\n        -----\n        The probability density function for the Wald distribution is\n\n        .. math:: P(x;mean,scale) = \\sqrt{\\frac{scale}{2\\pi x^3}}e^\n                                    \\frac{-scale(x-mean)^2}{2\\cdotp mean^2x}\n\n        As noted above the Inverse Gaussian distribution first arise from attempts\n        to model Brownian Motion. It is also a competitor to the Weibull for use in\n        reliability modeling and modeling stock returns and interest rate\n        processes.\n\n        References\n        ----------\n        ..[1] Brighton Webs Ltd., Wald Distribution,\n              http://www.brighton-webs.co.uk/distributions/wald.asp\n        ..[2] Chhikara, Raj S., and Folks, J. Leroy, \"The Inverse Gaussian\n              Distribution: Theory : Methodology, and Applications\", CRC Press,\n              1988.\n        ..[3] Wikipedia, \"Wald distributio""n\"\n              http://en.wikipedia.org/wiki/Wald_distribution\n\n        Examples\n        --------\n        Draw values from the distribution and plot the histogram:\n\n        >>> import matplotlib.pyplot as plt\n        >>> h = plt.hist(np.random.wald(3, 2, 100000), bins=200, normed=True)\n        >>> plt.show()\n\n        ";
    6698 -static PyObject *__pyx_pf_6mtrand_11RandomState_38wald(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
    6699 +/* Python wrapper */
    6700 +static PyObject *__pyx_pw_6mtrand_11RandomState_77wald(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
    6701 +static char __pyx_doc_6mtrand_11RandomState_76wald[] = "\n        wald(mean, scale, size=None)\n\n        Draw samples from a Wald, or Inverse Gaussian, distribution.\n\n        As the scale approaches infinity, the distribution becomes more like a\n        Gaussian.\n\n        Some references claim that the Wald is an Inverse Gaussian with mean=1, but\n        this is by no means universal.\n\n        The Inverse Gaussian distribution was first studied in relationship to\n        Brownian motion. In 1956 M.C.K. Tweedie used the name Inverse Gaussian\n        because there is an inverse relationship between the time to cover a unit\n        distance and distance covered in unit time.\n\n        Parameters\n        ----------\n        mean : scalar\n            Distribution mean, should be > 0.\n        scale : scalar\n            Scale parameter, should be >= 0.\n        size : int or tuple of ints, optional\n            Output shape. Default is None, in which case a single value is\n            returned.\n\n        Returns\n        -------\n        samples : ndarray or scalar\n            Drawn sample, all greater than zero.\n\n        Notes\n        -----\n        The probability density function for the Wald distribution is\n\n        .. math:: P(x;mean,scale) = \\sqrt{\\frac{scale}{2\\pi x^3}}e^\n                                    \\frac{-scale(x-mean)^2}{2\\cdotp mean^2x}\n\n        As noted above the Inverse Gaussian distribution first arise from attempts\n        to model Brownian Motion. It is also a competitor to the Weibull for use in\n        reliability modeling and modeling stock returns and interest rate\n        processes.\n\n        References\n        ----------\n        ..[1] Brighton Webs Ltd., Wald Distribution,\n              http://www.brighton-webs.co.uk/distributions/wald.asp\n        ..[2] Chhikara, Raj S., and Folks, J. Leroy, \"The Inverse Gaussian\n              Distribution: Theory : Methodology, and Applications\", CRC Press,\n              1988.\n        ..[3] Wikipedia, \"Wald distributio""n\"\n              http://en.wikipedia.org/wiki/Wald_distribution\n\n        Examples\n        --------\n        Draw values from the distribution and plot the histogram:\n\n        >>> import matplotlib.pyplot as plt\n        >>> h = plt.hist(np.random.wald(3, 2, 100000), bins=200, normed=True)\n        >>> plt.show()\n\n        ";
    6702 +static PyObject *__pyx_pw_6mtrand_11RandomState_77wald(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
    6703    PyObject *__pyx_v_mean = 0;
    6704    PyObject *__pyx_v_scale = 0;
    6705    PyObject *__pyx_v_size = 0;
    6706 -  PyArrayObject *__pyx_v_omean = 0;
    6707 -  PyArrayObject *__pyx_v_oscale = 0;
    6708 -  double __pyx_v_fmean;
    6709 -  double __pyx_v_fscale;
    6710 -  PyObject *__pyx_r = NULL;
    6711 +  PyObject *__pyx_r = 0;
    6712    __Pyx_RefNannyDeclarations
    6713 -  int __pyx_t_1;
    6714 -  PyObject *__pyx_t_2 = NULL;
    6715 -  PyObject *__pyx_t_3 = NULL;
    6716 -  PyObject *__pyx_t_4 = NULL;
    6717 -  PyObject *__pyx_t_5 = NULL;
    6718 -  int __pyx_lineno = 0;
    6719 -  const char *__pyx_filename = NULL;
    6720 -  int __pyx_clineno = 0;
    6721 -  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__mean,&__pyx_n_s__scale,&__pyx_n_s__size,0};
    6722 -  __Pyx_RefNannySetupContext("wald");
    6723 +  __Pyx_RefNannySetupContext("wald (wrapper)", 0);
    6724    {
    6725 +    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__mean,&__pyx_n_s__scale,&__pyx_n_s__size,0};
    6726      PyObject* values[3] = {0,0,0};
    6727 +
    6728 +    /* "mtrand.pyx":3067
    6729 + *         return cont1_array(self.internal_state, rk_rayleigh, size, oscale)
    6730 + *
    6731 + *     def wald(self, mean, scale, size=None):             # <<<<<<<<<<<<<<
    6732 + *         """
    6733 + *         wald(mean, scale, size=None)
    6734 + */
    6735      values[2] = ((PyObject *)Py_None);
    6736      if (unlikely(__pyx_kwds)) {
    6737        Py_ssize_t kw_args;
    6738 -      switch (PyTuple_GET_SIZE(__pyx_args)) {
    6739 +      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
    6740 +      switch (pos_args) {
    6741          case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
    6742          case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    6743          case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    6744 @@ -12925,14 +13441,12 @@
    6745          default: goto __pyx_L5_argtuple_error;
    6746        }
    6747        kw_args = PyDict_Size(__pyx_kwds);
    6748 -      switch (PyTuple_GET_SIZE(__pyx_args)) {
    6749 +      switch (pos_args) {
    6750          case  0:
    6751 -        values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__mean);
    6752 -        if (likely(values[0])) kw_args--;
    6753 +        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__mean)) != 0)) kw_args--;
    6754          else goto __pyx_L5_argtuple_error;
    6755          case  1:
    6756 -        values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__scale);
    6757 -        if (likely(values[1])) kw_args--;
    6758 +        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__scale)) != 0)) kw_args--;
    6759          else {
    6760            __Pyx_RaiseArgtupleInvalid("wald", 0, 2, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3067; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    6761          }
    6762 @@ -12943,7 +13457,7 @@
    6763          }
    6764        }
    6765        if (unlikely(kw_args > 0)) {
    6766 -        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "wald") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3067; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    6767 +        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "wald") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3067; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    6768        }
    6769      } else {
    6770        switch (PyTuple_GET_SIZE(__pyx_args)) {
    6771 @@ -12966,6 +13480,27 @@
    6772    __Pyx_RefNannyFinishContext();
    6773    return NULL;
    6774    __pyx_L4_argument_unpacking_done:;
    6775 +  __pyx_r = __pyx_pf_6mtrand_11RandomState_76wald(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self), __pyx_v_mean, __pyx_v_scale, __pyx_v_size);
    6776 +  __Pyx_RefNannyFinishContext();
    6777 +  return __pyx_r;
    6778 +}
    6779 +
    6780 +static PyObject *__pyx_pf_6mtrand_11RandomState_76wald(struct __pyx_obj_6mtrand_RandomState *__pyx_v_self, PyObject *__pyx_v_mean, PyObject *__pyx_v_scale, PyObject *__pyx_v_size) {
    6781 +  PyArrayObject *__pyx_v_omean = 0;
    6782 +  PyArrayObject *__pyx_v_oscale = 0;
    6783 +  double __pyx_v_fmean;
    6784 +  double __pyx_v_fscale;
    6785 +  PyObject *__pyx_r = NULL;
    6786 +  __Pyx_RefNannyDeclarations
    6787 +  int __pyx_t_1;
    6788 +  PyObject *__pyx_t_2 = NULL;
    6789 +  PyObject *__pyx_t_3 = NULL;
    6790 +  PyObject *__pyx_t_4 = NULL;
    6791 +  PyObject *__pyx_t_5 = NULL;
    6792 +  int __pyx_lineno = 0;
    6793 +  const char *__pyx_filename = NULL;
    6794 +  int __pyx_clineno = 0;
    6795 +  __Pyx_RefNannySetupContext("wald", 0);
    6796  
    6797    /* "mtrand.pyx":3133
    6798   *         cdef double fmean, fscale
    6799 @@ -13017,9 +13552,9 @@
    6800        __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    6801        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    6802        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3137; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    6803 -      goto __pyx_L7;
    6804 +      goto __pyx_L4;
    6805      }
    6806 -    __pyx_L7:;
    6807 +    __pyx_L4:;
    6808  
    6809      /* "mtrand.pyx":3138
    6810   *             if fmean <= 0:
    6811 @@ -13043,9 +13578,9 @@
    6812        __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    6813        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    6814        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3139; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    6815 -      goto __pyx_L8;
    6816 +      goto __pyx_L5;
    6817      }
    6818 -    __pyx_L8:;
    6819 +    __pyx_L5:;
    6820  
    6821      /* "mtrand.pyx":3140
    6822   *             if fscale <= 0:
    6823 @@ -13055,14 +13590,14 @@
    6824   *         PyErr_Clear()
    6825   */
    6826      __Pyx_XDECREF(__pyx_r);
    6827 -    __pyx_t_2 = __pyx_f_6mtrand_cont2_array_sc(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state, rk_wald, __pyx_v_size, __pyx_v_fmean, __pyx_v_fscale); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3140; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    6828 +    __pyx_t_2 = __pyx_f_6mtrand_cont2_array_sc(__pyx_v_self->internal_state, rk_wald, __pyx_v_size, __pyx_v_fmean, __pyx_v_fscale); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3140; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    6829      __Pyx_GOTREF(__pyx_t_2);
    6830      __pyx_r = __pyx_t_2;
    6831      __pyx_t_2 = 0;
    6832      goto __pyx_L0;
    6833 -    goto __pyx_L6;
    6834 +    goto __pyx_L3;
    6835    }
    6836 -  __pyx_L6:;
    6837 +  __pyx_L3:;
    6838  
    6839    /* "mtrand.pyx":3142
    6840   *             return cont2_array_sc(self.internal_state, rk_wald, size, fmean, fscale)
    6841 @@ -13119,7 +13654,7 @@
    6842    __pyx_t_2 = PyFloat_FromDouble(0.0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3145; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    6843    __Pyx_GOTREF(__pyx_t_2);
    6844    __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3145; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    6845 -  __Pyx_GOTREF(((PyObject *)__pyx_t_5));
    6846 +  __Pyx_GOTREF(__pyx_t_5);
    6847    __Pyx_INCREF(((PyObject *)__pyx_v_omean));
    6848    PyTuple_SET_ITEM(__pyx_t_5, 0, ((PyObject *)__pyx_v_omean));
    6849    __Pyx_GIVEREF(((PyObject *)__pyx_v_omean));
    6850 @@ -13131,7 +13666,7 @@
    6851    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    6852    __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
    6853    __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3145; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    6854 -  __Pyx_GOTREF(((PyObject *)__pyx_t_5));
    6855 +  __Pyx_GOTREF(__pyx_t_5);
    6856    PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2);
    6857    __Pyx_GIVEREF(__pyx_t_2);
    6858    __pyx_t_2 = 0;
    6859 @@ -13155,7 +13690,7 @@
    6860      __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    6861      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    6862      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3146; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    6863 -    goto __pyx_L9;
    6864 +    goto __pyx_L6;
    6865    }
    6866  
    6867    /* "mtrand.pyx":3147
    6868 @@ -13178,7 +13713,7 @@
    6869    __pyx_t_2 = PyFloat_FromDouble(0.0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3147; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    6870    __Pyx_GOTREF(__pyx_t_2);
    6871    __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3147; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    6872 -  __Pyx_GOTREF(((PyObject *)__pyx_t_4));
    6873 +  __Pyx_GOTREF(__pyx_t_4);
    6874    __Pyx_INCREF(((PyObject *)__pyx_v_oscale));
    6875    PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)__pyx_v_oscale));
    6876    __Pyx_GIVEREF(((PyObject *)__pyx_v_oscale));
    6877 @@ -13190,7 +13725,7 @@
    6878    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    6879    __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
    6880    __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3147; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    6881 -  __Pyx_GOTREF(((PyObject *)__pyx_t_4));
    6882 +  __Pyx_GOTREF(__pyx_t_4);
    6883    PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
    6884    __Pyx_GIVEREF(__pyx_t_2);
    6885    __pyx_t_2 = 0;
    6886 @@ -13214,9 +13749,9 @@
    6887      __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    6888      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    6889      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3148; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    6890 -    goto __pyx_L9;
    6891 +    goto __pyx_L6;
    6892    }
    6893 -  __pyx_L9:;
    6894 +  __pyx_L6:;
    6895  
    6896    /* "mtrand.pyx":3149
    6897   *         elif np.any(np.less_equal(oscale,0.0)):
    6898 @@ -13226,7 +13761,7 @@
    6899   *
    6900   */
    6901    __Pyx_XDECREF(__pyx_r);
    6902 -  __pyx_t_2 = __pyx_f_6mtrand_cont2_array(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state, rk_wald, __pyx_v_size, __pyx_v_omean, __pyx_v_oscale); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3149; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    6903 +  __pyx_t_2 = __pyx_f_6mtrand_cont2_array(__pyx_v_self->internal_state, rk_wald, __pyx_v_size, __pyx_v_omean, __pyx_v_oscale); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3149; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    6904    __Pyx_GOTREF(__pyx_t_2);
    6905    __pyx_r = __pyx_t_2;
    6906    __pyx_t_2 = 0;
    6907 @@ -13249,45 +13784,33 @@
    6908    return __pyx_r;
    6909  }
    6910  
    6911 -/* "mtrand.pyx":3153
    6912 - *
    6913 - *
    6914 - *     def triangular(self, left, mode, right, size=None):             # <<<<<<<<<<<<<<
    6915 - *         """
    6916 - *         triangular(left, mode, right, size=None)
    6917 - */
    6918 -
    6919 -static PyObject *__pyx_pf_6mtrand_11RandomState_39triangular(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
    6920 -static char __pyx_doc_6mtrand_11RandomState_39triangular[] = "\n        triangular(left, mode, right, size=None)\n\n        Draw samples from the triangular distribution.\n\n        The triangular distribution is a continuous probability distribution with\n        lower limit left, peak at mode, and upper limit right. Unlike the other\n        distributions, these parameters directly define the shape of the pdf.\n\n        Parameters\n        ----------\n        left : scalar\n            Lower limit.\n        mode : scalar\n            The value where the peak of the distribution occurs.\n            The value should fulfill the condition ``left <= mode <= right``.\n        right : scalar\n            Upper limit, should be larger than `left`.\n        size : int or tuple of ints, optional\n            Output shape. Default is None, in which case a single value is\n            returned.\n\n        Returns\n        -------\n        samples : ndarray or scalar\n            The returned samples all lie in the interval [left, right].\n\n        Notes\n        -----\n        The probability density function for the Triangular distribution is\n\n        .. math:: P(x;l, m, r) = \\begin{cases}\n                  \\frac{2(x-l)}{(r-l)(m-l)}& \\text{for $l \\leq x \\leq m$},\\\\\n                  \\frac{2(m-x)}{(r-l)(r-m)}& \\text{for $m \\leq x \\leq r$},\\\\\n                  0& \\text{otherwise}.\n                  \\end{cases}\n\n        The triangular distribution is often used in ill-defined problems where the\n        underlying distribution is not known, but some knowledge of the limits and\n        mode exists. Often it is used in simulations.\n\n        References\n        ----------\n        ..[1] Wikipedia, \"Triangular distribution\"\n              http://en.wikipedia.org/wiki/Triangular_distribution\n\n        Examples\n        --------\n        Draw values from the distribution and plot the histogram:\n\n        >>> import matplotlib.pyplot as plt\n        >>> h = plt.hist(np.random.triangular(-3, 0, 8, 100000), bins=2""00,\n        ...              normed=True)\n        >>> plt.show()\n\n        ";
    6921 -static PyObject *__pyx_pf_6mtrand_11RandomState_39triangular(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
    6922 +/* Python wrapper */
    6923 +static PyObject *__pyx_pw_6mtrand_11RandomState_79triangular(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
    6924 +static char __pyx_doc_6mtrand_11RandomState_78triangular[] = "\n        triangular(left, mode, right, size=None)\n\n        Draw samples from the triangular distribution.\n\n        The triangular distribution is a continuous probability distribution with\n        lower limit left, peak at mode, and upper limit right. Unlike the other\n        distributions, these parameters directly define the shape of the pdf.\n\n        Parameters\n        ----------\n        left : scalar\n            Lower limit.\n        mode : scalar\n            The value where the peak of the distribution occurs.\n            The value should fulfill the condition ``left <= mode <= right``.\n        right : scalar\n            Upper limit, should be larger than `left`.\n        size : int or tuple of ints, optional\n            Output shape. Default is None, in which case a single value is\n            returned.\n\n        Returns\n        -------\n        samples : ndarray or scalar\n            The returned samples all lie in the interval [left, right].\n\n        Notes\n        -----\n        The probability density function for the Triangular distribution is\n\n        .. math:: P(x;l, m, r) = \\begin{cases}\n                  \\frac{2(x-l)}{(r-l)(m-l)}& \\text{for $l \\leq x \\leq m$},\\\\\n                  \\frac{2(m-x)}{(r-l)(r-m)}& \\text{for $m \\leq x \\leq r$},\\\\\n                  0& \\text{otherwise}.\n                  \\end{cases}\n\n        The triangular distribution is often used in ill-defined problems where the\n        underlying distribution is not known, but some knowledge of the limits and\n        mode exists. Often it is used in simulations.\n\n        References\n        ----------\n        ..[1] Wikipedia, \"Triangular distribution\"\n              http://en.wikipedia.org/wiki/Triangular_distribution\n\n        Examples\n        --------\n        Draw values from the distribution and plot the histogram:\n\n        >>> import matplotlib.pyplot as plt\n        >>> h = plt.hist(np.random.triangular(-3, 0, 8, 100000), bins=2""00,\n        ...              normed=True)\n        >>> plt.show()\n\n        ";
    6925 +static PyObject *__pyx_pw_6mtrand_11RandomState_79triangular(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
    6926    PyObject *__pyx_v_left = 0;
    6927    PyObject *__pyx_v_mode = 0;
    6928    PyObject *__pyx_v_right = 0;
    6929    PyObject *__pyx_v_size = 0;
    6930 -  PyArrayObject *__pyx_v_oleft = 0;
    6931 -  PyArrayObject *__pyx_v_omode = 0;
    6932 -  PyArrayObject *__pyx_v_oright = 0;
    6933 -  double __pyx_v_fleft;
    6934 -  double __pyx_v_fmode;
    6935 -  double __pyx_v_fright;
    6936 -  PyObject *__pyx_r = NULL;
    6937 +  PyObject *__pyx_r = 0;
    6938    __Pyx_RefNannyDeclarations
    6939 -  int __pyx_t_1;
    6940 -  PyObject *__pyx_t_2 = NULL;
    6941 -  PyObject *__pyx_t_3 = NULL;
    6942 -  PyObject *__pyx_t_4 = NULL;
    6943 -  PyObject *__pyx_t_5 = NULL;
    6944 -  int __pyx_lineno = 0;
    6945 -  const char *__pyx_filename = NULL;
    6946 -  int __pyx_clineno = 0;
    6947 -  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__left,&__pyx_n_s__mode,&__pyx_n_s__right,&__pyx_n_s__size,0};
    6948 -  __Pyx_RefNannySetupContext("triangular");
    6949 +  __Pyx_RefNannySetupContext("triangular (wrapper)", 0);
    6950    {
    6951 +    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__left,&__pyx_n_s__mode,&__pyx_n_s__right,&__pyx_n_s__size,0};
    6952      PyObject* values[4] = {0,0,0,0};
    6953 +
    6954 +    /* "mtrand.pyx":3153
    6955 + *
    6956 + *
    6957 + *     def triangular(self, left, mode, right, size=None):             # <<<<<<<<<<<<<<
    6958 + *         """
    6959 + *         triangular(left, mode, right, size=None)
    6960 + */
    6961      values[3] = ((PyObject *)Py_None);
    6962      if (unlikely(__pyx_kwds)) {
    6963        Py_ssize_t kw_args;
    6964 -      switch (PyTuple_GET_SIZE(__pyx_args)) {
    6965 +      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
    6966 +      switch (pos_args) {
    6967          case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
    6968          case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
    6969          case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    6970 @@ -13296,20 +13819,17 @@
    6971          default: goto __pyx_L5_argtuple_error;
    6972        }
    6973        kw_args = PyDict_Size(__pyx_kwds);
    6974 -      switch (PyTuple_GET_SIZE(__pyx_args)) {
    6975 +      switch (pos_args) {
    6976          case  0:
    6977 -        values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__left);
    6978 -        if (likely(values[0])) kw_args--;
    6979 +        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__left)) != 0)) kw_args--;
    6980          else goto __pyx_L5_argtuple_error;
    6981          case  1:
    6982 -        values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__mode);
    6983 -        if (likely(values[1])) kw_args--;
    6984 +        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__mode)) != 0)) kw_args--;
    6985          else {
    6986            __Pyx_RaiseArgtupleInvalid("triangular", 0, 3, 4, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3153; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    6987          }
    6988          case  2:
    6989 -        values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__right);
    6990 -        if (likely(values[2])) kw_args--;
    6991 +        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__right)) != 0)) kw_args--;
    6992          else {
    6993            __Pyx_RaiseArgtupleInvalid("triangular", 0, 3, 4, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3153; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    6994          }
    6995 @@ -13320,7 +13840,7 @@
    6996          }
    6997        }
    6998        if (unlikely(kw_args > 0)) {
    6999 -        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "triangular") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3153; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    7000 +        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "triangular") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3153; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    7001        }
    7002      } else {
    7003        switch (PyTuple_GET_SIZE(__pyx_args)) {
    7004 @@ -13345,6 +13865,29 @@
    7005    __Pyx_RefNannyFinishContext();
    7006    return NULL;
    7007    __pyx_L4_argument_unpacking_done:;
    7008 +  __pyx_r = __pyx_pf_6mtrand_11RandomState_78triangular(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self), __pyx_v_left, __pyx_v_mode, __pyx_v_right, __pyx_v_size);
    7009 +  __Pyx_RefNannyFinishContext();
    7010 +  return __pyx_r;
    7011 +}
    7012 +
    7013 +static PyObject *__pyx_pf_6mtrand_11RandomState_78triangular(struct __pyx_obj_6mtrand_RandomState *__pyx_v_self, PyObject *__pyx_v_left, PyObject *__pyx_v_mode, PyObject *__pyx_v_right, PyObject *__pyx_v_size) {
    7014 +  PyArrayObject *__pyx_v_oleft = 0;
    7015 +  PyArrayObject *__pyx_v_omode = 0;
    7016 +  PyArrayObject *__pyx_v_oright = 0;
    7017 +  double __pyx_v_fleft;
    7018 +  double __pyx_v_fmode;
    7019 +  double __pyx_v_fright;
    7020 +  PyObject *__pyx_r = NULL;
    7021 +  __Pyx_RefNannyDeclarations
    7022 +  int __pyx_t_1;
    7023 +  PyObject *__pyx_t_2 = NULL;
    7024 +  PyObject *__pyx_t_3 = NULL;
    7025 +  PyObject *__pyx_t_4 = NULL;
    7026 +  PyObject *__pyx_t_5 = NULL;
    7027 +  int __pyx_lineno = 0;
    7028 +  const char *__pyx_filename = NULL;
    7029 +  int __pyx_clineno = 0;
    7030 +  __Pyx_RefNannySetupContext("triangular", 0);
    7031  
    7032    /* "mtrand.pyx":3213
    7033   *         cdef double fleft, fmode, fright
    7034 @@ -13405,9 +13948,9 @@
    7035        __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    7036        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    7037        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3218; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    7038 -      goto __pyx_L7;
    7039 +      goto __pyx_L4;
    7040      }
    7041 -    __pyx_L7:;
    7042 +    __pyx_L4:;
    7043  
    7044      /* "mtrand.pyx":3219
    7045   *             if fleft > fmode:
    7046 @@ -13431,9 +13974,9 @@
    7047        __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    7048        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    7049        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3220; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    7050 -      goto __pyx_L8;
    7051 +      goto __pyx_L5;
    7052      }
    7053 -    __pyx_L8:;
    7054 +    __pyx_L5:;
    7055  
    7056      /* "mtrand.pyx":3221
    7057   *             if fmode > fright:
    7058 @@ -13457,9 +14000,9 @@
    7059        __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    7060        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    7061        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3222; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    7062 -      goto __pyx_L9;
    7063 +      goto __pyx_L6;
    7064      }
    7065 -    __pyx_L9:;
    7066 +    __pyx_L6:;
    7067  
    7068      /* "mtrand.pyx":3223
    7069   *             if fleft == fright:
    7070 @@ -13477,14 +14020,14 @@
    7071   *
    7072   *         PyErr_Clear()
    7073   */
    7074 -    __pyx_t_2 = __pyx_f_6mtrand_cont3_array_sc(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state, rk_triangular, __pyx_v_size, __pyx_v_fleft, __pyx_v_fmode, __pyx_v_fright); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3223; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    7075 +    __pyx_t_2 = __pyx_f_6mtrand_cont3_array_sc(__pyx_v_self->internal_state, rk_triangular, __pyx_v_size, __pyx_v_fleft, __pyx_v_fmode, __pyx_v_fright); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3223; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    7076      __Pyx_GOTREF(__pyx_t_2);
    7077      __pyx_r = __pyx_t_2;
    7078      __pyx_t_2 = 0;
    7079      goto __pyx_L0;
    7080 -    goto __pyx_L6;
    7081 +    goto __pyx_L3;
    7082    }
    7083 -  __pyx_L6:;
    7084 +  __pyx_L3:;
    7085  
    7086    /* "mtrand.pyx":3226
    7087   *                                   fmode, fright)
    7088 @@ -13552,7 +14095,7 @@
    7089    __Pyx_GOTREF(__pyx_t_4);
    7090    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    7091    __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3231; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    7092 -  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
    7093 +  __Pyx_GOTREF(__pyx_t_2);
    7094    __Pyx_INCREF(((PyObject *)__pyx_v_oleft));
    7095    PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_v_oleft));
    7096    __Pyx_GIVEREF(((PyObject *)__pyx_v_oleft));
    7097 @@ -13564,7 +14107,7 @@
    7098    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    7099    __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
    7100    __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3231; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    7101 -  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
    7102 +  __Pyx_GOTREF(__pyx_t_2);
    7103    PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_5);
    7104    __Pyx_GIVEREF(__pyx_t_5);
    7105    __pyx_t_5 = 0;
    7106 @@ -13588,9 +14131,9 @@
    7107      __Pyx_Raise(__pyx_t_5, 0, 0, 0);
    7108      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    7109      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3232; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    7110 -    goto __pyx_L10;
    7111 +    goto __pyx_L7;
    7112    }
    7113 -  __pyx_L10:;
    7114 +  __pyx_L7:;
    7115  
    7116    /* "mtrand.pyx":3233
    7117   *         if np.any(np.greater(oleft, omode)):
    7118 @@ -13610,7 +14153,7 @@
    7119    __Pyx_GOTREF(__pyx_t_3);
    7120    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    7121    __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3233; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    7122 -  __Pyx_GOTREF(((PyObject *)__pyx_t_5));
    7123 +  __Pyx_GOTREF(__pyx_t_5);
    7124    __Pyx_INCREF(((PyObject *)__pyx_v_omode));
    7125    PyTuple_SET_ITEM(__pyx_t_5, 0, ((PyObject *)__pyx_v_omode));
    7126    __Pyx_GIVEREF(((PyObject *)__pyx_v_omode));
    7127 @@ -13622,7 +14165,7 @@
    7128    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    7129    __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
    7130    __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3233; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    7131 -  __Pyx_GOTREF(((PyObject *)__pyx_t_5));
    7132 +  __Pyx_GOTREF(__pyx_t_5);
    7133    PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4);
    7134    __Pyx_GIVEREF(__pyx_t_4);
    7135    __pyx_t_4 = 0;
    7136 @@ -13646,9 +14189,9 @@
    7137      __Pyx_Raise(__pyx_t_4, 0, 0, 0);
    7138      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    7139      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3234; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    7140 -    goto __pyx_L11;
    7141 +    goto __pyx_L8;
    7142    }
    7143 -  __pyx_L11:;
    7144 +  __pyx_L8:;
    7145  
    7146    /* "mtrand.pyx":3235
    7147   *         if np.any(np.greater(omode, oright)):
    7148 @@ -13668,7 +14211,7 @@
    7149    __Pyx_GOTREF(__pyx_t_2);
    7150    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    7151    __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3235; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    7152 -  __Pyx_GOTREF(((PyObject *)__pyx_t_4));
    7153 +  __Pyx_GOTREF(__pyx_t_4);
    7154    __Pyx_INCREF(((PyObject *)__pyx_v_oleft));
    7155    PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)__pyx_v_oleft));
    7156    __Pyx_GIVEREF(((PyObject *)__pyx_v_oleft));
    7157 @@ -13680,7 +14223,7 @@
    7158    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    7159    __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
    7160    __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3235; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    7161 -  __Pyx_GOTREF(((PyObject *)__pyx_t_4));
    7162 +  __Pyx_GOTREF(__pyx_t_4);
    7163    PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3);
    7164    __Pyx_GIVEREF(__pyx_t_3);
    7165    __pyx_t_3 = 0;
    7166 @@ -13704,9 +14247,9 @@
    7167      __Pyx_Raise(__pyx_t_3, 0, 0, 0);
    7168      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    7169      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3236; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    7170 -    goto __pyx_L12;
    7171 +    goto __pyx_L9;
    7172    }
    7173 -  __pyx_L12:;
    7174 +  __pyx_L9:;
    7175  
    7176    /* "mtrand.pyx":3237
    7177   *         if np.any(np.equal(oleft, oright)):
    7178 @@ -13724,7 +14267,7 @@
    7179   *
    7180   *     # Complicated, discrete distributions:
    7181   */
    7182 -  __pyx_t_3 = __pyx_f_6mtrand_cont3_array(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state, rk_triangular, __pyx_v_size, __pyx_v_oleft, __pyx_v_omode, __pyx_v_oright); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3237; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    7183 +  __pyx_t_3 = __pyx_f_6mtrand_cont3_array(__pyx_v_self->internal_state, rk_triangular, __pyx_v_size, __pyx_v_oleft, __pyx_v_omode, __pyx_v_oright); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3237; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    7184    __Pyx_GOTREF(__pyx_t_3);
    7185    __pyx_r = __pyx_t_3;
    7186    __pyx_t_3 = 0;
    7187 @@ -13748,42 +14291,32 @@
    7188    return __pyx_r;
    7189  }
    7190  
    7191 -/* "mtrand.pyx":3241
    7192 - *
    7193 - *     # Complicated, discrete distributions:
    7194 - *     def binomial(self, n, p, size=None):             # <<<<<<<<<<<<<<
    7195 - *         """
    7196 - *         binomial(n, p, size=None)
    7197 - */
    7198 -
    7199 -static PyObject *__pyx_pf_6mtrand_11RandomState_40binomial(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
    7200 -static char __pyx_doc_6mtrand_11RandomState_40binomial[] = "\n        binomial(n, p, size=None)\n\n        Draw samples from a binomial distribution.\n\n        Samples are drawn from a Binomial distribution with specified\n        parameters, n trials and p probability of success where\n        n an integer > 0 and p is in the interval [0,1]. (n may be\n        input as a float, but it is truncated to an integer in use)\n\n        Parameters\n        ----------\n        n : float (but truncated to an integer)\n                parameter, > 0.\n        p : float\n                parameter, >= 0 and <=1.\n        size : {tuple, int}\n            Output shape.  If the given shape is, e.g., ``(m, n, k)``, then\n            ``m * n * k`` samples are drawn.\n\n        Returns\n        -------\n        samples : {ndarray, scalar}\n                  where the values are all integers in  [0, n].\n\n        See Also\n        --------\n        scipy.stats.distributions.binom : probability density function,\n            distribution or cumulative density function, etc.\n\n        Notes\n        -----\n        The probability density for the Binomial distribution is\n\n        .. math:: P(N) = \\binom{n}{N}p^N(1-p)^{n-N},\n\n        where :math:`n` is the number of trials, :math:`p` is the probability\n        of success, and :math:`N` is the number of successes.\n\n        When estimating the standard error of a proportion in a population by\n        using a random sample, the normal distribution works well unless the\n        product p*n <=5, where p = population proportion estimate, and n =\n        number of samples, in which case the binomial distribution is used\n        instead. For example, a sample of 15 people shows 4 who are left\n        handed, and 11 who are right handed. Then p = 4/15 = 27%. 0.27*15 = 4,\n        so the binomial distribution should be used in this case.\n\n        References\n        ----------\n        .. [1] Dalgaard, Peter, \"Introductory Statistics with R\",\n               Springer-Verlag, 2002.\n    ""    .. [2] Glantz, Stanton A. \"Primer of Biostatistics.\", McGraw-Hill,\n               Fifth Edition, 2002.\n        .. [3] Lentner, Marvin, \"Elementary Applied Statistics\", Bogden\n               and Quigley, 1972.\n        .. [4] Weisstein, Eric W. \"Binomial Distribution.\" From MathWorld--A\n               Wolfram Web Resource.\n               http://mathworld.wolfram.com/BinomialDistribution.html\n        .. [5] Wikipedia, \"Binomial-distribution\",\n               http://en.wikipedia.org/wiki/Binomial_distribution\n\n        Examples\n        --------\n        Draw samples from the distribution:\n\n        >>> n, p = 10, .5 # number of trials, probability of each trial\n        >>> s = np.random.binomial(n, p, 1000)\n        # result of flipping a coin 10 times, tested 1000 times.\n\n        A real world example. A company drills 9 wild-cat oil exploration\n        wells, each with an estimated probability of success of 0.1. All nine\n        wells fail. What is the probability of that happening?\n\n        Let's do 20,000 trials of the model, and count the number that\n        generate zero positive results.\n\n        >>> sum(np.random.binomial(9,0.1,20000)==0)/20000.\n        answer = 0.38885, or 38%.\n\n        ";
    7201 -static PyObject *__pyx_pf_6mtrand_11RandomState_40binomial(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
    7202 +/* Python wrapper */
    7203 +static PyObject *__pyx_pw_6mtrand_11RandomState_81binomial(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
    7204 +static char __pyx_doc_6mtrand_11RandomState_80binomial[] = "\n        binomial(n, p, size=None)\n\n        Draw samples from a binomial distribution.\n\n        Samples are drawn from a Binomial distribution with specified\n        parameters, n trials and p probability of success where\n        n an integer > 0 and p is in the interval [0,1]. (n may be\n        input as a float, but it is truncated to an integer in use)\n\n        Parameters\n        ----------\n        n : float (but truncated to an integer)\n                parameter, > 0.\n        p : float\n                parameter, >= 0 and <=1.\n        size : {tuple, int}\n            Output shape.  If the given shape is, e.g., ``(m, n, k)``, then\n            ``m * n * k`` samples are drawn.\n\n        Returns\n        -------\n        samples : {ndarray, scalar}\n                  where the values are all integers in  [0, n].\n\n        See Also\n        --------\n        scipy.stats.distributions.binom : probability density function,\n            distribution or cumulative density function, etc.\n\n        Notes\n        -----\n        The probability density for the Binomial distribution is\n\n        .. math:: P(N) = \\binom{n}{N}p^N(1-p)^{n-N},\n\n        where :math:`n` is the number of trials, :math:`p` is the probability\n        of success, and :math:`N` is the number of successes.\n\n        When estimating the standard error of a proportion in a population by\n        using a random sample, the normal distribution works well unless the\n        product p*n <=5, where p = population proportion estimate, and n =\n        number of samples, in which case the binomial distribution is used\n        instead. For example, a sample of 15 people shows 4 who are left\n        handed, and 11 who are right handed. Then p = 4/15 = 27%. 0.27*15 = 4,\n        so the binomial distribution should be used in this case.\n\n        References\n        ----------\n        .. [1] Dalgaard, Peter, \"Introductory Statistics with R\",\n               Springer-Verlag, 2002.\n    ""    .. [2] Glantz, Stanton A. \"Primer of Biostatistics.\", McGraw-Hill,\n               Fifth Edition, 2002.\n        .. [3] Lentner, Marvin, \"Elementary Applied Statistics\", Bogden\n               and Quigley, 1972.\n        .. [4] Weisstein, Eric W. \"Binomial Distribution.\" From MathWorld--A\n               Wolfram Web Resource.\n               http://mathworld.wolfram.com/BinomialDistribution.html\n        .. [5] Wikipedia, \"Binomial-distribution\",\n               http://en.wikipedia.org/wiki/Binomial_distribution\n\n        Examples\n        --------\n        Draw samples from the distribution:\n\n        >>> n, p = 10, .5 # number of trials, probability of each trial\n        >>> s = np.random.binomial(n, p, 1000)\n        # result of flipping a coin 10 times, tested 1000 times.\n\n        A real world example. A company drills 9 wild-cat oil exploration\n        wells, each with an estimated probability of success of 0.1. All nine\n        wells fail. What is the probability of that happening?\n\n        Let's do 20,000 trials of the model, and count the number that\n        generate zero positive results.\n\n        >>> sum(np.random.binomial(9,0.1,20000)==0)/20000.\n        answer = 0.38885, or 38%.\n\n        ";
    7205 +static PyObject *__pyx_pw_6mtrand_11RandomState_81binomial(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
    7206    PyObject *__pyx_v_n = 0;
    7207    PyObject *__pyx_v_p = 0;
    7208    PyObject *__pyx_v_size = 0;
    7209 -  PyArrayObject *__pyx_v_on = 0;
    7210 -  PyArrayObject *__pyx_v_op = 0;
    7211 -  long __pyx_v_ln;
    7212 -  double __pyx_v_fp;
    7213 -  PyObject *__pyx_r = NULL;
    7214 +  PyObject *__pyx_r = 0;
    7215    __Pyx_RefNannyDeclarations
    7216 -  int __pyx_t_1;
    7217 -  PyObject *__pyx_t_2 = NULL;
    7218 -  PyObject *__pyx_t_3 = NULL;
    7219 -  PyObject *__pyx_t_4 = NULL;
    7220 -  PyObject *__pyx_t_5 = NULL;
    7221 -  int __pyx_lineno = 0;
    7222 -  const char *__pyx_filename = NULL;
    7223 -  int __pyx_clineno = 0;
    7224 -  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__n,&__pyx_n_s__p,&__pyx_n_s__size,0};
    7225 -  __Pyx_RefNannySetupContext("binomial");
    7226 +  __Pyx_RefNannySetupContext("binomial (wrapper)", 0);
    7227    {
    7228 +    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__n,&__pyx_n_s__p,&__pyx_n_s__size,0};
    7229      PyObject* values[3] = {0,0,0};
    7230 +
    7231 +    /* "mtrand.pyx":3241
    7232 + *
    7233 + *     # Complicated, discrete distributions:
    7234 + *     def binomial(self, n, p, size=None):             # <<<<<<<<<<<<<<
    7235 + *         """
    7236 + *         binomial(n, p, size=None)
    7237 + */
    7238      values[2] = ((PyObject *)Py_None);
    7239      if (unlikely(__pyx_kwds)) {
    7240        Py_ssize_t kw_args;
    7241 -      switch (PyTuple_GET_SIZE(__pyx_args)) {
    7242 +      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
    7243 +      switch (pos_args) {
    7244          case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
    7245          case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    7246          case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    7247 @@ -13791,14 +14324,12 @@
    7248          default: goto __pyx_L5_argtuple_error;
    7249        }
    7250        kw_args = PyDict_Size(__pyx_kwds);
    7251 -      switch (PyTuple_GET_SIZE(__pyx_args)) {
    7252 +      switch (pos_args) {
    7253          case  0:
    7254 -        values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__n);
    7255 -        if (likely(values[0])) kw_args--;
    7256 +        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__n)) != 0)) kw_args--;
    7257          else goto __pyx_L5_argtuple_error;
    7258          case  1:
    7259 -        values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__p);
    7260 -        if (likely(values[1])) kw_args--;
    7261 +        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__p)) != 0)) kw_args--;
    7262          else {
    7263            __Pyx_RaiseArgtupleInvalid("binomial", 0, 2, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3241; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    7264          }
    7265 @@ -13809,7 +14340,7 @@
    7266          }
    7267        }
    7268        if (unlikely(kw_args > 0)) {
    7269 -        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "binomial") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3241; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    7270 +        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "binomial") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3241; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    7271        }
    7272      } else {
    7273        switch (PyTuple_GET_SIZE(__pyx_args)) {
    7274 @@ -13832,6 +14363,27 @@
    7275    __Pyx_RefNannyFinishContext();
    7276    return NULL;
    7277    __pyx_L4_argument_unpacking_done:;
    7278 +  __pyx_r = __pyx_pf_6mtrand_11RandomState_80binomial(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self), __pyx_v_n, __pyx_v_p, __pyx_v_size);
    7279 +  __Pyx_RefNannyFinishContext();
    7280 +  return __pyx_r;
    7281 +}
    7282 +
    7283 +static PyObject *__pyx_pf_6mtrand_11RandomState_80binomial(struct __pyx_obj_6mtrand_RandomState *__pyx_v_self, PyObject *__pyx_v_n, PyObject *__pyx_v_p, PyObject *__pyx_v_size) {
    7284 +  PyArrayObject *__pyx_v_on = 0;
    7285 +  PyArrayObject *__pyx_v_op = 0;
    7286 +  long __pyx_v_ln;
    7287 +  double __pyx_v_fp;
    7288 +  PyObject *__pyx_r = NULL;
    7289 +  __Pyx_RefNannyDeclarations
    7290 +  int __pyx_t_1;
    7291 +  PyObject *__pyx_t_2 = NULL;
    7292 +  PyObject *__pyx_t_3 = NULL;
    7293 +  PyObject *__pyx_t_4 = NULL;
    7294 +  PyObject *__pyx_t_5 = NULL;
    7295 +  int __pyx_lineno = 0;
    7296 +  const char *__pyx_filename = NULL;
    7297 +  int __pyx_clineno = 0;
    7298 +  __Pyx_RefNannySetupContext("binomial", 0);
    7299  
    7300    /* "mtrand.pyx":3326
    7301   *         cdef double fp
    7302 @@ -13883,9 +14435,9 @@
    7303        __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    7304        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    7305        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3330; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    7306 -      goto __pyx_L7;
    7307 +      goto __pyx_L4;
    7308      }
    7309 -    __pyx_L7:;
    7310 +    __pyx_L4:;
    7311  
    7312      /* "mtrand.pyx":3331
    7313   *             if ln <= 0:
    7314 @@ -13909,7 +14461,7 @@
    7315        __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    7316        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    7317        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3332; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    7318 -      goto __pyx_L8;
    7319 +      goto __pyx_L5;
    7320      }
    7321  
    7322      /* "mtrand.pyx":3333
    7323 @@ -13934,9 +14486,9 @@
    7324        __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    7325        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    7326        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3334; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    7327 -      goto __pyx_L8;
    7328 +      goto __pyx_L5;
    7329      }
    7330 -    __pyx_L8:;
    7331 +    __pyx_L5:;
    7332  
    7333      /* "mtrand.pyx":3335
    7334   *             elif fp > 1:
    7335 @@ -13946,14 +14498,14 @@
    7336   *         PyErr_Clear()
    7337   */
    7338      __Pyx_XDECREF(__pyx_r);
    7339 -    __pyx_t_2 = __pyx_f_6mtrand_discnp_array_sc(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state, rk_binomial, __pyx_v_size, __pyx_v_ln, __pyx_v_fp); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3335; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    7340 +    __pyx_t_2 = __pyx_f_6mtrand_discnp_array_sc(__pyx_v_self->internal_state, rk_binomial, __pyx_v_size, __pyx_v_ln, __pyx_v_fp); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3335; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    7341      __Pyx_GOTREF(__pyx_t_2);
    7342      __pyx_r = __pyx_t_2;
    7343      __pyx_t_2 = 0;
    7344      goto __pyx_L0;
    7345 -    goto __pyx_L6;
    7346 +    goto __pyx_L3;
    7347    }
    7348 -  __pyx_L6:;
    7349 +  __pyx_L3:;
    7350  
    7351    /* "mtrand.pyx":3337
    7352   *             return discnp_array_sc(self.internal_state, rk_binomial, size, ln, fp)
    7353 @@ -14008,7 +14560,7 @@
    7354    __Pyx_GOTREF(__pyx_t_4);
    7355    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    7356    __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3341; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    7357 -  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
    7358 +  __Pyx_GOTREF(__pyx_t_2);
    7359    __Pyx_INCREF(__pyx_v_n);
    7360    PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_n);
    7361    __Pyx_GIVEREF(__pyx_v_n);
    7362 @@ -14020,7 +14572,7 @@
    7363    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    7364    __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
    7365    __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3341; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    7366 -  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
    7367 +  __Pyx_GOTREF(__pyx_t_2);
    7368    PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_5);
    7369    __Pyx_GIVEREF(__pyx_t_5);
    7370    __pyx_t_5 = 0;
    7371 @@ -14044,9 +14596,9 @@
    7372      __Pyx_Raise(__pyx_t_5, 0, 0, 0);
    7373      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    7374      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3342; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    7375 -    goto __pyx_L9;
    7376 +    goto __pyx_L6;
    7377    }
    7378 -  __pyx_L9:;
    7379 +  __pyx_L6:;
    7380  
    7381    /* "mtrand.pyx":3343
    7382   *         if np.any(np.less_equal(n, 0)):
    7383 @@ -14066,7 +14618,7 @@
    7384    __Pyx_GOTREF(__pyx_t_3);
    7385    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    7386    __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3343; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    7387 -  __Pyx_GOTREF(((PyObject *)__pyx_t_5));
    7388 +  __Pyx_GOTREF(__pyx_t_5);
    7389    __Pyx_INCREF(__pyx_v_p);
    7390    PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_p);
    7391    __Pyx_GIVEREF(__pyx_v_p);
    7392 @@ -14078,7 +14630,7 @@
    7393    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    7394    __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
    7395    __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3343; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    7396 -  __Pyx_GOTREF(((PyObject *)__pyx_t_5));
    7397 +  __Pyx_GOTREF(__pyx_t_5);
    7398    PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4);
    7399    __Pyx_GIVEREF(__pyx_t_4);
    7400    __pyx_t_4 = 0;
    7401 @@ -14102,9 +14654,9 @@
    7402      __Pyx_Raise(__pyx_t_4, 0, 0, 0);
    7403      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    7404      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3344; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    7405 -    goto __pyx_L10;
    7406 +    goto __pyx_L7;
    7407    }
    7408 -  __pyx_L10:;
    7409 +  __pyx_L7:;
    7410  
    7411    /* "mtrand.pyx":3345
    7412   *         if np.any(np.less(p, 0)):
    7413 @@ -14124,7 +14676,7 @@
    7414    __Pyx_GOTREF(__pyx_t_2);
    7415    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    7416    __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3345; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    7417 -  __Pyx_GOTREF(((PyObject *)__pyx_t_4));
    7418 +  __Pyx_GOTREF(__pyx_t_4);
    7419    __Pyx_INCREF(__pyx_v_p);
    7420    PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_p);
    7421    __Pyx_GIVEREF(__pyx_v_p);
    7422 @@ -14136,7 +14688,7 @@
    7423    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    7424    __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
    7425    __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3345; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    7426 -  __Pyx_GOTREF(((PyObject *)__pyx_t_4));
    7427 +  __Pyx_GOTREF(__pyx_t_4);
    7428    PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3);
    7429    __Pyx_GIVEREF(__pyx_t_3);
    7430    __pyx_t_3 = 0;
    7431 @@ -14160,9 +14712,9 @@
    7432      __Pyx_Raise(__pyx_t_3, 0, 0, 0);
    7433      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    7434      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3346; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    7435 -    goto __pyx_L11;
    7436 +    goto __pyx_L8;
    7437    }
    7438 -  __pyx_L11:;
    7439 +  __pyx_L8:;
    7440  
    7441    /* "mtrand.pyx":3347
    7442   *         if np.any(np.greater(p, 1)):
    7443 @@ -14172,7 +14724,7 @@
    7444   *     def negative_binomial(self, n, p, size=None):
    7445   */
    7446    __Pyx_XDECREF(__pyx_r);
    7447 -  __pyx_t_3 = __pyx_f_6mtrand_discnp_array(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state, rk_binomial, __pyx_v_size, __pyx_v_on, __pyx_v_op); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3347; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    7448 +  __pyx_t_3 = __pyx_f_6mtrand_discnp_array(__pyx_v_self->internal_state, rk_binomial, __pyx_v_size, __pyx_v_on, __pyx_v_op); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3347; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    7449    __Pyx_GOTREF(__pyx_t_3);
    7450    __pyx_r = __pyx_t_3;
    7451    __pyx_t_3 = 0;
    7452 @@ -14195,42 +14747,32 @@
    7453    return __pyx_r;
    7454  }
    7455  
    7456 -/* "mtrand.pyx":3349
    7457 - *         return discnp_array(self.internal_state, rk_binomial, size, on, op)
    7458 - *
    7459 - *     def negative_binomial(self, n, p, size=None):             # <<<<<<<<<<<<<<
    7460 - *         """
    7461 - *         negative_binomial(n, p, size=None)
    7462 - */
    7463 -
    7464 -static PyObject *__pyx_pf_6mtrand_11RandomState_41negative_binomial(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
    7465 -static char __pyx_doc_6mtrand_11RandomState_41negative_binomial[] = "\n        negative_binomial(n, p, size=None)\n\n        Draw samples from a negative_binomial distribution.\n\n        Samples are drawn from a negative_Binomial distribution with specified\n        parameters, `n` trials and `p` probability of success where `n` is an\n        integer > 0 and `p` is in the interval [0, 1].\n\n        Parameters\n        ----------\n        n : int\n            Parameter, > 0.\n        p : float\n            Parameter, >= 0 and <=1.\n        size : int or tuple of ints\n            Output shape. If the given shape is, e.g., ``(m, n, k)``, then\n            ``m * n * k`` samples are drawn.\n\n        Returns\n        -------\n        samples : int or ndarray of ints\n            Drawn samples.\n\n        Notes\n        -----\n        The probability density for the Negative Binomial distribution is\n\n        .. math:: P(N;n,p) = \\binom{N+n-1}{n-1}p^{n}(1-p)^{N},\n\n        where :math:`n-1` is the number of successes, :math:`p` is the probability\n        of success, and :math:`N+n-1` is the number of trials.\n\n        The negative binomial distribution gives the probability of n-1 successes\n        and N failures in N+n-1 trials, and success on the (N+n)th trial.\n\n        If one throws a die repeatedly until the third time a \"1\" appears, then the\n        probability distribution of the number of non-\"1\"s that appear before the\n        third \"1\" is a negative binomial distribution.\n\n        References\n        ----------\n        .. [1] Weisstein, Eric W. \"Negative Binomial Distribution.\" From\n               MathWorld--A Wolfram Web Resource.\n               http://mathworld.wolfram.com/NegativeBinomialDistribution.html\n        .. [2] Wikipedia, \"Negative binomial distribution\",\n               http://en.wikipedia.org/wiki/Negative_binomial_distribution\n\n        Examples\n        --------\n        Draw samples from the distribution:\n\n        A real world example. A company drills wild-cat oil exploration well""s, each\n        with an estimated probability of success of 0.1.  What is the probability\n        of having one success for each successive well, that is what is the\n        probability of a single success after drilling 5 wells, after 6 wells,\n        etc.?\n\n        >>> s = np.random.negative_binomial(1, 0.1, 100000)\n        >>> for i in range(1, 11):\n        ...    probability = sum(s<i) / 100000.\n        ...    print i, \"wells drilled, probability of one success =\", probability\n\n        ";
    7466 -static PyObject *__pyx_pf_6mtrand_11RandomState_41negative_binomial(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
    7467 +/* Python wrapper */
    7468 +static PyObject *__pyx_pw_6mtrand_11RandomState_83negative_binomial(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
    7469 +static char __pyx_doc_6mtrand_11RandomState_82negative_binomial[] = "\n        negative_binomial(n, p, size=None)\n\n        Draw samples from a negative_binomial distribution.\n\n        Samples are drawn from a negative_Binomial distribution with specified\n        parameters, `n` trials and `p` probability of success where `n` is an\n        integer > 0 and `p` is in the interval [0, 1].\n\n        Parameters\n        ----------\n        n : int\n            Parameter, > 0.\n        p : float\n            Parameter, >= 0 and <=1.\n        size : int or tuple of ints\n            Output shape. If the given shape is, e.g., ``(m, n, k)``, then\n            ``m * n * k`` samples are drawn.\n\n        Returns\n        -------\n        samples : int or ndarray of ints\n            Drawn samples.\n\n        Notes\n        -----\n        The probability density for the Negative Binomial distribution is\n\n        .. math:: P(N;n,p) = \\binom{N+n-1}{n-1}p^{n}(1-p)^{N},\n\n        where :math:`n-1` is the number of successes, :math:`p` is the probability\n        of success, and :math:`N+n-1` is the number of trials.\n\n        The negative binomial distribution gives the probability of n-1 successes\n        and N failures in N+n-1 trials, and success on the (N+n)th trial.\n\n        If one throws a die repeatedly until the third time a \"1\" appears, then the\n        probability distribution of the number of non-\"1\"s that appear before the\n        third \"1\" is a negative binomial distribution.\n\n        References\n        ----------\n        .. [1] Weisstein, Eric W. \"Negative Binomial Distribution.\" From\n               MathWorld--A Wolfram Web Resource.\n               http://mathworld.wolfram.com/NegativeBinomialDistribution.html\n        .. [2] Wikipedia, \"Negative binomial distribution\",\n               http://en.wikipedia.org/wiki/Negative_binomial_distribution\n\n        Examples\n        --------\n        Draw samples from the distribution:\n\n        A real world example. A company drills wild-cat oil exploration well""s, each\n        with an estimated probability of success of 0.1.  What is the probability\n        of having one success for each successive well, that is what is the\n        probability of a single success after drilling 5 wells, after 6 wells,\n        etc.?\n\n        >>> s = np.random.negative_binomial(1, 0.1, 100000)\n        >>> for i in range(1, 11):\n        ...    probability = sum(s<i) / 100000.\n        ...    print i, \"wells drilled, probability of one success =\", probability\n\n        ";
    7470 +static PyObject *__pyx_pw_6mtrand_11RandomState_83negative_binomial(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
    7471    PyObject *__pyx_v_n = 0;
    7472    PyObject *__pyx_v_p = 0;
    7473    PyObject *__pyx_v_size = 0;
    7474 -  PyArrayObject *__pyx_v_on = 0;
    7475 -  PyArrayObject *__pyx_v_op = 0;
    7476 -  double __pyx_v_fn;
    7477 -  double __pyx_v_fp;
    7478 -  PyObject *__pyx_r = NULL;
    7479 +  PyObject *__pyx_r = 0;
    7480    __Pyx_RefNannyDeclarations
    7481 -  int __pyx_t_1;
    7482 -  PyObject *__pyx_t_2 = NULL;
    7483 -  PyObject *__pyx_t_3 = NULL;
    7484 -  PyObject *__pyx_t_4 = NULL;
    7485 -  PyObject *__pyx_t_5 = NULL;
    7486 -  int __pyx_lineno = 0;
    7487 -  const char *__pyx_filename = NULL;
    7488 -  int __pyx_clineno = 0;
    7489 -  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__n,&__pyx_n_s__p,&__pyx_n_s__size,0};
    7490 -  __Pyx_RefNannySetupContext("negative_binomial");
    7491 +  __Pyx_RefNannySetupContext("negative_binomial (wrapper)", 0);
    7492    {
    7493 +    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__n,&__pyx_n_s__p,&__pyx_n_s__size,0};
    7494      PyObject* values[3] = {0,0,0};
    7495 +
    7496 +    /* "mtrand.pyx":3349
    7497 + *         return discnp_array(self.internal_state, rk_binomial, size, on, op)
    7498 + *
    7499 + *     def negative_binomial(self, n, p, size=None):             # <<<<<<<<<<<<<<
    7500 + *         """
    7501 + *         negative_binomial(n, p, size=None)
    7502 + */
    7503      values[2] = ((PyObject *)Py_None);
    7504      if (unlikely(__pyx_kwds)) {
    7505        Py_ssize_t kw_args;
    7506 -      switch (PyTuple_GET_SIZE(__pyx_args)) {
    7507 +      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
    7508 +      switch (pos_args) {
    7509          case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
    7510          case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    7511          case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    7512 @@ -14238,14 +14780,12 @@
    7513          default: goto __pyx_L5_argtuple_error;
    7514        }
    7515        kw_args = PyDict_Size(__pyx_kwds);
    7516 -      switch (PyTuple_GET_SIZE(__pyx_args)) {
    7517 +      switch (pos_args) {
    7518          case  0:
    7519 -        values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__n);
    7520 -        if (likely(values[0])) kw_args--;
    7521 +        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__n)) != 0)) kw_args--;
    7522          else goto __pyx_L5_argtuple_error;
    7523          case  1:
    7524 -        values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__p);
    7525 -        if (likely(values[1])) kw_args--;
    7526 +        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__p)) != 0)) kw_args--;
    7527          else {
    7528            __Pyx_RaiseArgtupleInvalid("negative_binomial", 0, 2, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3349; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    7529          }
    7530 @@ -14256,7 +14796,7 @@
    7531          }
    7532        }
    7533        if (unlikely(kw_args > 0)) {
    7534 -        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "negative_binomial") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3349; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    7535 +        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "negative_binomial") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3349; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    7536        }
    7537      } else {
    7538        switch (PyTuple_GET_SIZE(__pyx_args)) {
    7539 @@ -14279,7 +14819,28 @@
    7540    __Pyx_RefNannyFinishContext();
    7541    return NULL;
    7542    __pyx_L4_argument_unpacking_done:;
    7543 -
    7544 +  __pyx_r = __pyx_pf_6mtrand_11RandomState_82negative_binomial(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self), __pyx_v_n, __pyx_v_p, __pyx_v_size);
    7545 +  __Pyx_RefNannyFinishContext();
    7546 +  return __pyx_r;
    7547 +}
    7548 +
    7549 +static PyObject *__pyx_pf_6mtrand_11RandomState_82negative_binomial(struct __pyx_obj_6mtrand_RandomState *__pyx_v_self, PyObject *__pyx_v_n, PyObject *__pyx_v_p, PyObject *__pyx_v_size) {
    7550 +  PyArrayObject *__pyx_v_on = 0;
    7551 +  PyArrayObject *__pyx_v_op = 0;
    7552 +  double __pyx_v_fn;
    7553 +  double __pyx_v_fp;
    7554 +  PyObject *__pyx_r = NULL;
    7555 +  __Pyx_RefNannyDeclarations
    7556 +  int __pyx_t_1;
    7557 +  PyObject *__pyx_t_2 = NULL;
    7558 +  PyObject *__pyx_t_3 = NULL;
    7559 +  PyObject *__pyx_t_4 = NULL;
    7560 +  PyObject *__pyx_t_5 = NULL;
    7561 +  int __pyx_lineno = 0;
    7562 +  const char *__pyx_filename = NULL;
    7563 +  int __pyx_clineno = 0;
    7564 +  __Pyx_RefNannySetupContext("negative_binomial", 0);
    7565 +
    7566    /* "mtrand.pyx":3419
    7567   *         cdef double fp
    7568   *
    7569 @@ -14330,9 +14891,9 @@
    7570        __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    7571        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    7572        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3423; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    7573 -      goto __pyx_L7;
    7574 +      goto __pyx_L4;
    7575      }
    7576 -    __pyx_L7:;
    7577 +    __pyx_L4:;
    7578  
    7579      /* "mtrand.pyx":3424
    7580   *             if fn <= 0:
    7581 @@ -14356,7 +14917,7 @@
    7582        __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    7583        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    7584        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3425; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    7585 -      goto __pyx_L8;
    7586 +      goto __pyx_L5;
    7587      }
    7588  
    7589      /* "mtrand.pyx":3426
    7590 @@ -14381,9 +14942,9 @@
    7591        __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    7592        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    7593        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3427; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    7594 -      goto __pyx_L8;
    7595 +      goto __pyx_L5;
    7596      }
    7597 -    __pyx_L8:;
    7598 +    __pyx_L5:;
    7599  
    7600      /* "mtrand.pyx":3428
    7601   *             elif fp > 1:
    7602 @@ -14401,14 +14962,14 @@
    7603   *
    7604   *         PyErr_Clear()
    7605   */
    7606 -    __pyx_t_2 = __pyx_f_6mtrand_discdd_array_sc(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state, rk_negative_binomial, __pyx_v_size, __pyx_v_fn, __pyx_v_fp); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3428; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    7607 +    __pyx_t_2 = __pyx_f_6mtrand_discdd_array_sc(__pyx_v_self->internal_state, rk_negative_binomial, __pyx_v_size, __pyx_v_fn, __pyx_v_fp); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3428; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    7608      __Pyx_GOTREF(__pyx_t_2);
    7609      __pyx_r = __pyx_t_2;
    7610      __pyx_t_2 = 0;
    7611      goto __pyx_L0;
    7612 -    goto __pyx_L6;
    7613 +    goto __pyx_L3;
    7614    }
    7615 -  __pyx_L6:;
    7616 +  __pyx_L3:;
    7617  
    7618    /* "mtrand.pyx":3431
    7619   *                                    size, fn, fp)
    7620 @@ -14463,7 +15024,7 @@
    7621    __Pyx_GOTREF(__pyx_t_4);
    7622    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    7623    __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3435; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    7624 -  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
    7625 +  __Pyx_GOTREF(__pyx_t_2);
    7626    __Pyx_INCREF(__pyx_v_n);
    7627    PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_n);
    7628    __Pyx_GIVEREF(__pyx_v_n);
    7629 @@ -14475,7 +15036,7 @@
    7630    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    7631    __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
    7632    __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3435; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    7633 -  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
    7634 +  __Pyx_GOTREF(__pyx_t_2);
    7635    PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_5);
    7636    __Pyx_GIVEREF(__pyx_t_5);
    7637    __pyx_t_5 = 0;
    7638 @@ -14499,9 +15060,9 @@
    7639      __Pyx_Raise(__pyx_t_5, 0, 0, 0);
    7640      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    7641      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3436; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    7642 -    goto __pyx_L9;
    7643 +    goto __pyx_L6;
    7644    }
    7645 -  __pyx_L9:;
    7646 +  __pyx_L6:;
    7647  
    7648    /* "mtrand.pyx":3437
    7649   *         if np.any(np.less_equal(n, 0)):
    7650 @@ -14521,7 +15082,7 @@
    7651    __Pyx_GOTREF(__pyx_t_3);
    7652    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    7653    __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3437; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    7654 -  __Pyx_GOTREF(((PyObject *)__pyx_t_5));
    7655 +  __Pyx_GOTREF(__pyx_t_5);
    7656    __Pyx_INCREF(__pyx_v_p);
    7657    PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_p);
    7658    __Pyx_GIVEREF(__pyx_v_p);
    7659 @@ -14533,7 +15094,7 @@
    7660    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    7661    __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
    7662    __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3437; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    7663 -  __Pyx_GOTREF(((PyObject *)__pyx_t_5));
    7664 +  __Pyx_GOTREF(__pyx_t_5);
    7665    PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4);
    7666    __Pyx_GIVEREF(__pyx_t_4);
    7667    __pyx_t_4 = 0;
    7668 @@ -14557,9 +15118,9 @@
    7669      __Pyx_Raise(__pyx_t_4, 0, 0, 0);
    7670      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    7671      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3438; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    7672 -    goto __pyx_L10;
    7673 +    goto __pyx_L7;
    7674    }
    7675 -  __pyx_L10:;
    7676 +  __pyx_L7:;
    7677  
    7678    /* "mtrand.pyx":3439
    7679   *         if np.any(np.less(p, 0)):
    7680 @@ -14579,7 +15140,7 @@
    7681    __Pyx_GOTREF(__pyx_t_2);
    7682    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    7683    __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3439; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    7684 -  __Pyx_GOTREF(((PyObject *)__pyx_t_4));
    7685 +  __Pyx_GOTREF(__pyx_t_4);
    7686    __Pyx_INCREF(__pyx_v_p);
    7687    PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_p);
    7688    __Pyx_GIVEREF(__pyx_v_p);
    7689 @@ -14591,7 +15152,7 @@
    7690    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    7691    __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
    7692    __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3439; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    7693 -  __Pyx_GOTREF(((PyObject *)__pyx_t_4));
    7694 +  __Pyx_GOTREF(__pyx_t_4);
    7695    PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3);
    7696    __Pyx_GIVEREF(__pyx_t_3);
    7697    __pyx_t_3 = 0;
    7698 @@ -14615,9 +15176,9 @@
    7699      __Pyx_Raise(__pyx_t_3, 0, 0, 0);
    7700      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    7701      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3440; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    7702 -    goto __pyx_L11;
    7703 +    goto __pyx_L8;
    7704    }
    7705 -  __pyx_L11:;
    7706 +  __pyx_L8:;
    7707  
    7708    /* "mtrand.pyx":3441
    7709   *         if np.any(np.greater(p, 1)):
    7710 @@ -14635,7 +15196,7 @@
    7711   *
    7712   *     def poisson(self, lam=1.0, size=None):
    7713   */
    7714 -  __pyx_t_3 = __pyx_f_6mtrand_discdd_array(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state, rk_negative_binomial, __pyx_v_size, __pyx_v_on, __pyx_v_op); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3441; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    7715 +  __pyx_t_3 = __pyx_f_6mtrand_discdd_array(__pyx_v_self->internal_state, rk_negative_binomial, __pyx_v_size, __pyx_v_on, __pyx_v_op); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3441; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    7716    __Pyx_GOTREF(__pyx_t_3);
    7717    __pyx_r = __pyx_t_3;
    7718    __pyx_t_3 = 0;
    7719 @@ -14658,47 +15219,39 @@
    7720    return __pyx_r;
    7721  }
    7722  
    7723 -/* "mtrand.pyx":3444
    7724 - *                             on, op)
    7725 - *
    7726 - *     def poisson(self, lam=1.0, size=None):             # <<<<<<<<<<<<<<
    7727 - *         """
    7728 - *         poisson(lam=1.0, size=None)
    7729 - */
    7730 -
    7731 -static PyObject *__pyx_pf_6mtrand_11RandomState_42poisson(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
    7732 -static char __pyx_doc_6mtrand_11RandomState_42poisson[] = "\n        poisson(lam=1.0, size=None)\n\n        Draw samples from a Poisson distribution.\n\n        The Poisson distribution is the limit of the Binomial\n        distribution for large N.\n\n        Parameters\n        ----------\n        lam : float\n            Expectation of interval, should be >= 0.\n        size : int or tuple of ints, optional\n            Output shape. If the given shape is, e.g., ``(m, n, k)``, then\n            ``m * n * k`` samples are drawn.\n\n        Notes\n        -----\n        The Poisson distribution\n\n        .. math:: f(k; \\lambda)=\\frac{\\lambda^k e^{-\\lambda}}{k!}\n\n        For events with an expected separation :math:`\\lambda` the Poisson\n        distribution :math:`f(k; \\lambda)` describes the probability of\n        :math:`k` events occurring within the observed interval :math:`\\lambda`.\n\n        Because the output is limited to the range of the C long type, a\n        ValueError is raised when `lam` is within 10 sigma of the maximum\n        representable value.\n\n        References\n        ----------\n        .. [1] Weisstein, Eric W. \"Poisson Distribution.\" From MathWorld--A Wolfram\n               Web Resource. http://mathworld.wolfram.com/PoissonDistribution.html\n        .. [2] Wikipedia, \"Poisson distribution\",\n           http://en.wikipedia.org/wiki/Poisson_distribution\n\n        Examples\n        --------\n        Draw samples from the distribution:\n\n        >>> import numpy as np\n        >>> s = np.random.poisson(5, 10000)\n\n        Display histogram of the sample:\n\n        >>> import matplotlib.pyplot as plt\n        >>> count, bins, ignored = plt.hist(s, 14, normed=True)\n        >>> plt.show()\n\n        ";
    7733 -static PyObject *__pyx_pf_6mtrand_11RandomState_42poisson(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
    7734 +/* Python wrapper */
    7735 +static PyObject *__pyx_pw_6mtrand_11RandomState_85poisson(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
    7736 +static char __pyx_doc_6mtrand_11RandomState_84poisson[] = "\n        poisson(lam=1.0, size=None)\n\n        Draw samples from a Poisson distribution.\n\n        The Poisson distribution is the limit of the Binomial\n        distribution for large N.\n\n        Parameters\n        ----------\n        lam : float\n            Expectation of interval, should be >= 0.\n        size : int or tuple of ints, optional\n            Output shape. If the given shape is, e.g., ``(m, n, k)``, then\n            ``m * n * k`` samples are drawn.\n\n        Notes\n        -----\n        The Poisson distribution\n\n        .. math:: f(k; \\lambda)=\\frac{\\lambda^k e^{-\\lambda}}{k!}\n\n        For events with an expected separation :math:`\\lambda` the Poisson\n        distribution :math:`f(k; \\lambda)` describes the probability of\n        :math:`k` events occurring within the observed interval :math:`\\lambda`.\n\n        Because the output is limited to the range of the C long type, a\n        ValueError is raised when `lam` is within 10 sigma of the maximum\n        representable value.\n\n        References\n        ----------\n        .. [1] Weisstein, Eric W. \"Poisson Distribution.\" From MathWorld--A Wolfram\n               Web Resource. http://mathworld.wolfram.com/PoissonDistribution.html\n        .. [2] Wikipedia, \"Poisson distribution\",\n           http://en.wikipedia.org/wiki/Poisson_distribution\n\n        Examples\n        --------\n        Draw samples from the distribution:\n\n        >>> import numpy as np\n        >>> s = np.random.poisson(5, 10000)\n\n        Display histogram of the sample:\n\n        >>> import matplotlib.pyplot as plt\n        >>> count, bins, ignored = plt.hist(s, 14, normed=True)\n        >>> plt.show()\n\n        ";
    7737 +static PyObject *__pyx_pw_6mtrand_11RandomState_85poisson(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
    7738    PyObject *__pyx_v_lam = 0;
    7739    PyObject *__pyx_v_size = 0;
    7740 -  PyArrayObject *__pyx_v_olam = 0;
    7741 -  double __pyx_v_flam;
    7742 -  PyObject *__pyx_r = NULL;
    7743 +  PyObject *__pyx_r = 0;
    7744    __Pyx_RefNannyDeclarations
    7745 -  int __pyx_t_1;
    7746 -  PyObject *__pyx_t_2 = NULL;
    7747 -  PyObject *__pyx_t_3 = NULL;
    7748 -  PyObject *__pyx_t_4 = NULL;
    7749 -  PyObject *__pyx_t_5 = NULL;
    7750 -  int __pyx_lineno = 0;
    7751 -  const char *__pyx_filename = NULL;
    7752 -  int __pyx_clineno = 0;
    7753 -  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__lam,&__pyx_n_s__size,0};
    7754 -  __Pyx_RefNannySetupContext("poisson");
    7755 +  __Pyx_RefNannySetupContext("poisson (wrapper)", 0);
    7756    {
    7757 +    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__lam,&__pyx_n_s__size,0};
    7758      PyObject* values[2] = {0,0};
    7759      values[0] = __pyx_k_125;
    7760 +
    7761 +    /* "mtrand.pyx":3444
    7762 + *                             on, op)
    7763 + *
    7764 + *     def poisson(self, lam=1.0, size=None):             # <<<<<<<<<<<<<<
    7765 + *         """
    7766 + *         poisson(lam=1.0, size=None)
    7767 + */
    7768      values[1] = ((PyObject *)Py_None);
    7769      if (unlikely(__pyx_kwds)) {
    7770        Py_ssize_t kw_args;
    7771 -      switch (PyTuple_GET_SIZE(__pyx_args)) {
    7772 +      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
    7773 +      switch (pos_args) {
    7774          case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    7775          case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    7776          case  0: break;
    7777          default: goto __pyx_L5_argtuple_error;
    7778        }
    7779        kw_args = PyDict_Size(__pyx_kwds);
    7780 -      switch (PyTuple_GET_SIZE(__pyx_args)) {
    7781 +      switch (pos_args) {
    7782          case  0:
    7783          if (kw_args > 0) {
    7784            PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__lam);
    7785 @@ -14711,7 +15264,7 @@
    7786          }
    7787        }
    7788        if (unlikely(kw_args > 0)) {
    7789 -        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "poisson") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3444; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    7790 +        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "poisson") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3444; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    7791        }
    7792      } else {
    7793        switch (PyTuple_GET_SIZE(__pyx_args)) {
    7794 @@ -14732,6 +15285,25 @@
    7795    __Pyx_RefNannyFinishContext();
    7796    return NULL;
    7797    __pyx_L4_argument_unpacking_done:;
    7798 +  __pyx_r = __pyx_pf_6mtrand_11RandomState_84poisson(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self), __pyx_v_lam, __pyx_v_size);
    7799 +  __Pyx_RefNannyFinishContext();
    7800 +  return __pyx_r;
    7801 +}
    7802 +
    7803 +static PyObject *__pyx_pf_6mtrand_11RandomState_84poisson(struct __pyx_obj_6mtrand_RandomState *__pyx_v_self, PyObject *__pyx_v_lam, PyObject *__pyx_v_size) {
    7804 +  PyArrayObject *__pyx_v_olam = 0;
    7805 +  double __pyx_v_flam;
    7806 +  PyObject *__pyx_r = NULL;
    7807 +  __Pyx_RefNannyDeclarations
    7808 +  int __pyx_t_1;
    7809 +  PyObject *__pyx_t_2 = NULL;
    7810 +  PyObject *__pyx_t_3 = NULL;
    7811 +  PyObject *__pyx_t_4 = NULL;
    7812 +  PyObject *__pyx_t_5 = NULL;
    7813 +  int __pyx_lineno = 0;
    7814 +  const char *__pyx_filename = NULL;
    7815 +  int __pyx_clineno = 0;
    7816 +  __Pyx_RefNannySetupContext("poisson", 0);
    7817  
    7818    /* "mtrand.pyx":3498
    7819   *         cdef ndarray olam
    7820 @@ -14759,8 +15331,7 @@
    7821   *                 raise ValueError("lam < 0")
    7822   *             if lam > self.poisson_lam_max:
    7823   */
    7824 -    __pyx_t_2 = PyObject_RichCompare(__pyx_v_lam, __pyx_int_0, Py_LT); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3500; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    7825 -    __Pyx_GOTREF(__pyx_t_2);
    7826 +    __pyx_t_2 = PyObject_RichCompare(__pyx_v_lam, __pyx_int_0, Py_LT); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3500; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    7827      __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3500; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    7828      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    7829      if (__pyx_t_1) {
    7830 @@ -14777,9 +15348,9 @@
    7831        __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    7832        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    7833        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3501; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    7834 -      goto __pyx_L7;
    7835 +      goto __pyx_L4;
    7836      }
    7837 -    __pyx_L7:;
    7838 +    __pyx_L4:;
    7839  
    7840      /* "mtrand.pyx":3502
    7841   *             if lam < 0:
    7842 @@ -14788,10 +15359,9 @@
    7843   *                 raise ValueError("lam value too large")
    7844   *             return discd_array_sc(self.internal_state, rk_poisson, size, flam)
    7845   */
    7846 -    __pyx_t_2 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__poisson_lam_max); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3502; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    7847 +    __pyx_t_2 = PyObject_GetAttr(((PyObject *)__pyx_v_self), __pyx_n_s__poisson_lam_max); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3502; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    7848      __Pyx_GOTREF(__pyx_t_2);
    7849 -    __pyx_t_3 = PyObject_RichCompare(__pyx_v_lam, __pyx_t_2, Py_GT); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3502; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    7850 -    __Pyx_GOTREF(__pyx_t_3);
    7851 +    __pyx_t_3 = PyObject_RichCompare(__pyx_v_lam, __pyx_t_2, Py_GT); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3502; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    7852      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    7853      __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3502; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    7854      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    7855 @@ -14809,9 +15379,9 @@
    7856        __Pyx_Raise(__pyx_t_3, 0, 0, 0);
    7857        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    7858        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3503; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    7859 -      goto __pyx_L8;
    7860 +      goto __pyx_L5;
    7861      }
    7862 -    __pyx_L8:;
    7863 +    __pyx_L5:;
    7864  
    7865      /* "mtrand.pyx":3504
    7866   *             if lam > self.poisson_lam_max:
    7867 @@ -14821,14 +15391,14 @@
    7868   *         PyErr_Clear()
    7869   */
    7870      __Pyx_XDECREF(__pyx_r);
    7871 -    __pyx_t_3 = __pyx_f_6mtrand_discd_array_sc(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state, rk_poisson, __pyx_v_size, __pyx_v_flam); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3504; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    7872 +    __pyx_t_3 = __pyx_f_6mtrand_discd_array_sc(__pyx_v_self->internal_state, rk_poisson, __pyx_v_size, __pyx_v_flam); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3504; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    7873      __Pyx_GOTREF(__pyx_t_3);
    7874      __pyx_r = __pyx_t_3;
    7875      __pyx_t_3 = 0;
    7876      goto __pyx_L0;
    7877 -    goto __pyx_L6;
    7878 +    goto __pyx_L3;
    7879    }
    7880 -  __pyx_L6:;
    7881 +  __pyx_L3:;
    7882  
    7883    /* "mtrand.pyx":3506
    7884   *             return discd_array_sc(self.internal_state, rk_poisson, size, flam)
    7885 @@ -14870,7 +15440,7 @@
    7886    __Pyx_GOTREF(__pyx_t_4);
    7887    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    7888    __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3509; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    7889 -  __Pyx_GOTREF(((PyObject *)__pyx_t_3));
    7890 +  __Pyx_GOTREF(__pyx_t_3);
    7891    __Pyx_INCREF(((PyObject *)__pyx_v_olam));
    7892    PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_v_olam));
    7893    __Pyx_GIVEREF(((PyObject *)__pyx_v_olam));
    7894 @@ -14882,7 +15452,7 @@
    7895    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    7896    __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
    7897    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3509; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    7898 -  __Pyx_GOTREF(((PyObject *)__pyx_t_3));
    7899 +  __Pyx_GOTREF(__pyx_t_3);
    7900    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_5);
    7901    __Pyx_GIVEREF(__pyx_t_5);
    7902    __pyx_t_5 = 0;
    7903 @@ -14906,9 +15476,9 @@
    7904      __Pyx_Raise(__pyx_t_5, 0, 0, 0);
    7905      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    7906      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3510; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    7907 -    goto __pyx_L9;
    7908 +    goto __pyx_L6;
    7909    }
    7910 -  __pyx_L9:;
    7911 +  __pyx_L6:;
    7912  
    7913    /* "mtrand.pyx":3511
    7914   *         if np.any(np.less(olam, 0)):
    7915 @@ -14927,10 +15497,10 @@
    7916    __pyx_t_2 = PyObject_GetAttr(__pyx_t_5, __pyx_n_s__greater); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3511; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    7917    __Pyx_GOTREF(__pyx_t_2);
    7918    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    7919 -  __pyx_t_5 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__poisson_lam_max); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3511; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    7920 +  __pyx_t_5 = PyObject_GetAttr(((PyObject *)__pyx_v_self), __pyx_n_s__poisson_lam_max); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3511; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    7921    __Pyx_GOTREF(__pyx_t_5);
    7922    __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3511; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    7923 -  __Pyx_GOTREF(((PyObject *)__pyx_t_4));
    7924 +  __Pyx_GOTREF(__pyx_t_4);
    7925    __Pyx_INCREF(((PyObject *)__pyx_v_olam));
    7926    PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)__pyx_v_olam));
    7927    __Pyx_GIVEREF(((PyObject *)__pyx_v_olam));
    7928 @@ -14942,7 +15512,7 @@
    7929    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    7930    __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
    7931    __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3511; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    7932 -  __Pyx_GOTREF(((PyObject *)__pyx_t_4));
    7933 +  __Pyx_GOTREF(__pyx_t_4);
    7934    PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_5);
    7935    __Pyx_GIVEREF(__pyx_t_5);
    7936    __pyx_t_5 = 0;
    7937 @@ -14966,9 +15536,9 @@
    7938      __Pyx_Raise(__pyx_t_5, 0, 0, 0);
    7939      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    7940      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3512; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    7941 -    goto __pyx_L10;
    7942 +    goto __pyx_L7;
    7943    }
    7944 -  __pyx_L10:;
    7945 +  __pyx_L7:;
    7946  
    7947    /* "mtrand.pyx":3513
    7948   *         if np.any(np.greater(olam, self.poisson_lam_max)):
    7949 @@ -14978,7 +15548,7 @@
    7950   *     def zipf(self, a, size=None):
    7951   */
    7952    __Pyx_XDECREF(__pyx_r);
    7953 -  __pyx_t_5 = __pyx_f_6mtrand_discd_array(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state, rk_poisson, __pyx_v_size, __pyx_v_olam); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3513; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    7954 +  __pyx_t_5 = __pyx_f_6mtrand_discd_array(__pyx_v_self->internal_state, rk_poisson, __pyx_v_size, __pyx_v_olam); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3513; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    7955    __Pyx_GOTREF(__pyx_t_5);
    7956    __pyx_r = __pyx_t_5;
    7957    __pyx_t_5 = 0;
    7958 @@ -15000,49 +15570,40 @@
    7959    return __pyx_r;
    7960  }
    7961  
    7962 -/* "mtrand.pyx":3515
    7963 +/* Python wrapper */
    7964 +static PyObject *__pyx_pw_6mtrand_11RandomState_87zipf(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
    7965 +static char __pyx_doc_6mtrand_11RandomState_86zipf[] = "\n        zipf(a, size=None)\n\n        Draw samples from a Zipf distribution.\n\n        Samples are drawn from a Zipf distribution with specified parameter\n        `a` > 1.\n\n        The Zipf distribution (also known as the zeta distribution) is a\n        continuous probability distribution that satisfies Zipf's law: the\n        frequency of an item is inversely proportional to its rank in a\n        frequency table.\n\n        Parameters\n        ----------\n        a : float > 1\n            Distribution parameter.\n        size : int or tuple of int, optional\n            Output shape.  If the given shape is, e.g., ``(m, n, k)``, then\n            ``m * n * k`` samples are drawn; a single integer is equivalent in\n            its result to providing a mono-tuple, i.e., a 1-D array of length\n            *size* is returned.  The default is None, in which case a single\n            scalar is returned.\n\n        Returns\n        -------\n        samples : scalar or ndarray\n            The returned samples are greater than or equal to one.\n\n        See Also\n        --------\n        scipy.stats.distributions.zipf : probability density function,\n            distribution, or cumulative density function, etc.\n\n        Notes\n        -----\n        The probability density for the Zipf distribution is\n\n        .. math:: p(x) = \\frac{x^{-a}}{\\zeta(a)},\n\n        where :math:`\\zeta` is the Riemann Zeta function.\n\n        It is named for the American linguist George Kingsley Zipf, who noted\n        that the frequency of any word in a sample of a language is inversely\n        proportional to its rank in the frequency table.\n\n        References\n        ----------\n        Zipf, G. K., *Selected Studies of the Principle of Relative Frequency\n        in Language*, Cambridge, MA: Harvard Univ. Press, 1932.\n\n        Examples\n        --------\n        Draw samples from the distribution:\n\n        >>> a = 2. # parameter\n        >>> s = np.random.zipf""(a, 1000)\n\n        Display the histogram of the samples, along with\n        the probability density function:\n\n        >>> import matplotlib.pyplot as plt\n        >>> import scipy.special as sps\n        Truncate s values at 50 so plot is interesting\n        >>> count, bins, ignored = plt.hist(s[s<50], 50, normed=True)\n        >>> x = np.arange(1., 50.)\n        >>> y = x**(-a)/sps.zetac(a)\n        >>> plt.plot(x, y/max(y), linewidth=2, color='r')\n        >>> plt.show()\n\n        ";
    7966 +static PyObject *__pyx_pw_6mtrand_11RandomState_87zipf(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
    7967 +  PyObject *__pyx_v_a = 0;
    7968 +  PyObject *__pyx_v_size = 0;
    7969 +  PyObject *__pyx_r = 0;
    7970 +  __Pyx_RefNannyDeclarations
    7971 +  __Pyx_RefNannySetupContext("zipf (wrapper)", 0);
    7972 +  {
    7973 +    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__a,&__pyx_n_s__size,0};
    7974 +    PyObject* values[2] = {0,0};
    7975 +
    7976 +    /* "mtrand.pyx":3515
    7977   *         return discd_array(self.internal_state, rk_poisson, size, olam)
    7978   *
    7979   *     def zipf(self, a, size=None):             # <<<<<<<<<<<<<<
    7980   *         """
    7981   *         zipf(a, size=None)
    7982   */
    7983 -
    7984 -static PyObject *__pyx_pf_6mtrand_11RandomState_43zipf(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
    7985 -static char __pyx_doc_6mtrand_11RandomState_43zipf[] = "\n        zipf(a, size=None)\n\n        Draw samples from a Zipf distribution.\n\n        Samples are drawn from a Zipf distribution with specified parameter\n        `a` > 1.\n\n        The Zipf distribution (also known as the zeta distribution) is a\n        continuous probability distribution that satisfies Zipf's law: the\n        frequency of an item is inversely proportional to its rank in a\n        frequency table.\n\n        Parameters\n        ----------\n        a : float > 1\n            Distribution parameter.\n        size : int or tuple of int, optional\n            Output shape.  If the given shape is, e.g., ``(m, n, k)``, then\n            ``m * n * k`` samples are drawn; a single integer is equivalent in\n            its result to providing a mono-tuple, i.e., a 1-D array of length\n            *size* is returned.  The default is None, in which case a single\n            scalar is returned.\n\n        Returns\n        -------\n        samples : scalar or ndarray\n            The returned samples are greater than or equal to one.\n\n        See Also\n        --------\n        scipy.stats.distributions.zipf : probability density function,\n            distribution, or cumulative density function, etc.\n\n        Notes\n        -----\n        The probability density for the Zipf distribution is\n\n        .. math:: p(x) = \\frac{x^{-a}}{\\zeta(a)},\n\n        where :math:`\\zeta` is the Riemann Zeta function.\n\n        It is named for the American linguist George Kingsley Zipf, who noted\n        that the frequency of any word in a sample of a language is inversely\n        proportional to its rank in the frequency table.\n\n        References\n        ----------\n        Zipf, G. K., *Selected Studies of the Principle of Relative Frequency\n        in Language*, Cambridge, MA: Harvard Univ. Press, 1932.\n\n        Examples\n        --------\n        Draw samples from the distribution:\n\n        >>> a = 2. # parameter\n        >>> s = np.random.zipf""(a, 1000)\n\n        Display the histogram of the samples, along with\n        the probability density function:\n\n        >>> import matplotlib.pyplot as plt\n        >>> import scipy.special as sps\n        Truncate s values at 50 so plot is interesting\n        >>> count, bins, ignored = plt.hist(s[s<50], 50, normed=True)\n        >>> x = np.arange(1., 50.)\n        >>> y = x**(-a)/sps.zetac(a)\n        >>> plt.plot(x, y/max(y), linewidth=2, color='r')\n        >>> plt.show()\n\n        ";
    7986 -static PyObject *__pyx_pf_6mtrand_11RandomState_43zipf(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
    7987 -  PyObject *__pyx_v_a = 0;
    7988 -  PyObject *__pyx_v_size = 0;
    7989 -  PyArrayObject *__pyx_v_oa = 0;
    7990 -  double __pyx_v_fa;
    7991 -  PyObject *__pyx_r = NULL;
    7992 -  __Pyx_RefNannyDeclarations
    7993 -  int __pyx_t_1;
    7994 -  PyObject *__pyx_t_2 = NULL;
    7995 -  PyObject *__pyx_t_3 = NULL;
    7996 -  PyObject *__pyx_t_4 = NULL;
    7997 -  PyObject *__pyx_t_5 = NULL;
    7998 -  int __pyx_lineno = 0;
    7999 -  const char *__pyx_filename = NULL;
    8000 -  int __pyx_clineno = 0;
    8001 -  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__a,&__pyx_n_s__size,0};
    8002 -  __Pyx_RefNannySetupContext("zipf");
    8003 -  {
    8004 -    PyObject* values[2] = {0,0};
    8005      values[1] = ((PyObject *)Py_None);
    8006      if (unlikely(__pyx_kwds)) {
    8007        Py_ssize_t kw_args;
    8008 -      switch (PyTuple_GET_SIZE(__pyx_args)) {
    8009 +      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
    8010 +      switch (pos_args) {
    8011          case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    8012          case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    8013          case  0: break;
    8014          default: goto __pyx_L5_argtuple_error;
    8015        }
    8016        kw_args = PyDict_Size(__pyx_kwds);
    8017 -      switch (PyTuple_GET_SIZE(__pyx_args)) {
    8018 +      switch (pos_args) {
    8019          case  0:
    8020 -        values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__a);
    8021 -        if (likely(values[0])) kw_args--;
    8022 +        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__a)) != 0)) kw_args--;
    8023          else goto __pyx_L5_argtuple_error;
    8024          case  1:
    8025          if (kw_args > 0) {
    8026 @@ -15051,7 +15612,7 @@
    8027          }
    8028        }
    8029        if (unlikely(kw_args > 0)) {
    8030 -        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "zipf") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3515; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    8031 +        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "zipf") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3515; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    8032        }
    8033      } else {
    8034        switch (PyTuple_GET_SIZE(__pyx_args)) {
    8035 @@ -15072,6 +15633,25 @@
    8036    __Pyx_RefNannyFinishContext();
    8037    return NULL;
    8038    __pyx_L4_argument_unpacking_done:;
    8039 +  __pyx_r = __pyx_pf_6mtrand_11RandomState_86zipf(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self), __pyx_v_a, __pyx_v_size);
    8040 +  __Pyx_RefNannyFinishContext();
    8041 +  return __pyx_r;
    8042 +}
    8043 +
    8044 +static PyObject *__pyx_pf_6mtrand_11RandomState_86zipf(struct __pyx_obj_6mtrand_RandomState *__pyx_v_self, PyObject *__pyx_v_a, PyObject *__pyx_v_size) {
    8045 +  PyArrayObject *__pyx_v_oa = 0;
    8046 +  double __pyx_v_fa;
    8047 +  PyObject *__pyx_r = NULL;
    8048 +  __Pyx_RefNannyDeclarations
    8049 +  int __pyx_t_1;
    8050 +  PyObject *__pyx_t_2 = NULL;
    8051 +  PyObject *__pyx_t_3 = NULL;
    8052 +  PyObject *__pyx_t_4 = NULL;
    8053 +  PyObject *__pyx_t_5 = NULL;
    8054 +  int __pyx_lineno = 0;
    8055 +  const char *__pyx_filename = NULL;
    8056 +  int __pyx_clineno = 0;
    8057 +  __Pyx_RefNannySetupContext("zipf", 0);
    8058  
    8059    /* "mtrand.pyx":3590
    8060   *         cdef double fa
    8061 @@ -15114,9 +15694,9 @@
    8062        __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    8063        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    8064        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3593; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    8065 -      goto __pyx_L7;
    8066 +      goto __pyx_L4;
    8067      }
    8068 -    __pyx_L7:;
    8069 +    __pyx_L4:;
    8070  
    8071      /* "mtrand.pyx":3594
    8072   *             if fa <= 1.0:
    8073 @@ -15126,14 +15706,14 @@
    8074   *         PyErr_Clear()
    8075   */
    8076      __Pyx_XDECREF(__pyx_r);
    8077 -    __pyx_t_2 = __pyx_f_6mtrand_discd_array_sc(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state, rk_zipf, __pyx_v_size, __pyx_v_fa); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3594; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    8078 +    __pyx_t_2 = __pyx_f_6mtrand_discd_array_sc(__pyx_v_self->internal_state, rk_zipf, __pyx_v_size, __pyx_v_fa); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3594; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    8079      __Pyx_GOTREF(__pyx_t_2);
    8080      __pyx_r = __pyx_t_2;
    8081      __pyx_t_2 = 0;
    8082      goto __pyx_L0;
    8083 -    goto __pyx_L6;
    8084 +    goto __pyx_L3;
    8085    }
    8086 -  __pyx_L6:;
    8087 +  __pyx_L3:;
    8088  
    8089    /* "mtrand.pyx":3596
    8090   *             return discd_array_sc(self.internal_state, rk_zipf, size, fa)
    8091 @@ -15177,7 +15757,7 @@
    8092    __pyx_t_2 = PyFloat_FromDouble(1.0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3599; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    8093    __Pyx_GOTREF(__pyx_t_2);
    8094    __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3599; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    8095 -  __Pyx_GOTREF(((PyObject *)__pyx_t_5));
    8096 +  __Pyx_GOTREF(__pyx_t_5);
    8097    __Pyx_INCREF(((PyObject *)__pyx_v_oa));
    8098    PyTuple_SET_ITEM(__pyx_t_5, 0, ((PyObject *)__pyx_v_oa));
    8099    __Pyx_GIVEREF(((PyObject *)__pyx_v_oa));
    8100 @@ -15189,7 +15769,7 @@
    8101    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    8102    __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
    8103    __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3599; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    8104 -  __Pyx_GOTREF(((PyObject *)__pyx_t_5));
    8105 +  __Pyx_GOTREF(__pyx_t_5);
    8106    PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2);
    8107    __Pyx_GIVEREF(__pyx_t_2);
    8108    __pyx_t_2 = 0;
    8109 @@ -15213,9 +15793,9 @@
    8110      __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    8111      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    8112      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3600; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    8113 -    goto __pyx_L8;
    8114 +    goto __pyx_L5;
    8115    }
    8116 -  __pyx_L8:;
    8117 +  __pyx_L5:;
    8118  
    8119    /* "mtrand.pyx":3601
    8120   *         if np.any(np.less_equal(oa, 1.0)):
    8121 @@ -15225,7 +15805,7 @@
    8122   *     def geometric(self, p, size=None):
    8123   */
    8124    __Pyx_XDECREF(__pyx_r);
    8125 -  __pyx_t_2 = __pyx_f_6mtrand_discd_array(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state, rk_zipf, __pyx_v_size, __pyx_v_oa); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3601; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    8126 +  __pyx_t_2 = __pyx_f_6mtrand_discd_array(__pyx_v_self->internal_state, rk_zipf, __pyx_v_size, __pyx_v_oa); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3601; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    8127    __Pyx_GOTREF(__pyx_t_2);
    8128    __pyx_r = __pyx_t_2;
    8129    __pyx_t_2 = 0;
    8130 @@ -15247,49 +15827,40 @@
    8131    return __pyx_r;
    8132  }
    8133  
    8134 -/* "mtrand.pyx":3603
    8135 +/* Python wrapper */
    8136 +static PyObject *__pyx_pw_6mtrand_11RandomState_89geometric(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
    8137 +static char __pyx_doc_6mtrand_11RandomState_88geometric[] = "\n        geometric(p, size=None)\n\n        Draw samples from the geometric distribution.\n\n        Bernoulli trials are experiments with one of two outcomes:\n        success or failure (an example of such an experiment is flipping\n        a coin).  The geometric distribution models the number of trials\n        that must be run in order to achieve success.  It is therefore\n        supported on the positive integers, ``k = 1, 2, ...``.\n\n        The probability mass function of the geometric distribution is\n\n        .. math:: f(k) = (1 - p)^{k - 1} p\n\n        where `p` is the probability of success of an individual trial.\n\n        Parameters\n        ----------\n        p : float\n            The probability of success of an individual trial.\n        size : tuple of ints\n            Number of values to draw from the distribution.  The output\n            is shaped according to `size`.\n\n        Returns\n        -------\n        out : ndarray\n            Samples from the geometric distribution, shaped according to\n            `size`.\n\n        Examples\n        --------\n        Draw ten thousand values from the geometric distribution,\n        with the probability of an individual success equal to 0.35:\n\n        >>> z = np.random.geometric(p=0.35, size=10000)\n\n        How many trials succeeded after a single run?\n\n        >>> (z == 1).sum() / 10000.\n        0.34889999999999999 #random\n\n        ";
    8138 +static PyObject *__pyx_pw_6mtrand_11RandomState_89geometric(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
    8139 +  PyObject *__pyx_v_p = 0;
    8140 +  PyObject *__pyx_v_size = 0;
    8141 +  PyObject *__pyx_r = 0;
    8142 +  __Pyx_RefNannyDeclarations
    8143 +  __Pyx_RefNannySetupContext("geometric (wrapper)", 0);
    8144 +  {
    8145 +    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__p,&__pyx_n_s__size,0};
    8146 +    PyObject* values[2] = {0,0};
    8147 +
    8148 +    /* "mtrand.pyx":3603
    8149   *         return discd_array(self.internal_state, rk_zipf, size, oa)
    8150   *
    8151   *     def geometric(self, p, size=None):             # <<<<<<<<<<<<<<
    8152   *         """
    8153   *         geometric(p, size=None)
    8154   */
    8155 -
    8156 -static PyObject *__pyx_pf_6mtrand_11RandomState_44geometric(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
    8157 -static char __pyx_doc_6mtrand_11RandomState_44geometric[] = "\n        geometric(p, size=None)\n\n        Draw samples from the geometric distribution.\n\n        Bernoulli trials are experiments with one of two outcomes:\n        success or failure (an example of such an experiment is flipping\n        a coin).  The geometric distribution models the number of trials\n        that must be run in order to achieve success.  It is therefore\n        supported on the positive integers, ``k = 1, 2, ...``.\n\n        The probability mass function of the geometric distribution is\n\n        .. math:: f(k) = (1 - p)^{k - 1} p\n\n        where `p` is the probability of success of an individual trial.\n\n        Parameters\n        ----------\n        p : float\n            The probability of success of an individual trial.\n        size : tuple of ints\n            Number of values to draw from the distribution.  The output\n            is shaped according to `size`.\n\n        Returns\n        -------\n        out : ndarray\n            Samples from the geometric distribution, shaped according to\n            `size`.\n\n        Examples\n        --------\n        Draw ten thousand values from the geometric distribution,\n        with the probability of an individual success equal to 0.35:\n\n        >>> z = np.random.geometric(p=0.35, size=10000)\n\n        How many trials succeeded after a single run?\n\n        >>> (z == 1).sum() / 10000.\n        0.34889999999999999 #random\n\n        ";
    8158 -static PyObject *__pyx_pf_6mtrand_11RandomState_44geometric(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
    8159 -  PyObject *__pyx_v_p = 0;
    8160 -  PyObject *__pyx_v_size = 0;
    8161 -  PyArrayObject *__pyx_v_op = 0;
    8162 -  double __pyx_v_fp;
    8163 -  PyObject *__pyx_r = NULL;
    8164 -  __Pyx_RefNannyDeclarations
    8165 -  int __pyx_t_1;
    8166 -  PyObject *__pyx_t_2 = NULL;
    8167 -  PyObject *__pyx_t_3 = NULL;
    8168 -  PyObject *__pyx_t_4 = NULL;
    8169 -  PyObject *__pyx_t_5 = NULL;
    8170 -  int __pyx_lineno = 0;
    8171 -  const char *__pyx_filename = NULL;
    8172 -  int __pyx_clineno = 0;
    8173 -  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__p,&__pyx_n_s__size,0};
    8174 -  __Pyx_RefNannySetupContext("geometric");
    8175 -  {
    8176 -    PyObject* values[2] = {0,0};
    8177      values[1] = ((PyObject *)Py_None);
    8178      if (unlikely(__pyx_kwds)) {
    8179        Py_ssize_t kw_args;
    8180 -      switch (PyTuple_GET_SIZE(__pyx_args)) {
    8181 +      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
    8182 +      switch (pos_args) {
    8183          case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    8184          case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    8185          case  0: break;
    8186          default: goto __pyx_L5_argtuple_error;
    8187        }
    8188        kw_args = PyDict_Size(__pyx_kwds);
    8189 -      switch (PyTuple_GET_SIZE(__pyx_args)) {
    8190 +      switch (pos_args) {
    8191          case  0:
    8192 -        values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__p);
    8193 -        if (likely(values[0])) kw_args--;
    8194 +        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__p)) != 0)) kw_args--;
    8195          else goto __pyx_L5_argtuple_error;
    8196          case  1:
    8197          if (kw_args > 0) {
    8198 @@ -15298,7 +15869,7 @@
    8199          }
    8200        }
    8201        if (unlikely(kw_args > 0)) {
    8202 -        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "geometric") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3603; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    8203 +        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "geometric") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3603; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    8204        }
    8205      } else {
    8206        switch (PyTuple_GET_SIZE(__pyx_args)) {
    8207 @@ -15319,6 +15890,25 @@
    8208    __Pyx_RefNannyFinishContext();
    8209    return NULL;
    8210    __pyx_L4_argument_unpacking_done:;
    8211 +  __pyx_r = __pyx_pf_6mtrand_11RandomState_88geometric(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self), __pyx_v_p, __pyx_v_size);
    8212 +  __Pyx_RefNannyFinishContext();
    8213 +  return __pyx_r;
    8214 +}
    8215 +
    8216 +static PyObject *__pyx_pf_6mtrand_11RandomState_88geometric(struct __pyx_obj_6mtrand_RandomState *__pyx_v_self, PyObject *__pyx_v_p, PyObject *__pyx_v_size) {
    8217 +  PyArrayObject *__pyx_v_op = 0;
    8218 +  double __pyx_v_fp;
    8219 +  PyObject *__pyx_r = NULL;
    8220 +  __Pyx_RefNannyDeclarations
    8221 +  int __pyx_t_1;
    8222 +  PyObject *__pyx_t_2 = NULL;
    8223 +  PyObject *__pyx_t_3 = NULL;
    8224 +  PyObject *__pyx_t_4 = NULL;
    8225 +  PyObject *__pyx_t_5 = NULL;
    8226 +  int __pyx_lineno = 0;
    8227 +  const char *__pyx_filename = NULL;
    8228 +  int __pyx_clineno = 0;
    8229 +  __Pyx_RefNannySetupContext("geometric", 0);
    8230  
    8231    /* "mtrand.pyx":3651
    8232   *         cdef double fp
    8233 @@ -15361,9 +15951,9 @@
    8234        __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    8235        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    8236        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3654; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    8237 -      goto __pyx_L7;
    8238 +      goto __pyx_L4;
    8239      }
    8240 -    __pyx_L7:;
    8241 +    __pyx_L4:;
    8242  
    8243      /* "mtrand.pyx":3655
    8244   *             if fp < 0.0:
    8245 @@ -15387,9 +15977,9 @@
    8246        __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    8247        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    8248        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3656; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    8249 -      goto __pyx_L8;
    8250 +      goto __pyx_L5;
    8251      }
    8252 -    __pyx_L8:;
    8253 +    __pyx_L5:;
    8254  
    8255      /* "mtrand.pyx":3657
    8256   *             if fp > 1.0:
    8257 @@ -15399,14 +15989,14 @@
    8258   *         PyErr_Clear()
    8259   */
    8260      __Pyx_XDECREF(__pyx_r);
    8261 -    __pyx_t_2 = __pyx_f_6mtrand_discd_array_sc(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state, rk_geometric, __pyx_v_size, __pyx_v_fp); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3657; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    8262 +    __pyx_t_2 = __pyx_f_6mtrand_discd_array_sc(__pyx_v_self->internal_state, rk_geometric, __pyx_v_size, __pyx_v_fp); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3657; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    8263      __Pyx_GOTREF(__pyx_t_2);
    8264      __pyx_r = __pyx_t_2;
    8265      __pyx_t_2 = 0;
    8266      goto __pyx_L0;
    8267 -    goto __pyx_L6;
    8268 +    goto __pyx_L3;
    8269    }
    8270 -  __pyx_L6:;
    8271 +  __pyx_L3:;
    8272  
    8273    /* "mtrand.pyx":3659
    8274   *             return discd_array_sc(self.internal_state, rk_geometric, size, fp)
    8275 @@ -15450,7 +16040,7 @@
    8276    __pyx_t_2 = PyFloat_FromDouble(0.0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3663; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    8277    __Pyx_GOTREF(__pyx_t_2);
    8278    __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3663; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    8279 -  __Pyx_GOTREF(((PyObject *)__pyx_t_5));
    8280 +  __Pyx_GOTREF(__pyx_t_5);
    8281    __Pyx_INCREF(((PyObject *)__pyx_v_op));
    8282    PyTuple_SET_ITEM(__pyx_t_5, 0, ((PyObject *)__pyx_v_op));
    8283    __Pyx_GIVEREF(((PyObject *)__pyx_v_op));
    8284 @@ -15462,7 +16052,7 @@
    8285    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    8286    __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
    8287    __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3663; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    8288 -  __Pyx_GOTREF(((PyObject *)__pyx_t_5));
    8289 +  __Pyx_GOTREF(__pyx_t_5);
    8290    PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2);
    8291    __Pyx_GIVEREF(__pyx_t_2);
    8292    __pyx_t_2 = 0;
    8293 @@ -15486,9 +16076,9 @@
    8294      __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    8295      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    8296      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3664; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    8297 -    goto __pyx_L9;
    8298 +    goto __pyx_L6;
    8299    }
    8300 -  __pyx_L9:;
    8301 +  __pyx_L6:;
    8302  
    8303    /* "mtrand.pyx":3665
    8304   *         if np.any(np.less(op, 0.0)):
    8305 @@ -15510,7 +16100,7 @@
    8306    __pyx_t_2 = PyFloat_FromDouble(1.0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3665; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    8307    __Pyx_GOTREF(__pyx_t_2);
    8308    __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3665; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    8309 -  __Pyx_GOTREF(((PyObject *)__pyx_t_4));
    8310 +  __Pyx_GOTREF(__pyx_t_4);
    8311    __Pyx_INCREF(((PyObject *)__pyx_v_op));
    8312    PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)__pyx_v_op));
    8313    __Pyx_GIVEREF(((PyObject *)__pyx_v_op));
    8314 @@ -15522,7 +16112,7 @@
    8315    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    8316    __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
    8317    __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3665; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    8318 -  __Pyx_GOTREF(((PyObject *)__pyx_t_4));
    8319 +  __Pyx_GOTREF(__pyx_t_4);
    8320    PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
    8321    __Pyx_GIVEREF(__pyx_t_2);
    8322    __pyx_t_2 = 0;
    8323 @@ -15546,9 +16136,9 @@
    8324      __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    8325      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    8326      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3666; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    8327 -    goto __pyx_L10;
    8328 +    goto __pyx_L7;
    8329    }
    8330 -  __pyx_L10:;
    8331 +  __pyx_L7:;
    8332  
    8333    /* "mtrand.pyx":3667
    8334   *         if np.any(np.greater(op, 1.0)):
    8335 @@ -15558,7 +16148,7 @@
    8336   *     def hypergeometric(self, ngood, nbad, nsample, size=None):
    8337   */
    8338    __Pyx_XDECREF(__pyx_r);
    8339 -  __pyx_t_2 = __pyx_f_6mtrand_discd_array(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state, rk_geometric, __pyx_v_size, __pyx_v_op); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3667; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    8340 +  __pyx_t_2 = __pyx_f_6mtrand_discd_array(__pyx_v_self->internal_state, rk_geometric, __pyx_v_size, __pyx_v_op); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3667; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    8341    __Pyx_GOTREF(__pyx_t_2);
    8342    __pyx_r = __pyx_t_2;
    8343    __pyx_t_2 = 0;
    8344 @@ -15580,46 +16170,33 @@
    8345    return __pyx_r;
    8346  }
    8347  
    8348 -/* "mtrand.pyx":3669
    8349 - *         return discd_array(self.internal_state, rk_geometric, size, op)
    8350 - *
    8351 - *     def hypergeometric(self, ngood, nbad, nsample, size=None):             # <<<<<<<<<<<<<<
    8352 - *         """
    8353 - *         hypergeometric(ngood, nbad, nsample, size=None)
    8354 - */
    8355 -
    8356 -static PyObject *__pyx_pf_6mtrand_11RandomState_45hypergeometric(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
    8357 -static char __pyx_doc_6mtrand_11RandomState_45hypergeometric[] = "\n        hypergeometric(ngood, nbad, nsample, size=None)\n\n        Draw samples from a Hypergeometric distribution.\n\n        Samples are drawn from a Hypergeometric distribution with specified\n        parameters, ngood (ways to make a good selection), nbad (ways to make\n        a bad selection), and nsample = number of items sampled, which is less\n        than or equal to the sum ngood + nbad.\n\n        Parameters\n        ----------\n        ngood : float (but truncated to an integer)\n                parameter, > 0.\n        nbad  : float\n                parameter, >= 0.\n        nsample  : float\n                   parameter, > 0 and <= ngood+nbad\n        size : {tuple, int}\n            Output shape.  If the given shape is, e.g., ``(m, n, k)``, then\n            ``m * n * k`` samples are drawn.\n\n        Returns\n        -------\n        samples : {ndarray, scalar}\n                  where the values are all integers in  [0, n].\n\n        See Also\n        --------\n        scipy.stats.distributions.hypergeom : probability density function,\n            distribution or cumulative density function, etc.\n\n        Notes\n        -----\n        The probability density for the Hypergeometric distribution is\n\n        .. math:: P(x) = \\frac{\\binom{m}{n}\\binom{N-m}{n-x}}{\\binom{N}{n}},\n\n        where :math:`0 \\le x \\le m` and :math:`n+m-N \\le x \\le n`\n\n        for P(x) the probability of x successes, n = ngood, m = nbad, and\n        N = number of samples.\n\n        Consider an urn with black and white marbles in it, ngood of them\n        black and nbad are white. If you draw nsample balls without\n        replacement, then the Hypergeometric distribution describes the\n        distribution of black balls in the drawn sample.\n\n        Note that this distribution is very similar to the Binomial\n        distribution, except that in this case, samples are drawn without\n        replacement, whereas in the Binomial case samples are drawn wit""h\n        replacement (or the sample space is infinite). As the sample space\n        becomes large, this distribution approaches the Binomial.\n\n        References\n        ----------\n        .. [1] Lentner, Marvin, \"Elementary Applied Statistics\", Bogden\n               and Quigley, 1972.\n        .. [2] Weisstein, Eric W. \"Hypergeometric Distribution.\" From\n               MathWorld--A Wolfram Web Resource.\n               http://mathworld.wolfram.com/HypergeometricDistribution.html\n        .. [3] Wikipedia, \"Hypergeometric-distribution\",\n               http://en.wikipedia.org/wiki/Hypergeometric-distribution\n\n        Examples\n        --------\n        Draw samples from the distribution:\n\n        >>> ngood, nbad, nsamp = 100, 2, 10\n        # number of good, number of bad, and number of samples\n        >>> s = np.random.hypergeometric(ngood, nbad, nsamp, 1000)\n        >>> hist(s)\n        #   note that it is very unlikely to grab both bad items\n\n        Suppose you have an urn with 15 white and 15 black marbles.\n        If you pull 15 marbles at random, how likely is it that\n        12 or more of them are one color?\n\n        >>> s = np.random.hypergeometric(15, 15, 15, 100000)\n        >>> sum(s>=12)/100000. + sum(s<=3)/100000.\n        #   answer = 0.003 ... pretty unlikely!\n\n        ";
    8358 -static PyObject *__pyx_pf_6mtrand_11RandomState_45hypergeometric(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
    8359 +/* Python wrapper */
    8360 +static PyObject *__pyx_pw_6mtrand_11RandomState_91hypergeometric(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
    8361 +static char __pyx_doc_6mtrand_11RandomState_90hypergeometric[] = "\n        hypergeometric(ngood, nbad, nsample, size=None)\n\n        Draw samples from a Hypergeometric distribution.\n\n        Samples are drawn from a Hypergeometric distribution with specified\n        parameters, ngood (ways to make a good selection), nbad (ways to make\n        a bad selection), and nsample = number of items sampled, which is less\n        than or equal to the sum ngood + nbad.\n\n        Parameters\n        ----------\n        ngood : float (but truncated to an integer)\n                parameter, > 0.\n        nbad  : float\n                parameter, >= 0.\n        nsample  : float\n                   parameter, > 0 and <= ngood+nbad\n        size : {tuple, int}\n            Output shape.  If the given shape is, e.g., ``(m, n, k)``, then\n            ``m * n * k`` samples are drawn.\n\n        Returns\n        -------\n        samples : {ndarray, scalar}\n                  where the values are all integers in  [0, n].\n\n        See Also\n        --------\n        scipy.stats.distributions.hypergeom : probability density function,\n            distribution or cumulative density function, etc.\n\n        Notes\n        -----\n        The probability density for the Hypergeometric distribution is\n\n        .. math:: P(x) = \\frac{\\binom{m}{n}\\binom{N-m}{n-x}}{\\binom{N}{n}},\n\n        where :math:`0 \\le x \\le m` and :math:`n+m-N \\le x \\le n`\n\n        for P(x) the probability of x successes, n = ngood, m = nbad, and\n        N = number of samples.\n\n        Consider an urn with black and white marbles in it, ngood of them\n        black and nbad are white. If you draw nsample balls without\n        replacement, then the Hypergeometric distribution describes the\n        distribution of black balls in the drawn sample.\n\n        Note that this distribution is very similar to the Binomial\n        distribution, except that in this case, samples are drawn without\n        replacement, whereas in the Binomial case samples are drawn wit""h\n        replacement (or the sample space is infinite). As the sample space\n        becomes large, this distribution approaches the Binomial.\n\n        References\n        ----------\n        .. [1] Lentner, Marvin, \"Elementary Applied Statistics\", Bogden\n               and Quigley, 1972.\n        .. [2] Weisstein, Eric W. \"Hypergeometric Distribution.\" From\n               MathWorld--A Wolfram Web Resource.\n               http://mathworld.wolfram.com/HypergeometricDistribution.html\n        .. [3] Wikipedia, \"Hypergeometric-distribution\",\n               http://en.wikipedia.org/wiki/Hypergeometric-distribution\n\n        Examples\n        --------\n        Draw samples from the distribution:\n\n        >>> ngood, nbad, nsamp = 100, 2, 10\n        # number of good, number of bad, and number of samples\n        >>> s = np.random.hypergeometric(ngood, nbad, nsamp, 1000)\n        >>> hist(s)\n        #   note that it is very unlikely to grab both bad items\n\n        Suppose you have an urn with 15 white and 15 black marbles.\n        If you pull 15 marbles at random, how likely is it that\n        12 or more of them are one color?\n\n        >>> s = np.random.hypergeometric(15, 15, 15, 100000)\n        >>> sum(s>=12)/100000. + sum(s<=3)/100000.\n        #   answer = 0.003 ... pretty unlikely!\n\n        ";
    8362 +static PyObject *__pyx_pw_6mtrand_11RandomState_91hypergeometric(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
    8363    PyObject *__pyx_v_ngood = 0;
    8364    PyObject *__pyx_v_nbad = 0;
    8365    PyObject *__pyx_v_nsample = 0;
    8366    PyObject *__pyx_v_size = 0;
    8367 -  PyArrayObject *__pyx_v_ongood = 0;
    8368 -  PyArrayObject *__pyx_v_onbad = 0;
    8369 -  PyArrayObject *__pyx_v_onsample = 0;
    8370 -  long __pyx_v_lngood;
    8371 -  long __pyx_v_lnbad;
    8372 -  long __pyx_v_lnsample;
    8373 -  PyObject *__pyx_r = NULL;
    8374 +  PyObject *__pyx_r = 0;
    8375    __Pyx_RefNannyDeclarations
    8376 -  int __pyx_t_1;
    8377 -  PyObject *__pyx_t_2 = NULL;
    8378 -  PyObject *__pyx_t_3 = NULL;
    8379 -  PyObject *__pyx_t_4 = NULL;
    8380 -  PyObject *__pyx_t_5 = NULL;
    8381 -  PyObject *__pyx_t_6 = NULL;
    8382 -  int __pyx_lineno = 0;
    8383 -  const char *__pyx_filename = NULL;
    8384 -  int __pyx_clineno = 0;
    8385 -  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__ngood,&__pyx_n_s__nbad,&__pyx_n_s__nsample,&__pyx_n_s__size,0};
    8386 -  __Pyx_RefNannySetupContext("hypergeometric");
    8387 +  __Pyx_RefNannySetupContext("hypergeometric (wrapper)", 0);
    8388    {
    8389 +    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__ngood,&__pyx_n_s__nbad,&__pyx_n_s__nsample,&__pyx_n_s__size,0};
    8390      PyObject* values[4] = {0,0,0,0};
    8391 +
    8392 +    /* "mtrand.pyx":3669
    8393 + *         return discd_array(self.internal_state, rk_geometric, size, op)
    8394 + *
    8395 + *     def hypergeometric(self, ngood, nbad, nsample, size=None):             # <<<<<<<<<<<<<<
    8396 + *         """
    8397 + *         hypergeometric(ngood, nbad, nsample, size=None)
    8398 + */
    8399      values[3] = ((PyObject *)Py_None);
    8400      if (unlikely(__pyx_kwds)) {
    8401        Py_ssize_t kw_args;
    8402 -      switch (PyTuple_GET_SIZE(__pyx_args)) {
    8403 +      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
    8404 +      switch (pos_args) {
    8405          case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
    8406          case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
    8407          case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    8408 @@ -15628,20 +16205,17 @@
    8409          default: goto __pyx_L5_argtuple_error;
    8410        }
    8411        kw_args = PyDict_Size(__pyx_kwds);
    8412 -      switch (PyTuple_GET_SIZE(__pyx_args)) {
    8413 +      switch (pos_args) {
    8414          case  0:
    8415 -        values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__ngood);
    8416 -        if (likely(values[0])) kw_args--;
    8417 +        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__ngood)) != 0)) kw_args--;
    8418          else goto __pyx_L5_argtuple_error;
    8419          case  1:
    8420 -        values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__nbad);
    8421 -        if (likely(values[1])) kw_args--;
    8422 +        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__nbad)) != 0)) kw_args--;
    8423          else {
    8424            __Pyx_RaiseArgtupleInvalid("hypergeometric", 0, 3, 4, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3669; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    8425          }
    8426          case  2:
    8427 -        values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__nsample);
    8428 -        if (likely(values[2])) kw_args--;
    8429 +        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__nsample)) != 0)) kw_args--;
    8430          else {
    8431            __Pyx_RaiseArgtupleInvalid("hypergeometric", 0, 3, 4, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3669; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    8432          }
    8433 @@ -15652,7 +16226,7 @@
    8434          }
    8435        }
    8436        if (unlikely(kw_args > 0)) {
    8437 -        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "hypergeometric") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3669; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    8438 +        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "hypergeometric") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3669; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    8439        }
    8440      } else {
    8441        switch (PyTuple_GET_SIZE(__pyx_args)) {
    8442 @@ -15677,6 +16251,30 @@
    8443    __Pyx_RefNannyFinishContext();
    8444    return NULL;
    8445    __pyx_L4_argument_unpacking_done:;
    8446 +  __pyx_r = __pyx_pf_6mtrand_11RandomState_90hypergeometric(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self), __pyx_v_ngood, __pyx_v_nbad, __pyx_v_nsample, __pyx_v_size);
    8447 +  __Pyx_RefNannyFinishContext();
    8448 +  return __pyx_r;
    8449 +}
    8450 +
    8451 +static PyObject *__pyx_pf_6mtrand_11RandomState_90hypergeometric(struct __pyx_obj_6mtrand_RandomState *__pyx_v_self, PyObject *__pyx_v_ngood, PyObject *__pyx_v_nbad, PyObject *__pyx_v_nsample, PyObject *__pyx_v_size) {
    8452 +  PyArrayObject *__pyx_v_ongood = 0;
    8453 +  PyArrayObject *__pyx_v_onbad = 0;
    8454 +  PyArrayObject *__pyx_v_onsample = 0;
    8455 +  long __pyx_v_lngood;
    8456 +  long __pyx_v_lnbad;
    8457 +  long __pyx_v_lnsample;
    8458 +  PyObject *__pyx_r = NULL;
    8459 +  __Pyx_RefNannyDeclarations
    8460 +  int __pyx_t_1;
    8461 +  PyObject *__pyx_t_2 = NULL;
    8462 +  PyObject *__pyx_t_3 = NULL;
    8463 +  PyObject *__pyx_t_4 = NULL;
    8464 +  PyObject *__pyx_t_5 = NULL;
    8465 +  PyObject *__pyx_t_6 = NULL;
    8466 +  int __pyx_lineno = 0;
    8467 +  const char *__pyx_filename = NULL;
    8468 +  int __pyx_clineno = 0;
    8469 +  __Pyx_RefNannySetupContext("hypergeometric", 0);
    8470  
    8471    /* "mtrand.pyx":3756
    8472   *         cdef long lngood, lnbad, lnsample
    8473 @@ -15722,8 +16320,7 @@
    8474   *                 raise ValueError("ngood < 1")
    8475   *             if nbad < 1:
    8476   */
    8477 -    __pyx_t_2 = PyObject_RichCompare(__pyx_v_ngood, __pyx_int_1, Py_LT); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3760; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    8478 -    __Pyx_GOTREF(__pyx_t_2);
    8479 +    __pyx_t_2 = PyObject_RichCompare(__pyx_v_ngood, __pyx_int_1, Py_LT); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3760; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    8480      __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3760; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    8481      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    8482      if (__pyx_t_1) {
    8483 @@ -15740,9 +16337,9 @@
    8484        __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    8485        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    8486        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3761; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    8487 -      goto __pyx_L7;
    8488 +      goto __pyx_L4;
    8489      }
    8490 -    __pyx_L7:;
    8491 +    __pyx_L4:;
    8492  
    8493      /* "mtrand.pyx":3762
    8494   *             if ngood < 1:
    8495 @@ -15751,8 +16348,7 @@
    8496   *                 raise ValueError("nbad < 1")
    8497   *             if nsample < 1:
    8498   */
    8499 -    __pyx_t_2 = PyObject_RichCompare(__pyx_v_nbad, __pyx_int_1, Py_LT); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3762; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    8500 -    __Pyx_GOTREF(__pyx_t_2);
    8501 +    __pyx_t_2 = PyObject_RichCompare(__pyx_v_nbad, __pyx_int_1, Py_LT); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3762; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    8502      __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3762; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    8503      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    8504      if (__pyx_t_1) {
    8505 @@ -15769,9 +16365,9 @@
    8506        __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    8507        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    8508        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3763; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    8509 -      goto __pyx_L8;
    8510 +      goto __pyx_L5;
    8511      }
    8512 -    __pyx_L8:;
    8513 +    __pyx_L5:;
    8514  
    8515      /* "mtrand.pyx":3764
    8516   *             if nbad < 1:
    8517 @@ -15780,8 +16376,7 @@
    8518   *                 raise ValueError("nsample < 1")
    8519   *             if ngood + nbad < nsample:
    8520   */
    8521 -    __pyx_t_2 = PyObject_RichCompare(__pyx_v_nsample, __pyx_int_1, Py_LT); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3764; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    8522 -    __Pyx_GOTREF(__pyx_t_2);
    8523 +    __pyx_t_2 = PyObject_RichCompare(__pyx_v_nsample, __pyx_int_1, Py_LT); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3764; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    8524      __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3764; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    8525      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    8526      if (__pyx_t_1) {
    8527 @@ -15798,9 +16393,9 @@
    8528        __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    8529        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    8530        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3765; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    8531 -      goto __pyx_L9;
    8532 +      goto __pyx_L6;
    8533      }
    8534 -    __pyx_L9:;
    8535 +    __pyx_L6:;
    8536  
    8537      /* "mtrand.pyx":3766
    8538   *             if nsample < 1:
    8539 @@ -15811,8 +16406,7 @@
    8540   */
    8541      __pyx_t_2 = PyNumber_Add(__pyx_v_ngood, __pyx_v_nbad); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3766; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    8542      __Pyx_GOTREF(__pyx_t_2);
    8543 -    __pyx_t_3 = PyObject_RichCompare(__pyx_t_2, __pyx_v_nsample, Py_LT); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3766; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    8544 -    __Pyx_GOTREF(__pyx_t_3);
    8545 +    __pyx_t_3 = PyObject_RichCompare(__pyx_t_2, __pyx_v_nsample, Py_LT); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3766; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    8546      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    8547      __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3766; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    8548      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    8549 @@ -15830,9 +16424,9 @@
    8550        __Pyx_Raise(__pyx_t_3, 0, 0, 0);
    8551        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    8552        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3767; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    8553 -      goto __pyx_L10;
    8554 +      goto __pyx_L7;
    8555      }
    8556 -    __pyx_L10:;
    8557 +    __pyx_L7:;
    8558  
    8559      /* "mtrand.pyx":3768
    8560   *             if ngood + nbad < nsample:
    8561 @@ -15850,14 +16444,14 @@
    8562   *
    8563   *
    8564   */
    8565 -    __pyx_t_3 = __pyx_f_6mtrand_discnmN_array_sc(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state, rk_hypergeometric, __pyx_v_size, __pyx_v_lngood, __pyx_v_lnbad, __pyx_v_lnsample); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3768; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    8566 +    __pyx_t_3 = __pyx_f_6mtrand_discnmN_array_sc(__pyx_v_self->internal_state, rk_hypergeometric, __pyx_v_size, __pyx_v_lngood, __pyx_v_lnbad, __pyx_v_lnsample); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3768; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    8567      __Pyx_GOTREF(__pyx_t_3);
    8568      __pyx_r = __pyx_t_3;
    8569      __pyx_t_3 = 0;
    8570      goto __pyx_L0;
    8571 -    goto __pyx_L6;
    8572 +    goto __pyx_L3;
    8573    }
    8574 -  __pyx_L6:;
    8575 +  __pyx_L3:;
    8576  
    8577    /* "mtrand.pyx":3772
    8578   *
    8579 @@ -15925,7 +16519,7 @@
    8580    __Pyx_GOTREF(__pyx_t_4);
    8581    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    8582    __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3777; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    8583 -  __Pyx_GOTREF(((PyObject *)__pyx_t_3));
    8584 +  __Pyx_GOTREF(__pyx_t_3);
    8585    __Pyx_INCREF(((PyObject *)__pyx_v_ongood));
    8586    PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_v_ongood));
    8587    __Pyx_GIVEREF(((PyObject *)__pyx_v_ongood));
    8588 @@ -15937,7 +16531,7 @@
    8589    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    8590    __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
    8591    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3777; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    8592 -  __Pyx_GOTREF(((PyObject *)__pyx_t_3));
    8593 +  __Pyx_GOTREF(__pyx_t_3);
    8594    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_5);
    8595    __Pyx_GIVEREF(__pyx_t_5);
    8596    __pyx_t_5 = 0;
    8597 @@ -15961,9 +16555,9 @@
    8598      __Pyx_Raise(__pyx_t_5, 0, 0, 0);
    8599      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    8600      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3778; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    8601 -    goto __pyx_L11;
    8602 +    goto __pyx_L8;
    8603    }
    8604 -  __pyx_L11:;
    8605 +  __pyx_L8:;
    8606  
    8607    /* "mtrand.pyx":3779
    8608   *         if np.any(np.less(ongood, 1)):
    8609 @@ -15983,7 +16577,7 @@
    8610    __Pyx_GOTREF(__pyx_t_2);
    8611    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    8612    __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3779; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    8613 -  __Pyx_GOTREF(((PyObject *)__pyx_t_5));
    8614 +  __Pyx_GOTREF(__pyx_t_5);
    8615    __Pyx_INCREF(((PyObject *)__pyx_v_onbad));
    8616    PyTuple_SET_ITEM(__pyx_t_5, 0, ((PyObject *)__pyx_v_onbad));
    8617    __Pyx_GIVEREF(((PyObject *)__pyx_v_onbad));
    8618 @@ -15995,7 +16589,7 @@
    8619    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    8620    __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
    8621    __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3779; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    8622 -  __Pyx_GOTREF(((PyObject *)__pyx_t_5));
    8623 +  __Pyx_GOTREF(__pyx_t_5);
    8624    PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4);
    8625    __Pyx_GIVEREF(__pyx_t_4);
    8626    __pyx_t_4 = 0;
    8627 @@ -16019,9 +16613,9 @@
    8628      __Pyx_Raise(__pyx_t_4, 0, 0, 0);
    8629      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    8630      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3780; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    8631 -    goto __pyx_L12;
    8632 +    goto __pyx_L9;
    8633    }
    8634 -  __pyx_L12:;
    8635 +  __pyx_L9:;
    8636  
    8637    /* "mtrand.pyx":3781
    8638   *         if np.any(np.less(onbad, 1)):
    8639 @@ -16041,7 +16635,7 @@
    8640    __Pyx_GOTREF(__pyx_t_3);
    8641    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    8642    __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3781; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    8643 -  __Pyx_GOTREF(((PyObject *)__pyx_t_4));
    8644 +  __Pyx_GOTREF(__pyx_t_4);
    8645    __Pyx_INCREF(((PyObject *)__pyx_v_onsample));
    8646    PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)__pyx_v_onsample));
    8647    __Pyx_GIVEREF(((PyObject *)__pyx_v_onsample));
    8648 @@ -16053,7 +16647,7 @@
    8649    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    8650    __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
    8651    __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3781; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    8652 -  __Pyx_GOTREF(((PyObject *)__pyx_t_4));
    8653 +  __Pyx_GOTREF(__pyx_t_4);
    8654    PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
    8655    __Pyx_GIVEREF(__pyx_t_2);
    8656    __pyx_t_2 = 0;
    8657 @@ -16077,9 +16671,9 @@
    8658      __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    8659      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    8660      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3782; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    8661 -    goto __pyx_L13;
    8662 +    goto __pyx_L10;
    8663    }
    8664 -  __pyx_L13:;
    8665 +  __pyx_L10:;
    8666  
    8667    /* "mtrand.pyx":3783
    8668   *         if np.any(np.less(onsample, 1)):
    8669 @@ -16104,7 +16698,7 @@
    8670    __Pyx_GOTREF(__pyx_t_3);
    8671    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    8672    __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3783; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    8673 -  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
    8674 +  __Pyx_GOTREF(__pyx_t_2);
    8675    __Pyx_INCREF(((PyObject *)__pyx_v_ongood));
    8676    PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_v_ongood));
    8677    __Pyx_GIVEREF(((PyObject *)__pyx_v_ongood));
    8678 @@ -16116,7 +16710,7 @@
    8679    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    8680    __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
    8681    __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3783; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    8682 -  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
    8683 +  __Pyx_GOTREF(__pyx_t_2);
    8684    PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_6);
    8685    __Pyx_GIVEREF(__pyx_t_6);
    8686    __Pyx_INCREF(((PyObject *)__pyx_v_onsample));
    8687 @@ -16128,7 +16722,7 @@
    8688    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    8689    __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
    8690    __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3783; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    8691 -  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
    8692 +  __Pyx_GOTREF(__pyx_t_2);
    8693    PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_6);
    8694    __Pyx_GIVEREF(__pyx_t_6);
    8695    __pyx_t_6 = 0;
    8696 @@ -16152,9 +16746,9 @@
    8697      __Pyx_Raise(__pyx_t_6, 0, 0, 0);
    8698      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    8699      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3784; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    8700 -    goto __pyx_L14;
    8701 +    goto __pyx_L11;
    8702    }
    8703 -  __pyx_L14:;
    8704 +  __pyx_L11:;
    8705  
    8706    /* "mtrand.pyx":3785
    8707   *         if np.any(np.less(np.add(ongood, onbad),onsample)):
    8708 @@ -16172,7 +16766,7 @@
    8709   *
    8710   *     def logseries(self, p, size=None):
    8711   */
    8712 -  __pyx_t_6 = __pyx_f_6mtrand_discnmN_array(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state, rk_hypergeometric, __pyx_v_size, __pyx_v_ongood, __pyx_v_onbad, __pyx_v_onsample); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3785; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    8713 +  __pyx_t_6 = __pyx_f_6mtrand_discnmN_array(__pyx_v_self->internal_state, rk_hypergeometric, __pyx_v_size, __pyx_v_ongood, __pyx_v_onbad, __pyx_v_onsample); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3785; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    8714    __Pyx_GOTREF(__pyx_t_6);
    8715    __pyx_r = __pyx_t_6;
    8716    __pyx_t_6 = 0;
    8717 @@ -16197,49 +16791,40 @@
    8718    return __pyx_r;
    8719  }
    8720  
    8721 -/* "mtrand.pyx":3788
    8722 +/* Python wrapper */
    8723 +static PyObject *__pyx_pw_6mtrand_11RandomState_93logseries(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
    8724 +static char __pyx_doc_6mtrand_11RandomState_92logseries[] = "\n        logseries(p, size=None)\n\n        Draw samples from a Logarithmic Series distribution.\n\n        Samples are drawn from a Log Series distribution with specified\n        parameter, p (probability, 0 < p < 1).\n\n        Parameters\n        ----------\n        loc : float\n\n        scale : float > 0.\n\n        size : {tuple, int}\n            Output shape.  If the given shape is, e.g., ``(m, n, k)``, then\n            ``m * n * k`` samples are drawn.\n\n        Returns\n        -------\n        samples : {ndarray, scalar}\n                  where the values are all integers in  [0, n].\n\n        See Also\n        --------\n        scipy.stats.distributions.logser : probability density function,\n            distribution or cumulative density function, etc.\n\n        Notes\n        -----\n        The probability density for the Log Series distribution is\n\n        .. math:: P(k) = \\frac{-p^k}{k \\ln(1-p)},\n\n        where p = probability.\n\n        The Log Series distribution is frequently used to represent species\n        richness and occurrence, first proposed by Fisher, Corbet, and\n        Williams in 1943 [2].  It may also be used to model the numbers of\n        occupants seen in cars [3].\n\n        References\n        ----------\n        .. [1] Buzas, Martin A.; Culver, Stephen J.,  Understanding regional\n               species diversity through the log series distribution of\n               occurrences: BIODIVERSITY RESEARCH Diversity & Distributions,\n               Volume 5, Number 5, September 1999 , pp. 187-195(9).\n        .. [2] Fisher, R.A,, A.S. Corbet, and C.B. Williams. 1943. The\n               relation between the number of species and the number of\n               individuals in a random sample of an animal population.\n               Journal of Animal Ecology, 12:42-58.\n        .. [3] D. J. Hand, F. Daly, D. Lunn, E. Ostrowski, A Handbook of Small\n               Data Sets, CRC Press, 1994.\n        .. [4] Wikipedia, \"Log""arithmic-distribution\",\n               http://en.wikipedia.org/wiki/Logarithmic-distribution\n\n        Examples\n        --------\n        Draw samples from the distribution:\n\n        >>> a = .6\n        >>> s = np.random.logseries(a, 10000)\n        >>> count, bins, ignored = plt.hist(s)\n\n        #   plot against distribution\n\n        >>> def logseries(k, p):\n        ...     return -p**k/(k*log(1-p))\n        >>> plt.plot(bins, logseries(bins, a)*count.max()/\n                     logseries(bins, a).max(), 'r')\n        >>> plt.show()\n\n        ";
    8725 +static PyObject *__pyx_pw_6mtrand_11RandomState_93logseries(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
    8726 +  PyObject *__pyx_v_p = 0;
    8727 +  PyObject *__pyx_v_size = 0;
    8728 +  PyObject *__pyx_r = 0;
    8729 +  __Pyx_RefNannyDeclarations
    8730 +  __Pyx_RefNannySetupContext("logseries (wrapper)", 0);
    8731 +  {
    8732 +    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__p,&__pyx_n_s__size,0};
    8733 +    PyObject* values[2] = {0,0};
    8734 +
    8735 +    /* "mtrand.pyx":3788
    8736   *             ongood, onbad, onsample)
    8737   *
    8738   *     def logseries(self, p, size=None):             # <<<<<<<<<<<<<<
    8739   *         """
    8740   *         logseries(p, size=None)
    8741   */
    8742 -
    8743 -static PyObject *__pyx_pf_6mtrand_11RandomState_46logseries(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
    8744 -static char __pyx_doc_6mtrand_11RandomState_46logseries[] = "\n        logseries(p, size=None)\n\n        Draw samples from a Logarithmic Series distribution.\n\n        Samples are drawn from a Log Series distribution with specified\n        parameter, p (probability, 0 < p < 1).\n\n        Parameters\n        ----------\n        loc : float\n\n        scale : float > 0.\n\n        size : {tuple, int}\n            Output shape.  If the given shape is, e.g., ``(m, n, k)``, then\n            ``m * n * k`` samples are drawn.\n\n        Returns\n        -------\n        samples : {ndarray, scalar}\n                  where the values are all integers in  [0, n].\n\n        See Also\n        --------\n        scipy.stats.distributions.logser : probability density function,\n            distribution or cumulative density function, etc.\n\n        Notes\n        -----\n        The probability density for the Log Series distribution is\n\n        .. math:: P(k) = \\frac{-p^k}{k \\ln(1-p)},\n\n        where p = probability.\n\n        The Log Series distribution is frequently used to represent species\n        richness and occurrence, first proposed by Fisher, Corbet, and\n        Williams in 1943 [2].  It may also be used to model the numbers of\n        occupants seen in cars [3].\n\n        References\n        ----------\n        .. [1] Buzas, Martin A.; Culver, Stephen J.,  Understanding regional\n               species diversity through the log series distribution of\n               occurrences: BIODIVERSITY RESEARCH Diversity & Distributions,\n               Volume 5, Number 5, September 1999 , pp. 187-195(9).\n        .. [2] Fisher, R.A,, A.S. Corbet, and C.B. Williams. 1943. The\n               relation between the number of species and the number of\n               individuals in a random sample of an animal population.\n               Journal of Animal Ecology, 12:42-58.\n        .. [3] D. J. Hand, F. Daly, D. Lunn, E. Ostrowski, A Handbook of Small\n               Data Sets, CRC Press, 1994.\n        .. [4] Wikipedia, \"Log""arithmic-distribution\",\n               http://en.wikipedia.org/wiki/Logarithmic-distribution\n\n        Examples\n        --------\n        Draw samples from the distribution:\n\n        >>> a = .6\n        >>> s = np.random.logseries(a, 10000)\n        >>> count, bins, ignored = plt.hist(s)\n\n        #   plot against distribution\n\n        >>> def logseries(k, p):\n        ...     return -p**k/(k*log(1-p))\n        >>> plt.plot(bins, logseries(bins, a)*count.max()/\n                     logseries(bins, a).max(), 'r')\n        >>> plt.show()\n\n        ";
    8745 -static PyObject *__pyx_pf_6mtrand_11RandomState_46logseries(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
    8746 -  PyObject *__pyx_v_p = 0;
    8747 -  PyObject *__pyx_v_size = 0;
    8748 -  PyArrayObject *__pyx_v_op = 0;
    8749 -  double __pyx_v_fp;
    8750 -  PyObject *__pyx_r = NULL;
    8751 -  __Pyx_RefNannyDeclarations
    8752 -  int __pyx_t_1;
    8753 -  PyObject *__pyx_t_2 = NULL;
    8754 -  PyObject *__pyx_t_3 = NULL;
    8755 -  PyObject *__pyx_t_4 = NULL;
    8756 -  PyObject *__pyx_t_5 = NULL;
    8757 -  int __pyx_lineno = 0;
    8758 -  const char *__pyx_filename = NULL;
    8759 -  int __pyx_clineno = 0;
    8760 -  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__p,&__pyx_n_s__size,0};
    8761 -  __Pyx_RefNannySetupContext("logseries");
    8762 -  {
    8763 -    PyObject* values[2] = {0,0};
    8764      values[1] = ((PyObject *)Py_None);
    8765      if (unlikely(__pyx_kwds)) {
    8766        Py_ssize_t kw_args;
    8767 -      switch (PyTuple_GET_SIZE(__pyx_args)) {
    8768 +      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
    8769 +      switch (pos_args) {
    8770          case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    8771          case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    8772          case  0: break;
    8773          default: goto __pyx_L5_argtuple_error;
    8774        }
    8775        kw_args = PyDict_Size(__pyx_kwds);
    8776 -      switch (PyTuple_GET_SIZE(__pyx_args)) {
    8777 +      switch (pos_args) {
    8778          case  0:
    8779 -        values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__p);
    8780 -        if (likely(values[0])) kw_args--;
    8781 +        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__p)) != 0)) kw_args--;
    8782          else goto __pyx_L5_argtuple_error;
    8783          case  1:
    8784          if (kw_args > 0) {
    8785 @@ -16248,7 +16833,7 @@
    8786          }
    8787        }
    8788        if (unlikely(kw_args > 0)) {
    8789 -        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "logseries") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3788; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    8790 +        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "logseries") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3788; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    8791        }
    8792      } else {
    8793        switch (PyTuple_GET_SIZE(__pyx_args)) {
    8794 @@ -16269,6 +16854,25 @@
    8795    __Pyx_RefNannyFinishContext();
    8796    return NULL;
    8797    __pyx_L4_argument_unpacking_done:;
    8798 +  __pyx_r = __pyx_pf_6mtrand_11RandomState_92logseries(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self), __pyx_v_p, __pyx_v_size);
    8799 +  __Pyx_RefNannyFinishContext();
    8800 +  return __pyx_r;
    8801 +}
    8802 +
    8803 +static PyObject *__pyx_pf_6mtrand_11RandomState_92logseries(struct __pyx_obj_6mtrand_RandomState *__pyx_v_self, PyObject *__pyx_v_p, PyObject *__pyx_v_size) {
    8804 +  PyArrayObject *__pyx_v_op = 0;
    8805 +  double __pyx_v_fp;
    8806 +  PyObject *__pyx_r = NULL;
    8807 +  __Pyx_RefNannyDeclarations
    8808 +  int __pyx_t_1;
    8809 +  PyObject *__pyx_t_2 = NULL;
    8810 +  PyObject *__pyx_t_3 = NULL;
    8811 +  PyObject *__pyx_t_4 = NULL;
    8812 +  PyObject *__pyx_t_5 = NULL;
    8813 +  int __pyx_lineno = 0;
    8814 +  const char *__pyx_filename = NULL;
    8815 +  int __pyx_clineno = 0;
    8816 +  __Pyx_RefNannySetupContext("logseries", 0);
    8817  
    8818    /* "mtrand.pyx":3865
    8819   *         cdef double fp
    8820 @@ -16311,9 +16915,9 @@
    8821        __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    8822        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    8823        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3868; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    8824 -      goto __pyx_L7;
    8825 +      goto __pyx_L4;
    8826      }
    8827 -    __pyx_L7:;
    8828 +    __pyx_L4:;
    8829  
    8830      /* "mtrand.pyx":3869
    8831   *             if fp <= 0.0:
    8832 @@ -16337,9 +16941,9 @@
    8833        __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    8834        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    8835        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3870; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    8836 -      goto __pyx_L8;
    8837 +      goto __pyx_L5;
    8838      }
    8839 -    __pyx_L8:;
    8840 +    __pyx_L5:;
    8841  
    8842      /* "mtrand.pyx":3871
    8843   *             if fp >= 1.0:
    8844 @@ -16349,14 +16953,14 @@
    8845   *         PyErr_Clear()
    8846   */
    8847      __Pyx_XDECREF(__pyx_r);
    8848 -    __pyx_t_2 = __pyx_f_6mtrand_discd_array_sc(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state, rk_logseries, __pyx_v_size, __pyx_v_fp); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3871; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    8849 +    __pyx_t_2 = __pyx_f_6mtrand_discd_array_sc(__pyx_v_self->internal_state, rk_logseries, __pyx_v_size, __pyx_v_fp); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3871; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    8850      __Pyx_GOTREF(__pyx_t_2);
    8851      __pyx_r = __pyx_t_2;
    8852      __pyx_t_2 = 0;
    8853      goto __pyx_L0;
    8854 -    goto __pyx_L6;
    8855 +    goto __pyx_L3;
    8856    }
    8857 -  __pyx_L6:;
    8858 +  __pyx_L3:;
    8859  
    8860    /* "mtrand.pyx":3873
    8861   *             return discd_array_sc(self.internal_state, rk_logseries, size, fp)
    8862 @@ -16400,7 +17004,7 @@
    8863    __pyx_t_2 = PyFloat_FromDouble(0.0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3876; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    8864    __Pyx_GOTREF(__pyx_t_2);
    8865    __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3876; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    8866 -  __Pyx_GOTREF(((PyObject *)__pyx_t_5));
    8867 +  __Pyx_GOTREF(__pyx_t_5);
    8868    __Pyx_INCREF(((PyObject *)__pyx_v_op));
    8869    PyTuple_SET_ITEM(__pyx_t_5, 0, ((PyObject *)__pyx_v_op));
    8870    __Pyx_GIVEREF(((PyObject *)__pyx_v_op));
    8871 @@ -16412,7 +17016,7 @@
    8872    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    8873    __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
    8874    __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3876; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    8875 -  __Pyx_GOTREF(((PyObject *)__pyx_t_5));
    8876 +  __Pyx_GOTREF(__pyx_t_5);
    8877    PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2);
    8878    __Pyx_GIVEREF(__pyx_t_2);
    8879    __pyx_t_2 = 0;
    8880 @@ -16436,9 +17040,9 @@
    8881      __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    8882      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    8883      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3877; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    8884 -    goto __pyx_L9;
    8885 +    goto __pyx_L6;
    8886    }
    8887 -  __pyx_L9:;
    8888 +  __pyx_L6:;
    8889  
    8890    /* "mtrand.pyx":3878
    8891   *         if np.any(np.less_equal(op, 0.0)):
    8892 @@ -16460,7 +17064,7 @@
    8893    __pyx_t_2 = PyFloat_FromDouble(1.0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3878; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    8894    __Pyx_GOTREF(__pyx_t_2);
    8895    __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3878; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    8896 -  __Pyx_GOTREF(((PyObject *)__pyx_t_4));
    8897 +  __Pyx_GOTREF(__pyx_t_4);
    8898    __Pyx_INCREF(((PyObject *)__pyx_v_op));
    8899    PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)__pyx_v_op));
    8900    __Pyx_GIVEREF(((PyObject *)__pyx_v_op));
    8901 @@ -16472,7 +17076,7 @@
    8902    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    8903    __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
    8904    __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3878; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    8905 -  __Pyx_GOTREF(((PyObject *)__pyx_t_4));
    8906 +  __Pyx_GOTREF(__pyx_t_4);
    8907    PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
    8908    __Pyx_GIVEREF(__pyx_t_2);
    8909    __pyx_t_2 = 0;
    8910 @@ -16496,9 +17100,9 @@
    8911      __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    8912      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    8913      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3879; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    8914 -    goto __pyx_L10;
    8915 +    goto __pyx_L7;
    8916    }
    8917 -  __pyx_L10:;
    8918 +  __pyx_L7:;
    8919  
    8920    /* "mtrand.pyx":3880
    8921   *         if np.any(np.greater_equal(op, 1.0)):
    8922 @@ -16508,7 +17112,7 @@
    8923   *     # Multivariate distributions:
    8924   */
    8925    __Pyx_XDECREF(__pyx_r);
    8926 -  __pyx_t_2 = __pyx_f_6mtrand_discd_array(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state, rk_logseries, __pyx_v_size, __pyx_v_op); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3880; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    8927 +  __pyx_t_2 = __pyx_f_6mtrand_discd_array(__pyx_v_self->internal_state, rk_logseries, __pyx_v_size, __pyx_v_op); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3880; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    8928    __Pyx_GOTREF(__pyx_t_2);
    8929    __pyx_r = __pyx_t_2;
    8930    __pyx_t_2 = 0;
    8931 @@ -16530,51 +17134,32 @@
    8932    return __pyx_r;
    8933  }
    8934  
    8935 -/* "mtrand.pyx":3883
    8936 - *
    8937 - *     # Multivariate distributions:
    8938 - *     def multivariate_normal(self, mean, cov, size=None):             # <<<<<<<<<<<<<<
    8939 - *         """
    8940 - *         multivariate_normal(mean, cov[, size])
    8941 - */
    8942 -
    8943 -static PyObject *__pyx_pf_6mtrand_11RandomState_47multivariate_normal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
    8944 -static char __pyx_doc_6mtrand_11RandomState_47multivariate_normal[] = "\n        multivariate_normal(mean, cov[, size])\n\n        Draw random samples from a multivariate normal distribution.\n\n        The multivariate normal, multinormal or Gaussian distribution is a\n        generalization of the one-dimensional normal distribution to higher\n        dimensions.  Such a distribution is specified by its mean and\n        covariance matrix.  These parameters are analogous to the mean\n        (average or \"center\") and variance (standard deviation, or \"width,\"\n        squared) of the one-dimensional normal distribution.\n\n        Parameters\n        ----------\n        mean : 1-D array_like, of length N\n            Mean of the N-dimensional distribution.\n        cov : 2-D array_like, of shape (N, N)\n            Covariance matrix of the distribution.  Must be symmetric and\n            positive semi-definite for \"physically meaningful\" results.\n        size : tuple of ints, optional\n            Given a shape of, for example, ``(m,n,k)``, ``m*n*k`` samples are\n            generated, and packed in an `m`-by-`n`-by-`k` arrangement.  Because\n            each sample is `N`-dimensional, the output shape is ``(m,n,k,N)``.\n            If no shape is specified, a single (`N`-D) sample is returned.\n\n        Returns\n        -------\n        out : ndarray\n            The drawn samples, of shape *size*, if that was provided.  If not,\n            the shape is ``(N,)``.\n\n            In other words, each entry ``out[i,j,...,:]`` is an N-dimensional\n            value drawn from the distribution.\n\n        Notes\n        -----\n        The mean is a coordinate in N-dimensional space, which represents the\n        location where samples are most likely to be generated.  This is\n        analogous to the peak of the bell curve for the one-dimensional or\n        univariate normal distribution.\n\n        Covariance indicates the level to which two variables vary together.\n        From the multivariate normal distribution, we draw ""N-dimensional\n        samples, :math:`X = [x_1, x_2, ... x_N]`.  The covariance matrix\n        element :math:`C_{ij}` is the covariance of :math:`x_i` and :math:`x_j`.\n        The element :math:`C_{ii}` is the variance of :math:`x_i` (i.e. its\n        \"spread\").\n\n        Instead of specifying the full covariance matrix, popular\n        approximations include:\n\n          - Spherical covariance (*cov* is a multiple of the identity matrix)\n          - Diagonal covariance (*cov* has non-negative elements, and only on\n            the diagonal)\n\n        This geometrical property can be seen in two dimensions by plotting\n        generated data-points:\n\n        >>> mean = [0,0]\n        >>> cov = [[1,0],[0,100]] # diagonal covariance, points lie on x or y-axis\n\n        >>> import matplotlib.pyplot as plt\n        >>> x,y = np.random.multivariate_normal(mean,cov,5000).T\n        >>> plt.plot(x,y,'x'); plt.axis('equal'); plt.show()\n\n        Note that the covariance matrix must be non-negative definite.\n\n        References\n        ----------\n        Papoulis, A., *Probability, Random Variables, and Stochastic Processes*,\n        3rd ed., New York: McGraw-Hill, 1991.\n\n        Duda, R. O., Hart, P. E., and Stork, D. G., *Pattern Classification*,\n        2nd ed., New York: Wiley, 2001.\n\n        Examples\n        --------\n        >>> mean = (1,2)\n        >>> cov = [[1,0],[1,0]]\n        >>> x = np.random.multivariate_normal(mean,cov,(3,3))\n        >>> x.shape\n        (3, 3, 2)\n\n        The following is probably true, given that 0.6 is roughly twice the\n        standard deviation:\n\n        >>> print list( (x[0,0,:] - mean) < 0.6 )\n        [True, True]\n\n        ";
    8945 -static PyObject *__pyx_pf_6mtrand_11RandomState_47multivariate_normal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
    8946 +/* Python wrapper */
    8947 +static PyObject *__pyx_pw_6mtrand_11RandomState_95multivariate_normal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
    8948 +static char __pyx_doc_6mtrand_11RandomState_94multivariate_normal[] = "\n        multivariate_normal(mean, cov[, size])\n\n        Draw random samples from a multivariate normal distribution.\n\n        The multivariate normal, multinormal or Gaussian distribution is a\n        generalization of the one-dimensional normal distribution to higher\n        dimensions.  Such a distribution is specified by its mean and\n        covariance matrix.  These parameters are analogous to the mean\n        (average or \"center\") and variance (standard deviation, or \"width,\"\n        squared) of the one-dimensional normal distribution.\n\n        Parameters\n        ----------\n        mean : 1-D array_like, of length N\n            Mean of the N-dimensional distribution.\n        cov : 2-D array_like, of shape (N, N)\n            Covariance matrix of the distribution.  Must be symmetric and\n            positive semi-definite for \"physically meaningful\" results.\n        size : tuple of ints, optional\n            Given a shape of, for example, ``(m,n,k)``, ``m*n*k`` samples are\n            generated, and packed in an `m`-by-`n`-by-`k` arrangement.  Because\n            each sample is `N`-dimensional, the output shape is ``(m,n,k,N)``.\n            If no shape is specified, a single (`N`-D) sample is returned.\n\n        Returns\n        -------\n        out : ndarray\n            The drawn samples, of shape *size*, if that was provided.  If not,\n            the shape is ``(N,)``.\n\n            In other words, each entry ``out[i,j,...,:]`` is an N-dimensional\n            value drawn from the distribution.\n\n        Notes\n        -----\n        The mean is a coordinate in N-dimensional space, which represents the\n        location where samples are most likely to be generated.  This is\n        analogous to the peak of the bell curve for the one-dimensional or\n        univariate normal distribution.\n\n        Covariance indicates the level to which two variables vary together.\n        From the multivariate normal distribution, we draw ""N-dimensional\n        samples, :math:`X = [x_1, x_2, ... x_N]`.  The covariance matrix\n        element :math:`C_{ij}` is the covariance of :math:`x_i` and :math:`x_j`.\n        The element :math:`C_{ii}` is the variance of :math:`x_i` (i.e. its\n        \"spread\").\n\n        Instead of specifying the full covariance matrix, popular\n        approximations include:\n\n          - Spherical covariance (*cov* is a multiple of the identity matrix)\n          - Diagonal covariance (*cov* has non-negative elements, and only on\n            the diagonal)\n\n        This geometrical property can be seen in two dimensions by plotting\n        generated data-points:\n\n        >>> mean = [0,0]\n        >>> cov = [[1,0],[0,100]] # diagonal covariance, points lie on x or y-axis\n\n        >>> import matplotlib.pyplot as plt\n        >>> x,y = np.random.multivariate_normal(mean,cov,5000).T\n        >>> plt.plot(x,y,'x'); plt.axis('equal'); plt.show()\n\n        Note that the covariance matrix must be non-negative definite.\n\n        References\n        ----------\n        Papoulis, A., *Probability, Random Variables, and Stochastic Processes*,\n        3rd ed., New York: McGraw-Hill, 1991.\n\n        Duda, R. O., Hart, P. E., and Stork, D. G., *Pattern Classification*,\n        2nd ed., New York: Wiley, 2001.\n\n        Examples\n        --------\n        >>> mean = (1,2)\n        >>> cov = [[1,0],[1,0]]\n        >>> x = np.random.multivariate_normal(mean,cov,(3,3))\n        >>> x.shape\n        (3, 3, 2)\n\n        The following is probably true, given that 0.6 is roughly twice the\n        standard deviation:\n\n        >>> print list( (x[0,0,:] - mean) < 0.6 )\n        [True, True]\n\n        ";
    8949 +static PyObject *__pyx_pw_6mtrand_11RandomState_95multivariate_normal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
    8950    PyObject *__pyx_v_mean = 0;
    8951    PyObject *__pyx_v_cov = 0;
    8952    PyObject *__pyx_v_size = 0;
    8953 -  PyObject *__pyx_v_shape = NULL;
    8954 -  PyObject *__pyx_v_final_shape = NULL;
    8955 -  PyObject *__pyx_v_x = NULL;
    8956 -  PyObject *__pyx_v_svd = NULL;
    8957 -  PyObject *__pyx_v_u = NULL;
    8958 -  PyObject *__pyx_v_s = NULL;
    8959 -  PyObject *__pyx_v_v = NULL;
    8960 -  PyObject *__pyx_r = NULL;
    8961 +  PyObject *__pyx_r = 0;
    8962    __Pyx_RefNannyDeclarations
    8963 -  PyObject *__pyx_t_1 = NULL;
    8964 -  PyObject *__pyx_t_2 = NULL;
    8965 -  PyObject *__pyx_t_3 = NULL;
    8966 -  int __pyx_t_4;
    8967 -  Py_ssize_t __pyx_t_5;
    8968 -  int __pyx_t_6;
    8969 -  int __pyx_t_7;
    8970 -  int __pyx_t_8;
    8971 -  PyObject *__pyx_t_9 = NULL;
    8972 -  PyObject *__pyx_t_10 = NULL;
    8973 -  PyObject *(*__pyx_t_11)(PyObject *);
    8974 -  int __pyx_lineno = 0;
    8975 -  const char *__pyx_filename = NULL;
    8976 -  int __pyx_clineno = 0;
    8977 -  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__mean,&__pyx_n_s__cov,&__pyx_n_s__size,0};
    8978 -  __Pyx_RefNannySetupContext("multivariate_normal");
    8979 +  __Pyx_RefNannySetupContext("multivariate_normal (wrapper)", 0);
    8980    {
    8981 +    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__mean,&__pyx_n_s__cov,&__pyx_n_s__size,0};
    8982      PyObject* values[3] = {0,0,0};
    8983 +
    8984 +    /* "mtrand.pyx":3883
    8985 + *
    8986 + *     # Multivariate distributions:
    8987 + *     def multivariate_normal(self, mean, cov, size=None):             # <<<<<<<<<<<<<<
    8988 + *         """
    8989 + *         multivariate_normal(mean, cov[, size])
    8990 + */
    8991      values[2] = ((PyObject *)Py_None);
    8992      if (unlikely(__pyx_kwds)) {
    8993        Py_ssize_t kw_args;
    8994 -      switch (PyTuple_GET_SIZE(__pyx_args)) {
    8995 +      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
    8996 +      switch (pos_args) {
    8997          case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
    8998          case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    8999          case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    9000 @@ -16582,14 +17167,12 @@
    9001          default: goto __pyx_L5_argtuple_error;
    9002        }
    9003        kw_args = PyDict_Size(__pyx_kwds);
    9004 -      switch (PyTuple_GET_SIZE(__pyx_args)) {
    9005 +      switch (pos_args) {
    9006          case  0:
    9007 -        values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__mean);
    9008 -        if (likely(values[0])) kw_args--;
    9009 +        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__mean)) != 0)) kw_args--;
    9010          else goto __pyx_L5_argtuple_error;
    9011          case  1:
    9012 -        values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__cov);
    9013 -        if (likely(values[1])) kw_args--;
    9014 +        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__cov)) != 0)) kw_args--;
    9015          else {
    9016            __Pyx_RaiseArgtupleInvalid("multivariate_normal", 0, 2, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3883; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    9017          }
    9018 @@ -16600,7 +17183,7 @@
    9019          }
    9020        }
    9021        if (unlikely(kw_args > 0)) {
    9022 -        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "multivariate_normal") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3883; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    9023 +        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "multivariate_normal") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3883; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    9024        }
    9025      } else {
    9026        switch (PyTuple_GET_SIZE(__pyx_args)) {
    9027 @@ -16623,6 +17206,36 @@
    9028    __Pyx_RefNannyFinishContext();
    9029    return NULL;
    9030    __pyx_L4_argument_unpacking_done:;
    9031 +  __pyx_r = __pyx_pf_6mtrand_11RandomState_94multivariate_normal(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self), __pyx_v_mean, __pyx_v_cov, __pyx_v_size);
    9032 +  __Pyx_RefNannyFinishContext();
    9033 +  return __pyx_r;
    9034 +}
    9035 +
    9036 +static PyObject *__pyx_pf_6mtrand_11RandomState_94multivariate_normal(struct __pyx_obj_6mtrand_RandomState *__pyx_v_self, PyObject *__pyx_v_mean, PyObject *__pyx_v_cov, PyObject *__pyx_v_size) {
    9037 +  PyObject *__pyx_v_shape = NULL;
    9038 +  PyObject *__pyx_v_final_shape = NULL;
    9039 +  PyObject *__pyx_v_x = NULL;
    9040 +  PyObject *__pyx_v_svd = NULL;
    9041 +  CYTHON_UNUSED PyObject *__pyx_v_u = NULL;
    9042 +  PyObject *__pyx_v_s = NULL;
    9043 +  PyObject *__pyx_v_v = NULL;
    9044 +  PyObject *__pyx_r = NULL;
    9045 +  __Pyx_RefNannyDeclarations
    9046 +  PyObject *__pyx_t_1 = NULL;
    9047 +  PyObject *__pyx_t_2 = NULL;
    9048 +  PyObject *__pyx_t_3 = NULL;
    9049 +  int __pyx_t_4;
    9050 +  Py_ssize_t __pyx_t_5;
    9051 +  int __pyx_t_6;
    9052 +  int __pyx_t_7;
    9053 +  int __pyx_t_8;
    9054 +  PyObject *__pyx_t_9 = NULL;
    9055 +  PyObject *__pyx_t_10 = NULL;
    9056 +  PyObject *(*__pyx_t_11)(PyObject *);
    9057 +  int __pyx_lineno = 0;
    9058 +  const char *__pyx_filename = NULL;
    9059 +  int __pyx_clineno = 0;
    9060 +  __Pyx_RefNannySetupContext("multivariate_normal", 0);
    9061    __Pyx_INCREF(__pyx_v_mean);
    9062    __Pyx_INCREF(__pyx_v_cov);
    9063  
    9064 @@ -16639,7 +17252,7 @@
    9065    __Pyx_GOTREF(__pyx_t_2);
    9066    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    9067    __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3975; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    9068 -  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
    9069 +  __Pyx_GOTREF(__pyx_t_1);
    9070    __Pyx_INCREF(__pyx_v_mean);
    9071    PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_mean);
    9072    __Pyx_GIVEREF(__pyx_v_mean);
    9073 @@ -16664,7 +17277,7 @@
    9074    __Pyx_GOTREF(__pyx_t_1);
    9075    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    9076    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3976; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    9077 -  __Pyx_GOTREF(((PyObject *)__pyx_t_3));
    9078 +  __Pyx_GOTREF(__pyx_t_3);
    9079    __Pyx_INCREF(__pyx_v_cov);
    9080    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_cov);
    9081    __Pyx_GIVEREF(__pyx_v_cov);
    9082 @@ -16694,10 +17307,10 @@
    9083   *             shape = size
    9084   */
    9085      __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3978; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    9086 -    __Pyx_GOTREF(((PyObject *)__pyx_t_2));
    9087 +    __Pyx_GOTREF(__pyx_t_2);
    9088      __pyx_v_shape = ((PyObject *)__pyx_t_2);
    9089      __pyx_t_2 = 0;
    9090 -    goto __pyx_L6;
    9091 +    goto __pyx_L3;
    9092    }
    9093    /*else*/ {
    9094  
    9095 @@ -16711,7 +17324,7 @@
    9096      __Pyx_INCREF(__pyx_v_size);
    9097      __pyx_v_shape = __pyx_v_size;
    9098    }
    9099 -  __pyx_L6:;
    9100 +  __pyx_L3:;
    9101  
    9102    /* "mtrand.pyx":3981
    9103   *         else:
    9104 @@ -16739,9 +17352,9 @@
    9105      __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    9106      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    9107      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3982; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    9108 -    goto __pyx_L7;
    9109 +    goto __pyx_L4;
    9110    }
    9111 -  __pyx_L7:;
    9112 +  __pyx_L4:;
    9113  
    9114    /* "mtrand.pyx":3983
    9115   *         if len(mean.shape) != 1:
    9116 @@ -16766,8 +17379,7 @@
    9117      __pyx_t_1 = __Pyx_GetItemInt(__pyx_t_2, 1, sizeof(long), PyInt_FromLong); if (!__pyx_t_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3983; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    9118      __Pyx_GOTREF(__pyx_t_1);
    9119      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    9120 -    __pyx_t_2 = PyObject_RichCompare(__pyx_t_3, __pyx_t_1, Py_NE); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3983; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    9121 -    __Pyx_GOTREF(__pyx_t_2);
    9122 +    __pyx_t_2 = PyObject_RichCompare(__pyx_t_3, __pyx_t_1, Py_NE); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3983; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    9123      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    9124      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    9125      __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3983; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    9126 @@ -16790,9 +17402,9 @@
    9127      __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    9128      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    9129      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3984; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    9130 -    goto __pyx_L8;
    9131 +    goto __pyx_L5;
    9132    }
    9133 -  __pyx_L8:;
    9134 +  __pyx_L5:;
    9135  
    9136    /* "mtrand.pyx":3985
    9137   *         if (len(cov.shape) != 2) or (cov.shape[0] != cov.shape[1]):
    9138 @@ -16811,8 +17423,7 @@
    9139    __pyx_t_3 = __Pyx_GetItemInt(__pyx_t_2, 0, sizeof(long), PyInt_FromLong); if (!__pyx_t_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3985; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    9140    __Pyx_GOTREF(__pyx_t_3);
    9141    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    9142 -  __pyx_t_2 = PyObject_RichCompare(__pyx_t_1, __pyx_t_3, Py_NE); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3985; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    9143 -  __Pyx_GOTREF(__pyx_t_2);
    9144 +  __pyx_t_2 = PyObject_RichCompare(__pyx_t_1, __pyx_t_3, Py_NE); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3985; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    9145    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    9146    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    9147    __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3985; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    9148 @@ -16831,9 +17442,9 @@
    9149      __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    9150      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    9151      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3986; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    9152 -    goto __pyx_L9;
    9153 +    goto __pyx_L6;
    9154    }
    9155 -  __pyx_L9:;
    9156 +  __pyx_L6:;
    9157  
    9158    /* "mtrand.pyx":3988
    9159   *                raise ValueError("mean and cov must have same length")
    9160 @@ -16856,16 +17467,16 @@
    9161   *         final_shape.append(mean.shape[0])
    9162   */
    9163      __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3989; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    9164 -    __Pyx_GOTREF(((PyObject *)__pyx_t_2));
    9165 +    __Pyx_GOTREF(__pyx_t_2);
    9166      __Pyx_INCREF(__pyx_v_shape);
    9167      PyList_SET_ITEM(__pyx_t_2, 0, __pyx_v_shape);
    9168      __Pyx_GIVEREF(__pyx_v_shape);
    9169      __Pyx_DECREF(__pyx_v_shape);
    9170      __pyx_v_shape = ((PyObject *)__pyx_t_2);
    9171      __pyx_t_2 = 0;
    9172 -    goto __pyx_L10;
    9173 +    goto __pyx_L7;
    9174    }
    9175 -  __pyx_L10:;
    9176 +  __pyx_L7:;
    9177  
    9178    /* "mtrand.pyx":3990
    9179   *         if isinstance(shape, int):
    9180 @@ -16877,7 +17488,7 @@
    9181    __pyx_t_2 = __Pyx_PySequence_GetSlice(__pyx_v_shape, 0, PY_SSIZE_T_MAX); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3990; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    9182    __Pyx_GOTREF(__pyx_t_2);
    9183    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3990; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    9184 -  __Pyx_GOTREF(((PyObject *)__pyx_t_3));
    9185 +  __Pyx_GOTREF(__pyx_t_3);
    9186    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2);
    9187    __Pyx_GIVEREF(__pyx_t_2);
    9188    __pyx_t_2 = 0;
    9189 @@ -16894,9 +17505,6 @@
    9190   *         # Create a matrix of independent standard normally distributed random
    9191   *         # numbers. The matrix has rows with the same length as mean and as
    9192   */
    9193 -  if (unlikely(((PyObject *)__pyx_v_final_shape) == Py_None)) {
    9194 -    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "append"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3991; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    9195 -  }
    9196    __pyx_t_2 = PyObject_GetAttr(__pyx_v_mean, __pyx_n_s__shape); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3991; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    9197    __Pyx_GOTREF(__pyx_t_2);
    9198    __pyx_t_3 = __Pyx_GetItemInt(__pyx_t_2, 0, sizeof(long), PyInt_FromLong); if (!__pyx_t_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3991; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    9199 @@ -16912,7 +17520,7 @@
    9200   *         x.shape = (np.multiply.reduce(final_shape[0:len(final_shape)-1]),
    9201   *                    mean.shape[0])
    9202   */
    9203 -  __pyx_t_3 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__standard_normal); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3995; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    9204 +  __pyx_t_3 = PyObject_GetAttr(((PyObject *)__pyx_v_self), __pyx_n_s__standard_normal); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3995; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    9205    __Pyx_GOTREF(__pyx_t_3);
    9206    __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3995; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    9207    __Pyx_GOTREF(__pyx_t_2);
    9208 @@ -16923,7 +17531,7 @@
    9209    __Pyx_GOTREF(__pyx_t_2);
    9210    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    9211    __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3995; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    9212 -  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
    9213 +  __Pyx_GOTREF(__pyx_t_1);
    9214    __Pyx_INCREF(((PyObject *)__pyx_v_final_shape));
    9215    PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_v_final_shape));
    9216    __Pyx_GIVEREF(((PyObject *)__pyx_v_final_shape));
    9217 @@ -16932,7 +17540,7 @@
    9218    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    9219    __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
    9220    __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3995; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    9221 -  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
    9222 +  __Pyx_GOTREF(__pyx_t_1);
    9223    PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_9);
    9224    __Pyx_GIVEREF(__pyx_t_9);
    9225    __pyx_t_9 = 0;
    9226 @@ -16958,14 +17566,11 @@
    9227    __pyx_t_9 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__reduce); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3996; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    9228    __Pyx_GOTREF(__pyx_t_9);
    9229    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    9230 -  if (unlikely(((PyObject *)__pyx_v_final_shape) == Py_None)) {
    9231 -    PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3996; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    9232 -  }
    9233 -  __pyx_t_5 = PyList_GET_SIZE(((PyObject *)__pyx_v_final_shape));
    9234 +  __pyx_t_5 = PyList_GET_SIZE(((PyObject *)__pyx_v_final_shape)); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3996; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    9235    __pyx_t_1 = __Pyx_PySequence_GetSlice(((PyObject *)__pyx_v_final_shape), 0, (__pyx_t_5 - 1)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3996; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    9236    __Pyx_GOTREF(((PyObject *)__pyx_t_1));
    9237    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3996; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    9238 -  __Pyx_GOTREF(((PyObject *)__pyx_t_3));
    9239 +  __Pyx_GOTREF(__pyx_t_3);
    9240    PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_t_1));
    9241    __Pyx_GIVEREF(((PyObject *)__pyx_t_1));
    9242    __pyx_t_1 = 0;
    9243 @@ -16987,7 +17592,7 @@
    9244    __Pyx_GOTREF(__pyx_t_9);
    9245    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    9246    __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3996; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    9247 -  __Pyx_GOTREF(((PyObject *)__pyx_t_3));
    9248 +  __Pyx_GOTREF(__pyx_t_3);
    9249    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1);
    9250    __Pyx_GIVEREF(__pyx_t_1);
    9251    PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_9);
    9252 @@ -17013,14 +17618,18 @@
    9253   *         (u,s,v) = svd(cov)
    9254   */
    9255    __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4005; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    9256 -  __Pyx_GOTREF(((PyObject *)__pyx_t_3));
    9257 +  __Pyx_GOTREF(__pyx_t_3);
    9258    __Pyx_INCREF(((PyObject *)__pyx_n_s__svd));
    9259    PyList_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_n_s__svd));
    9260    __Pyx_GIVEREF(((PyObject *)__pyx_n_s__svd));
    9261    __pyx_t_9 = __Pyx_Import(((PyObject *)__pyx_n_s_166), ((PyObject *)__pyx_t_3), -1); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4005; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    9262    __Pyx_GOTREF(__pyx_t_9);
    9263    __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
    9264 -  __pyx_t_3 = PyObject_GetAttr(__pyx_t_9, __pyx_n_s__svd); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4005; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    9265 +  __pyx_t_3 = PyObject_GetAttr(__pyx_t_9, __pyx_n_s__svd);
    9266 +  if (__pyx_t_3 == NULL) {
    9267 +    if (PyErr_ExceptionMatches(PyExc_AttributeError)) __Pyx_RaiseImportError(__pyx_n_s__svd);
    9268 +    if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4005; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    9269 +  }
    9270    __Pyx_GOTREF(__pyx_t_3);
    9271    __Pyx_INCREF(__pyx_t_3);
    9272    __pyx_v_svd = __pyx_t_3;
    9273 @@ -17035,7 +17644,7 @@
    9274   *         # The rows of x now have the correct covariance but mean 0. Add
    9275   */
    9276    __pyx_t_9 = PyTuple_New(1); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4007; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    9277 -  __Pyx_GOTREF(((PyObject *)__pyx_t_9));
    9278 +  __Pyx_GOTREF(__pyx_t_9);
    9279    __Pyx_INCREF(__pyx_v_cov);
    9280    PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_v_cov);
    9281    __Pyx_GIVEREF(__pyx_v_cov);
    9282 @@ -17044,21 +17653,22 @@
    9283    __Pyx_DECREF(((PyObject *)__pyx_t_9)); __pyx_t_9 = 0;
    9284    if ((likely(PyTuple_CheckExact(__pyx_t_3))) || (PyList_CheckExact(__pyx_t_3))) {
    9285      PyObject* sequence = __pyx_t_3;
    9286 +    #if CYTHON_COMPILING_IN_CPYTHON
    9287 +    Py_ssize_t size = Py_SIZE(sequence);
    9288 +    #else
    9289 +    Py_ssize_t size = PySequence_Size(sequence);
    9290 +    #endif
    9291 +    if (unlikely(size != 3)) {
    9292 +      if (size > 3) __Pyx_RaiseTooManyValuesError(3);
    9293 +      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
    9294 +      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4007; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    9295 +    }
    9296 +    #if CYTHON_COMPILING_IN_CPYTHON
    9297      if (likely(PyTuple_CheckExact(sequence))) {
    9298 -      if (unlikely(PyTuple_GET_SIZE(sequence) != 3)) {
    9299 -        if (PyTuple_GET_SIZE(sequence) > 3) __Pyx_RaiseTooManyValuesError(3);
    9300 -        else __Pyx_RaiseNeedMoreValuesError(PyTuple_GET_SIZE(sequence));
    9301 -        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4007; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    9302 -      }
    9303        __pyx_t_9 = PyTuple_GET_ITEM(sequence, 0);
    9304        __pyx_t_1 = PyTuple_GET_ITEM(sequence, 1);
    9305        __pyx_t_2 = PyTuple_GET_ITEM(sequence, 2);
    9306      } else {
    9307 -      if (unlikely(PyList_GET_SIZE(sequence) != 3)) {
    9308 -        if (PyList_GET_SIZE(sequence) > 3) __Pyx_RaiseTooManyValuesError(3);
    9309 -        else __Pyx_RaiseNeedMoreValuesError(PyList_GET_SIZE(sequence));
    9310 -        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4007; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    9311 -      }
    9312        __pyx_t_9 = PyList_GET_ITEM(sequence, 0);
    9313        __pyx_t_1 = PyList_GET_ITEM(sequence, 1);
    9314        __pyx_t_2 = PyList_GET_ITEM(sequence, 2);
    9315 @@ -17066,28 +17676,35 @@
    9316      __Pyx_INCREF(__pyx_t_9);
    9317      __Pyx_INCREF(__pyx_t_1);
    9318      __Pyx_INCREF(__pyx_t_2);
    9319 +    #else
    9320 +    __pyx_t_9 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4007; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    9321 +    __pyx_t_1 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4007; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    9322 +    __pyx_t_2 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4007; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    9323 +    #endif
    9324      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    9325 -  } else {
    9326 +  } else
    9327 +  {
    9328      Py_ssize_t index = -1;
    9329      __pyx_t_10 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4007; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    9330      __Pyx_GOTREF(__pyx_t_10);
    9331      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    9332      __pyx_t_11 = Py_TYPE(__pyx_t_10)->tp_iternext;
    9333 -    index = 0; __pyx_t_9 = __pyx_t_11(__pyx_t_10); if (unlikely(!__pyx_t_9)) goto __pyx_L11_unpacking_failed;
    9334 +    index = 0; __pyx_t_9 = __pyx_t_11(__pyx_t_10); if (unlikely(!__pyx_t_9)) goto __pyx_L8_unpacking_failed;
    9335      __Pyx_GOTREF(__pyx_t_9);
    9336 -    index = 1; __pyx_t_1 = __pyx_t_11(__pyx_t_10); if (unlikely(!__pyx_t_1)) goto __pyx_L11_unpacking_failed;
    9337 +    index = 1; __pyx_t_1 = __pyx_t_11(__pyx_t_10); if (unlikely(!__pyx_t_1)) goto __pyx_L8_unpacking_failed;
    9338      __Pyx_GOTREF(__pyx_t_1);
    9339 -    index = 2; __pyx_t_2 = __pyx_t_11(__pyx_t_10); if (unlikely(!__pyx_t_2)) goto __pyx_L11_unpacking_failed;
    9340 +    index = 2; __pyx_t_2 = __pyx_t_11(__pyx_t_10); if (unlikely(!__pyx_t_2)) goto __pyx_L8_unpacking_failed;
    9341      __Pyx_GOTREF(__pyx_t_2);
    9342      if (__Pyx_IternextUnpackEndCheck(__pyx_t_11(__pyx_t_10), 3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4007; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    9343 +    __pyx_t_11 = NULL;
    9344      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    9345 -    goto __pyx_L12_unpacking_done;
    9346 -    __pyx_L11_unpacking_failed:;
    9347 +    goto __pyx_L9_unpacking_done;
    9348 +    __pyx_L8_unpacking_failed:;
    9349      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    9350 -    if (PyErr_Occurred() && PyErr_ExceptionMatches(PyExc_StopIteration)) PyErr_Clear();
    9351 -    if (!PyErr_Occurred()) __Pyx_RaiseNeedMoreValuesError(index);
    9352 +    __pyx_t_11 = NULL;
    9353 +    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    9354      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4007; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    9355 -    __pyx_L12_unpacking_done:;
    9356 +    __pyx_L9_unpacking_done:;
    9357    }
    9358    __pyx_v_u = __pyx_t_9;
    9359    __pyx_t_9 = 0;
    9360 @@ -17114,7 +17731,7 @@
    9361    __Pyx_GOTREF(__pyx_t_1);
    9362    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    9363    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4008; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    9364 -  __Pyx_GOTREF(((PyObject *)__pyx_t_3));
    9365 +  __Pyx_GOTREF(__pyx_t_3);
    9366    __Pyx_INCREF(__pyx_v_s);
    9367    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_s);
    9368    __Pyx_GIVEREF(__pyx_v_s);
    9369 @@ -17126,7 +17743,7 @@
    9370    __Pyx_GOTREF(__pyx_t_3);
    9371    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    9372    __pyx_t_9 = PyTuple_New(2); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4008; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    9373 -  __Pyx_GOTREF(((PyObject *)__pyx_t_9));
    9374 +  __Pyx_GOTREF(__pyx_t_9);
    9375    PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_3);
    9376    __Pyx_GIVEREF(__pyx_t_3);
    9377    __Pyx_INCREF(__pyx_v_v);
    9378 @@ -17154,7 +17771,7 @@
    9379    __Pyx_GOTREF(__pyx_t_9);
    9380    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    9381    __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4011; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    9382 -  __Pyx_GOTREF(((PyObject *)__pyx_t_3));
    9383 +  __Pyx_GOTREF(__pyx_t_3);
    9384    __Pyx_INCREF(__pyx_v_mean);
    9385    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_mean);
    9386    __Pyx_GIVEREF(__pyx_v_mean);
    9387 @@ -17177,9 +17794,6 @@
    9388   *         return x
    9389   *
    9390   */
    9391 -  if (unlikely(((PyObject *)__pyx_v_final_shape) == Py_None)) {
    9392 -    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4012; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    9393 -  }
    9394    __pyx_t_2 = ((PyObject *)PyList_AsTuple(__pyx_v_final_shape)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4012; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    9395    __Pyx_GOTREF(((PyObject *)__pyx_t_2));
    9396    if (PyObject_SetAttr(__pyx_v_x, __pyx_n_s__shape, ((PyObject *)__pyx_t_2)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4012; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    9397 @@ -17222,50 +17836,32 @@
    9398    return __pyx_r;
    9399  }
    9400  
    9401 -/* "mtrand.pyx":4015
    9402 +/* Python wrapper */
    9403 +static PyObject *__pyx_pw_6mtrand_11RandomState_97multinomial(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
    9404 +static char __pyx_doc_6mtrand_11RandomState_96multinomial[] = "\n        multinomial(n, pvals, size=None)\n\n        Draw samples from a multinomial distribution.\n\n        The multinomial distribution is a multivariate generalisation of the\n        binomial distribution.  Take an experiment with one of ``p``\n        possible outcomes.  An example of such an experiment is throwing a dice,\n        where the outcome can be 1 through 6.  Each sample drawn from the\n        distribution represents `n` such experiments.  Its values,\n        ``X_i = [X_0, X_1, ..., X_p]``, represent the number of times the outcome\n        was ``i``.\n\n        Parameters\n        ----------\n        n : int\n            Number of experiments.\n        pvals : sequence of floats, length p\n            Probabilities of each of the ``p`` different outcomes.  These\n            should sum to 1 (however, the last element is always assumed to\n            account for the remaining probability, as long as\n            ``sum(pvals[:-1]) <= 1)``.\n        size : tuple of ints\n            Given a `size` of ``(M, N, K)``, then ``M*N*K`` samples are drawn,\n            and the output shape becomes ``(M, N, K, p)``, since each sample\n            has shape ``(p,)``.\n\n        Examples\n        --------\n        Throw a dice 20 times:\n\n        >>> np.random.multinomial(20, [1/6.]*6, size=1)\n        array([[4, 1, 7, 5, 2, 1]])\n\n        It landed 4 times on 1, once on 2, etc.\n\n        Now, throw the dice 20 times, and 20 times again:\n\n        >>> np.random.multinomial(20, [1/6.]*6, size=2)\n        array([[3, 4, 3, 3, 4, 3],\n               [2, 4, 3, 4, 0, 7]])\n\n        For the first run, we threw 3 times 1, 4 times 2, etc.  For the second,\n        we threw 2 times 1, 4 times 2, etc.\n\n        A loaded dice is more likely to land on number 6:\n\n        >>> np.random.multinomial(100, [1/7.]*5)\n        array([13, 16, 13, 16, 42])\n\n        ";
    9405 +static PyObject *__pyx_pw_6mtrand_11RandomState_97multinomial(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
    9406 +  npy_intp __pyx_v_n;
    9407 +  PyObject *__pyx_v_pvals = 0;
    9408 +  PyObject *__pyx_v_size = 0;
    9409 +  PyObject *__pyx_r = 0;
    9410 +  __Pyx_RefNannyDeclarations
    9411 +  __Pyx_RefNannySetupContext("multinomial (wrapper)", 0);
    9412 +  {
    9413 +    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__n,&__pyx_n_s__pvals,&__pyx_n_s__size,0};
    9414 +    PyObject* values[3] = {0,0,0};
    9415 +
    9416 +    /* "mtrand.pyx":4015
    9417   *         return x
    9418   *
    9419   *     def multinomial(self, npy_intp n, object pvals, size=None):             # <<<<<<<<<<<<<<
    9420   *         """
    9421   *         multinomial(n, pvals, size=None)
    9422   */
    9423 -
    9424 -static PyObject *__pyx_pf_6mtrand_11RandomState_48multinomial(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
    9425 -static char __pyx_doc_6mtrand_11RandomState_48multinomial[] = "\n        multinomial(n, pvals, size=None)\n\n        Draw samples from a multinomial distribution.\n\n        The multinomial distribution is a multivariate generalisation of the\n        binomial distribution.  Take an experiment with one of ``p``\n        possible outcomes.  An example of such an experiment is throwing a dice,\n        where the outcome can be 1 through 6.  Each sample drawn from the\n        distribution represents `n` such experiments.  Its values,\n        ``X_i = [X_0, X_1, ..., X_p]``, represent the number of times the outcome\n        was ``i``.\n\n        Parameters\n        ----------\n        n : int\n            Number of experiments.\n        pvals : sequence of floats, length p\n            Probabilities of each of the ``p`` different outcomes.  These\n            should sum to 1 (however, the last element is always assumed to\n            account for the remaining probability, as long as\n            ``sum(pvals[:-1]) <= 1)``.\n        size : tuple of ints\n            Given a `size` of ``(M, N, K)``, then ``M*N*K`` samples are drawn,\n            and the output shape becomes ``(M, N, K, p)``, since each sample\n            has shape ``(p,)``.\n\n        Examples\n        --------\n        Throw a dice 20 times:\n\n        >>> np.random.multinomial(20, [1/6.]*6, size=1)\n        array([[4, 1, 7, 5, 2, 1]])\n\n        It landed 4 times on 1, once on 2, etc.\n\n        Now, throw the dice 20 times, and 20 times again:\n\n        >>> np.random.multinomial(20, [1/6.]*6, size=2)\n        array([[3, 4, 3, 3, 4, 3],\n               [2, 4, 3, 4, 0, 7]])\n\n        For the first run, we threw 3 times 1, 4 times 2, etc.  For the second,\n        we threw 2 times 1, 4 times 2, etc.\n\n        A loaded dice is more likely to land on number 6:\n\n        >>> np.random.multinomial(100, [1/7.]*5)\n        array([13, 16, 13, 16, 42])\n\n        ";
    9426 -static PyObject *__pyx_pf_6mtrand_11RandomState_48multinomial(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
    9427 -  npy_intp __pyx_v_n;
    9428 -  PyObject *__pyx_v_pvals = 0;
    9429 -  PyObject *__pyx_v_size = 0;
    9430 -  npy_intp __pyx_v_d;
    9431 -  PyArrayObject *arrayObject_parr = 0;
    9432 -  PyArrayObject *arrayObject_mnarr = 0;
    9433 -  double *__pyx_v_pix;
    9434 -  long *__pyx_v_mnix;
    9435 -  npy_intp __pyx_v_i;
    9436 -  npy_intp __pyx_v_j;
    9437 -  npy_intp __pyx_v_dn;
    9438 -  double __pyx_v_Sum;
    9439 -  PyObject *__pyx_v_shape = NULL;
    9440 -  PyObject *__pyx_v_multin = NULL;
    9441 -  PyObject *__pyx_r = NULL;
    9442 -  __Pyx_RefNannyDeclarations
    9443 -  Py_ssize_t __pyx_t_1;
    9444 -  PyObject *__pyx_t_2 = NULL;
    9445 -  int __pyx_t_3;
    9446 -  PyObject *__pyx_t_4 = NULL;
    9447 -  PyObject *__pyx_t_5 = NULL;
    9448 -  long __pyx_t_6;
    9449 -  int __pyx_lineno = 0;
    9450 -  const char *__pyx_filename = NULL;
    9451 -  int __pyx_clineno = 0;
    9452 -  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__n,&__pyx_n_s__pvals,&__pyx_n_s__size,0};
    9453 -  __Pyx_RefNannySetupContext("multinomial");
    9454 -  {
    9455 -    PyObject* values[3] = {0,0,0};
    9456      values[2] = ((PyObject *)Py_None);
    9457      if (unlikely(__pyx_kwds)) {
    9458        Py_ssize_t kw_args;
    9459 -      switch (PyTuple_GET_SIZE(__pyx_args)) {
    9460 +      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
    9461 +      switch (pos_args) {
    9462          case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
    9463          case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    9464          case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    9465 @@ -17273,14 +17869,12 @@
    9466          default: goto __pyx_L5_argtuple_error;
    9467        }
    9468        kw_args = PyDict_Size(__pyx_kwds);
    9469 -      switch (PyTuple_GET_SIZE(__pyx_args)) {
    9470 +      switch (pos_args) {
    9471          case  0:
    9472 -        values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__n);
    9473 -        if (likely(values[0])) kw_args--;
    9474 +        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__n)) != 0)) kw_args--;
    9475          else goto __pyx_L5_argtuple_error;
    9476          case  1:
    9477 -        values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__pvals);
    9478 -        if (likely(values[1])) kw_args--;
    9479 +        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__pvals)) != 0)) kw_args--;
    9480          else {
    9481            __Pyx_RaiseArgtupleInvalid("multinomial", 0, 2, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4015; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    9482          }
    9483 @@ -17291,7 +17885,7 @@
    9484          }
    9485        }
    9486        if (unlikely(kw_args > 0)) {
    9487 -        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "multinomial") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4015; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    9488 +        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "multinomial") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4015; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    9489        }
    9490      } else {
    9491        switch (PyTuple_GET_SIZE(__pyx_args)) {
    9492 @@ -17314,6 +17908,35 @@
    9493    __Pyx_RefNannyFinishContext();
    9494    return NULL;
    9495    __pyx_L4_argument_unpacking_done:;
    9496 +  __pyx_r = __pyx_pf_6mtrand_11RandomState_96multinomial(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self), __pyx_v_n, __pyx_v_pvals, __pyx_v_size);
    9497 +  __Pyx_RefNannyFinishContext();
    9498 +  return __pyx_r;
    9499 +}
    9500 +
    9501 +static PyObject *__pyx_pf_6mtrand_11RandomState_96multinomial(struct __pyx_obj_6mtrand_RandomState *__pyx_v_self, npy_intp __pyx_v_n, PyObject *__pyx_v_pvals, PyObject *__pyx_v_size) {
    9502 +  npy_intp __pyx_v_d;
    9503 +  PyArrayObject *arrayObject_parr = 0;
    9504 +  PyArrayObject *arrayObject_mnarr = 0;
    9505 +  double *__pyx_v_pix;
    9506 +  long *__pyx_v_mnix;
    9507 +  npy_intp __pyx_v_i;
    9508 +  npy_intp __pyx_v_j;
    9509 +  npy_intp __pyx_v_dn;
    9510 +  double __pyx_v_Sum;
    9511 +  PyObject *__pyx_v_shape = NULL;
    9512 +  PyObject *__pyx_v_multin = NULL;
    9513 +  PyObject *__pyx_r = NULL;
    9514 +  __Pyx_RefNannyDeclarations
    9515 +  Py_ssize_t __pyx_t_1;
    9516 +  PyObject *__pyx_t_2 = NULL;
    9517 +  int __pyx_t_3;
    9518 +  PyObject *__pyx_t_4 = NULL;
    9519 +  PyObject *__pyx_t_5 = NULL;
    9520 +  long __pyx_t_6;
    9521 +  int __pyx_lineno = 0;
    9522 +  const char *__pyx_filename = NULL;
    9523 +  int __pyx_clineno = 0;
    9524 +  __Pyx_RefNannySetupContext("multinomial", 0);
    9525  
    9526    /* "mtrand.pyx":4074
    9527   *         cdef double Sum
    9528 @@ -17369,9 +17992,9 @@
    9529      __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    9530      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    9531      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4079; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    9532 -    goto __pyx_L6;
    9533 +    goto __pyx_L3;
    9534    }
    9535 -  __pyx_L6:;
    9536 +  __pyx_L3:;
    9537  
    9538    /* "mtrand.pyx":4081
    9539   *             raise ValueError("sum(pvals[:-1]) > 1.0")
    9540 @@ -17393,13 +18016,13 @@
    9541      __pyx_t_2 = __Pyx_PyInt_to_py_npy_intp(__pyx_v_d); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4082; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    9542      __Pyx_GOTREF(__pyx_t_2);
    9543      __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4082; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    9544 -    __Pyx_GOTREF(((PyObject *)__pyx_t_4));
    9545 +    __Pyx_GOTREF(__pyx_t_4);
    9546      PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
    9547      __Pyx_GIVEREF(__pyx_t_2);
    9548      __pyx_t_2 = 0;
    9549      __pyx_v_shape = ((PyObject *)__pyx_t_4);
    9550      __pyx_t_4 = 0;
    9551 -    goto __pyx_L7;
    9552 +    goto __pyx_L4;
    9553    }
    9554  
    9555    /* "mtrand.pyx":4083
    9556 @@ -17422,7 +18045,7 @@
    9557      __pyx_t_4 = __Pyx_PyInt_to_py_npy_intp(__pyx_v_d); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4084; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    9558      __Pyx_GOTREF(__pyx_t_4);
    9559      __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4084; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    9560 -    __Pyx_GOTREF(((PyObject *)__pyx_t_2));
    9561 +    __Pyx_GOTREF(__pyx_t_2);
    9562      __Pyx_INCREF(__pyx_v_size);
    9563      PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_size);
    9564      __Pyx_GIVEREF(__pyx_v_size);
    9565 @@ -17431,7 +18054,7 @@
    9566      __pyx_t_4 = 0;
    9567      __pyx_v_shape = ((PyObject *)__pyx_t_2);
    9568      __pyx_t_2 = 0;
    9569 -    goto __pyx_L7;
    9570 +    goto __pyx_L4;
    9571    }
    9572    /*else*/ {
    9573  
    9574 @@ -17445,7 +18068,7 @@
    9575      __pyx_t_2 = __Pyx_PyInt_to_py_npy_intp(__pyx_v_d); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4086; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    9576      __Pyx_GOTREF(__pyx_t_2);
    9577      __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4086; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    9578 -    __Pyx_GOTREF(((PyObject *)__pyx_t_4));
    9579 +    __Pyx_GOTREF(__pyx_t_4);
    9580      PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
    9581      __Pyx_GIVEREF(__pyx_t_2);
    9582      __pyx_t_2 = 0;
    9583 @@ -17455,7 +18078,7 @@
    9584      __pyx_v_shape = __pyx_t_2;
    9585      __pyx_t_2 = 0;
    9586    }
    9587 -  __pyx_L7:;
    9588 +  __pyx_L4:;
    9589  
    9590    /* "mtrand.pyx":4088
    9591   *             shape = size + (d,)
    9592 @@ -17470,7 +18093,7 @@
    9593    __Pyx_GOTREF(__pyx_t_4);
    9594    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    9595    __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4088; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    9596 -  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
    9597 +  __Pyx_GOTREF(__pyx_t_2);
    9598    __Pyx_INCREF(__pyx_v_shape);
    9599    PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_shape);
    9600    __Pyx_GIVEREF(__pyx_v_shape);
    9601 @@ -17562,7 +18185,7 @@
    9602          PyErr_Format(PyExc_ZeroDivisionError, "float division");
    9603          {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4096; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    9604        }
    9605 -      (__pyx_v_mnix[(__pyx_v_i + __pyx_v_j)]) = rk_binomial(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state, __pyx_v_dn, ((__pyx_v_pix[__pyx_v_j]) / __pyx_v_Sum));
    9606 +      (__pyx_v_mnix[(__pyx_v_i + __pyx_v_j)]) = rk_binomial(__pyx_v_self->internal_state, __pyx_v_dn, ((__pyx_v_pix[__pyx_v_j]) / __pyx_v_Sum));
    9607  
    9608        /* "mtrand.pyx":4097
    9609   *             for j from 0 <= j < d-1:
    9610 @@ -17590,10 +18213,10 @@
    9611   *                 Sum = Sum - pix[j]
    9612   *             if dn > 0:
    9613   */
    9614 -        goto __pyx_L11_break;
    9615 -        goto __pyx_L12;
    9616 +        goto __pyx_L8_break;
    9617 +        goto __pyx_L9;
    9618        }
    9619 -      __pyx_L12:;
    9620 +      __pyx_L9:;
    9621  
    9622        /* "mtrand.pyx":4100
    9623   *                 if dn <= 0:
    9624 @@ -17604,7 +18227,7 @@
    9625   */
    9626        __pyx_v_Sum = (__pyx_v_Sum - (__pyx_v_pix[__pyx_v_j]));
    9627      }
    9628 -    __pyx_L11_break:;
    9629 +    __pyx_L8_break:;
    9630  
    9631      /* "mtrand.pyx":4101
    9632   *                     break
    9633 @@ -17624,9 +18247,9 @@
    9634   *             i = i + d
    9635   */
    9636        (__pyx_v_mnix[((__pyx_v_i + __pyx_v_d) - 1)]) = __pyx_v_dn;
    9637 -      goto __pyx_L13;
    9638 +      goto __pyx_L10;
    9639      }
    9640 -    __pyx_L13:;
    9641 +    __pyx_L10:;
    9642  
    9643      /* "mtrand.pyx":4104
    9644   *                 mnix[i+d-1] = dn
    9645 @@ -17668,60 +18291,40 @@
    9646    return __pyx_r;
    9647  }
    9648  
    9649 -/* "mtrand.pyx":4108
    9650 +/* Python wrapper */
    9651 +static PyObject *__pyx_pw_6mtrand_11RandomState_99dirichlet(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
    9652 +static char __pyx_doc_6mtrand_11RandomState_98dirichlet[] = "\n        dirichlet(alpha, size=None)\n\n        Draw samples from the Dirichlet distribution.\n\n        Draw `size` samples of dimension k from a Dirichlet distribution. A\n        Dirichlet-distributed random variable can be seen as a multivariate\n        generalization of a Beta distribution. Dirichlet pdf is the conjugate\n        prior of a multinomial in Bayesian inference.\n\n        Parameters\n        ----------\n        alpha : array\n            Parameter of the distribution (k dimension for sample of\n            dimension k).\n        size : array\n            Number of samples to draw.\n\n        Returns\n        -------\n        samples : ndarray,\n            The drawn samples, of shape (alpha.ndim, size).\n\n        Notes\n        -----\n        .. math:: X \\approx \\prod_{i=1}^{k}{x^{\\alpha_i-1}_i}\n\n        Uses the following property for computation: for each dimension,\n        draw a random sample y_i from a standard gamma generator of shape\n        `alpha_i`, then\n        :math:`X = \\frac{1}{\\sum_{i=1}^k{y_i}} (y_1, \\ldots, y_n)` is\n        Dirichlet distributed.\n\n        References\n        ----------\n        .. [1] David McKay, \"Information Theory, Inference and Learning\n               Algorithms,\" chapter 23,\n               http://www.inference.phy.cam.ac.uk/mackay/\n        .. [2] Wikipedia, \"Dirichlet distribution\",\n               http://en.wikipedia.org/wiki/Dirichlet_distribution\n\n        Examples\n        --------\n        Taking an example cited in Wikipedia, this distribution can be used if\n        one wanted to cut strings (each of initial length 1.0) into K pieces\n        with different lengths, where each piece had, on average, a designated\n        average length, but allowing some variation in the relative sizes of the\n        pieces.\n\n        >>> s = np.random.dirichlet((10, 5, 3), 20).transpose()\n\n        >>> plt.barh(range(20), s[0])\n        >>> plt.barh(range(20), s[1], left=s[0], color='g')""\n        >>> plt.barh(range(20), s[2], left=s[0]+s[1], color='r')\n        >>> plt.title(\"Lengths of Strings\")\n\n        ";
    9653 +static PyObject *__pyx_pw_6mtrand_11RandomState_99dirichlet(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
    9654 +  PyObject *__pyx_v_alpha = 0;
    9655 +  PyObject *__pyx_v_size = 0;
    9656 +  PyObject *__pyx_r = 0;
    9657 +  __Pyx_RefNannyDeclarations
    9658 +  __Pyx_RefNannySetupContext("dirichlet (wrapper)", 0);
    9659 +  {
    9660 +    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__alpha,&__pyx_n_s__size,0};
    9661 +    PyObject* values[2] = {0,0};
    9662 +
    9663 +    /* "mtrand.pyx":4108
    9664   *         return multin
    9665   *
    9666   *     def dirichlet(self, object alpha, size=None):             # <<<<<<<<<<<<<<
    9667   *         """
    9668   *         dirichlet(alpha, size=None)
    9669   */
    9670 -
    9671 -static PyObject *__pyx_pf_6mtrand_11RandomState_49dirichlet(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
    9672 -static char __pyx_doc_6mtrand_11RandomState_49dirichlet[] = "\n        dirichlet(alpha, size=None)\n\n        Draw samples from the Dirichlet distribution.\n\n        Draw `size` samples of dimension k from a Dirichlet distribution. A\n        Dirichlet-distributed random variable can be seen as a multivariate\n        generalization of a Beta distribution. Dirichlet pdf is the conjugate\n        prior of a multinomial in Bayesian inference.\n\n        Parameters\n        ----------\n        alpha : array\n            Parameter of the distribution (k dimension for sample of\n            dimension k).\n        size : array\n            Number of samples to draw.\n\n        Returns\n        -------\n        samples : ndarray,\n            The drawn samples, of shape (alpha.ndim, size).\n\n        Notes\n        -----\n        .. math:: X \\approx \\prod_{i=1}^{k}{x^{\\alpha_i-1}_i}\n\n        Uses the following property for computation: for each dimension,\n        draw a random sample y_i from a standard gamma generator of shape\n        `alpha_i`, then\n        :math:`X = \\frac{1}{\\sum_{i=1}^k{y_i}} (y_1, \\ldots, y_n)` is\n        Dirichlet distributed.\n\n        References\n        ----------\n        .. [1] David McKay, \"Information Theory, Inference and Learning\n               Algorithms,\" chapter 23,\n               http://www.inference.phy.cam.ac.uk/mackay/\n        .. [2] Wikipedia, \"Dirichlet distribution\",\n               http://en.wikipedia.org/wiki/Dirichlet_distribution\n\n        Examples\n        --------\n        Taking an example cited in Wikipedia, this distribution can be used if\n        one wanted to cut strings (each of initial length 1.0) into K pieces\n        with different lengths, where each piece had, on average, a designated\n        average length, but allowing some variation in the relative sizes of the\n        pieces.\n\n        >>> s = np.random.dirichlet((10, 5, 3), 20).transpose()\n\n        >>> plt.barh(range(20), s[0])\n        >>> plt.barh(range(20), s[1], left=s[0], color='g')""\n        >>> plt.barh(range(20), s[2], left=s[0]+s[1], color='r')\n        >>> plt.title(\"Lengths of Strings\")\n\n        ";
    9673 -static PyObject *__pyx_pf_6mtrand_11RandomState_49dirichlet(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
    9674 -  PyObject *__pyx_v_alpha = 0;
    9675 -  PyObject *__pyx_v_size = 0;
    9676 -  npy_intp __pyx_v_k;
    9677 -  npy_intp __pyx_v_totsize;
    9678 -  PyArrayObject *__pyx_v_alpha_arr = 0;
    9679 -  PyArrayObject *__pyx_v_val_arr = 0;
    9680 -  double *__pyx_v_alpha_data;
    9681 -  double *__pyx_v_val_data;
    9682 -  npy_intp __pyx_v_i;
    9683 -  npy_intp __pyx_v_j;
    9684 -  double __pyx_v_acc;
    9685 -  double __pyx_v_invacc;
    9686 -  PyObject *__pyx_v_shape = NULL;
    9687 -  PyObject *__pyx_v_diric = NULL;
    9688 -  PyObject *__pyx_r = NULL;
    9689 -  __Pyx_RefNannyDeclarations
    9690 -  Py_ssize_t __pyx_t_1;
    9691 -  PyObject *__pyx_t_2 = NULL;
    9692 -  int __pyx_t_3;
    9693 -  PyObject *__pyx_t_4 = NULL;
    9694 -  PyObject *__pyx_t_5 = NULL;
    9695 -  npy_intp __pyx_t_6;
    9696 -  int __pyx_lineno = 0;
    9697 -  const char *__pyx_filename = NULL;
    9698 -  int __pyx_clineno = 0;
    9699 -  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__alpha,&__pyx_n_s__size,0};
    9700 -  __Pyx_RefNannySetupContext("dirichlet");
    9701 -  {
    9702 -    PyObject* values[2] = {0,0};
    9703      values[1] = ((PyObject *)Py_None);
    9704      if (unlikely(__pyx_kwds)) {
    9705        Py_ssize_t kw_args;
    9706 -      switch (PyTuple_GET_SIZE(__pyx_args)) {
    9707 +      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
    9708 +      switch (pos_args) {
    9709          case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    9710          case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    9711          case  0: break;
    9712          default: goto __pyx_L5_argtuple_error;
    9713        }
    9714        kw_args = PyDict_Size(__pyx_kwds);
    9715 -      switch (PyTuple_GET_SIZE(__pyx_args)) {
    9716 +      switch (pos_args) {
    9717          case  0:
    9718 -        values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__alpha);
    9719 -        if (likely(values[0])) kw_args--;
    9720 +        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__alpha)) != 0)) kw_args--;
    9721          else goto __pyx_L5_argtuple_error;
    9722          case  1:
    9723          if (kw_args > 0) {
    9724 @@ -17730,7 +18333,7 @@
    9725          }
    9726        }
    9727        if (unlikely(kw_args > 0)) {
    9728 -        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "dirichlet") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4108; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    9729 +        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "dirichlet") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4108; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    9730        }
    9731      } else {
    9732        switch (PyTuple_GET_SIZE(__pyx_args)) {
    9733 @@ -17751,6 +18354,36 @@
    9734    __Pyx_RefNannyFinishContext();
    9735    return NULL;
    9736    __pyx_L4_argument_unpacking_done:;
    9737 +  __pyx_r = __pyx_pf_6mtrand_11RandomState_98dirichlet(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self), __pyx_v_alpha, __pyx_v_size);
    9738 +  __Pyx_RefNannyFinishContext();
    9739 +  return __pyx_r;
    9740 +}
    9741 +
    9742 +static PyObject *__pyx_pf_6mtrand_11RandomState_98dirichlet(struct __pyx_obj_6mtrand_RandomState *__pyx_v_self, PyObject *__pyx_v_alpha, PyObject *__pyx_v_size) {
    9743 +  npy_intp __pyx_v_k;
    9744 +  npy_intp __pyx_v_totsize;
    9745 +  PyArrayObject *__pyx_v_alpha_arr = 0;
    9746 +  PyArrayObject *__pyx_v_val_arr = 0;
    9747 +  double *__pyx_v_alpha_data;
    9748 +  double *__pyx_v_val_data;
    9749 +  npy_intp __pyx_v_i;
    9750 +  npy_intp __pyx_v_j;
    9751 +  double __pyx_v_acc;
    9752 +  double __pyx_v_invacc;
    9753 +  PyObject *__pyx_v_shape = NULL;
    9754 +  PyObject *__pyx_v_diric = NULL;
    9755 +  PyObject *__pyx_r = NULL;
    9756 +  __Pyx_RefNannyDeclarations
    9757 +  Py_ssize_t __pyx_t_1;
    9758 +  PyObject *__pyx_t_2 = NULL;
    9759 +  int __pyx_t_3;
    9760 +  PyObject *__pyx_t_4 = NULL;
    9761 +  PyObject *__pyx_t_5 = NULL;
    9762 +  npy_intp __pyx_t_6;
    9763 +  int __pyx_lineno = 0;
    9764 +  const char *__pyx_filename = NULL;
    9765 +  int __pyx_clineno = 0;
    9766 +  __Pyx_RefNannySetupContext("dirichlet", 0);
    9767  
    9768    /* "mtrand.pyx":4194
    9769   *         cdef double     acc, invacc
    9770 @@ -17804,13 +18437,13 @@
    9771      __pyx_t_2 = __Pyx_PyInt_to_py_npy_intp(__pyx_v_k); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4199; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    9772      __Pyx_GOTREF(__pyx_t_2);
    9773      __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4199; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    9774 -    __Pyx_GOTREF(((PyObject *)__pyx_t_4));
    9775 +    __Pyx_GOTREF(__pyx_t_4);
    9776      PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
    9777      __Pyx_GIVEREF(__pyx_t_2);
    9778      __pyx_t_2 = 0;
    9779      __pyx_v_shape = ((PyObject *)__pyx_t_4);
    9780      __pyx_t_4 = 0;
    9781 -    goto __pyx_L6;
    9782 +    goto __pyx_L3;
    9783    }
    9784  
    9785    /* "mtrand.pyx":4200
    9786 @@ -17833,7 +18466,7 @@
    9787      __pyx_t_4 = __Pyx_PyInt_to_py_npy_intp(__pyx_v_k); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4201; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    9788      __Pyx_GOTREF(__pyx_t_4);
    9789      __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4201; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    9790 -    __Pyx_GOTREF(((PyObject *)__pyx_t_2));
    9791 +    __Pyx_GOTREF(__pyx_t_2);
    9792      __Pyx_INCREF(__pyx_v_size);
    9793      PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_size);
    9794      __Pyx_GIVEREF(__pyx_v_size);
    9795 @@ -17842,7 +18475,7 @@
    9796      __pyx_t_4 = 0;
    9797      __pyx_v_shape = ((PyObject *)__pyx_t_2);
    9798      __pyx_t_2 = 0;
    9799 -    goto __pyx_L6;
    9800 +    goto __pyx_L3;
    9801    }
    9802    /*else*/ {
    9803  
    9804 @@ -17856,7 +18489,7 @@
    9805      __pyx_t_2 = __Pyx_PyInt_to_py_npy_intp(__pyx_v_k); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4203; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    9806      __Pyx_GOTREF(__pyx_t_2);
    9807      __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4203; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    9808 -    __Pyx_GOTREF(((PyObject *)__pyx_t_4));
    9809 +    __Pyx_GOTREF(__pyx_t_4);
    9810      PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
    9811      __Pyx_GIVEREF(__pyx_t_2);
    9812      __pyx_t_2 = 0;
    9813 @@ -17866,7 +18499,7 @@
    9814      __pyx_v_shape = __pyx_t_2;
    9815      __pyx_t_2 = 0;
    9816    }
    9817 -  __pyx_L6:;
    9818 +  __pyx_L3:;
    9819  
    9820    /* "mtrand.pyx":4205
    9821   *             shape = size + (k,)
    9822 @@ -17886,7 +18519,7 @@
    9823    __Pyx_GOTREF(__pyx_t_5);
    9824    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    9825    __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4205; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    9826 -  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
    9827 +  __Pyx_GOTREF(__pyx_t_2);
    9828    __Pyx_INCREF(__pyx_v_shape);
    9829    PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_shape);
    9830    __Pyx_GIVEREF(__pyx_v_shape);
    9831 @@ -17974,7 +18607,7 @@
    9832   *                 acc             = acc + val_data[i+j]
    9833   *             invacc  = 1/acc
    9834   */
    9835 -      (__pyx_v_val_data[(__pyx_v_i + __pyx_v_j)]) = rk_standard_gamma(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state, (__pyx_v_alpha_data[__pyx_v_j]));
    9836 +      (__pyx_v_val_data[(__pyx_v_i + __pyx_v_j)]) = rk_standard_gamma(__pyx_v_self->internal_state, (__pyx_v_alpha_data[__pyx_v_j]));
    9837  
    9838        /* "mtrand.pyx":4215
    9839   *             for j from 0 <= j < k:
    9840 @@ -18059,6 +18692,18 @@
    9841    return __pyx_r;
    9842  }
    9843  
    9844 +/* Python wrapper */
    9845 +static PyObject *__pyx_pw_6mtrand_11RandomState_101shuffle(PyObject *__pyx_v_self, PyObject *__pyx_v_x); /*proto*/
    9846 +static char __pyx_doc_6mtrand_11RandomState_100shuffle[] = "\n        shuffle(x)\n\n        Modify a sequence in-place by shuffling its contents.\n\n        Parameters\n        ----------\n        x : array_like\n            The array or list to be shuffled.\n\n        Returns\n        -------\n        None\n\n        Examples\n        --------\n        >>> arr = np.arange(10)\n        >>> np.random.shuffle(arr)\n        >>> arr\n        [1 7 5 2 9 4 3 6 0 8]\n\n        This function only shuffles the array along the first index of a\n        multi-dimensional array:\n\n        >>> arr = np.arange(9).reshape((3, 3))\n        >>> np.random.shuffle(arr)\n        >>> arr\n        array([[3, 4, 5],\n               [6, 7, 8],\n               [0, 1, 2]])\n\n        ";
    9847 +static PyObject *__pyx_pw_6mtrand_11RandomState_101shuffle(PyObject *__pyx_v_self, PyObject *__pyx_v_x) {
    9848 +  PyObject *__pyx_r = 0;
    9849 +  __Pyx_RefNannyDeclarations
    9850 +  __Pyx_RefNannySetupContext("shuffle (wrapper)", 0);
    9851 +  __pyx_r = __pyx_pf_6mtrand_11RandomState_100shuffle(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self), ((PyObject *)__pyx_v_x));
    9852 +  __Pyx_RefNannyFinishContext();
    9853 +  return __pyx_r;
    9854 +}
    9855 +
    9856  /* "mtrand.pyx":4224
    9857   *
    9858   *     # Shuffling and permutations:
    9859 @@ -18067,9 +18712,7 @@
    9860   *         shuffle(x)
    9861   */
    9862  
    9863 -static PyObject *__pyx_pf_6mtrand_11RandomState_50shuffle(PyObject *__pyx_v_self, PyObject *__pyx_v_x); /*proto*/
    9864 -static char __pyx_doc_6mtrand_11RandomState_50shuffle[] = "\n        shuffle(x)\n\n        Modify a sequence in-place by shuffling its contents.\n\n        Parameters\n        ----------\n        x : array_like\n            The array or list to be shuffled.\n\n        Returns\n        -------\n        None\n\n        Examples\n        --------\n        >>> arr = np.arange(10)\n        >>> np.random.shuffle(arr)\n        >>> arr\n        [1 7 5 2 9 4 3 6 0 8]\n\n        This function only shuffles the array along the first index of a\n        multi-dimensional array:\n\n        >>> arr = np.arange(9).reshape((3, 3))\n        >>> np.random.shuffle(arr)\n        >>> arr\n        array([[3, 4, 5],\n               [6, 7, 8],\n               [0, 1, 2]])\n\n        ";
    9865 -static PyObject *__pyx_pf_6mtrand_11RandomState_50shuffle(PyObject *__pyx_v_self, PyObject *__pyx_v_x) {
    9866 +static PyObject *__pyx_pf_6mtrand_11RandomState_100shuffle(struct __pyx_obj_6mtrand_RandomState *__pyx_v_self, PyObject *__pyx_v_x) {
    9867    npy_intp __pyx_v_i;
    9868    npy_intp __pyx_v_j;
    9869    int __pyx_v_copy;
    9870 @@ -18086,7 +18729,7 @@
    9871    int __pyx_lineno = 0;
    9872    const char *__pyx_filename = NULL;
    9873    int __pyx_clineno = 0;
    9874 -  __Pyx_RefNannySetupContext("shuffle");
    9875 +  __Pyx_RefNannySetupContext("shuffle", 0);
    9876  
    9877    /* "mtrand.pyx":4260
    9878   *         cdef int copy
    9879 @@ -18119,17 +18762,17 @@
    9880   *         except:
    9881   *             j = 0
    9882   */
    9883 -      __pyx_t_5 = __Pyx_GetItemInt(__pyx_v_x, 0, sizeof(long), PyInt_FromLong); if (!__pyx_t_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4262; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
    9884 +      __pyx_t_5 = __Pyx_GetItemInt(__pyx_v_x, 0, sizeof(long), PyInt_FromLong); if (!__pyx_t_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4262; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    9885        __Pyx_GOTREF(__pyx_t_5);
    9886 -      __pyx_t_1 = PyObject_Length(__pyx_t_5); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4262; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
    9887 +      __pyx_t_1 = PyObject_Length(__pyx_t_5); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4262; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    9888        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    9889        __pyx_v_j = __pyx_t_1;
    9890      }
    9891      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    9892      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    9893      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    9894 -    goto __pyx_L12_try_end;
    9895 -    __pyx_L5_error:;
    9896 +    goto __pyx_L10_try_end;
    9897 +    __pyx_L3_error:;
    9898      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    9899  
    9900      /* "mtrand.pyx":4263
    9901 @@ -18141,7 +18784,7 @@
    9902   */
    9903      /*except:*/ {
    9904        __Pyx_AddTraceback("mtrand.RandomState.shuffle", __pyx_clineno, __pyx_lineno, __pyx_filename);
    9905 -      if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4263; __pyx_clineno = __LINE__; goto __pyx_L7_except_error;}
    9906 +      if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4263; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;}
    9907        __Pyx_GOTREF(__pyx_t_5);
    9908        __Pyx_GOTREF(__pyx_t_6);
    9909        __Pyx_GOTREF(__pyx_t_7);
    9910 @@ -18157,20 +18800,20 @@
    9911        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    9912        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    9913        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    9914 -      goto __pyx_L6_exception_handled;
    9915 +      goto __pyx_L4_exception_handled;
    9916      }
    9917 -    __pyx_L7_except_error:;
    9918 +    __pyx_L5_except_error:;
    9919      __Pyx_XGIVEREF(__pyx_t_2);
    9920      __Pyx_XGIVEREF(__pyx_t_3);
    9921      __Pyx_XGIVEREF(__pyx_t_4);
    9922      __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
    9923      goto __pyx_L1_error;
    9924 -    __pyx_L6_exception_handled:;
    9925 +    __pyx_L4_exception_handled:;
    9926      __Pyx_XGIVEREF(__pyx_t_2);
    9927      __Pyx_XGIVEREF(__pyx_t_3);
    9928      __Pyx_XGIVEREF(__pyx_t_4);
    9929      __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
    9930 -    __pyx_L12_try_end:;
    9931 +    __pyx_L10_try_end:;
    9932    }
    9933  
    9934    /* "mtrand.pyx":4266
    9935 @@ -18201,7 +18844,7 @@
    9936   *                 x[i], x[j] = x[j], x[i]
    9937   *                 i = i - 1
    9938   */
    9939 -      __pyx_v_j = rk_interval(__pyx_v_i, ((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state);
    9940 +      __pyx_v_j = rk_interval(__pyx_v_i, __pyx_v_self->internal_state);
    9941  
    9942        /* "mtrand.pyx":4270
    9943   *             while i > 0:
    9944 @@ -18228,7 +18871,7 @@
    9945   */
    9946        __pyx_v_i = (__pyx_v_i - 1);
    9947      }
    9948 -    goto __pyx_L15;
    9949 +    goto __pyx_L13;
    9950    }
    9951    /*else*/ {
    9952  
    9953 @@ -18275,7 +18918,7 @@
    9954   *                     x[i], x[j] = x[j].copy(), x[i].copy()
    9955   *                     i = i - 1
    9956   */
    9957 -        __pyx_v_j = rk_interval(__pyx_v_i, ((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state);
    9958 +        __pyx_v_j = rk_interval(__pyx_v_i, __pyx_v_self->internal_state);
    9959  
    9960          /* "mtrand.pyx":4278
    9961   *                 while(i > 0):
    9962 @@ -18314,7 +18957,7 @@
    9963   */
    9964          __pyx_v_i = (__pyx_v_i - 1);
    9965        }
    9966 -      goto __pyx_L18;
    9967 +      goto __pyx_L16;
    9968      }
    9969      /*else*/ {
    9970  
    9971 @@ -18336,7 +18979,7 @@
    9972   *                     x[i], x[j] = x[j][:], x[i][:]
    9973   *                     i = i - 1
    9974   */
    9975 -        __pyx_v_j = rk_interval(__pyx_v_i, ((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state);
    9976 +        __pyx_v_j = rk_interval(__pyx_v_i, __pyx_v_self->internal_state);
    9977  
    9978          /* "mtrand.pyx":4283
    9979   *                 while(i > 0):
    9980 @@ -18370,9 +19013,9 @@
    9981          __pyx_v_i = (__pyx_v_i - 1);
    9982        }
    9983      }
    9984 -    __pyx_L18:;
    9985 +    __pyx_L16:;
    9986    }
    9987 -  __pyx_L15:;
    9988 +  __pyx_L13:;
    9989  
    9990    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    9991    goto __pyx_L0;
    9992 @@ -18388,6 +19031,18 @@
    9993    return __pyx_r;
    9994  }
    9995  
    9996 +/* Python wrapper */
    9997 +static PyObject *__pyx_pw_6mtrand_11RandomState_103permutation(PyObject *__pyx_v_self, PyObject *__pyx_v_x); /*proto*/
    9998 +static char __pyx_doc_6mtrand_11RandomState_102permutation[] = "\n        permutation(x)\n\n        Randomly permute a sequence, or return a permuted range.\n\n        If `x` is a multi-dimensional array, it is only shuffled along its\n        first index.\n\n        Parameters\n        ----------\n        x : int or array_like\n            If `x` is an integer, randomly permute ``np.arange(x)``.\n            If `x` is an array, make a copy and shuffle the elements\n            randomly.\n\n        Returns\n        -------\n        out : ndarray\n            Permuted sequence or array range.\n\n        Examples\n        --------\n        >>> np.random.permutation(10)\n        array([1, 7, 4, 3, 0, 9, 2, 5, 8, 6])\n\n        >>> np.random.permutation([1, 4, 9, 12, 15])\n        array([15,  1,  9,  4, 12])\n\n        >>> arr = np.arange(9).reshape((3, 3))\n        >>> np.random.permutation(arr)\n        array([[6, 7, 8],\n               [0, 1, 2],\n               [3, 4, 5]])\n\n        ";
    9999 +static PyObject *__pyx_pw_6mtrand_11RandomState_103permutation(PyObject *__pyx_v_self, PyObject *__pyx_v_x) {
    10000 +  PyObject *__pyx_r = 0;
    10001 +  __Pyx_RefNannyDeclarations
    10002 +  __Pyx_RefNannySetupContext("permutation (wrapper)", 0);
    10003 +  __pyx_r = __pyx_pf_6mtrand_11RandomState_102permutation(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self), ((PyObject *)__pyx_v_x));
    10004 +  __Pyx_RefNannyFinishContext();
    10005 +  return __pyx_r;
    10006 +}
    10007 +
    10008  /* "mtrand.pyx":4286
    10009   *                     i = i - 1
    10010   *
    10011 @@ -18396,9 +19051,7 @@
    10012   *         permutation(x)
    10013   */
    10014  
    10015 -static PyObject *__pyx_pf_6mtrand_11RandomState_51permutation(PyObject *__pyx_v_self, PyObject *__pyx_v_x); /*proto*/
    10016 -static char __pyx_doc_6mtrand_11RandomState_51permutation[] = "\n        permutation(x)\n\n        Randomly permute a sequence, or return a permuted range.\n\n        If `x` is a multi-dimensional array, it is only shuffled along its\n        first index.\n\n        Parameters\n        ----------\n        x : int or array_like\n            If `x` is an integer, randomly permute ``np.arange(x)``.\n            If `x` is an array, make a copy and shuffle the elements\n            randomly.\n\n        Returns\n        -------\n        out : ndarray\n            Permuted sequence or array range.\n\n        Examples\n        --------\n        >>> np.random.permutation(10)\n        array([1, 7, 4, 3, 0, 9, 2, 5, 8, 6])\n\n        >>> np.random.permutation([1, 4, 9, 12, 15])\n        array([15,  1,  9,  4, 12])\n\n        >>> arr = np.arange(9).reshape((3, 3))\n        >>> np.random.permutation(arr)\n        array([[6, 7, 8],\n               [0, 1, 2],\n               [3, 4, 5]])\n\n        ";
    10017 -static PyObject *__pyx_pf_6mtrand_11RandomState_51permutation(PyObject *__pyx_v_self, PyObject *__pyx_v_x) {
    10018 +static PyObject *__pyx_pf_6mtrand_11RandomState_102permutation(struct __pyx_obj_6mtrand_RandomState *__pyx_v_self, PyObject *__pyx_v_x) {
    10019    PyObject *__pyx_v_arr = NULL;
    10020    PyObject *__pyx_r = NULL;
    10021    __Pyx_RefNannyDeclarations
    10022 @@ -18409,7 +19062,7 @@
    10023    int __pyx_lineno = 0;
    10024    const char *__pyx_filename = NULL;
    10025    int __pyx_clineno = 0;
    10026 -  __Pyx_RefNannySetupContext("permutation");
    10027 +  __Pyx_RefNannySetupContext("permutation", 0);
    10028  
    10029    /* "mtrand.pyx":4322
    10030   *
    10031 @@ -18424,7 +19077,7 @@
    10032    __Pyx_GOTREF(__pyx_t_2);
    10033    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    10034    __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4322; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    10035 -  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
    10036 +  __Pyx_GOTREF(__pyx_t_1);
    10037    __Pyx_INCREF(((PyObject *)((PyObject*)(&PyInt_Type))));
    10038    PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)((PyObject*)(&PyInt_Type))));
    10039    __Pyx_GIVEREF(((PyObject *)((PyObject*)(&PyInt_Type))));
    10040 @@ -18451,7 +19104,7 @@
    10041      __Pyx_GOTREF(__pyx_t_2);
    10042      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    10043      __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4323; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    10044 -    __Pyx_GOTREF(((PyObject *)__pyx_t_1));
    10045 +    __Pyx_GOTREF(__pyx_t_1);
    10046      __Pyx_INCREF(__pyx_v_x);
    10047      PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_x);
    10048      __Pyx_GIVEREF(__pyx_v_x);
    10049 @@ -18461,7 +19114,7 @@
    10050      __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
    10051      __pyx_v_arr = __pyx_t_4;
    10052      __pyx_t_4 = 0;
    10053 -    goto __pyx_L5;
    10054 +    goto __pyx_L3;
    10055    }
    10056    /*else*/ {
    10057  
    10058 @@ -18478,7 +19131,7 @@
    10059      __Pyx_GOTREF(__pyx_t_1);
    10060      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    10061      __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4325; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    10062 -    __Pyx_GOTREF(((PyObject *)__pyx_t_4));
    10063 +    __Pyx_GOTREF(__pyx_t_4);
    10064      __Pyx_INCREF(__pyx_v_x);
    10065      PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_x);
    10066      __Pyx_GIVEREF(__pyx_v_x);
    10067 @@ -18489,7 +19142,7 @@
    10068      __pyx_v_arr = __pyx_t_2;
    10069      __pyx_t_2 = 0;
    10070    }
    10071 -  __pyx_L5:;
    10072 +  __pyx_L3:;
    10073  
    10074    /* "mtrand.pyx":4326
    10075   *         else:
    10076 @@ -18498,10 +19151,10 @@
    10077   *         return arr
    10078   *
    10079   */
    10080 -  __pyx_t_2 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__shuffle); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4326; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    10081 +  __pyx_t_2 = PyObject_GetAttr(((PyObject *)__pyx_v_self), __pyx_n_s__shuffle); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4326; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    10082    __Pyx_GOTREF(__pyx_t_2);
    10083    __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4326; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    10084 -  __Pyx_GOTREF(((PyObject *)__pyx_t_4));
    10085 +  __Pyx_GOTREF(__pyx_t_4);
    10086    __Pyx_INCREF(__pyx_v_arr);
    10087    PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_arr);
    10088    __Pyx_GIVEREF(__pyx_v_arr);
    10089 @@ -18538,7 +19191,7 @@
    10090    return __pyx_r;
    10091  }
    10092  
    10093 -static PyObject *__pyx_tp_new_6mtrand_RandomState(PyTypeObject *t, PyObject *a, PyObject *k) {
    10094 +static PyObject *__pyx_tp_new_6mtrand_RandomState(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
    10095    PyObject *o = (*t->tp_alloc)(t, 0);
    10096    if (!o) return 0;
    10097    return o;
    10098 @@ -18549,7 +19202,7 @@
    10099      PyObject *etype, *eval, *etb;
    10100      PyErr_Fetch(&etype, &eval, &etb);
    10101      ++Py_REFCNT(o);
    10102 -    __pyx_pf_6mtrand_11RandomState_1__dealloc__(o);
    10103 +    __pyx_pw_6mtrand_11RandomState_3__dealloc__(o);
    10104      if (PyErr_Occurred()) PyErr_WriteUnraisable(o);
    10105      --Py_REFCNT(o);
    10106      PyErr_Restore(etype, eval, etb);
    10107 @@ -18558,56 +19211,56 @@
    10108  }
    10109  
    10110  static PyMethodDef __pyx_methods_6mtrand_RandomState[] = {
    10111 -  {__Pyx_NAMESTR("seed"), (PyCFunction)__pyx_pf_6mtrand_11RandomState_2seed, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_6mtrand_11RandomState_2seed)},
    10112 -  {__Pyx_NAMESTR("get_state"), (PyCFunction)__pyx_pf_6mtrand_11RandomState_3get_state, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_6mtrand_11RandomState_3get_state)},
    10113 -  {__Pyx_NAMESTR("set_state"), (PyCFunction)__pyx_pf_6mtrand_11RandomState_4set_state, METH_O, __Pyx_DOCSTR(__pyx_doc_6mtrand_11RandomState_4set_state)},
    10114 -  {__Pyx_NAMESTR("__getstate__"), (PyCFunction)__pyx_pf_6mtrand_11RandomState_5__getstate__, METH_NOARGS, __Pyx_DOCSTR(0)},
    10115 -  {__Pyx_NAMESTR("__setstate__"), (PyCFunction)__pyx_pf_6mtrand_11RandomState_6__setstate__, METH_O, __Pyx_DOCSTR(0)},
    10116 -  {__Pyx_NAMESTR("__reduce__"), (PyCFunction)__pyx_pf_6mtrand_11RandomState_7__reduce__, METH_NOARGS, __Pyx_DOCSTR(0)},
    10117 -  {__Pyx_NAMESTR("random_sample"), (PyCFunction)__pyx_pf_6mtrand_11RandomState_8random_sample, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_6mtrand_11RandomState_8random_sample)},
    10118 -  {__Pyx_NAMESTR("tomaxint"), (PyCFunction)__pyx_pf_6mtrand_11RandomState_9tomaxint, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_6mtrand_11RandomState_9tomaxint)},
    10119 -  {__Pyx_NAMESTR("randint"), (PyCFunction)__pyx_pf_6mtrand_11RandomState_10randint, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_6mtrand_11RandomState_10randint)},
    10120 -  {__Pyx_NAMESTR("bytes"), (PyCFunction)__pyx_pf_6mtrand_11RandomState_11bytes, METH_O, __Pyx_DOCSTR(__pyx_doc_6mtrand_11RandomState_11bytes)},
    10121 -  {__Pyx_NAMESTR("uniform"), (PyCFunction)__pyx_pf_6mtrand_11RandomState_12uniform, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_6mtrand_11RandomState_12uniform)},
    10122 -  {__Pyx_NAMESTR("rand"), (PyCFunction)__pyx_pf_6mtrand_11RandomState_13rand, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_6mtrand_11RandomState_13rand)},
    10123 -  {__Pyx_NAMESTR("randn"), (PyCFunction)__pyx_pf_6mtrand_11RandomState_14randn, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_6mtrand_11RandomState_14randn)},
    10124 -  {__Pyx_NAMESTR("random_integers"), (PyCFunction)__pyx_pf_6mtrand_11RandomState_15random_integers, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_6mtrand_11RandomState_15random_integers)},
    10125 -  {__Pyx_NAMESTR("standard_normal"), (PyCFunction)__pyx_pf_6mtrand_11RandomState_16standard_normal, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_6mtrand_11RandomState_16standard_normal)},
    10126 -  {__Pyx_NAMESTR("normal"), (PyCFunction)__pyx_pf_6mtrand_11RandomState_17normal, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_6mtrand_11RandomState_17normal)},
    10127 -  {__Pyx_NAMESTR("beta"), (PyCFunction)__pyx_pf_6mtrand_11RandomState_18beta, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_6mtrand_11RandomState_18beta)},
    10128 -  {__Pyx_NAMESTR("exponential"), (PyCFunction)__pyx_pf_6mtrand_11RandomState_19exponential, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_6mtrand_11RandomState_19exponential)},
    10129 -  {__Pyx_NAMESTR("standard_exponential"), (PyCFunction)__pyx_pf_6mtrand_11RandomState_20standard_exponential, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_6mtrand_11RandomState_20standard_exponential)},
    10130 -  {__Pyx_NAMESTR("standard_gamma"), (PyCFunction)__pyx_pf_6mtrand_11RandomState_21standard_gamma, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_6mtrand_11RandomState_21standard_gamma)},
    10131 -  {__Pyx_NAMESTR("gamma"), (PyCFunction)__pyx_pf_6mtrand_11RandomState_22gamma, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_6mtrand_11RandomState_22gamma)},
    10132 -  {__Pyx_NAMESTR("f"), (PyCFunction)__pyx_pf_6mtrand_11RandomState_23f, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_6mtrand_11RandomState_23f)},
    10133 -  {__Pyx_NAMESTR("noncentral_f"), (PyCFunction)__pyx_pf_6mtrand_11RandomState_24noncentral_f, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_6mtrand_11RandomState_24noncentral_f)},
    10134 -  {__Pyx_NAMESTR("chisquare"), (PyCFunction)__pyx_pf_6mtrand_11RandomState_25chisquare, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_6mtrand_11RandomState_25chisquare)},
    10135 -  {__Pyx_NAMESTR("noncentral_chisquare"), (PyCFunction)__pyx_pf_6mtrand_11RandomState_26noncentral_chisquare, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_6mtrand_11RandomState_26noncentral_chisquare)},
    10136 -  {__Pyx_NAMESTR("standard_cauchy"), (PyCFunction)__pyx_pf_6mtrand_11RandomState_27standard_cauchy, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_6mtrand_11RandomState_27standard_cauchy)},
    10137 -  {__Pyx_NAMESTR("standard_t"), (PyCFunction)__pyx_pf_6mtrand_11RandomState_28standard_t, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_6mtrand_11RandomState_28standard_t)},
    10138 -  {__Pyx_NAMESTR("vonmises"), (PyCFunction)__pyx_pf_6mtrand_11RandomState_29vonmises, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_6mtrand_11RandomState_29vonmises)},
    10139 -  {__Pyx_NAMESTR("pareto"), (PyCFunction)__pyx_pf_6mtrand_11RandomState_30pareto, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_6mtrand_11RandomState_30pareto)},
    10140 -  {__Pyx_NAMESTR("weibull"), (PyCFunction)__pyx_pf_6mtrand_11RandomState_31weibull, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_6mtrand_11RandomState_31weibull)},
    10141 -  {__Pyx_NAMESTR("power"), (PyCFunction)__pyx_pf_6mtrand_11RandomState_32power, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_6mtrand_11RandomState_32power)},
    10142 -  {__Pyx_NAMESTR("laplace"), (PyCFunction)__pyx_pf_6mtrand_11RandomState_33laplace, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_6mtrand_11RandomState_33laplace)},
    10143 -  {__Pyx_NAMESTR("gumbel"), (PyCFunction)__pyx_pf_6mtrand_11RandomState_34gumbel, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_6mtrand_11RandomState_34gumbel)},
    10144 -  {__Pyx_NAMESTR("logistic"), (PyCFunction)__pyx_pf_6mtrand_11RandomState_35logistic, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_6mtrand_11RandomState_35logistic)},
    10145 -  {__Pyx_NAMESTR("lognormal"), (PyCFunction)__pyx_pf_6mtrand_11RandomState_36lognormal, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_6mtrand_11RandomState_36lognormal)},
    10146 -  {__Pyx_NAMESTR("rayleigh"), (PyCFunction)__pyx_pf_6mtrand_11RandomState_37rayleigh, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_6mtrand_11RandomState_37rayleigh)},
    10147 -  {__Pyx_NAMESTR("wald"), (PyCFunction)__pyx_pf_6mtrand_11RandomState_38wald, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_6mtrand_11RandomState_38wald)},
    10148 -  {__Pyx_NAMESTR("triangular"), (PyCFunction)__pyx_pf_6mtrand_11RandomState_39triangular, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_6mtrand_11RandomState_39triangular)},
    10149 -  {__Pyx_NAMESTR("binomial"), (PyCFunction)__pyx_pf_6mtrand_11RandomState_40binomial, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_6mtrand_11RandomState_40binomial)},
    10150 -  {__Pyx_NAMESTR("negative_binomial"), (PyCFunction)__pyx_pf_6mtrand_11RandomState_41negative_binomial, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_6mtrand_11RandomState_41negative_binomial)},
    10151 -  {__Pyx_NAMESTR("poisson"), (PyCFunction)__pyx_pf_6mtrand_11RandomState_42poisson, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_6mtrand_11RandomState_42poisson)},
    10152 -  {__Pyx_NAMESTR("zipf"), (PyCFunction)__pyx_pf_6mtrand_11RandomState_43zipf, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_6mtrand_11RandomState_43zipf)},
    10153 -  {__Pyx_NAMESTR("geometric"), (PyCFunction)__pyx_pf_6mtrand_11RandomState_44geometric, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_6mtrand_11RandomState_44geometric)},
    10154 -  {__Pyx_NAMESTR("hypergeometric"), (PyCFunction)__pyx_pf_6mtrand_11RandomState_45hypergeometric, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_6mtrand_11RandomState_45hypergeometric)},
    10155 -  {__Pyx_NAMESTR("logseries"), (PyCFunction)__pyx_pf_6mtrand_11RandomState_46logseries, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_6mtrand_11RandomState_46logseries)},
    10156 -  {__Pyx_NAMESTR("multivariate_normal"), (PyCFunction)__pyx_pf_6mtrand_11RandomState_47multivariate_normal, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_6mtrand_11RandomState_47multivariate_normal)},
    10157 -  {__Pyx_NAMESTR("multinomial"), (PyCFunction)__pyx_pf_6mtrand_11RandomState_48multinomial, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_6mtrand_11RandomState_48multinomial)},
    10158 -  {__Pyx_NAMESTR("dirichlet"), (PyCFunction)__pyx_pf_6mtrand_11RandomState_49dirichlet, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_6mtrand_11RandomState_49dirichlet)},
    10159 -  {__Pyx_NAMESTR("shuffle"), (PyCFunction)__pyx_pf_6mtrand_11RandomState_50shuffle, METH_O, __Pyx_DOCSTR(__pyx_doc_6mtrand_11RandomState_50shuffle)},
    10160 -  {__Pyx_NAMESTR("permutation"), (PyCFunction)__pyx_pf_6mtrand_11RandomState_51permutation, METH_O, __Pyx_DOCSTR(__pyx_doc_6mtrand_11RandomState_51permutation)},
    10161 +  {__Pyx_NAMESTR("seed"), (PyCFunction)__pyx_pw_6mtrand_11RandomState_5seed, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_6mtrand_11RandomState_4seed)},
    10162 +  {__Pyx_NAMESTR("get_state"), (PyCFunction)__pyx_pw_6mtrand_11RandomState_7get_state, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_6mtrand_11RandomState_6get_state)},
    10163 +  {__Pyx_NAMESTR("set_state"), (PyCFunction)__pyx_pw_6mtrand_11RandomState_9set_state, METH_O, __Pyx_DOCSTR(__pyx_doc_6mtrand_11RandomState_8set_state)},
    10164 +  {__Pyx_NAMESTR("__getstate__"), (PyCFunction)__pyx_pw_6mtrand_11RandomState_11__getstate__, METH_NOARGS, __Pyx_DOCSTR(0)},
    10165 +  {__Pyx_NAMESTR("__setstate__"), (PyCFunction)__pyx_pw_6mtrand_11RandomState_13__setstate__, METH_O, __Pyx_DOCSTR(0)},
    10166 +  {__Pyx_NAMESTR("__reduce__"), (PyCFunction)__pyx_pw_6mtrand_11RandomState_15__reduce__, METH_NOARGS, __Pyx_DOCSTR(0)},
    10167 +  {__Pyx_NAMESTR("random_sample"), (PyCFunction)__pyx_pw_6mtrand_11RandomState_17random_sample, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_6mtrand_11RandomState_16random_sample)},
    10168 +  {__Pyx_NAMESTR("tomaxint"), (PyCFunction)__pyx_pw_6mtrand_11RandomState_19tomaxint, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_6mtrand_11RandomState_18tomaxint)},
    10169 +  {__Pyx_NAMESTR("randint"), (PyCFunction)__pyx_pw_6mtrand_11RandomState_21randint, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_6mtrand_11RandomState_20randint)},
    10170 +  {__Pyx_NAMESTR("bytes"), (PyCFunction)__pyx_pw_6mtrand_11RandomState_23bytes, METH_O, __Pyx_DOCSTR(__pyx_doc_6mtrand_11RandomState_22bytes)},
    10171 +  {__Pyx_NAMESTR("uniform"), (PyCFunction)__pyx_pw_6mtrand_11RandomState_25uniform, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_6mtrand_11RandomState_24uniform)},
    10172 +  {__Pyx_NAMESTR("rand"), (PyCFunction)__pyx_pw_6mtrand_11RandomState_27rand, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_6mtrand_11RandomState_26rand)},
    10173 +  {__Pyx_NAMESTR("randn"), (PyCFunction)__pyx_pw_6mtrand_11RandomState_29randn, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_6mtrand_11RandomState_28randn)},
    10174 +  {__Pyx_NAMESTR("random_integers"), (PyCFunction)__pyx_pw_6mtrand_11RandomState_31random_integers, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_6mtrand_11RandomState_30random_integers)},
    10175 +  {__Pyx_NAMESTR("standard_normal"), (PyCFunction)__pyx_pw_6mtrand_11RandomState_33standard_normal, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_6mtrand_11RandomState_32standard_normal)},
    10176 +  {__Pyx_NAMESTR("normal"), (PyCFunction)__pyx_pw_6mtrand_11RandomState_35normal, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_6mtrand_11RandomState_34normal)},
    10177 +  {__Pyx_NAMESTR("beta"), (PyCFunction)__pyx_pw_6mtrand_11RandomState_37beta, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_6mtrand_11RandomState_36beta)},
    10178 +  {__Pyx_NAMESTR("exponential"), (PyCFunction)__pyx_pw_6mtrand_11RandomState_39exponential, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_6mtrand_11RandomState_38exponential)},
    10179 +  {__Pyx_NAMESTR("standard_exponential"), (PyCFunction)__pyx_pw_6mtrand_11RandomState_41standard_exponential, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_6mtrand_11RandomState_40standard_exponential)},
    10180 +  {__Pyx_NAMESTR("standard_gamma"), (PyCFunction)__pyx_pw_6mtrand_11RandomState_43standard_gamma, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_6mtrand_11RandomState_42standard_gamma)},
    10181 +  {__Pyx_NAMESTR("gamma"), (PyCFunction)__pyx_pw_6mtrand_11RandomState_45gamma, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_6mtrand_11RandomState_44gamma)},
    10182 +  {__Pyx_NAMESTR("f"), (PyCFunction)__pyx_pw_6mtrand_11RandomState_47f, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_6mtrand_11RandomState_46f)},
    10183 +  {__Pyx_NAMESTR("noncentral_f"), (PyCFunction)__pyx_pw_6mtrand_11RandomState_49noncentral_f, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_6mtrand_11RandomState_48noncentral_f)},
    10184 +  {__Pyx_NAMESTR("chisquare"), (PyCFunction)__pyx_pw_6mtrand_11RandomState_51chisquare, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_6mtrand_11RandomState_50chisquare)},
    10185 +  {__Pyx_NAMESTR("noncentral_chisquare"), (PyCFunction)__pyx_pw_6mtrand_11RandomState_53noncentral_chisquare, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_6mtrand_11RandomState_52noncentral_chisquare)},
    10186 +  {__Pyx_NAMESTR("standard_cauchy"), (PyCFunction)__pyx_pw_6mtrand_11RandomState_55standard_cauchy, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_6mtrand_11RandomState_54standard_cauchy)},
    10187 +  {__Pyx_NAMESTR("standard_t"), (PyCFunction)__pyx_pw_6mtrand_11RandomState_57standard_t, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_6mtrand_11RandomState_56standard_t)},
    10188 +  {__Pyx_NAMESTR("vonmises"), (PyCFunction)__pyx_pw_6mtrand_11RandomState_59vonmises, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_6mtrand_11RandomState_58vonmises)},
    10189 +  {__Pyx_NAMESTR("pareto"), (PyCFunction)__pyx_pw_6mtrand_11RandomState_61pareto, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_6mtrand_11RandomState_60pareto)},
    10190 +  {__Pyx_NAMESTR("weibull"), (PyCFunction)__pyx_pw_6mtrand_11RandomState_63weibull, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_6mtrand_11RandomState_62weibull)},
    10191 +  {__Pyx_NAMESTR("power"), (PyCFunction)__pyx_pw_6mtrand_11RandomState_65power, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_6mtrand_11RandomState_64power)},
    10192 +  {__Pyx_NAMESTR("laplace"), (PyCFunction)__pyx_pw_6mtrand_11RandomState_67laplace, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_6mtrand_11RandomState_66laplace)},
    10193 +  {__Pyx_NAMESTR("gumbel"), (PyCFunction)__pyx_pw_6mtrand_11RandomState_69gumbel, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_6mtrand_11RandomState_68gumbel)},
    10194 +  {__Pyx_NAMESTR("logistic"), (PyCFunction)__pyx_pw_6mtrand_11RandomState_71logistic, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_6mtrand_11RandomState_70logistic)},
    10195 +  {__Pyx_NAMESTR("lognormal"), (PyCFunction)__pyx_pw_6mtrand_11RandomState_73lognormal, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_6mtrand_11RandomState_72lognormal)},
    10196 +  {__Pyx_NAMESTR("rayleigh"), (PyCFunction)__pyx_pw_6mtrand_11RandomState_75rayleigh, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_6mtrand_11RandomState_74rayleigh)},
    10197 +  {__Pyx_NAMESTR("wald"), (PyCFunction)__pyx_pw_6mtrand_11RandomState_77wald, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_6mtrand_11RandomState_76wald)},
    10198 +  {__Pyx_NAMESTR("triangular"), (PyCFunction)__pyx_pw_6mtrand_11RandomState_79triangular, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_6mtrand_11RandomState_78triangular)},
    10199 +  {__Pyx_NAMESTR("binomial"), (PyCFunction)__pyx_pw_6mtrand_11RandomState_81binomial, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_6mtrand_11RandomState_80binomial)},
    10200 +  {__Pyx_NAMESTR("negative_binomial"), (PyCFunction)__pyx_pw_6mtrand_11RandomState_83negative_binomial, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_6mtrand_11RandomState_82negative_binomial)},
    10201 +  {__Pyx_NAMESTR("poisson"), (PyCFunction)__pyx_pw_6mtrand_11RandomState_85poisson, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_6mtrand_11RandomState_84poisson)},
    10202 +  {__Pyx_NAMESTR("zipf"), (PyCFunction)__pyx_pw_6mtrand_11RandomState_87zipf, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_6mtrand_11RandomState_86zipf)},
    10203 +  {__Pyx_NAMESTR("geometric"), (PyCFunction)__pyx_pw_6mtrand_11RandomState_89geometric, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_6mtrand_11RandomState_88geometric)},
    10204 +  {__Pyx_NAMESTR("hypergeometric"), (PyCFunction)__pyx_pw_6mtrand_11RandomState_91hypergeometric, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_6mtrand_11RandomState_90hypergeometric)},
    10205 +  {__Pyx_NAMESTR("logseries"), (PyCFunction)__pyx_pw_6mtrand_11RandomState_93logseries, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_6mtrand_11RandomState_92logseries)},
    10206 +  {__Pyx_NAMESTR("multivariate_normal"), (PyCFunction)__pyx_pw_6mtrand_11RandomState_95multivariate_normal, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_6mtrand_11RandomState_94multivariate_normal)},
    10207 +  {__Pyx_NAMESTR("multinomial"), (PyCFunction)__pyx_pw_6mtrand_11RandomState_97multinomial, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_6mtrand_11RandomState_96multinomial)},
    10208 +  {__Pyx_NAMESTR("dirichlet"), (PyCFunction)__pyx_pw_6mtrand_11RandomState_99dirichlet, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_6mtrand_11RandomState_98dirichlet)},
    10209 +  {__Pyx_NAMESTR("shuffle"), (PyCFunction)__pyx_pw_6mtrand_11RandomState_101shuffle, METH_O, __Pyx_DOCSTR(__pyx_doc_6mtrand_11RandomState_100shuffle)},
    10210 +  {__Pyx_NAMESTR("permutation"), (PyCFunction)__pyx_pw_6mtrand_11RandomState_103permutation, METH_O, __Pyx_DOCSTR(__pyx_doc_6mtrand_11RandomState_102permutation)},
    10211    {0, 0, 0, 0}
    10212  };
    10213  
    10214 @@ -18749,7 +19402,7 @@
    10215    0, /*tp_descr_get*/
    10216    0, /*tp_descr_set*/
    10217    0, /*tp_dictoffset*/
    10218 -  __pyx_pf_6mtrand_11RandomState___init__, /*tp_init*/
    10219 +  __pyx_pw_6mtrand_11RandomState_1__init__, /*tp_init*/
    10220    0, /*tp_alloc*/
    10221    __pyx_tp_new_6mtrand_RandomState, /*tp_new*/
    10222    0, /*tp_free*/
    10223 @@ -19035,7 +19688,7 @@
    10224  
    10225  static int __Pyx_InitCachedConstants(void) {
    10226    __Pyx_RefNannyDeclarations
    10227 -  __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants");
    10228 +  __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0);
    10229  
    10230    /* "mtrand.pyx":184
    10231   *                                                 <void *>oa)
    10232 @@ -19045,7 +19698,7 @@
    10233   *             oa_data = <double *>PyArray_MultiIter_DATA(multi, 1)
    10234   */
    10235    __pyx_k_tuple_2 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 184; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    10236 -  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_2));
    10237 +  __Pyx_GOTREF(__pyx_k_tuple_2);
    10238    __Pyx_INCREF(((PyObject *)__pyx_kp_s_1));
    10239    PyTuple_SET_ITEM(__pyx_k_tuple_2, 0, ((PyObject *)__pyx_kp_s_1));
    10240    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_1));
    10241 @@ -19059,7 +19712,7 @@
    10242   *             oa_data = <double *>PyArray_MultiIter_DATA(multi, 1)
    10243   */
    10244    __pyx_k_tuple_3 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 233; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    10245 -  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_3));
    10246 +  __Pyx_GOTREF(__pyx_k_tuple_3);
    10247    __Pyx_INCREF(((PyObject *)__pyx_kp_s_1));
    10248    PyTuple_SET_ITEM(__pyx_k_tuple_3, 0, ((PyObject *)__pyx_kp_s_1));
    10249    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_1));
    10250 @@ -19073,7 +19726,7 @@
    10251   *             oa_data = <double *>PyArray_MultiIter_DATA(multi, 1)
    10252   */
    10253    __pyx_k_tuple_4 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 288; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    10254 -  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_4));
    10255 +  __Pyx_GOTREF(__pyx_k_tuple_4);
    10256    __Pyx_INCREF(((PyObject *)__pyx_kp_s_1));
    10257    PyTuple_SET_ITEM(__pyx_k_tuple_4, 0, ((PyObject *)__pyx_kp_s_1));
    10258    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_1));
    10259 @@ -19087,7 +19740,7 @@
    10260   *             on_data = <long *>PyArray_MultiIter_DATA(multi, 1)
    10261   */
    10262    __pyx_k_tuple_5 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 352; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    10263 -  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_5));
    10264 +  __Pyx_GOTREF(__pyx_k_tuple_5);
    10265    __Pyx_INCREF(((PyObject *)__pyx_kp_s_1));
    10266    PyTuple_SET_ITEM(__pyx_k_tuple_5, 0, ((PyObject *)__pyx_kp_s_1));
    10267    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_1));
    10268 @@ -19101,7 +19754,7 @@
    10269   *             on_data = <double *>PyArray_MultiIter_DATA(multi, 1)
    10270   */
    10271    __pyx_k_tuple_6 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 401; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    10272 -  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_6));
    10273 +  __Pyx_GOTREF(__pyx_k_tuple_6);
    10274    __Pyx_INCREF(((PyObject *)__pyx_kp_s_1));
    10275    PyTuple_SET_ITEM(__pyx_k_tuple_6, 0, ((PyObject *)__pyx_kp_s_1));
    10276    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_1));
    10277 @@ -19115,7 +19768,7 @@
    10278   *             on_data = <long *>PyArray_MultiIter_DATA(multi, 1)
    10279   */
    10280    __pyx_k_tuple_7 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 455; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    10281 -  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_7));
    10282 +  __Pyx_GOTREF(__pyx_k_tuple_7);
    10283    __Pyx_INCREF(((PyObject *)__pyx_kp_s_1));
    10284    PyTuple_SET_ITEM(__pyx_k_tuple_7, 0, ((PyObject *)__pyx_kp_s_1));
    10285    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_1));
    10286 @@ -19129,7 +19782,7 @@
    10287   *             oa_data = <double *>PyArray_MultiIter_DATA(multi, 1)
    10288   */
    10289    __pyx_k_tuple_8 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 503; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    10290 -  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_8));
    10291 +  __Pyx_GOTREF(__pyx_k_tuple_8);
    10292    __Pyx_INCREF(((PyObject *)__pyx_kp_s_1));
    10293    PyTuple_SET_ITEM(__pyx_k_tuple_8, 0, ((PyObject *)__pyx_kp_s_1));
    10294    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_1));
    10295 @@ -19143,7 +19796,7 @@
    10296   *         if len(state) == 3:
    10297   */
    10298    __pyx_k_tuple_10 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 689; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    10299 -  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_10));
    10300 +  __Pyx_GOTREF(__pyx_k_tuple_10);
    10301    __Pyx_INCREF(((PyObject *)__pyx_kp_s_9));
    10302    PyTuple_SET_ITEM(__pyx_k_tuple_10, 0, ((PyObject *)__pyx_kp_s_9));
    10303    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_9));
    10304 @@ -19157,7 +19810,7 @@
    10305   *         self.internal_state.pos = pos
    10306   */
    10307    __pyx_k_tuple_12 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 702; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    10308 -  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_12));
    10309 +  __Pyx_GOTREF(__pyx_k_tuple_12);
    10310    __Pyx_INCREF(((PyObject *)__pyx_kp_s_11));
    10311    PyTuple_SET_ITEM(__pyx_k_tuple_12, 0, ((PyObject *)__pyx_kp_s_11));
    10312    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_11));
    10313 @@ -19171,7 +19824,7 @@
    10314   *         diff = <unsigned long>hi - <unsigned long>lo - 1UL
    10315   */
    10316    __pyx_k_tuple_14 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_14)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 874; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    10317 -  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_14));
    10318 +  __Pyx_GOTREF(__pyx_k_tuple_14);
    10319    __Pyx_INCREF(((PyObject *)__pyx_kp_s_13));
    10320    PyTuple_SET_ITEM(__pyx_k_tuple_14, 0, ((PyObject *)__pyx_kp_s_13));
    10321    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_13));
    10322 @@ -19185,7 +19838,7 @@
    10323   *
    10324   */
    10325    __pyx_k_tuple_20 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_20)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1301; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    10326 -  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_20));
    10327 +  __Pyx_GOTREF(__pyx_k_tuple_20);
    10328    __Pyx_INCREF(((PyObject *)__pyx_kp_s_19));
    10329    PyTuple_SET_ITEM(__pyx_k_tuple_20, 0, ((PyObject *)__pyx_kp_s_19));
    10330    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_19));
    10331 @@ -19199,7 +19852,7 @@
    10332   *
    10333   */
    10334    __pyx_k_tuple_21 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_21)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1309; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    10335 -  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_21));
    10336 +  __Pyx_GOTREF(__pyx_k_tuple_21);
    10337    __Pyx_INCREF(((PyObject *)__pyx_kp_s_19));
    10338    PyTuple_SET_ITEM(__pyx_k_tuple_21, 0, ((PyObject *)__pyx_kp_s_19));
    10339    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_19));
    10340 @@ -19213,7 +19866,7 @@
    10341   *                 raise ValueError("b <= 0")
    10342   */
    10343    __pyx_k_tuple_23 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_23)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1356; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    10344 -  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_23));
    10345 +  __Pyx_GOTREF(__pyx_k_tuple_23);
    10346    __Pyx_INCREF(((PyObject *)__pyx_kp_s_22));
    10347    PyTuple_SET_ITEM(__pyx_k_tuple_23, 0, ((PyObject *)__pyx_kp_s_22));
    10348    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_22));
    10349 @@ -19227,7 +19880,7 @@
    10350   *
    10351   */
    10352    __pyx_k_tuple_25 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_25)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1358; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    10353 -  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_25));
    10354 +  __Pyx_GOTREF(__pyx_k_tuple_25);
    10355    __Pyx_INCREF(((PyObject *)__pyx_kp_s_24));
    10356    PyTuple_SET_ITEM(__pyx_k_tuple_25, 0, ((PyObject *)__pyx_kp_s_24));
    10357    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_24));
    10358 @@ -19241,7 +19894,7 @@
    10359   *             raise ValueError("b <= 0")
    10360   */
    10361    __pyx_k_tuple_26 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_26)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1366; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    10362 -  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_26));
    10363 +  __Pyx_GOTREF(__pyx_k_tuple_26);
    10364    __Pyx_INCREF(((PyObject *)__pyx_kp_s_22));
    10365    PyTuple_SET_ITEM(__pyx_k_tuple_26, 0, ((PyObject *)__pyx_kp_s_22));
    10366    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_22));
    10367 @@ -19255,7 +19908,7 @@
    10368   *
    10369   */
    10370    __pyx_k_tuple_27 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_27)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1368; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    10371 -  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_27));
    10372 +  __Pyx_GOTREF(__pyx_k_tuple_27);
    10373    __Pyx_INCREF(((PyObject *)__pyx_kp_s_24));
    10374    PyTuple_SET_ITEM(__pyx_k_tuple_27, 0, ((PyObject *)__pyx_kp_s_24));
    10375    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_24));
    10376 @@ -19269,7 +19922,7 @@
    10377   *
    10378   */
    10379    __pyx_k_tuple_29 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_29)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1415; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    10380 -  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_29));
    10381 +  __Pyx_GOTREF(__pyx_k_tuple_29);
    10382    __Pyx_INCREF(((PyObject *)__pyx_kp_s_19));
    10383    PyTuple_SET_ITEM(__pyx_k_tuple_29, 0, ((PyObject *)__pyx_kp_s_19));
    10384    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_19));
    10385 @@ -19283,7 +19936,7 @@
    10386   *
    10387   */
    10388    __pyx_k_tuple_30 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_30)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1422; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    10389 -  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_30));
    10390 +  __Pyx_GOTREF(__pyx_k_tuple_30);
    10391    __Pyx_INCREF(((PyObject *)__pyx_kp_s_19));
    10392    PyTuple_SET_ITEM(__pyx_k_tuple_30, 0, ((PyObject *)__pyx_kp_s_19));
    10393    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_19));
    10394 @@ -19297,7 +19950,7 @@
    10395   *
    10396   */
    10397    __pyx_k_tuple_32 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_32)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1526; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    10398 -  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_32));
    10399 +  __Pyx_GOTREF(__pyx_k_tuple_32);
    10400    __Pyx_INCREF(((PyObject *)__pyx_kp_s_31));
    10401    PyTuple_SET_ITEM(__pyx_k_tuple_32, 0, ((PyObject *)__pyx_kp_s_31));
    10402    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_31));
    10403 @@ -19311,7 +19964,7 @@
    10404   *
    10405   */
    10406    __pyx_k_tuple_33 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_33)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1532; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    10407 -  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_33));
    10408 +  __Pyx_GOTREF(__pyx_k_tuple_33);
    10409    __Pyx_INCREF(((PyObject *)__pyx_kp_s_31));
    10410    PyTuple_SET_ITEM(__pyx_k_tuple_33, 0, ((PyObject *)__pyx_kp_s_31));
    10411    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_31));
    10412 @@ -19325,7 +19978,7 @@
    10413   *                 raise ValueError("scale <= 0")
    10414   */
    10415    __pyx_k_tuple_35 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_35)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1612; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    10416 -  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_35));
    10417 +  __Pyx_GOTREF(__pyx_k_tuple_35);
    10418    __Pyx_INCREF(((PyObject *)__pyx_kp_s_31));
    10419    PyTuple_SET_ITEM(__pyx_k_tuple_35, 0, ((PyObject *)__pyx_kp_s_31));
    10420    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_31));
    10421 @@ -19339,7 +19992,7 @@
    10422   *
    10423   */
    10424    __pyx_k_tuple_36 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_36)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1614; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    10425 -  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_36));
    10426 +  __Pyx_GOTREF(__pyx_k_tuple_36);
    10427    __Pyx_INCREF(((PyObject *)__pyx_kp_s_19));
    10428    PyTuple_SET_ITEM(__pyx_k_tuple_36, 0, ((PyObject *)__pyx_kp_s_19));
    10429    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_19));
    10430 @@ -19353,7 +20006,7 @@
    10431   *             raise ValueError("scale <= 0")
    10432   */
    10433    __pyx_k_tuple_37 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_37)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1621; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    10434 -  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_37));
    10435 +  __Pyx_GOTREF(__pyx_k_tuple_37);
    10436    __Pyx_INCREF(((PyObject *)__pyx_kp_s_31));
    10437    PyTuple_SET_ITEM(__pyx_k_tuple_37, 0, ((PyObject *)__pyx_kp_s_31));
    10438    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_31));
    10439 @@ -19367,7 +20020,7 @@
    10440   *
    10441   */
    10442    __pyx_k_tuple_38 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_38)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1623; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    10443 -  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_38));
    10444 +  __Pyx_GOTREF(__pyx_k_tuple_38);
    10445    __Pyx_INCREF(((PyObject *)__pyx_kp_s_19));
    10446    PyTuple_SET_ITEM(__pyx_k_tuple_38, 0, ((PyObject *)__pyx_kp_s_19));
    10447    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_19));
    10448 @@ -19381,7 +20034,7 @@
    10449   *                 raise ValueError("scale <= 0")
    10450   */
    10451    __pyx_k_tuple_39 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_39)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1714; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    10452 -  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_39));
    10453 +  __Pyx_GOTREF(__pyx_k_tuple_39);
    10454    __Pyx_INCREF(((PyObject *)__pyx_kp_s_31));
    10455    PyTuple_SET_ITEM(__pyx_k_tuple_39, 0, ((PyObject *)__pyx_kp_s_31));
    10456    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_31));
    10457 @@ -19395,7 +20048,7 @@
    10458   *
    10459   */
    10460    __pyx_k_tuple_40 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_40)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1716; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    10461 -  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_40));
    10462 +  __Pyx_GOTREF(__pyx_k_tuple_40);
    10463    __Pyx_INCREF(((PyObject *)__pyx_kp_s_19));
    10464    PyTuple_SET_ITEM(__pyx_k_tuple_40, 0, ((PyObject *)__pyx_kp_s_19));
    10465    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_19));
    10466 @@ -19409,7 +20062,7 @@
    10467   *             raise ValueError("dfden <= 0")
    10468   */
    10469    __pyx_k_tuple_42 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_42)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1724; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    10470 -  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_42));
    10471 +  __Pyx_GOTREF(__pyx_k_tuple_42);
    10472    __Pyx_INCREF(((PyObject *)__pyx_kp_s_41));
    10473    PyTuple_SET_ITEM(__pyx_k_tuple_42, 0, ((PyObject *)__pyx_kp_s_41));
    10474    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_41));
    10475 @@ -19423,7 +20076,7 @@
    10476   *
    10477   */
    10478    __pyx_k_tuple_44 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_44)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1726; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    10479 -  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_44));
    10480 +  __Pyx_GOTREF(__pyx_k_tuple_44);
    10481    __Pyx_INCREF(((PyObject *)__pyx_kp_s_43));
    10482    PyTuple_SET_ITEM(__pyx_k_tuple_44, 0, ((PyObject *)__pyx_kp_s_43));
    10483    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_43));
    10484 @@ -19437,7 +20090,7 @@
    10485   *                 raise ValueError("dfden <= 0")
    10486   */
    10487    __pyx_k_tuple_46 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_46)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1801; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    10488 -  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_46));
    10489 +  __Pyx_GOTREF(__pyx_k_tuple_46);
    10490    __Pyx_INCREF(((PyObject *)__pyx_kp_s_45));
    10491    PyTuple_SET_ITEM(__pyx_k_tuple_46, 0, ((PyObject *)__pyx_kp_s_45));
    10492    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_45));
    10493 @@ -19451,7 +20104,7 @@
    10494   *                 raise ValueError("nonc < 0")
    10495   */
    10496    __pyx_k_tuple_47 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_47)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1803; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    10497 -  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_47));
    10498 +  __Pyx_GOTREF(__pyx_k_tuple_47);
    10499    __Pyx_INCREF(((PyObject *)__pyx_kp_s_43));
    10500    PyTuple_SET_ITEM(__pyx_k_tuple_47, 0, ((PyObject *)__pyx_kp_s_43));
    10501    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_43));
    10502 @@ -19465,7 +20118,7 @@
    10503   *                                   fdfnum, fdfden, fnonc)
    10504   */
    10505    __pyx_k_tuple_49 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_49)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1805; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    10506 -  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_49));
    10507 +  __Pyx_GOTREF(__pyx_k_tuple_49);
    10508    __Pyx_INCREF(((PyObject *)__pyx_kp_s_48));
    10509    PyTuple_SET_ITEM(__pyx_k_tuple_49, 0, ((PyObject *)__pyx_kp_s_48));
    10510    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_48));
    10511 @@ -19479,7 +20132,7 @@
    10512   *             raise ValueError("dfden <= 0")
    10513   */
    10514    __pyx_k_tuple_50 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_50)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1816; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    10515 -  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_50));
    10516 +  __Pyx_GOTREF(__pyx_k_tuple_50);
    10517    __Pyx_INCREF(((PyObject *)__pyx_kp_s_45));
    10518    PyTuple_SET_ITEM(__pyx_k_tuple_50, 0, ((PyObject *)__pyx_kp_s_45));
    10519    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_45));
    10520 @@ -19493,7 +20146,7 @@
    10521   *             raise ValueError("nonc < 0")
    10522   */
    10523    __pyx_k_tuple_51 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_51)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1818; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    10524 -  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_51));
    10525 +  __Pyx_GOTREF(__pyx_k_tuple_51);
    10526    __Pyx_INCREF(((PyObject *)__pyx_kp_s_43));
    10527    PyTuple_SET_ITEM(__pyx_k_tuple_51, 0, ((PyObject *)__pyx_kp_s_43));
    10528    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_43));
    10529 @@ -19507,7 +20160,7 @@
    10530   *             odfden, ononc)
    10531   */
    10532    __pyx_k_tuple_52 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_52)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1820; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    10533 -  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_52));
    10534 +  __Pyx_GOTREF(__pyx_k_tuple_52);
    10535    __Pyx_INCREF(((PyObject *)__pyx_kp_s_48));
    10536    PyTuple_SET_ITEM(__pyx_k_tuple_52, 0, ((PyObject *)__pyx_kp_s_48));
    10537    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_48));
    10538 @@ -19521,7 +20174,7 @@
    10539   *
    10540   */
    10541    __pyx_k_tuple_54 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_54)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1892; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    10542 -  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_54));
    10543 +  __Pyx_GOTREF(__pyx_k_tuple_54);
    10544    __Pyx_INCREF(((PyObject *)__pyx_kp_s_53));
    10545    PyTuple_SET_ITEM(__pyx_k_tuple_54, 0, ((PyObject *)__pyx_kp_s_53));
    10546    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_53));
    10547 @@ -19535,7 +20188,7 @@
    10548   *
    10549   */
    10550    __pyx_k_tuple_55 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_55)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1899; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    10551 -  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_55));
    10552 +  __Pyx_GOTREF(__pyx_k_tuple_55);
    10553    __Pyx_INCREF(((PyObject *)__pyx_kp_s_53));
    10554    PyTuple_SET_ITEM(__pyx_k_tuple_55, 0, ((PyObject *)__pyx_kp_s_53));
    10555    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_53));
    10556 @@ -19549,7 +20202,7 @@
    10557   *                 raise ValueError("nonc <= 0")
    10558   */
    10559    __pyx_k_tuple_56 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_56)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1977; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    10560 -  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_56));
    10561 +  __Pyx_GOTREF(__pyx_k_tuple_56);
    10562    __Pyx_INCREF(((PyObject *)__pyx_kp_s_53));
    10563    PyTuple_SET_ITEM(__pyx_k_tuple_56, 0, ((PyObject *)__pyx_kp_s_53));
    10564    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_53));
    10565 @@ -19563,7 +20216,7 @@
    10566   *                                   size, fdf, fnonc)
    10567   */
    10568    __pyx_k_tuple_58 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_58)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1979; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    10569 -  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_58));
    10570 +  __Pyx_GOTREF(__pyx_k_tuple_58);
    10571    __Pyx_INCREF(((PyObject *)__pyx_kp_s_57));
    10572    PyTuple_SET_ITEM(__pyx_k_tuple_58, 0, ((PyObject *)__pyx_kp_s_57));
    10573    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_57));
    10574 @@ -19577,7 +20230,7 @@
    10575   *             raise ValueError("nonc < 0")
    10576   */
    10577    __pyx_k_tuple_60 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_60)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1988; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    10578 -  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_60));
    10579 +  __Pyx_GOTREF(__pyx_k_tuple_60);
    10580    __Pyx_INCREF(((PyObject *)__pyx_kp_s_59));
    10581    PyTuple_SET_ITEM(__pyx_k_tuple_60, 0, ((PyObject *)__pyx_kp_s_59));
    10582    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_59));
    10583 @@ -19591,7 +20244,7 @@
    10584   *             odf, ononc)
    10585   */
    10586    __pyx_k_tuple_61 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_61)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1990; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    10587 -  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_61));
    10588 +  __Pyx_GOTREF(__pyx_k_tuple_61);
    10589    __Pyx_INCREF(((PyObject *)__pyx_kp_s_48));
    10590    PyTuple_SET_ITEM(__pyx_k_tuple_61, 0, ((PyObject *)__pyx_kp_s_48));
    10591    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_48));
    10592 @@ -19605,7 +20258,7 @@
    10593   *
    10594   */
    10595    __pyx_k_tuple_62 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_62)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2146; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    10596 -  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_62));
    10597 +  __Pyx_GOTREF(__pyx_k_tuple_62);
    10598    __Pyx_INCREF(((PyObject *)__pyx_kp_s_53));
    10599    PyTuple_SET_ITEM(__pyx_k_tuple_62, 0, ((PyObject *)__pyx_kp_s_53));
    10600    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_53));
    10601 @@ -19619,7 +20272,7 @@
    10602   *
    10603   */
    10604    __pyx_k_tuple_63 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_63)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2153; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    10605 -  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_63));
    10606 +  __Pyx_GOTREF(__pyx_k_tuple_63);
    10607    __Pyx_INCREF(((PyObject *)__pyx_kp_s_53));
    10608    PyTuple_SET_ITEM(__pyx_k_tuple_63, 0, ((PyObject *)__pyx_kp_s_53));
    10609    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_53));
    10610 @@ -19633,7 +20286,7 @@
    10611   *
    10612   */
    10613    __pyx_k_tuple_65 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_65)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2239; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    10614 -  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_65));
    10615 +  __Pyx_GOTREF(__pyx_k_tuple_65);
    10616    __Pyx_INCREF(((PyObject *)__pyx_kp_s_64));
    10617    PyTuple_SET_ITEM(__pyx_k_tuple_65, 0, ((PyObject *)__pyx_kp_s_64));
    10618    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_64));
    10619 @@ -19647,7 +20300,7 @@
    10620   *
    10621   */
    10622    __pyx_k_tuple_66 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_66)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2247; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    10623 -  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_66));
    10624 +  __Pyx_GOTREF(__pyx_k_tuple_66);
    10625    __Pyx_INCREF(((PyObject *)__pyx_kp_s_64));
    10626    PyTuple_SET_ITEM(__pyx_k_tuple_66, 0, ((PyObject *)__pyx_kp_s_64));
    10627    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_64));
    10628 @@ -19661,7 +20314,7 @@
    10629   *
    10630   */
    10631    __pyx_k_tuple_67 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_67)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2336; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    10632 -  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_67));
    10633 +  __Pyx_GOTREF(__pyx_k_tuple_67);
    10634    __Pyx_INCREF(((PyObject *)__pyx_kp_s_22));
    10635    PyTuple_SET_ITEM(__pyx_k_tuple_67, 0, ((PyObject *)__pyx_kp_s_22));
    10636    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_22));
    10637 @@ -19675,7 +20328,7 @@
    10638   *
    10639   */
    10640    __pyx_k_tuple_68 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_68)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2343; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    10641 -  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_68));
    10642 +  __Pyx_GOTREF(__pyx_k_tuple_68);
    10643    __Pyx_INCREF(((PyObject *)__pyx_kp_s_22));
    10644    PyTuple_SET_ITEM(__pyx_k_tuple_68, 0, ((PyObject *)__pyx_kp_s_22));
    10645    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_22));
    10646 @@ -19689,7 +20342,7 @@
    10647   *
    10648   */
    10649    __pyx_k_tuple_69 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_69)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2436; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    10650 -  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_69));
    10651 +  __Pyx_GOTREF(__pyx_k_tuple_69);
    10652    __Pyx_INCREF(((PyObject *)__pyx_kp_s_22));
    10653    PyTuple_SET_ITEM(__pyx_k_tuple_69, 0, ((PyObject *)__pyx_kp_s_22));
    10654    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_22));
    10655 @@ -19703,7 +20356,7 @@
    10656   *
    10657   */
    10658    __pyx_k_tuple_70 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_70)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2443; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    10659 -  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_70));
    10660 +  __Pyx_GOTREF(__pyx_k_tuple_70);
    10661    __Pyx_INCREF(((PyObject *)__pyx_kp_s_22));
    10662    PyTuple_SET_ITEM(__pyx_k_tuple_70, 0, ((PyObject *)__pyx_kp_s_22));
    10663    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_22));
    10664 @@ -19717,7 +20370,7 @@
    10665   *
    10666   */
    10667    __pyx_k_tuple_71 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_71)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2545; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    10668 -  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_71));
    10669 +  __Pyx_GOTREF(__pyx_k_tuple_71);
    10670    __Pyx_INCREF(((PyObject *)__pyx_kp_s_22));
    10671    PyTuple_SET_ITEM(__pyx_k_tuple_71, 0, ((PyObject *)__pyx_kp_s_22));
    10672    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_22));
    10673 @@ -19731,7 +20384,7 @@
    10674   *
    10675   */
    10676    __pyx_k_tuple_72 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_72)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2552; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    10677 -  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_72));
    10678 +  __Pyx_GOTREF(__pyx_k_tuple_72);
    10679    __Pyx_INCREF(((PyObject *)__pyx_kp_s_22));
    10680    PyTuple_SET_ITEM(__pyx_k_tuple_72, 0, ((PyObject *)__pyx_kp_s_22));
    10681    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_22));
    10682 @@ -19745,7 +20398,7 @@
    10683   *
    10684   */
    10685    __pyx_k_tuple_75 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_75)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2635; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    10686 -  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_75));
    10687 +  __Pyx_GOTREF(__pyx_k_tuple_75);
    10688    __Pyx_INCREF(((PyObject *)__pyx_kp_s_19));
    10689    PyTuple_SET_ITEM(__pyx_k_tuple_75, 0, ((PyObject *)__pyx_kp_s_19));
    10690    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_19));
    10691 @@ -19759,7 +20412,7 @@
    10692   *
    10693   */
    10694    __pyx_k_tuple_76 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_76)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2642; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    10695 -  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_76));
    10696 +  __Pyx_GOTREF(__pyx_k_tuple_76);
    10697    __Pyx_INCREF(((PyObject *)__pyx_kp_s_19));
    10698    PyTuple_SET_ITEM(__pyx_k_tuple_76, 0, ((PyObject *)__pyx_kp_s_19));
    10699    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_19));
    10700 @@ -19773,7 +20426,7 @@
    10701   *
    10702   */
    10703    __pyx_k_tuple_79 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_79)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2766; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    10704 -  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_79));
    10705 +  __Pyx_GOTREF(__pyx_k_tuple_79);
    10706    __Pyx_INCREF(((PyObject *)__pyx_kp_s_19));
    10707    PyTuple_SET_ITEM(__pyx_k_tuple_79, 0, ((PyObject *)__pyx_kp_s_19));
    10708    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_19));
    10709 @@ -19787,7 +20440,7 @@
    10710   *
    10711   */
    10712    __pyx_k_tuple_80 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_80)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2773; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    10713 -  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_80));
    10714 +  __Pyx_GOTREF(__pyx_k_tuple_80);
    10715    __Pyx_INCREF(((PyObject *)__pyx_kp_s_19));
    10716    PyTuple_SET_ITEM(__pyx_k_tuple_80, 0, ((PyObject *)__pyx_kp_s_19));
    10717    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_19));
    10718 @@ -19801,7 +20454,7 @@
    10719   *
    10720   */
    10721    __pyx_k_tuple_83 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_83)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2854; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    10722 -  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_83));
    10723 +  __Pyx_GOTREF(__pyx_k_tuple_83);
    10724    __Pyx_INCREF(((PyObject *)__pyx_kp_s_19));
    10725    PyTuple_SET_ITEM(__pyx_k_tuple_83, 0, ((PyObject *)__pyx_kp_s_19));
    10726    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_19));
    10727 @@ -19815,7 +20468,7 @@
    10728   *
    10729   */
    10730    __pyx_k_tuple_84 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_84)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2861; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    10731 -  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_84));
    10732 +  __Pyx_GOTREF(__pyx_k_tuple_84);
    10733    __Pyx_INCREF(((PyObject *)__pyx_kp_s_19));
    10734    PyTuple_SET_ITEM(__pyx_k_tuple_84, 0, ((PyObject *)__pyx_kp_s_19));
    10735    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_19));
    10736 @@ -19829,7 +20482,7 @@
    10737   *
    10738   */
    10739    __pyx_k_tuple_88 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_88)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2984; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    10740 -  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_88));
    10741 +  __Pyx_GOTREF(__pyx_k_tuple_88);
    10742    __Pyx_INCREF(((PyObject *)__pyx_kp_s_87));
    10743    PyTuple_SET_ITEM(__pyx_k_tuple_88, 0, ((PyObject *)__pyx_kp_s_87));
    10744    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_87));
    10745 @@ -19843,7 +20496,7 @@
    10746   *
    10747   */
    10748    __pyx_k_tuple_90 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_90)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2992; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    10749 -  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_90));
    10750 +  __Pyx_GOTREF(__pyx_k_tuple_90);
    10751    __Pyx_INCREF(((PyObject *)__pyx_kp_s_89));
    10752    PyTuple_SET_ITEM(__pyx_k_tuple_90, 0, ((PyObject *)__pyx_kp_s_89));
    10753    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_89));
    10754 @@ -19857,7 +20510,7 @@
    10755   *
    10756   */
    10757    __pyx_k_tuple_92 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_92)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3057; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    10758 -  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_92));
    10759 +  __Pyx_GOTREF(__pyx_k_tuple_92);
    10760    __Pyx_INCREF(((PyObject *)__pyx_kp_s_19));
    10761    PyTuple_SET_ITEM(__pyx_k_tuple_92, 0, ((PyObject *)__pyx_kp_s_19));
    10762    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_19));
    10763 @@ -19871,7 +20524,7 @@
    10764   *
    10765   */
    10766    __pyx_k_tuple_94 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_94)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3064; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    10767 -  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_94));
    10768 +  __Pyx_GOTREF(__pyx_k_tuple_94);
    10769    __Pyx_INCREF(((PyObject *)__pyx_kp_s_93));
    10770    PyTuple_SET_ITEM(__pyx_k_tuple_94, 0, ((PyObject *)__pyx_kp_s_93));
    10771    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_93));
    10772 @@ -19885,7 +20538,7 @@
    10773   *                 raise ValueError("scale <= 0")
    10774   */
    10775    __pyx_k_tuple_96 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_96)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3137; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    10776 -  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_96));
    10777 +  __Pyx_GOTREF(__pyx_k_tuple_96);
    10778    __Pyx_INCREF(((PyObject *)__pyx_kp_s_95));
    10779    PyTuple_SET_ITEM(__pyx_k_tuple_96, 0, ((PyObject *)__pyx_kp_s_95));
    10780    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_95));
    10781 @@ -19899,7 +20552,7 @@
    10782   *
    10783   */
    10784    __pyx_k_tuple_97 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_97)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3139; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    10785 -  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_97));
    10786 +  __Pyx_GOTREF(__pyx_k_tuple_97);
    10787    __Pyx_INCREF(((PyObject *)__pyx_kp_s_19));
    10788    PyTuple_SET_ITEM(__pyx_k_tuple_97, 0, ((PyObject *)__pyx_kp_s_19));
    10789    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_19));
    10790 @@ -19913,7 +20566,7 @@
    10791   *             raise ValueError("scale <= 0.0")
    10792   */
    10793    __pyx_k_tuple_99 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_99)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3146; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    10794 -  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_99));
    10795 +  __Pyx_GOTREF(__pyx_k_tuple_99);
    10796    __Pyx_INCREF(((PyObject *)__pyx_kp_s_98));
    10797    PyTuple_SET_ITEM(__pyx_k_tuple_99, 0, ((PyObject *)__pyx_kp_s_98));
    10798    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_98));
    10799 @@ -19927,7 +20580,7 @@
    10800   *
    10801   */
    10802    __pyx_k_tuple_100 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_100)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3148; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    10803 -  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_100));
    10804 +  __Pyx_GOTREF(__pyx_k_tuple_100);
    10805    __Pyx_INCREF(((PyObject *)__pyx_kp_s_93));
    10806    PyTuple_SET_ITEM(__pyx_k_tuple_100, 0, ((PyObject *)__pyx_kp_s_93));
    10807    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_93));
    10808 @@ -19941,7 +20594,7 @@
    10809   *                 raise ValueError("mode > right")
    10810   */
    10811    __pyx_k_tuple_102 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_102)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3218; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    10812 -  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_102));
    10813 +  __Pyx_GOTREF(__pyx_k_tuple_102);
    10814    __Pyx_INCREF(((PyObject *)__pyx_kp_s_101));
    10815    PyTuple_SET_ITEM(__pyx_k_tuple_102, 0, ((PyObject *)__pyx_kp_s_101));
    10816    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_101));
    10817 @@ -19955,7 +20608,7 @@
    10818   *                 raise ValueError("left == right")
    10819   */
    10820    __pyx_k_tuple_104 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_104)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3220; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    10821 -  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_104));
    10822 +  __Pyx_GOTREF(__pyx_k_tuple_104);
    10823    __Pyx_INCREF(((PyObject *)__pyx_kp_s_103));
    10824    PyTuple_SET_ITEM(__pyx_k_tuple_104, 0, ((PyObject *)__pyx_kp_s_103));
    10825    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_103));
    10826 @@ -19969,7 +20622,7 @@
    10827   *                                   fmode, fright)
    10828   */
    10829    __pyx_k_tuple_106 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_106)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3222; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    10830 -  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_106));
    10831 +  __Pyx_GOTREF(__pyx_k_tuple_106);
    10832    __Pyx_INCREF(((PyObject *)__pyx_kp_s_105));
    10833    PyTuple_SET_ITEM(__pyx_k_tuple_106, 0, ((PyObject *)__pyx_kp_s_105));
    10834    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_105));
    10835 @@ -19983,7 +20636,7 @@
    10836   *             raise ValueError("mode > right")
    10837   */
    10838    __pyx_k_tuple_107 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_107)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3232; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    10839 -  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_107));
    10840 +  __Pyx_GOTREF(__pyx_k_tuple_107);
    10841    __Pyx_INCREF(((PyObject *)__pyx_kp_s_101));
    10842    PyTuple_SET_ITEM(__pyx_k_tuple_107, 0, ((PyObject *)__pyx_kp_s_101));
    10843    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_101));
    10844 @@ -19997,7 +20650,7 @@
    10845   *             raise ValueError("left == right")
    10846   */
    10847    __pyx_k_tuple_108 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_108)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3234; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    10848 -  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_108));
    10849 +  __Pyx_GOTREF(__pyx_k_tuple_108);
    10850    __Pyx_INCREF(((PyObject *)__pyx_kp_s_103));
    10851    PyTuple_SET_ITEM(__pyx_k_tuple_108, 0, ((PyObject *)__pyx_kp_s_103));
    10852    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_103));
    10853 @@ -20011,7 +20664,7 @@
    10854   *             omode, oright)
    10855   */
    10856    __pyx_k_tuple_109 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_109)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3236; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    10857 -  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_109));
    10858 +  __Pyx_GOTREF(__pyx_k_tuple_109);
    10859    __Pyx_INCREF(((PyObject *)__pyx_kp_s_105));
    10860    PyTuple_SET_ITEM(__pyx_k_tuple_109, 0, ((PyObject *)__pyx_kp_s_105));
    10861    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_105));
    10862 @@ -20025,7 +20678,7 @@
    10863   *                 raise ValueError("p < 0")
    10864   */
    10865    __pyx_k_tuple_111 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_111)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3330; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    10866 -  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_111));
    10867 +  __Pyx_GOTREF(__pyx_k_tuple_111);
    10868    __Pyx_INCREF(((PyObject *)__pyx_kp_s_110));
    10869    PyTuple_SET_ITEM(__pyx_k_tuple_111, 0, ((PyObject *)__pyx_kp_s_110));
    10870    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_110));
    10871 @@ -20039,7 +20692,7 @@
    10872   *                 raise ValueError("p > 1")
    10873   */
    10874    __pyx_k_tuple_113 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_113)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3332; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    10875 -  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_113));
    10876 +  __Pyx_GOTREF(__pyx_k_tuple_113);
    10877    __Pyx_INCREF(((PyObject *)__pyx_kp_s_112));
    10878    PyTuple_SET_ITEM(__pyx_k_tuple_113, 0, ((PyObject *)__pyx_kp_s_112));
    10879    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_112));
    10880 @@ -20053,7 +20706,7 @@
    10881   *
    10882   */
    10883    __pyx_k_tuple_115 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_115)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3334; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    10884 -  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_115));
    10885 +  __Pyx_GOTREF(__pyx_k_tuple_115);
    10886    __Pyx_INCREF(((PyObject *)__pyx_kp_s_114));
    10887    PyTuple_SET_ITEM(__pyx_k_tuple_115, 0, ((PyObject *)__pyx_kp_s_114));
    10888    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_114));
    10889 @@ -20067,7 +20720,7 @@
    10890   *             raise ValueError("p < 0")
    10891   */
    10892    __pyx_k_tuple_116 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_116)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3342; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    10893 -  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_116));
    10894 +  __Pyx_GOTREF(__pyx_k_tuple_116);
    10895    __Pyx_INCREF(((PyObject *)__pyx_kp_s_110));
    10896    PyTuple_SET_ITEM(__pyx_k_tuple_116, 0, ((PyObject *)__pyx_kp_s_110));
    10897    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_110));
    10898 @@ -20081,7 +20734,7 @@
    10899   *             raise ValueError("p > 1")
    10900   */
    10901    __pyx_k_tuple_117 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_117)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3344; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    10902 -  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_117));
    10903 +  __Pyx_GOTREF(__pyx_k_tuple_117);
    10904    __Pyx_INCREF(((PyObject *)__pyx_kp_s_112));
    10905    PyTuple_SET_ITEM(__pyx_k_tuple_117, 0, ((PyObject *)__pyx_kp_s_112));
    10906    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_112));
    10907 @@ -20095,7 +20748,7 @@
    10908   *
    10909   */
    10910    __pyx_k_tuple_118 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_118)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3346; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    10911 -  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_118));
    10912 +  __Pyx_GOTREF(__pyx_k_tuple_118);
    10913    __Pyx_INCREF(((PyObject *)__pyx_kp_s_114));
    10914    PyTuple_SET_ITEM(__pyx_k_tuple_118, 0, ((PyObject *)__pyx_kp_s_114));
    10915    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_114));
    10916 @@ -20109,7 +20762,7 @@
    10917   *                 raise ValueError("p < 0")
    10918   */
    10919    __pyx_k_tuple_119 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_119)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3423; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    10920 -  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_119));
    10921 +  __Pyx_GOTREF(__pyx_k_tuple_119);
    10922    __Pyx_INCREF(((PyObject *)__pyx_kp_s_110));
    10923    PyTuple_SET_ITEM(__pyx_k_tuple_119, 0, ((PyObject *)__pyx_kp_s_110));
    10924    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_110));
    10925 @@ -20123,7 +20776,7 @@
    10926   *                 raise ValueError("p > 1")
    10927   */
    10928    __pyx_k_tuple_120 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_120)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3425; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    10929 -  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_120));
    10930 +  __Pyx_GOTREF(__pyx_k_tuple_120);
    10931    __Pyx_INCREF(((PyObject *)__pyx_kp_s_112));
    10932    PyTuple_SET_ITEM(__pyx_k_tuple_120, 0, ((PyObject *)__pyx_kp_s_112));
    10933    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_112));
    10934 @@ -20137,7 +20790,7 @@
    10935   *                                    size, fn, fp)
    10936   */
    10937    __pyx_k_tuple_121 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_121)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3427; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    10938 -  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_121));
    10939 +  __Pyx_GOTREF(__pyx_k_tuple_121);
    10940    __Pyx_INCREF(((PyObject *)__pyx_kp_s_114));
    10941    PyTuple_SET_ITEM(__pyx_k_tuple_121, 0, ((PyObject *)__pyx_kp_s_114));
    10942    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_114));
    10943 @@ -20151,7 +20804,7 @@
    10944   *             raise ValueError("p < 0")
    10945   */
    10946    __pyx_k_tuple_122 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_122)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3436; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    10947 -  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_122));
    10948 +  __Pyx_GOTREF(__pyx_k_tuple_122);
    10949    __Pyx_INCREF(((PyObject *)__pyx_kp_s_110));
    10950    PyTuple_SET_ITEM(__pyx_k_tuple_122, 0, ((PyObject *)__pyx_kp_s_110));
    10951    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_110));
    10952 @@ -20165,7 +20818,7 @@
    10953   *             raise ValueError("p > 1")
    10954   */
    10955    __pyx_k_tuple_123 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_123)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3438; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    10956 -  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_123));
    10957 +  __Pyx_GOTREF(__pyx_k_tuple_123);
    10958    __Pyx_INCREF(((PyObject *)__pyx_kp_s_112));
    10959    PyTuple_SET_ITEM(__pyx_k_tuple_123, 0, ((PyObject *)__pyx_kp_s_112));
    10960    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_112));
    10961 @@ -20179,7 +20832,7 @@
    10962   *                             on, op)
    10963   */
    10964    __pyx_k_tuple_124 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_124)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3440; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    10965 -  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_124));
    10966 +  __Pyx_GOTREF(__pyx_k_tuple_124);
    10967    __Pyx_INCREF(((PyObject *)__pyx_kp_s_114));
    10968    PyTuple_SET_ITEM(__pyx_k_tuple_124, 0, ((PyObject *)__pyx_kp_s_114));
    10969    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_114));
    10970 @@ -20193,7 +20846,7 @@
    10971   *                 raise ValueError("lam value too large")
    10972   */
    10973    __pyx_k_tuple_127 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_127)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3501; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    10974 -  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_127));
    10975 +  __Pyx_GOTREF(__pyx_k_tuple_127);
    10976    __Pyx_INCREF(((PyObject *)__pyx_kp_s_126));
    10977    PyTuple_SET_ITEM(__pyx_k_tuple_127, 0, ((PyObject *)__pyx_kp_s_126));
    10978    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_126));
    10979 @@ -20207,7 +20860,7 @@
    10980   *
    10981   */
    10982    __pyx_k_tuple_129 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_129)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3503; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    10983 -  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_129));
    10984 +  __Pyx_GOTREF(__pyx_k_tuple_129);
    10985    __Pyx_INCREF(((PyObject *)__pyx_kp_s_128));
    10986    PyTuple_SET_ITEM(__pyx_k_tuple_129, 0, ((PyObject *)__pyx_kp_s_128));
    10987    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_128));
    10988 @@ -20221,7 +20874,7 @@
    10989   *             raise ValueError("lam value too large.")
    10990   */
    10991    __pyx_k_tuple_130 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_130)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3510; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    10992 -  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_130));
    10993 +  __Pyx_GOTREF(__pyx_k_tuple_130);
    10994    __Pyx_INCREF(((PyObject *)__pyx_kp_s_126));
    10995    PyTuple_SET_ITEM(__pyx_k_tuple_130, 0, ((PyObject *)__pyx_kp_s_126));
    10996    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_126));
    10997 @@ -20235,7 +20888,7 @@
    10998   *
    10999   */
    11000    __pyx_k_tuple_132 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_132)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3512; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    11001 -  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_132));
    11002 +  __Pyx_GOTREF(__pyx_k_tuple_132);
    11003    __Pyx_INCREF(((PyObject *)__pyx_kp_s_131));
    11004    PyTuple_SET_ITEM(__pyx_k_tuple_132, 0, ((PyObject *)__pyx_kp_s_131));
    11005    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_131));
    11006 @@ -20249,7 +20902,7 @@
    11007   *
    11008   */
    11009    __pyx_k_tuple_134 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_134)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3593; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    11010 -  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_134));
    11011 +  __Pyx_GOTREF(__pyx_k_tuple_134);
    11012    __Pyx_INCREF(((PyObject *)__pyx_kp_s_133));
    11013    PyTuple_SET_ITEM(__pyx_k_tuple_134, 0, ((PyObject *)__pyx_kp_s_133));
    11014    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_133));
    11015 @@ -20263,7 +20916,7 @@
    11016   *
    11017   */
    11018    __pyx_k_tuple_135 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_135)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3600; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    11019 -  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_135));
    11020 +  __Pyx_GOTREF(__pyx_k_tuple_135);
    11021    __Pyx_INCREF(((PyObject *)__pyx_kp_s_133));
    11022    PyTuple_SET_ITEM(__pyx_k_tuple_135, 0, ((PyObject *)__pyx_kp_s_133));
    11023    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_133));
    11024 @@ -20277,7 +20930,7 @@
    11025   *                 raise ValueError("p > 1.0")
    11026   */
    11027    __pyx_k_tuple_137 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_137)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3654; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    11028 -  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_137));
    11029 +  __Pyx_GOTREF(__pyx_k_tuple_137);
    11030    __Pyx_INCREF(((PyObject *)__pyx_kp_s_136));
    11031    PyTuple_SET_ITEM(__pyx_k_tuple_137, 0, ((PyObject *)__pyx_kp_s_136));
    11032    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_136));
    11033 @@ -20291,7 +20944,7 @@
    11034   *
    11035   */
    11036    __pyx_k_tuple_139 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_139)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3656; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    11037 -  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_139));
    11038 +  __Pyx_GOTREF(__pyx_k_tuple_139);
    11039    __Pyx_INCREF(((PyObject *)__pyx_kp_s_138));
    11040    PyTuple_SET_ITEM(__pyx_k_tuple_139, 0, ((PyObject *)__pyx_kp_s_138));
    11041    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_138));
    11042 @@ -20305,7 +20958,7 @@
    11043   *             raise ValueError("p > 1.0")
    11044   */
    11045    __pyx_k_tuple_140 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_140)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3664; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    11046 -  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_140));
    11047 +  __Pyx_GOTREF(__pyx_k_tuple_140);
    11048    __Pyx_INCREF(((PyObject *)__pyx_kp_s_136));
    11049    PyTuple_SET_ITEM(__pyx_k_tuple_140, 0, ((PyObject *)__pyx_kp_s_136));
    11050    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_136));
    11051 @@ -20319,7 +20972,7 @@
    11052   *
    11053   */
    11054    __pyx_k_tuple_141 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_141)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3666; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    11055 -  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_141));
    11056 +  __Pyx_GOTREF(__pyx_k_tuple_141);
    11057    __Pyx_INCREF(((PyObject *)__pyx_kp_s_138));
    11058    PyTuple_SET_ITEM(__pyx_k_tuple_141, 0, ((PyObject *)__pyx_kp_s_138));
    11059    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_138));
    11060 @@ -20333,7 +20986,7 @@
    11061   *                 raise ValueError("nbad < 1")
    11062   */
    11063    __pyx_k_tuple_143 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_143)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3761; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    11064 -  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_143));
    11065 +  __Pyx_GOTREF(__pyx_k_tuple_143);
    11066    __Pyx_INCREF(((PyObject *)__pyx_kp_s_142));
    11067    PyTuple_SET_ITEM(__pyx_k_tuple_143, 0, ((PyObject *)__pyx_kp_s_142));
    11068    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_142));
    11069 @@ -20347,7 +21000,7 @@
    11070   *                 raise ValueError("nsample < 1")
    11071   */
    11072    __pyx_k_tuple_145 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_145)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3763; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    11073 -  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_145));
    11074 +  __Pyx_GOTREF(__pyx_k_tuple_145);
    11075    __Pyx_INCREF(((PyObject *)__pyx_kp_s_144));
    11076    PyTuple_SET_ITEM(__pyx_k_tuple_145, 0, ((PyObject *)__pyx_kp_s_144));
    11077    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_144));
    11078 @@ -20361,7 +21014,7 @@
    11079   *                 raise ValueError("ngood + nbad < nsample")
    11080   */
    11081    __pyx_k_tuple_147 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_147)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3765; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    11082 -  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_147));
    11083 +  __Pyx_GOTREF(__pyx_k_tuple_147);
    11084    __Pyx_INCREF(((PyObject *)__pyx_kp_s_146));
    11085    PyTuple_SET_ITEM(__pyx_k_tuple_147, 0, ((PyObject *)__pyx_kp_s_146));
    11086    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_146));
    11087 @@ -20375,7 +21028,7 @@
    11088   *                                     lngood, lnbad, lnsample)
    11089   */
    11090    __pyx_k_tuple_149 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_149)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3767; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    11091 -  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_149));
    11092 +  __Pyx_GOTREF(__pyx_k_tuple_149);
    11093    __Pyx_INCREF(((PyObject *)__pyx_kp_s_148));
    11094    PyTuple_SET_ITEM(__pyx_k_tuple_149, 0, ((PyObject *)__pyx_kp_s_148));
    11095    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_148));
    11096 @@ -20389,7 +21042,7 @@
    11097   *             raise ValueError("nbad < 1")
    11098   */
    11099    __pyx_k_tuple_150 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_150)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3778; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    11100 -  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_150));
    11101 +  __Pyx_GOTREF(__pyx_k_tuple_150);
    11102    __Pyx_INCREF(((PyObject *)__pyx_kp_s_142));
    11103    PyTuple_SET_ITEM(__pyx_k_tuple_150, 0, ((PyObject *)__pyx_kp_s_142));
    11104    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_142));
    11105 @@ -20403,7 +21056,7 @@
    11106   *             raise ValueError("nsample < 1")
    11107   */
    11108    __pyx_k_tuple_151 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_151)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3780; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    11109 -  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_151));
    11110 +  __Pyx_GOTREF(__pyx_k_tuple_151);
    11111    __Pyx_INCREF(((PyObject *)__pyx_kp_s_144));
    11112    PyTuple_SET_ITEM(__pyx_k_tuple_151, 0, ((PyObject *)__pyx_kp_s_144));
    11113    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_144));
    11114 @@ -20417,7 +21070,7 @@
    11115   *             raise ValueError("ngood + nbad < nsample")
    11116   */
    11117    __pyx_k_tuple_152 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_152)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3782; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    11118 -  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_152));
    11119 +  __Pyx_GOTREF(__pyx_k_tuple_152);
    11120    __Pyx_INCREF(((PyObject *)__pyx_kp_s_146));
    11121    PyTuple_SET_ITEM(__pyx_k_tuple_152, 0, ((PyObject *)__pyx_kp_s_146));
    11122    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_146));
    11123 @@ -20431,7 +21084,7 @@
    11124   *             ongood, onbad, onsample)
    11125   */
    11126    __pyx_k_tuple_153 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_153)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3784; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    11127 -  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_153));
    11128 +  __Pyx_GOTREF(__pyx_k_tuple_153);
    11129    __Pyx_INCREF(((PyObject *)__pyx_kp_s_148));
    11130    PyTuple_SET_ITEM(__pyx_k_tuple_153, 0, ((PyObject *)__pyx_kp_s_148));
    11131    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_148));
    11132 @@ -20445,7 +21098,7 @@
    11133   *                 raise ValueError("p >= 1.0")
    11134   */
    11135    __pyx_k_tuple_155 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_155)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3868; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    11136 -  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_155));
    11137 +  __Pyx_GOTREF(__pyx_k_tuple_155);
    11138    __Pyx_INCREF(((PyObject *)__pyx_kp_s_154));
    11139    PyTuple_SET_ITEM(__pyx_k_tuple_155, 0, ((PyObject *)__pyx_kp_s_154));
    11140    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_154));
    11141 @@ -20459,7 +21112,7 @@
    11142   *
    11143   */
    11144    __pyx_k_tuple_157 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_157)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3870; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    11145 -  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_157));
    11146 +  __Pyx_GOTREF(__pyx_k_tuple_157);
    11147    __Pyx_INCREF(((PyObject *)__pyx_kp_s_156));
    11148    PyTuple_SET_ITEM(__pyx_k_tuple_157, 0, ((PyObject *)__pyx_kp_s_156));
    11149    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_156));
    11150 @@ -20473,7 +21126,7 @@
    11151   *             raise ValueError("p >= 1.0")
    11152   */
    11153    __pyx_k_tuple_158 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_158)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3877; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    11154 -  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_158));
    11155 +  __Pyx_GOTREF(__pyx_k_tuple_158);
    11156    __Pyx_INCREF(((PyObject *)__pyx_kp_s_154));
    11157    PyTuple_SET_ITEM(__pyx_k_tuple_158, 0, ((PyObject *)__pyx_kp_s_154));
    11158    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_154));
    11159 @@ -20487,7 +21140,7 @@
    11160   *
    11161   */
    11162    __pyx_k_tuple_159 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_159)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3879; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    11163 -  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_159));
    11164 +  __Pyx_GOTREF(__pyx_k_tuple_159);
    11165    __Pyx_INCREF(((PyObject *)__pyx_kp_s_156));
    11166    PyTuple_SET_ITEM(__pyx_k_tuple_159, 0, ((PyObject *)__pyx_kp_s_156));
    11167    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_156));
    11168 @@ -20501,7 +21154,7 @@
    11169   *                raise ValueError("cov must be 2 dimensional and square")
    11170   */
    11171    __pyx_k_tuple_161 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_161)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3982; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    11172 -  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_161));
    11173 +  __Pyx_GOTREF(__pyx_k_tuple_161);
    11174    __Pyx_INCREF(((PyObject *)__pyx_kp_s_160));
    11175    PyTuple_SET_ITEM(__pyx_k_tuple_161, 0, ((PyObject *)__pyx_kp_s_160));
    11176    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_160));
    11177 @@ -20515,7 +21168,7 @@
    11178   *                raise ValueError("mean and cov must have same length")
    11179   */
    11180    __pyx_k_tuple_163 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_163)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3984; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    11181 -  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_163));
    11182 +  __Pyx_GOTREF(__pyx_k_tuple_163);
    11183    __Pyx_INCREF(((PyObject *)__pyx_kp_s_162));
    11184    PyTuple_SET_ITEM(__pyx_k_tuple_163, 0, ((PyObject *)__pyx_kp_s_162));
    11185    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_162));
    11186 @@ -20529,7 +21182,7 @@
    11187   *         if isinstance(shape, int):
    11188   */
    11189    __pyx_k_tuple_165 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_165)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3986; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    11190 -  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_165));
    11191 +  __Pyx_GOTREF(__pyx_k_tuple_165);
    11192    __Pyx_INCREF(((PyObject *)__pyx_kp_s_164));
    11193    PyTuple_SET_ITEM(__pyx_k_tuple_165, 0, ((PyObject *)__pyx_kp_s_164));
    11194    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_164));
    11195 @@ -20543,7 +21196,7 @@
    11196   *         if size is None:
    11197   */
    11198    __pyx_k_tuple_168 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_168)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4079; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    11199 -  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_168));
    11200 +  __Pyx_GOTREF(__pyx_k_tuple_168);
    11201    __Pyx_INCREF(((PyObject *)__pyx_kp_s_167));
    11202    PyTuple_SET_ITEM(__pyx_k_tuple_168, 0, ((PyObject *)__pyx_kp_s_167));
    11203    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_167));
    11204 @@ -20557,13 +21210,13 @@
    11205   *     def __init__(self, seed=None):
    11206   */
    11207    __pyx_k_tuple_169 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_169)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 556; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    11208 -  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_169));
    11209 +  __Pyx_GOTREF(__pyx_k_tuple_169);
    11210    __Pyx_INCREF(((PyObject *)__pyx_n_s__l));
    11211    PyTuple_SET_ITEM(__pyx_k_tuple_169, 0, ((PyObject *)__pyx_n_s__l));
    11212    __Pyx_GIVEREF(((PyObject *)__pyx_n_s__l));
    11213    __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_169));
    11214    __pyx_k_tuple_170 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_170)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 556; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    11215 -  __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_170));
    11216 +  __Pyx_GOTREF(__pyx_k_tuple_170);
    11217    __Pyx_INCREF(((PyObject *)__pyx_n_s__l));
    11218    PyTuple_SET_ITEM(__pyx_k_tuple_170, 0, ((PyObject *)__pyx_n_s__l));
    11219    __Pyx_GIVEREF(((PyObject *)__pyx_n_s__l));
    11220 @@ -20608,12 +21261,18 @@
    11221            Py_FatalError("failed to import 'refnanny' module");
    11222    }
    11223    #endif
    11224 -  __Pyx_RefNannySetupContext("PyMODINIT_FUNC PyInit_mtrand(void)");
    11225 +  __Pyx_RefNannySetupContext("PyMODINIT_FUNC PyInit_mtrand(void)", 0);
    11226    if ( __Pyx_check_binary_version() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    11227    __pyx_empty_tuple = PyTuple_New(0); if (unlikely(!__pyx_empty_tuple)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    11228    __pyx_empty_bytes = PyBytes_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_bytes)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    11229 -  #ifdef __pyx_binding_PyCFunctionType_USED
    11230 -  if (__pyx_binding_PyCFunctionType_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    11231 +  #ifdef __Pyx_CyFunction_USED
    11232 +  if (__Pyx_CyFunction_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    11233 +  #endif
    11234 +  #ifdef __Pyx_FusedFunction_USED
    11235 +  if (__pyx_FusedFunction_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    11236 +  #endif
    11237 +  #ifdef __Pyx_Generator_USED
    11238 +  if (__pyx_Generator_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    11239    #endif
    11240    /*--- Library function declarations ---*/
    11241    /*--- Threads initialization code ---*/
    11242 @@ -20624,16 +21283,15 @@
    11243    #endif
    11244    /*--- Module creation code ---*/
    11245    #if PY_MAJOR_VERSION < 3
    11246 -  __pyx_m = Py_InitModule4(__Pyx_NAMESTR("mtrand"), __pyx_methods, 0, 0, PYTHON_API_VERSION);
    11247 +  __pyx_m = Py_InitModule4(__Pyx_NAMESTR("mtrand"), __pyx_methods, 0, 0, PYTHON_API_VERSION); Py_XINCREF(__pyx_m);
    11248    #else
    11249    __pyx_m = PyModule_Create(&__pyx_moduledef);
    11250    #endif
    11251 -  if (!__pyx_m) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
    11252 -  #if PY_MAJOR_VERSION < 3
    11253 -  Py_INCREF(__pyx_m);
    11254 +  if (unlikely(!__pyx_m)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    11255 +  __pyx_b = PyImport_AddModule(__Pyx_NAMESTR(__Pyx_BUILTIN_MODULE_NAME)); if (unlikely(!__pyx_b)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    11256 +  #if CYTHON_COMPILING_IN_PYPY
    11257 +  Py_INCREF(__pyx_b);
    11258    #endif
    11259 -  __pyx_b = PyImport_AddModule(__Pyx_NAMESTR(__Pyx_BUILTIN_MODULE_NAME));
    11260 -  if (!__pyx_b) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
    11261    if (__Pyx_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
    11262    /*--- Initialize various global constants etc. ---*/
    11263    if (unlikely(__Pyx_InitGlobals() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    11264 @@ -20716,7 +21374,7 @@
    11265    __Pyx_GOTREF(__pyx_t_4);
    11266    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    11267    __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 556; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    11268 -  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
    11269 +  __Pyx_GOTREF(__pyx_t_1);
    11270    PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_4);
    11271    __Pyx_GIVEREF(__pyx_t_4);
    11272    __pyx_t_4 = 0;
    11273 @@ -21667,7 +22325,6 @@
    11274  }
    11275  
    11276  /* Runtime support code */
    11277 -
    11278  #if CYTHON_REFNANNY
    11279  static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname) {
    11280      PyObject *m = NULL, *p = NULL;
    11281 @@ -21700,9 +22357,9 @@
    11282  }
    11283  
    11284  static CYTHON_INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyObject *tb) {
    11285 +#if CYTHON_COMPILING_IN_CPYTHON
    11286      PyObject *tmp_type, *tmp_value, *tmp_tb;
    11287      PyThreadState *tstate = PyThreadState_GET();
    11288 -
    11289      tmp_type = tstate->curexc_type;
    11290      tmp_value = tstate->curexc_value;
    11291      tmp_tb = tstate->curexc_traceback;
    11292 @@ -21712,55 +22369,60 @@
    11293      Py_XDECREF(tmp_type);
    11294      Py_XDECREF(tmp_value);
    11295      Py_XDECREF(tmp_tb);
    11296 +#else
    11297 +    PyErr_Restore(type, value, tb);
    11298 +#endif
    11299  }
    11300 -
    11301  static CYTHON_INLINE void __Pyx_ErrFetch(PyObject **type, PyObject **value, PyObject **tb) {
    11302 +#if CYTHON_COMPILING_IN_CPYTHON
    11303      PyThreadState *tstate = PyThreadState_GET();
    11304      *type = tstate->curexc_type;
    11305      *value = tstate->curexc_value;
    11306      *tb = tstate->curexc_traceback;
    11307 -
    11308      tstate->curexc_type = 0;
    11309      tstate->curexc_value = 0;
    11310      tstate->curexc_traceback = 0;
    11311 +#else
    11312 +    PyErr_Fetch(type, value, tb);
    11313 +#endif
    11314  }
    11315  
    11316 -
    11317  #if PY_MAJOR_VERSION < 3
    11318 -static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) {
    11319 -    /* cause is unused */
    11320 +static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb,
    11321 +                        CYTHON_UNUSED PyObject *cause) {
    11322      Py_XINCREF(type);
    11323 -    Py_XINCREF(value);
    11324 -    Py_XINCREF(tb);
    11325 -    /* First, check the traceback argument, replacing None with NULL. */
    11326 -    if (tb == Py_None) {
    11327 -        Py_DECREF(tb);
    11328 -        tb = 0;
    11329 -    }
    11330 -    else if (tb != NULL && !PyTraceBack_Check(tb)) {
    11331 -        PyErr_SetString(PyExc_TypeError,
    11332 -            "raise: arg 3 must be a traceback or None");
    11333 -        goto raise_error;
    11334 -    }
    11335 -    /* Next, replace a missing value with None */
    11336 -    if (value == NULL) {
    11337 -        value = Py_None;
    11338 +    if (!value || value == Py_None)
    11339 +        value = NULL;
    11340 +    else
    11341          Py_INCREF(value);
    11342 +    if (!tb || tb == Py_None)
    11343 +        tb = NULL;
    11344 +    else {
    11345 +        Py_INCREF(tb);
    11346 +        if (!PyTraceBack_Check(tb)) {
    11347 +            PyErr_SetString(PyExc_TypeError,
    11348 +                "raise: arg 3 must be a traceback or None");
    11349 +            goto raise_error;
    11350 +        }
    11351      }
    11352      #if PY_VERSION_HEX < 0x02050000
    11353 -    if (!PyClass_Check(type))
    11354 +    if (PyClass_Check(type)) {
    11355      #else
    11356 -    if (!PyType_Check(type))
    11357 +    if (PyType_Check(type)) {
    11358      #endif
    11359 -    {
    11360 -        /* Raising an instance.  The value should be a dummy. */
    11361 -        if (value != Py_None) {
    11362 +#if CYTHON_COMPILING_IN_PYPY
    11363 +        if (!value) {
    11364 +            Py_INCREF(Py_None);
    11365 +            value = Py_None;
    11366 +        }
    11367 +#endif
    11368 +        PyErr_NormalizeException(&type, &value, &tb);
    11369 +    } else {
    11370 +        if (value) {
    11371              PyErr_SetString(PyExc_TypeError,
    11372                  "instance exception may not have a separate value");
    11373              goto raise_error;
    11374          }
    11375 -        /* Normalize to raise <class>, <instance> */
    11376 -        Py_DECREF(value);
    11377          value = type;
    11378          #if PY_VERSION_HEX < 0x02050000
    11379              if (PyInstance_Check(type)) {
    11380 @@ -21783,7 +22445,6 @@
    11381              }
    11382          #endif
    11383      }
    11384 -
    11385      __Pyx_ErrRestore(type, value, tb);
    11386      return;
    11387  raise_error:
    11388 @@ -21792,10 +22453,9 @@
    11389      Py_XDECREF(tb);
    11390      return;
    11391  }
    11392 -
    11393  #else /* Python 3+ */
    11394 -
    11395  static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) {
    11396 +    PyObject* owned_instance = NULL;
    11397      if (tb == Py_None) {
    11398          tb = 0;
    11399      } else if (tb && !PyTraceBack_Check(tb)) {
    11400 @@ -21805,7 +22465,6 @@
    11401      }
    11402      if (value == Py_None)
    11403          value = 0;
    11404 -
    11405      if (PyExceptionInstance_Check(type)) {
    11406          if (value) {
    11407              PyErr_SetString(PyExc_TypeError,
    11408 @@ -21814,13 +22473,36 @@
    11409          }
    11410          value = type;
    11411          type = (PyObject*) Py_TYPE(value);
    11412 -    } else if (!PyExceptionClass_Check(type)) {
    11413 +    } else if (PyExceptionClass_Check(type)) {
    11414 +        PyObject *args;
    11415 +        if (!value)
    11416 +            args = PyTuple_New(0);
    11417 +        else if (PyTuple_Check(value)) {
    11418 +            Py_INCREF(value);
    11419 +            args = value;
    11420 +        }
    11421 +        else
    11422 +            args = PyTuple_Pack(1, value);
    11423 +        if (!args)
    11424 +            goto bad;
    11425 +        owned_instance = PyEval_CallObject(type, args);
    11426 +        Py_DECREF(args);
    11427 +        if (!owned_instance)
    11428 +            goto bad;
    11429 +        value = owned_instance;
    11430 +        if (!PyExceptionInstance_Check(value)) {
    11431 +            PyErr_Format(PyExc_TypeError,
    11432 +                         "calling %R should have returned an instance of "
    11433 +                         "BaseException, not %R",
    11434 +                         type, Py_TYPE(value));
    11435 +            goto bad;
    11436 +        }
    11437 +    } else {
    11438          PyErr_SetString(PyExc_TypeError,
    11439              "raise: exception class must be a subclass of BaseException");
    11440          goto bad;
    11441      }
    11442 -
    11443 -    if (cause) {
    11444 +    if (cause && cause != Py_None) {
    11445          PyObject *fixed_cause;
    11446          if (PyExceptionClass_Check(cause)) {
    11447              fixed_cause = PyObject_CallObject(cause, NULL);
    11448 @@ -21837,14 +22519,9 @@
    11449                              "BaseException");
    11450              goto bad;
    11451          }
    11452 -        if (!value) {
    11453 -            value = PyObject_CallObject(type, NULL);
    11454 -        }
    11455          PyException_SetCause(value, fixed_cause);
    11456      }
    11457 -
    11458      PyErr_SetObject(type, value);
    11459 -
    11460      if (tb) {
    11461          PyThreadState *tstate = PyThreadState_GET();
    11462          PyObject* tmp_tb = tstate->curexc_traceback;
    11463 @@ -21854,8 +22531,8 @@
    11464              Py_XDECREF(tmp_tb);
    11465          }
    11466      }
    11467 -
    11468  bad:
    11469 +    Py_XDECREF(owned_instance);
    11470      return;
    11471  }
    11472  #endif
    11473 @@ -21869,7 +22546,7 @@
    11474          "%s() got multiple values for keyword argument '%U'", func_name, kw_name);
    11475          #else
    11476          "%s() got multiple values for keyword argument '%s'", func_name,
    11477 -        PyString_AS_STRING(kw_name));
    11478 +        PyString_AsString(kw_name));
    11479          #endif
    11480  }
    11481  
    11482 @@ -21885,55 +22562,77 @@
    11483      Py_ssize_t pos = 0;
    11484      PyObject*** name;
    11485      PyObject*** first_kw_arg = argnames + num_pos_args;
    11486 -
    11487      while (PyDict_Next(kwds, &pos, &key, &value)) {
    11488          name = first_kw_arg;
    11489          while (*name && (**name != key)) name++;
    11490          if (*name) {
    11491              values[name-argnames] = value;
    11492 -        } else {
    11493 -            #if PY_MAJOR_VERSION < 3
    11494 -            if (unlikely(!PyString_CheckExact(key)) && unlikely(!PyString_Check(key))) {
    11495 -            #else
    11496 -            if (unlikely(!PyUnicode_CheckExact(key)) && unlikely(!PyUnicode_Check(key))) {
    11497 -            #endif
    11498 -                goto invalid_keyword_type;
    11499 -            } else {
    11500 -                for (name = first_kw_arg; *name; name++) {
    11501 -                    #if PY_MAJOR_VERSION >= 3
    11502 -                    if (PyUnicode_GET_SIZE(**name) == PyUnicode_GET_SIZE(key) &&
    11503 -                        PyUnicode_Compare(**name, key) == 0) break;
    11504 -                    #else
    11505 -                    if (PyString_GET_SIZE(**name) == PyString_GET_SIZE(key) &&
    11506 -                        _PyString_Eq(**name, key)) break;
    11507 -                    #endif
    11508 -                }
    11509 -                if (*name) {
    11510 +            continue;
    11511 +        }
    11512 +        name = first_kw_arg;
    11513 +        #if PY_MAJOR_VERSION < 3
    11514 +        if (likely(PyString_CheckExact(key)) || likely(PyString_Check(key))) {
    11515 +            while (*name) {
    11516 +                if ((CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**name) == PyString_GET_SIZE(key))
    11517 +                        && _PyString_Eq(**name, key)) {
    11518                      values[name-argnames] = value;
    11519 -                } else {
    11520 -                    /* unexpected keyword found */
    11521 -                    for (name=argnames; name != first_kw_arg; name++) {
    11522 -                        if (**name == key) goto arg_passed_twice;
    11523 -                        #if PY_MAJOR_VERSION >= 3
    11524 -                        if (PyUnicode_GET_SIZE(**name) == PyUnicode_GET_SIZE(key) &&
    11525 -                            PyUnicode_Compare(**name, key) == 0) goto arg_passed_twice;
    11526 -                        #else
    11527 -                        if (PyString_GET_SIZE(**name) == PyString_GET_SIZE(key) &&
    11528 -                            _PyString_Eq(**name, key)) goto arg_passed_twice;
    11529 -                        #endif
    11530 -                    }
    11531 -                    if (kwds2) {
    11532 -                        if (unlikely(PyDict_SetItem(kwds2, key, value))) goto bad;
    11533 -                    } else {
    11534 -                        goto invalid_keyword;
    11535 +                    break;
    11536 +                }
    11537 +                name++;
    11538 +            }
    11539 +            if (*name) continue;
    11540 +            else {
    11541 +                PyObject*** argname = argnames;
    11542 +                while (argname != first_kw_arg) {
    11543 +                    if ((**argname == key) || (
    11544 +                            (CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**argname) == PyString_GET_SIZE(key))
    11545 +                             && _PyString_Eq(**argname, key))) {
    11546 +                        goto arg_passed_twice;
    11547                      }
    11548 +                    argname++;
    11549                  }
    11550              }
    11551 +        } else
    11552 +        #endif
    11553 +        if (likely(PyUnicode_Check(key))) {
    11554 +            while (*name) {
    11555 +                int cmp = (**name == key) ? 0 :
    11556 +                #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3
    11557 +                    (PyUnicode_GET_SIZE(**name) != PyUnicode_GET_SIZE(key)) ? 1 :
    11558 +                #endif
    11559 +                    PyUnicode_Compare(**name, key);
    11560 +                if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad;
    11561 +                if (cmp == 0) {
    11562 +                    values[name-argnames] = value;
    11563 +                    break;
    11564 +                }
    11565 +                name++;
    11566 +            }
    11567 +            if (*name) continue;
    11568 +            else {
    11569 +                PyObject*** argname = argnames;
    11570 +                while (argname != first_kw_arg) {
    11571 +                    int cmp = (**argname == key) ? 0 :
    11572 +                    #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3
    11573 +                        (PyUnicode_GET_SIZE(**argname) != PyUnicode_GET_SIZE(key)) ? 1 :
    11574 +                    #endif
    11575 +                        PyUnicode_Compare(**argname, key);
    11576 +                    if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad;
    11577 +                    if (cmp == 0) goto arg_passed_twice;
    11578 +                    argname++;
    11579 +                }
    11580 +            }
    11581 +        } else
    11582 +            goto invalid_keyword_type;
    11583 +        if (kwds2) {
    11584 +            if (unlikely(PyDict_SetItem(kwds2, key, value))) goto bad;
    11585 +        } else {
    11586 +            goto invalid_keyword;
    11587          }
    11588      }
    11589      return 0;
    11590  arg_passed_twice:
    11591 -    __Pyx_RaiseDoubleKeywordsError(function_name, **name);
    11592 +    __Pyx_RaiseDoubleKeywordsError(function_name, key);
    11593      goto bad;
    11594  invalid_keyword_type:
    11595      PyErr_Format(PyExc_TypeError,
    11596 @@ -21961,7 +22660,6 @@
    11597  {
    11598      Py_ssize_t num_expected;
    11599      const char *more_or_less;
    11600 -
    11601      if (num_found < num_min) {
    11602          num_expected = num_min;
    11603          more_or_less = "at least";
    11604 @@ -21973,21 +22671,54 @@
    11605          more_or_less = "exactly";
    11606      }
    11607      PyErr_Format(PyExc_TypeError,
    11608 -                 "%s() takes %s %"PY_FORMAT_SIZE_T"d positional argument%s (%"PY_FORMAT_SIZE_T"d given)",
    11609 +                 "%s() takes %s %" CYTHON_FORMAT_SSIZE_T "d positional argument%s (%" CYTHON_FORMAT_SSIZE_T "d given)",
    11610                   func_name, more_or_less, num_expected,
    11611                   (num_expected == 1) ? "" : "s", num_found);
    11612  }
    11613  
    11614 +static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected) {
    11615 +    PyErr_Format(PyExc_ValueError,
    11616 +                 "too many values to unpack (expected %" CYTHON_FORMAT_SSIZE_T "d)", expected);
    11617 +}
    11618  
    11619  static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index) {
    11620      PyErr_Format(PyExc_ValueError,
    11621 -                 "need more than %"PY_FORMAT_SIZE_T"d value%s to unpack",
    11622 +                 "need more than %" CYTHON_FORMAT_SSIZE_T "d value%s to unpack",
    11623                   index, (index == 1) ? "" : "s");
    11624  }
    11625  
    11626 -static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected) {
    11627 -    PyErr_Format(PyExc_ValueError,
    11628 -                 "too many values to unpack (expected %"PY_FORMAT_SIZE_T"d)", expected);
    11629 +static CYTHON_INLINE int __Pyx_IterFinish(void) {
    11630 +#if CYTHON_COMPILING_IN_CPYTHON
    11631 +    PyThreadState *tstate = PyThreadState_GET();
    11632 +    PyObject* exc_type = tstate->curexc_type;
    11633 +    if (unlikely(exc_type)) {
    11634 +        if (likely(exc_type == PyExc_StopIteration) || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)) {
    11635 +            PyObject *exc_value, *exc_tb;
    11636 +            exc_value = tstate->curexc_value;
    11637 +            exc_tb = tstate->curexc_traceback;
    11638 +            tstate->curexc_type = 0;
    11639 +            tstate->curexc_value = 0;
    11640 +            tstate->curexc_traceback = 0;
    11641 +            Py_DECREF(exc_type);
    11642 +            Py_XDECREF(exc_value);
    11643 +            Py_XDECREF(exc_tb);
    11644 +            return 0;
    11645 +        } else {
    11646 +            return -1;
    11647 +        }
    11648 +    }
    11649 +    return 0;
    11650 +#else
    11651 +    if (unlikely(PyErr_Occurred())) {
    11652 +        if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) {
    11653 +            PyErr_Clear();
    11654 +            return 0;
    11655 +        } else {
    11656 +            return -1;
    11657 +        }
    11658 +    }
    11659 +    return 0;
    11660 +#endif
    11661  }
    11662  
    11663  static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected) {
    11664 @@ -21995,19 +22726,15 @@
    11665          Py_DECREF(retval);
    11666          __Pyx_RaiseTooManyValuesError(expected);
    11667          return -1;
    11668 -    } else if (PyErr_Occurred()) {
    11669 -        if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) {
    11670 -            PyErr_Clear();
    11671 -            return 0;
    11672 -        } else {
    11673 -            return -1;
    11674 -        }
    11675 +    } else {
    11676 +        return __Pyx_IterFinish();
    11677      }
    11678      return 0;
    11679  }
    11680  
    11681  static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb) {
    11682      PyObject *local_type, *local_value, *local_tb;
    11683 +#if CYTHON_COMPILING_IN_CPYTHON
    11684      PyObject *tmp_type, *tmp_value, *tmp_tb;
    11685      PyThreadState *tstate = PyThreadState_GET();
    11686      local_type = tstate->curexc_type;
    11687 @@ -22016,19 +22743,27 @@
    11688      tstate->curexc_type = 0;
    11689      tstate->curexc_value = 0;
    11690      tstate->curexc_traceback = 0;
    11691 +#else
    11692 +    PyErr_Fetch(&local_type, &local_value, &local_tb);
    11693 +#endif
    11694      PyErr_NormalizeException(&local_type, &local_value, &local_tb);
    11695 +#if CYTHON_COMPILING_IN_CPYTHON
    11696      if (unlikely(tstate->curexc_type))
    11697 +#else
    11698 +    if (unlikely(PyErr_Occurred()))
    11699 +#endif
    11700          goto bad;
    11701      #if PY_MAJOR_VERSION >= 3
    11702      if (unlikely(PyException_SetTraceback(local_value, local_tb) < 0))
    11703          goto bad;
    11704      #endif
    11705 -    *type = local_type;
    11706 -    *value = local_value;
    11707 -    *tb = local_tb;
    11708      Py_INCREF(local_type);
    11709      Py_INCREF(local_value);
    11710      Py_INCREF(local_tb);
    11711 +    *type = local_type;
    11712 +    *value = local_value;
    11713 +    *tb = local_tb;
    11714 +#if CYTHON_COMPILING_IN_CPYTHON
    11715      tmp_type = tstate->exc_type;
    11716      tmp_value = tstate->exc_value;
    11717      tmp_tb = tstate->exc_traceback;
    11718 @@ -22036,10 +22771,13 @@
    11719      tstate->exc_value = local_value;
    11720      tstate->exc_traceback = local_tb;
    11721      /* Make sure tstate is in a consistent state when we XDECREF
    11722 -       these objects (XDECREF may run arbitrary code). */
    11723 +       these objects (DECREF may run arbitrary code). */
    11724      Py_XDECREF(tmp_type);
    11725      Py_XDECREF(tmp_value);
    11726      Py_XDECREF(tmp_tb);
    11727 +#else
    11728 +    PyErr_SetExcInfo(local_type, local_value, local_tb);
    11729 +#endif
    11730      return 0;
    11731  bad:
    11732      *type = 0;
    11733 @@ -22051,7 +22789,6 @@
    11734      return -1;
    11735  }
    11736  
    11737 -
    11738  static CYTHON_INLINE int __Pyx_CheckKeywordStrings(
    11739      PyObject *kwdict,
    11740      const char* function_name,
    11741 @@ -22059,13 +22796,17 @@
    11742  {
    11743      PyObject* key = 0;
    11744      Py_ssize_t pos = 0;
    11745 +#if CPYTHON_COMPILING_IN_PYPY
    11746 +    if (!kw_allowed && PyDict_Next(kwdict, &pos, &key, 0))
    11747 +        goto invalid_keyword;
    11748 +    return 1;
    11749 +#else
    11750      while (PyDict_Next(kwdict, &pos, &key, 0)) {
    11751          #if PY_MAJOR_VERSION < 3
    11752          if (unlikely(!PyString_CheckExact(key)) && unlikely(!PyString_Check(key)))
    11753 -        #else
    11754 -        if (unlikely(!PyUnicode_CheckExact(key)) && unlikely(!PyUnicode_Check(key)))
    11755          #endif
    11756 -            goto invalid_keyword_type;
    11757 +            if (unlikely(!PyUnicode_Check(key)))
    11758 +                goto invalid_keyword_type;
    11759      }
    11760      if ((!kw_allowed) && unlikely(key))
    11761          goto invalid_keyword;
    11762 @@ -22074,6 +22815,7 @@
    11763      PyErr_Format(PyExc_TypeError,
    11764          "%s() keywords must be strings", function_name);
    11765      return 0;
    11766 +#endif
    11767  invalid_keyword:
    11768      PyErr_Format(PyExc_TypeError,
    11769      #if PY_MAJOR_VERSION < 3
    11770 @@ -22098,8 +22840,8 @@
    11771      return 0;
    11772  }
    11773  
    11774 -
    11775  static CYTHON_INLINE void __Pyx_ExceptionSave(PyObject **type, PyObject **value, PyObject **tb) {
    11776 +#if CYTHON_COMPILING_IN_CPYTHON
    11777      PyThreadState *tstate = PyThreadState_GET();
    11778      *type = tstate->exc_type;
    11779      *value = tstate->exc_value;
    11780 @@ -22107,9 +22849,12 @@
    11781      Py_XINCREF(*type);
    11782      Py_XINCREF(*value);
    11783      Py_XINCREF(*tb);
    11784 +#else
    11785 +    PyErr_GetExcInfo(type, value, tb);
    11786 +#endif
    11787  }
    11788 -
    11789  static void __Pyx_ExceptionReset(PyObject *type, PyObject *value, PyObject *tb) {
    11790 +#if CYTHON_COMPILING_IN_CPYTHON
    11791      PyObject *tmp_type, *tmp_value, *tmp_tb;
    11792      PyThreadState *tstate = PyThreadState_GET();
    11793      tmp_type = tstate->exc_type;
    11794 @@ -22121,6 +22866,9 @@
    11795      Py_XDECREF(tmp_type);
    11796      Py_XDECREF(tmp_value);
    11797      Py_XDECREF(tmp_tb);
    11798 +#else
    11799 +    PyErr_SetExcInfo(type, value, tb);
    11800 +#endif
    11801  }
    11802  
    11803  static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, long level) {
    11804 @@ -22149,12 +22897,33 @@
    11805          goto bad;
    11806      #if PY_VERSION_HEX >= 0x02050000
    11807      {
    11808 -        PyObject *py_level = PyInt_FromLong(level);
    11809 -        if (!py_level)
    11810 -            goto bad;
    11811 -        module = PyObject_CallFunctionObjArgs(py_import,
    11812 -            name, global_dict, empty_dict, list, py_level, NULL);
    11813 -        Py_DECREF(py_level);
    11814 +        #if PY_MAJOR_VERSION >= 3
    11815 +        if (level == -1) {
    11816 +            if (strchr(__Pyx_MODULE_NAME, '.')) {
    11817 +                /* try package relative import first */
    11818 +                PyObject *py_level = PyInt_FromLong(1);
    11819 +                if (!py_level)
    11820 +                    goto bad;
    11821 +                module = PyObject_CallFunctionObjArgs(py_import,
    11822 +                    name, global_dict, empty_dict, list, py_level, NULL);
    11823 +                Py_DECREF(py_level);
    11824 +                if (!module) {
    11825 +                    if (!PyErr_ExceptionMatches(PyExc_ImportError))
    11826 +                        goto bad;
    11827 +                    PyErr_Clear();
    11828 +                }
    11829 +            }
    11830 +            level = 0; /* try absolute import on failure */
    11831 +        }
    11832 +        #endif
    11833 +        if (!module) {
    11834 +            PyObject *py_level = PyInt_FromLong(level);
    11835 +            if (!py_level)
    11836 +                goto bad;
    11837 +            module = PyObject_CallFunctionObjArgs(py_import,
    11838 +                name, global_dict, empty_dict, list, py_level, NULL);
    11839 +            Py_DECREF(py_level);
    11840 +        }
    11841      }
    11842      #else
    11843      if (level>0) {
    11844 @@ -22171,66 +22940,65 @@
    11845      return module;
    11846  }
    11847  
    11848 -static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals) {
    11849 -    if (s1 == s2) {   /* as done by PyObject_RichCompareBool(); also catches the (interned) empty string */
    11850 -        return (equals == Py_EQ);
    11851 -    } else if (PyBytes_CheckExact(s1) & PyBytes_CheckExact(s2)) {
    11852 -        if (PyBytes_GET_SIZE(s1) != PyBytes_GET_SIZE(s2)) {
    11853 -            return (equals == Py_NE);
    11854 -        } else if (PyBytes_GET_SIZE(s1) == 1) {
    11855 -            if (equals == Py_EQ)
    11856 -                return (PyBytes_AS_STRING(s1)[0] == PyBytes_AS_STRING(s2)[0]);
    11857 -            else
    11858 -                return (PyBytes_AS_STRING(s1)[0] != PyBytes_AS_STRING(s2)[0]);
    11859 -        } else {
    11860 -            int result = memcmp(PyBytes_AS_STRING(s1), PyBytes_AS_STRING(s2), (size_t)PyBytes_GET_SIZE(s1));
    11861 -            return (equals == Py_EQ) ? (result == 0) : (result != 0);
    11862 +static CYTHON_INLINE npy_intp __Pyx_PyInt_from_py_npy_intp(PyObject* x) {
    11863 +    const npy_intp neg_one = (npy_intp)-1, const_zero = (npy_intp)0;
    11864 +    const int is_unsigned = const_zero < neg_one;
    11865 +    if (sizeof(npy_intp) == sizeof(char)) {
    11866 +        if (is_unsigned)
    11867 +            return (npy_intp)__Pyx_PyInt_AsUnsignedChar(x);
    11868 +        else
    11869 +            return (npy_intp)__Pyx_PyInt_AsSignedChar(x);
    11870 +    } else if (sizeof(npy_intp) == sizeof(short)) {
    11871 +        if (is_unsigned)
    11872 +            return (npy_intp)__Pyx_PyInt_AsUnsignedShort(x);
    11873 +        else
    11874 +            return (npy_intp)__Pyx_PyInt_AsSignedShort(x);
    11875 +    } else if (sizeof(npy_intp) == sizeof(int)) {
    11876 +        if (is_unsigned)
    11877 +            return (npy_intp)__Pyx_PyInt_AsUnsignedInt(x);
    11878 +        else
    11879 +            return (npy_intp)__Pyx_PyInt_AsSignedInt(x);
    11880 +    } else if (sizeof(npy_intp) == sizeof(long)) {
    11881 +        if (is_unsigned)
    11882 +            return (npy_intp)__Pyx_PyInt_AsUnsignedLong(x);
    11883 +        else
    11884 +            return (npy_intp)__Pyx_PyInt_AsSignedLong(x);
    11885 +    } else if (sizeof(npy_intp) == sizeof(PY_LONG_LONG)) {
    11886 +        if (is_unsigned)
    11887 +            return (npy_intp)__Pyx_PyInt_AsUnsignedLongLong(x);
    11888 +        else
    11889 +            return (npy_intp)__Pyx_PyInt_AsSignedLongLong(x);
    11890 +    }  else {
    11891 +        npy_intp val;
    11892 +        PyObject *v = __Pyx_PyNumber_Int(x);
    11893 +        #if PY_VERSION_HEX < 0x03000000
    11894 +        if (likely(v) && !PyLong_Check(v)) {
    11895 +            PyObject *tmp = v;
    11896 +            v = PyNumber_Long(tmp);
    11897 +            Py_DECREF(tmp);
    11898          }
    11899 -    } else if ((s1 == Py_None) & PyBytes_CheckExact(s2)) {
    11900 -        return (equals == Py_NE);
    11901 -    } else if ((s2 == Py_None) & PyBytes_CheckExact(s1)) {
    11902 -        return (equals == Py_NE);
    11903 -    } else {
    11904 -        int result;
    11905 -        PyObject* py_result = PyObject_RichCompare(s1, s2, equals);
    11906 -        if (!py_result)
    11907 -            return -1;
    11908 -        result = __Pyx_PyObject_IsTrue(py_result);
    11909 -        Py_DECREF(py_result);
    11910 -        return result;
    11911 +        #endif
    11912 +        if (likely(v)) {
    11913 +            int one = 1; int is_little = (int)*(unsigned char *)&one;
    11914 +            unsigned char *bytes = (unsigned char *)&val;
    11915 +            int ret = _PyLong_AsByteArray((PyLongObject *)v,
    11916 +                                          bytes, sizeof(val),
    11917 +                                          is_little, !is_unsigned);
    11918 +            Py_DECREF(v);
    11919 +            if (likely(!ret))
    11920 +                return val;
    11921 +        }
    11922 +        return (npy_intp)-1;
    11923      }
    11924  }
    11925  
    11926 -static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals) {
    11927 -    if (s1 == s2) {   /* as done by PyObject_RichCompareBool(); also catches the (interned) empty string */
    11928 -        return (equals == Py_EQ);
    11929 -    } else if (PyUnicode_CheckExact(s1) & PyUnicode_CheckExact(s2)) {
    11930 -        if (PyUnicode_GET_SIZE(s1) != PyUnicode_GET_SIZE(s2)) {
    11931 -            return (equals == Py_NE);
    11932 -        } else if (PyUnicode_GET_SIZE(s1) == 1) {
    11933 -            if (equals == Py_EQ)
    11934 -                return (PyUnicode_AS_UNICODE(s1)[0] == PyUnicode_AS_UNICODE(s2)[0]);
    11935 -            else
    11936 -                return (PyUnicode_AS_UNICODE(s1)[0] != PyUnicode_AS_UNICODE(s2)[0]);
    11937 -        } else {
    11938 -            int result = PyUnicode_Compare(s1, s2);
    11939 -            if ((result == -1) && unlikely(PyErr_Occurred()))
    11940 -                return -1;
    11941 -            return (equals == Py_EQ) ? (result == 0) : (result != 0);
    11942 -        }
    11943 -    } else if ((s1 == Py_None) & PyUnicode_CheckExact(s2)) {
    11944 -        return (equals == Py_NE);
    11945 -    } else if ((s2 == Py_None) & PyUnicode_CheckExact(s1)) {
    11946 -        return (equals == Py_NE);
    11947 -    } else {
    11948 -        int result;
    11949 -        PyObject* py_result = PyObject_RichCompare(s1, s2, equals);
    11950 -        if (!py_result)
    11951 -            return -1;
    11952 -        result = __Pyx_PyObject_IsTrue(py_result);
    11953 -        Py_DECREF(py_result);
    11954 -        return result;
    11955 -    }
    11956 +static CYTHON_INLINE void __Pyx_RaiseImportError(PyObject *name) {
    11957 +#if PY_MAJOR_VERSION < 3
    11958 +    PyErr_Format(PyExc_ImportError, "cannot import name %.230s",
    11959 +                 PyString_AsString(name));
    11960 +#else
    11961 +    PyErr_Format(PyExc_ImportError, "cannot import name %S", name);
    11962 +#endif
    11963  }
    11964  
    11965  static CYTHON_INLINE PyObject *__Pyx_PyInt_to_py_npy_intp(npy_intp val) {
    11966 @@ -22658,58 +23426,6 @@
    11967      }
    11968  }
    11969  
    11970 -static CYTHON_INLINE npy_intp __Pyx_PyInt_from_py_npy_intp(PyObject* x) {
    11971 -    const npy_intp neg_one = (npy_intp)-1, const_zero = (npy_intp)0;
    11972 -    const int is_unsigned = const_zero < neg_one;
    11973 -    if (sizeof(npy_intp) == sizeof(char)) {
    11974 -        if (is_unsigned)
    11975 -            return (npy_intp)__Pyx_PyInt_AsUnsignedChar(x);
    11976 -        else
    11977 -            return (npy_intp)__Pyx_PyInt_AsSignedChar(x);
    11978 -    } else if (sizeof(npy_intp) == sizeof(short)) {
    11979 -        if (is_unsigned)
    11980 -            return (npy_intp)__Pyx_PyInt_AsUnsignedShort(x);
    11981 -        else
    11982 -            return (npy_intp)__Pyx_PyInt_AsSignedShort(x);
    11983 -    } else if (sizeof(npy_intp) == sizeof(int)) {
    11984 -        if (is_unsigned)
    11985 -            return (npy_intp)__Pyx_PyInt_AsUnsignedInt(x);
    11986 -        else
    11987 -            return (npy_intp)__Pyx_PyInt_AsSignedInt(x);
    11988 -    } else if (sizeof(npy_intp) == sizeof(long)) {
    11989 -        if (is_unsigned)
    11990 -            return (npy_intp)__Pyx_PyInt_AsUnsignedLong(x);
    11991 -        else
    11992 -            return (npy_intp)__Pyx_PyInt_AsSignedLong(x);
    11993 -    } else if (sizeof(npy_intp) == sizeof(PY_LONG_LONG)) {
    11994 -        if (is_unsigned)
    11995 -            return (npy_intp)__Pyx_PyInt_AsUnsignedLongLong(x);
    11996 -        else
    11997 -            return (npy_intp)__Pyx_PyInt_AsSignedLongLong(x);
    11998 -    }  else {
    11999 -        npy_intp val;
    12000 -        PyObject *v = __Pyx_PyNumber_Int(x);
    12001 -        #if PY_VERSION_HEX < 0x03000000
    12002 -        if (likely(v) && !PyLong_Check(v)) {
    12003 -            PyObject *tmp = v;
    12004 -            v = PyNumber_Long(tmp);
    12005 -            Py_DECREF(tmp);
    12006 -        }
    12007 -        #endif
    12008 -        if (likely(v)) {
    12009 -            int one = 1; int is_little = (int)*(unsigned char *)&one;
    12010 -            unsigned char *bytes = (unsigned char *)&val;
    12011 -            int ret = _PyLong_AsByteArray((PyLongObject *)v,
    12012 -                                          bytes, sizeof(val),
    12013 -                                          is_little, !is_unsigned);
    12014 -            Py_DECREF(v);
    12015 -            if (likely(!ret))
    12016 -                return val;
    12017 -        }
    12018 -        return (npy_intp)-1;
    12019 -    }
    12020 -}
    12021 -
    12022  static int __Pyx_check_binary_version(void) {
    12023      char ctversion[4], rtversion[4];
    12024      PyOS_snprintf(ctversion, 4, "%d.%d", PY_MAJOR_VERSION, PY_MINOR_VERSION);
    12025 @@ -22729,6 +23445,23 @@
    12026      return 0;
    12027  }
    12028  
    12029 +#ifndef __PYX_HAVE_RT_ImportModule
    12030 +#define __PYX_HAVE_RT_ImportModule
    12031 +static PyObject *__Pyx_ImportModule(const char *name) {
    12032 +    PyObject *py_name = 0;
    12033 +    PyObject *py_module = 0;
    12034 +    py_name = __Pyx_PyIdentifier_FromString(name);
    12035 +    if (!py_name)
    12036 +        goto bad;
    12037 +    py_module = PyImport_Import(py_name);
    12038 +    Py_DECREF(py_name);
    12039 +    return py_module;
    12040 +bad:
    12041 +    Py_XDECREF(py_name);
    12042 +    return 0;
    12043 +}
    12044 +#endif
    12045 +
    12046  #ifndef __PYX_HAVE_RT_ImportType
    12047  #define __PYX_HAVE_RT_ImportType
    12048  static PyTypeObject *__Pyx_ImportType(const char *module_name, const char *class_name,
    12049 @@ -22738,15 +23471,10 @@
    12050      PyObject *result = 0;
    12051      PyObject *py_name = 0;
    12052      char warning[200];
    12053 -
    12054      py_module = __Pyx_ImportModule(module_name);
    12055      if (!py_module)
    12056          goto bad;
    12057 -    #if PY_MAJOR_VERSION < 3
    12058 -    py_name = PyString_FromString(class_name);
    12059 -    #else
    12060 -    py_name = PyUnicode_FromString(class_name);
    12061 -    #endif
    12062 +    py_name = __Pyx_PyIdentifier_FromString(class_name);
    12063      if (!py_name)
    12064          goto bad;
    12065      result = PyObject_GetAttr(py_module, py_name);
    12066 @@ -22762,7 +23490,7 @@
    12067              module_name, class_name);
    12068          goto bad;
    12069      }
    12070 -    if (!strict && ((PyTypeObject *)result)->tp_basicsize > (Py_ssize_t)size) {
    12071 +    if (!strict && (size_t)((PyTypeObject *)result)->tp_basicsize > size) {
    12072          PyOS_snprintf(warning, sizeof(warning),
    12073              "%s.%s size changed, may indicate binary incompatibility",
    12074              module_name, class_name);
    12075 @@ -22772,7 +23500,7 @@
    12076          if (PyErr_WarnEx(NULL, warning, 0) < 0) goto bad;
    12077          #endif
    12078      }
    12079 -    else if (((PyTypeObject *)result)->tp_basicsize != (Py_ssize_t)size) {
    12080 +    else if ((size_t)((PyTypeObject *)result)->tp_basicsize != size) {
    12081          PyErr_Format(PyExc_ValueError,
    12082              "%s.%s has the wrong size, try recompiling",
    12083              module_name, class_name);
    12084 @@ -22786,51 +23514,105 @@
    12085  }
    12086  #endif
    12087  
    12088 -#ifndef __PYX_HAVE_RT_ImportModule
    12089 -#define __PYX_HAVE_RT_ImportModule
    12090 -static PyObject *__Pyx_ImportModule(const char *name) {
    12091 -    PyObject *py_name = 0;
    12092 -    PyObject *py_module = 0;
    12093 -
    12094 -    #if PY_MAJOR_VERSION < 3
    12095 -    py_name = PyString_FromString(name);
    12096 -    #else
    12097 -    py_name = PyUnicode_FromString(name);
    12098 -    #endif
    12099 -    if (!py_name)
    12100 -        goto bad;
    12101 -    py_module = PyImport_Import(py_name);
    12102 -    Py_DECREF(py_name);
    12103 -    return py_module;
    12104 -bad:
    12105 -    Py_XDECREF(py_name);
    12106 -    return 0;
    12107 +static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line) {
    12108 +    int start = 0, mid = 0, end = count - 1;
    12109 +    if (end >= 0 && code_line > entries[end].code_line) {
    12110 +        return count;
    12111 +    }
    12112 +    while (start < end) {
    12113 +        mid = (start + end) / 2;
    12114 +        if (code_line < entries[mid].code_line) {
    12115 +            end = mid;
    12116 +        } else if (code_line > entries[mid].code_line) {
    12117 +             start = mid + 1;
    12118 +        } else {
    12119 +            return mid;
    12120 +        }
    12121 +    }
    12122 +    if (code_line <= entries[mid].code_line) {
    12123 +        return mid;
    12124 +    } else {
    12125 +        return mid + 1;
    12126 +    }
    12127 +}
    12128 +static PyCodeObject *__pyx_find_code_object(int code_line) {
    12129 +    PyCodeObject* code_object;
    12130 +    int pos;
    12131 +    if (unlikely(!code_line) || unlikely(!__pyx_code_cache.entries)) {
    12132 +        return NULL;
    12133 +    }
    12134 +    pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line);
    12135 +    if (unlikely(pos >= __pyx_code_cache.count) || unlikely(__pyx_code_cache.entries[pos].code_line != code_line)) {
    12136 +        return NULL;
    12137 +    }
    12138 +    code_object = __pyx_code_cache.entries[pos].code_object;
    12139 +    Py_INCREF(code_object);
    12140 +    return code_object;
    12141 +}
    12142 +static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object) {
    12143 +    int pos, i;
    12144 +    __Pyx_CodeObjectCacheEntry* entries = __pyx_code_cache.entries;
    12145 +    if (unlikely(!code_line)) {
    12146 +        return;
    12147 +    }
    12148 +    if (unlikely(!entries)) {
    12149 +        entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Malloc(64*sizeof(__Pyx_CodeObjectCacheEntry));
    12150 +        if (likely(entries)) {
    12151 +            __pyx_code_cache.entries = entries;
    12152 +            __pyx_code_cache.max_count = 64;
    12153 +            __pyx_code_cache.count = 1;
    12154 +            entries[0].code_line = code_line;
    12155 +            entries[0].code_object = code_object;
    12156 +            Py_INCREF(code_object);
    12157 +        }
    12158 +        return;
    12159 +    }
    12160 +    pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line);
    12161 +    if ((pos < __pyx_code_cache.count) && unlikely(__pyx_code_cache.entries[pos].code_line == code_line)) {
    12162 +        PyCodeObject* tmp = entries[pos].code_object;
    12163 +        entries[pos].code_object = code_object;
    12164 +        Py_DECREF(tmp);
    12165 +        return;
    12166 +    }
    12167 +    if (__pyx_code_cache.count == __pyx_code_cache.max_count) {
    12168 +        int new_max = __pyx_code_cache.max_count + 64;
    12169 +        entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Realloc(
    12170 +            __pyx_code_cache.entries, new_max*sizeof(__Pyx_CodeObjectCacheEntry));
    12171 +        if (unlikely(!entries)) {
    12172 +            return;
    12173 +        }
    12174 +        __pyx_code_cache.entries = entries;
    12175 +        __pyx_code_cache.max_count = new_max;
    12176 +    }
    12177 +    for (i=__pyx_code_cache.count; i>pos; i--) {
    12178 +        entries[i] = entries[i-1];
    12179 +    }
    12180 +    entries[pos].code_line = code_line;
    12181 +    entries[pos].code_object = code_object;
    12182 +    __pyx_code_cache.count++;
    12183 +    Py_INCREF(code_object);
    12184  }
    12185 -#endif
    12186  
    12187  #include "compile.h"
    12188  #include "frameobject.h"
    12189  #include "traceback.h"
    12190 -
    12191 -static void __Pyx_AddTraceback(const char *funcname, int __pyx_clineno,
    12192 -                               int __pyx_lineno, const char *__pyx_filename) {
    12193 +static PyCodeObject* __Pyx_CreateCodeObjectForTraceback(
    12194 +            const char *funcname, int c_line,
    12195 +            int py_line, const char *filename) {
    12196 +    PyCodeObject *py_code = 0;
    12197      PyObject *py_srcfile = 0;
    12198      PyObject *py_funcname = 0;
    12199 -    PyObject *py_globals = 0;
    12200 -    PyCodeObject *py_code = 0;
    12201 -    PyFrameObject *py_frame = 0;
    12202 -
    12203      #if PY_MAJOR_VERSION < 3
    12204 -    py_srcfile = PyString_FromString(__pyx_filename);
    12205 +    py_srcfile = PyString_FromString(filename);
    12206      #else
    12207 -    py_srcfile = PyUnicode_FromString(__pyx_filename);
    12208 +    py_srcfile = PyUnicode_FromString(filename);
    12209      #endif
    12210      if (!py_srcfile) goto bad;
    12211 -    if (__pyx_clineno) {
    12212 +    if (c_line) {
    12213          #if PY_MAJOR_VERSION < 3
    12214 -        py_funcname = PyString_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, __pyx_clineno);
    12215 +        py_funcname = PyString_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line);
    12216          #else
    12217 -        py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, __pyx_clineno);
    12218 +        py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line);
    12219          #endif
    12220      }
    12221      else {
    12222 @@ -22841,28 +23623,45 @@
    12223          #endif
    12224      }
    12225      if (!py_funcname) goto bad;
    12226 -    py_globals = PyModule_GetDict(__pyx_m);
    12227 -    if (!py_globals) goto bad;
    12228 -    py_code = PyCode_New(
    12229 +    py_code = __Pyx_PyCode_New(
    12230          0,            /*int argcount,*/
    12231 -        #if PY_MAJOR_VERSION >= 3
    12232          0,            /*int kwonlyargcount,*/
    12233 -        #endif
    12234          0,            /*int nlocals,*/
    12235          0,            /*int stacksize,*/
    12236          0,            /*int flags,*/
    12237          __pyx_empty_bytes, /*PyObject *code,*/
    12238 -        __pyx_empty_tuple,  /*PyObject *consts,*/
    12239 -        __pyx_empty_tuple,  /*PyObject *names,*/
    12240 -        __pyx_empty_tuple,  /*PyObject *varnames,*/
    12241 -        __pyx_empty_tuple,  /*PyObject *freevars,*/
    12242 -        __pyx_empty_tuple,  /*PyObject *cellvars,*/
    12243 +        __pyx_empty_tuple, /*PyObject *consts,*/
    12244 +        __pyx_empty_tuple, /*PyObject *names,*/
    12245 +        __pyx_empty_tuple, /*PyObject *varnames,*/
    12246 +        __pyx_empty_tuple, /*PyObject *freevars,*/
    12247 +        __pyx_empty_tuple, /*PyObject *cellvars,*/
    12248          py_srcfile,   /*PyObject *filename,*/
    12249          py_funcname,  /*PyObject *name,*/
    12250 -        __pyx_lineno,   /*int firstlineno,*/
    12251 +        py_line,      /*int firstlineno,*/
    12252          __pyx_empty_bytes  /*PyObject *lnotab*/
    12253      );
    12254 -    if (!py_code) goto bad;
    12255 +    Py_DECREF(py_srcfile);
    12256 +    Py_DECREF(py_funcname);
    12257 +    return py_code;
    12258 +bad:
    12259 +    Py_XDECREF(py_srcfile);
    12260 +    Py_XDECREF(py_funcname);
    12261 +    return NULL;
    12262 +}
    12263 +static void __Pyx_AddTraceback(const char *funcname, int c_line,
    12264 +                               int py_line, const char *filename) {
    12265 +    PyCodeObject *py_code = 0;
    12266 +    PyObject *py_globals = 0;
    12267 +    PyFrameObject *py_frame = 0;
    12268 +    py_code = __pyx_find_code_object(c_line ? c_line : py_line);
    12269 +    if (!py_code) {
    12270 +        py_code = __Pyx_CreateCodeObjectForTraceback(
    12271 +            funcname, c_line, py_line, filename);
    12272 +        if (!py_code) goto bad;
    12273 +        __pyx_insert_code_object(c_line ? c_line : py_line, py_code);
    12274 +    }
    12275 +    py_globals = PyModule_GetDict(__pyx_m);
    12276 +    if (!py_globals) goto bad;
    12277      py_frame = PyFrame_New(
    12278          PyThreadState_GET(), /*PyThreadState *tstate,*/
    12279          py_code,             /*PyCodeObject *code,*/
    12280 @@ -22870,11 +23669,9 @@
    12281          0                    /*PyObject *locals*/
    12282      );
    12283      if (!py_frame) goto bad;
    12284 -    py_frame->f_lineno = __pyx_lineno;
    12285 +    py_frame->f_lineno = py_line;
    12286      PyTraceBack_Here(py_frame);
    12287  bad:
    12288 -    Py_XDECREF(py_srcfile);
    12289 -    Py_XDECREF(py_funcname);
    12290      Py_XDECREF(py_code);
    12291      Py_XDECREF(py_frame);
    12292  }
    12293 @@ -22909,6 +23706,7 @@
    12294      return 0;
    12295  }
    12296  
    12297 +
    12298  /* Type Conversion Functions */
    12299  
    12300  static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject* x) {
  • deleted file dports/python/py-numpy/files/patch-python33-shape.diff

    diff --git a/dports/python/py-numpy/files/patch-python33-shape.diff b/dports/python/py-numpy/files/patch-python33-shape.diff
    deleted file mode 100644
    + -  
    1 --- numpy/core/tests/test_multiarray.py
    2 +++ numpy/core/tests/test_multiarray.py
    3 @@ -11,10 +11,19 @@
    4  
    5  from numpy.compat import asbytes, getexception, strchar
    6  
    7  from test_print import in_foreign_locale
    8  
    9 +if sys.version_info[:2] > (3, 2):
    10 +    # In Python 3.3 the representation of empty shape, strides and suboffsets
    11 +    # is an empty tuple instead of None.
    12 +    # http://docs.python.org/dev/whatsnew/3.3.html#api-changes
    13 +    EMPTY = ()
    14 +else:   
    15 +    EMPTY = None
    16 +
    17 +
    18  class TestFlags(TestCase):
    19      def setUp(self):
    20          self.a = arange(10)
    21  
    22      def test_writeable(self):
    23 @@ -2160,31 +2169,31 @@
    24              y = memoryview(x)
    25              assert_equal(y.format, 'i')
    26              assert_equal(y.shape, (5,))
    27              assert_equal(y.ndim, 1)
    28              assert_equal(y.strides, (4,))
    29 -            assert_equal(y.suboffsets, None)
    30 +            assert_equal(y.suboffsets, EMPTY)
    31              assert_equal(y.itemsize, 4)
    32  
    33          def test_export_simple_nd(self):
    34              x = np.array([[1,2],[3,4]], dtype=np.float64)
    35              y = memoryview(x)
    36              assert_equal(y.format, 'd')
    37              assert_equal(y.shape, (2, 2))
    38              assert_equal(y.ndim, 2)
    39              assert_equal(y.strides, (16, 8))
    40 -            assert_equal(y.suboffsets, None)
    41 +            assert_equal(y.suboffsets, EMPTY)
    42              assert_equal(y.itemsize, 8)
    43  
    44          def test_export_discontiguous(self):
    45              x = np.zeros((3,3,3), dtype=np.float32)[:,0,:]
    46              y = memoryview(x)
    47              assert_equal(y.format, 'f')
    48              assert_equal(y.shape, (3, 3))
    49              assert_equal(y.ndim, 2)
    50              assert_equal(y.strides, (36, 4))
    51 -            assert_equal(y.suboffsets, None)
    52 +            assert_equal(y.suboffsets, EMPTY)
    53              assert_equal(y.itemsize, 4)
    54  
    55          def test_export_record(self):
    56              dt = [('a', 'b'),
    57                    ('b', 'h'),
    58 @@ -2212,11 +2221,11 @@
    59                             asbytes('aaaa'), 'bbbb', asbytes('   '), True, 1.0)],
    60                           dtype=dt)
    61              y = memoryview(x)
    62              assert_equal(y.shape, (1,))
    63              assert_equal(y.ndim, 1)
    64 -            assert_equal(y.suboffsets, None)
    65 +            assert_equal(y.suboffsets, EMPTY)
    66  
    67              sz = sum([dtype(b).itemsize for a, b in dt])
    68              if dtype('l').itemsize == 4:
    69                  assert_equal(y.format, 'T{b:a:=h:b:i:c:l:d:^q:dx:B:e:@H:f:=I:g:L:h:^Q:hx:=f:i:d:j:^g:k:=Zf:ix:Zd:jx:^Zg:kx:4s:l:=4w:m:3x:n:?:o:@e:p:}')
    70              else:
    71 @@ -2226,14 +2235,14 @@
    72  
    73          def test_export_subarray(self):
    74              x = np.array(([[1,2],[3,4]],), dtype=[('a', ('i', (2,2)))])
    75              y = memoryview(x)
    76              assert_equal(y.format, 'T{(2,2)i:a:}')
    77 -            assert_equal(y.shape, None)
    78 +            assert_equal(y.shape, EMPTY)
    79              assert_equal(y.ndim, 0)
    80 -            assert_equal(y.strides, None)
    81 -            assert_equal(y.suboffsets, None)
    82 +            assert_equal(y.strides, EMPTY)
    83 +            assert_equal(y.suboffsets, EMPTY)
    84              assert_equal(y.itemsize, 16)
    85  
    86          def test_export_endian(self):
    87              x = np.array([1,2,3], dtype='>i')
    88              y = memoryview(x)
  • deleted file dports/python/py-numpy/files/patch-python33-unicode.diff

    diff --git a/dports/python/py-numpy/files/patch-python33-unicode.diff b/dports/python/py-numpy/files/patch-python33-unicode.diff
    deleted file mode 100644
    + -  
    1 --- numpy/core/src/multiarray/scalarapi.c
    2 +++ numpy/core/src/multiarray/scalarapi.c
    3 @@ -650,10 +650,39 @@
    4               * so round up to nearest multiple
    5               */
    6              itemsize = (((itemsize - 1) >> 2) + 1) << 2;
    7          }
    8      }
    9 +#if PY_VERSION_HEX >= 0x03030000
    10 +    if (type_num == NPY_UNICODE) {
    11 +        PyObject *u, *args;
    12 +        int byteorder;
    13 +
    14 +#if NPY_BYTE_ORDER == NPY_LITTLE_ENDIAN
    15 +        byteorder = -1;
    16 +#elif NPY_BYTE_ORDER == NPY_BIG_ENDIAN
    17 +        byteorder = +1;
    18 +#else
    19 +        #error Endianness undefined ?
    20 +#endif
    21 +        if (swap) byteorder *= -1;
    22 +
    23 +        u = PyUnicode_DecodeUTF32(data, itemsize, NULL, &byteorder);
    24 +        if (u == NULL) {
    25 +            return NULL;
    26 +        }
    27 +        args = Py_BuildValue("(O)", u);
    28 +        if (args == NULL) {
    29 +            Py_DECREF(u);
    30 +            return NULL;
    31 +        }
    32 +        obj = type->tp_new(type, args, NULL);
    33 +        Py_DECREF(u);
    34 +        Py_DECREF(args);
    35 +        return obj;
    36 +    }
    37 +#endif
    38      if (type->tp_itemsize != 0) {
    39          /* String type */
    40          obj = type->tp_alloc(type, itemsize);
    41      }
    42      else {
    43 @@ -686,10 +715,11 @@
    44              ((PyStringObject *)obj)->ob_sstate = SSTATE_NOT_INTERNED;
    45  #endif
    46              memcpy(destptr, data, itemsize);
    47              return obj;
    48          }
    49 +#if PY_VERSION_HEX < 0x03030000
    50          else if (type_num == PyArray_UNICODE) {
    51              /* tp_alloc inherited from Python PyBaseObject_Type */
    52              PyUnicodeObject *uni = (PyUnicodeObject*)obj;
    53              size_t length = itemsize >> 2;
    54              Py_UNICODE *dst;
    55 @@ -757,10 +787,11 @@
    56              uni->str[length] = 0;
    57              uni->length = length;
    58  #endif
    59              return obj;
    60          }
    61 +#endif /* PY_VERSION_HEX < 0x03030000 */
    62          else {
    63              PyVoidScalarObject *vobj = (PyVoidScalarObject *)obj;
    64              vobj->base = NULL;
    65              vobj->descr = descr;
    66              Py_INCREF(descr);
    67 --- numpy/core/src/multiarray/scalartypes.c.src
    68 +++ numpy/core/src/multiarray/scalartypes.c.src
    69 @@ -2321,11 +2321,15 @@
    70      Py_DECREF(typecode);
    71  #if @default@ == 0
    72      *((npy_@name@ *)dest) = *((npy_@name@ *)src);
    73  #elif @default@ == 1 /* unicode and strings */
    74      if (itemsize == 0) { /* unicode */
    75 +#if PY_VERSION_HEX >= 0x03030000
    76 +        itemsize = PyUnicode_GetLength(robj) * PyUnicode_KIND(robj);
    77 +#else
    78          itemsize = ((PyUnicodeObject *)robj)->length * sizeof(Py_UNICODE);
    79 +#endif
    80      }
    81      memcpy(dest, src, itemsize);
    82      /* @default@ == 2 won't get here */
    83  #endif
    84      Py_DECREF(robj);
    85 --- numpy/core/tests/test_unicode.py
    86 +++ numpy/core/tests/test_unicode.py
    87 @@ -24,14 +24,16 @@
    88      def buffer_length(arr):
    89          if isinstance(arr, ndarray):
    90              return len(arr.data)
    91          return len(buffer(arr))
    92  
    93 +# In both cases below we need to make sure that the byte swapped value (as
    94 +# UCS4) is still a valid unicode:
    95  # Value that can be represented in UCS2 interpreters
    96 -ucs2_value = u'\uFFFF'
    97 +ucs2_value = u'\u0900'
    98  # Value that cannot be represented in UCS2 interpreters (but can in UCS4)
    99 -ucs4_value = u'\U0010FFFF'
    100 +ucs4_value = u'\U00100900'
    101  
    102  
    103  ############################################################
    104  #    Creation tests
    105  ############################################################