From numpy-svn at scipy.org Sun Apr 1 00:02:51 2007 From: numpy-svn at scipy.org (numpy-svn at scipy.org) Date: Sat, 31 Mar 2007 23:02:51 -0500 (CDT) Subject: [Numpy-svn] r3632 - trunk/numpy/core/src Message-ID: <20070401040251.B8F5539C065@new.scipy.org> Author: oliphant Date: 2007-03-31 23:02:49 -0500 (Sat, 31 Mar 2007) New Revision: 3632 Modified: trunk/numpy/core/src/arrayobject.c Log: Fix ticket #482 caused by using the wrong index variable in PyArray_BroadCastToShape. The strides was being filled in by bogus strides data. Modified: trunk/numpy/core/src/arrayobject.c =================================================================== --- trunk/numpy/core/src/arrayobject.c 2007-04-01 03:44:27 UTC (rev 3631) +++ trunk/numpy/core/src/arrayobject.c 2007-04-01 04:02:49 UTC (rev 3632) @@ -8892,7 +8892,7 @@ it->strides[i] = 0; } else { - it->strides[i] = ao->strides[i]; + it->strides[i] = ao->strides[k]; } it->backstrides[i] = it->strides[i] * \ it->dims_m1[i]; From numpy-svn at scipy.org Sun Apr 1 15:50:01 2007 From: numpy-svn at scipy.org (numpy-svn at scipy.org) Date: Sun, 1 Apr 2007 14:50:01 -0500 (CDT) Subject: [Numpy-svn] r3633 - trunk/numpy/core/src Message-ID: <20070401195001.2BC1139C0FB@new.scipy.org> Author: oliphant Date: 2007-04-01 14:49:58 -0500 (Sun, 01 Apr 2007) New Revision: 3633 Modified: trunk/numpy/core/src/arraytypes.inc.src Log: Fix segfault in ticket #487 Modified: trunk/numpy/core/src/arraytypes.inc.src =================================================================== --- trunk/numpy/core/src/arraytypes.inc.src 2007-04-01 04:02:49 UTC (rev 3632) +++ trunk/numpy/core/src/arraytypes.inc.src 2007-04-01 19:49:58 UTC (rev 3633) @@ -371,7 +371,7 @@ int size = ap->descr->elsize; ptr = ip + size-1; - while (*ptr-- == '\0') size--; + while (*ptr-- == '\0' && size > 0) size--; return PyString_FromStringAndSize(ip,size); } From numpy-svn at scipy.org Sun Apr 1 15:56:05 2007 From: numpy-svn at scipy.org (numpy-svn at scipy.org) Date: Sun, 1 Apr 2007 14:56:05 -0500 (CDT) Subject: [Numpy-svn] r3634 - trunk/numpy/core/src Message-ID: <20070401195605.B7FA539C057@new.scipy.org> Author: oliphant Date: 2007-04-01 14:56:03 -0500 (Sun, 01 Apr 2007) New Revision: 3634 Modified: trunk/numpy/core/src/arraytypes.inc.src Log: Apply patch to fix ticket #483 regarding junk at the end of an expression (which probably was introduced after recent changes to string comparisons) and handling of NULLs inside strings. Modified: trunk/numpy/core/src/arraytypes.inc.src =================================================================== --- trunk/numpy/core/src/arraytypes.inc.src 2007-04-01 19:49:58 UTC (rev 3633) +++ trunk/numpy/core/src/arraytypes.inc.src 2007-04-01 19:56:03 UTC (rev 3634) @@ -637,7 +637,10 @@ } res = PyObject_AsReadBuffer(op, &buffer, &buflen); if (res == -1) goto fail; - memcpy(ip, buffer, MIN(buflen, itemsize)); + memcpy(ip, buffer, NPY_MIN(buflen, itemsize)); + if (itemsize > buflen) { + memset(ip+buflen, 0, (itemsize-buflen)); + } } return 0; From numpy-svn at scipy.org Sun Apr 1 16:12:29 2007 From: numpy-svn at scipy.org (numpy-svn at scipy.org) Date: Sun, 1 Apr 2007 15:12:29 -0500 (CDT) Subject: [Numpy-svn] r3635 - trunk/numpy/core/tests Message-ID: <20070401201229.11AE539C057@new.scipy.org> Author: cookedm Date: 2007-04-01 15:12:27 -0500 (Sun, 01 Apr 2007) New Revision: 3635 Modified: trunk/numpy/core/tests/test_regression.py Log: Regression test for ticket #483. Modified: trunk/numpy/core/tests/test_regression.py =================================================================== --- trunk/numpy/core/tests/test_regression.py 2007-04-01 19:56:03 UTC (rev 3634) +++ trunk/numpy/core/tests/test_regression.py 2007-04-01 20:12:27 UTC (rev 3635) @@ -640,5 +640,10 @@ self.failUnlessRaises(ValueError,mul) + def check_junk_in_string_fields_of_recarray(self, level=rlevel): + """Ticket #483""" + r = N.array([['abc']], dtype=[('var1', '|S20')]) + assert str(r['var1'][0][0]) == 'abc' + if __name__ == "__main__": NumpyTest().run() From numpy-svn at scipy.org Sun Apr 1 16:32:10 2007 From: numpy-svn at scipy.org (numpy-svn at scipy.org) Date: Sun, 1 Apr 2007 15:32:10 -0500 (CDT) Subject: [Numpy-svn] r3636 - in trunk/numpy: distutils lib Message-ID: <20070401203210.7AD3B39C0FB@new.scipy.org> Author: cookedm Date: 2007-04-01 15:32:07 -0500 (Sun, 01 Apr 2007) New Revision: 3636 Modified: trunk/numpy/distutils/misc_util.py trunk/numpy/lib/utils.py Log: Make numpy.get_include() and numpy.get_numarray_include() not pull in numpy.distutils. Modified: trunk/numpy/distutils/misc_util.py =================================================================== --- trunk/numpy/distutils/misc_util.py 2007-04-01 20:12:27 UTC (rev 3635) +++ trunk/numpy/distutils/misc_util.py 2007-04-01 20:32:07 UTC (rev 3636) @@ -1372,14 +1372,7 @@ include_dirs = Configuration.numpy_include_dirs[:] if not include_dirs: import numpy - if numpy.show_config is None: - # running from numpy_core source directory - include_dirs.append(njoin(os.path.dirname(numpy.__file__), - 'core', 'include')) - else: - # using installed numpy core headers - import numpy.core as core - include_dirs.append(njoin(os.path.dirname(core.__file__), 'include')) + include_dirs = [ numpy.get_include() ] # else running numpy/core/setup.py return include_dirs Modified: trunk/numpy/lib/utils.py =================================================================== --- trunk/numpy/lib/utils.py 2007-04-01 20:12:27 UTC (rev 3635) +++ trunk/numpy/lib/utils.py 2007-04-01 20:32:07 UTC (rev 3636) @@ -1,3 +1,4 @@ +import os import sys import inspect import types @@ -40,10 +41,15 @@ Extension('extension_name', ... include_dirs=[numpy.get_include()]) """ - from numpy.distutils.misc_util import get_numpy_include_dirs - include_dirs = get_numpy_include_dirs() - assert len(include_dirs)==1,`include_dirs` - return include_dirs[0] + import numpy + if numpy.show_config is None: + # running from numpy source directory + d = os.path.join(os.path.dirname(numpy.__file__), 'core', 'include') + else: + # using installed numpy core headers + import numpy.core as core + d = os.path.join(os.path.dirname(core.__file__), 'include') + return d def get_numarray_include(type=None): """Return the directory in the package that contains the numpy/*.h header @@ -54,15 +60,14 @@ import numpy Extension('extension_name', ... - include_dirs=[numpy.get_include()]) + include_dirs=[numpy.get_numarray_include()]) """ from numpy.numarray import get_numarray_include_dirs - from numpy.distutils.misc_util import get_numpy_include_dirs include_dirs = get_numarray_include_dirs() if type is None: return include_dirs[0] else: - return include_dirs + get_numpy_include_dirs() + return include_dirs + [get_include()] if sys.version_info < (2, 4): From numpy-svn at scipy.org Sun Apr 1 17:01:15 2007 From: numpy-svn at scipy.org (numpy-svn at scipy.org) Date: Sun, 1 Apr 2007 16:01:15 -0500 (CDT) Subject: [Numpy-svn] r3637 - trunk/numpy/core/src Message-ID: <20070401210115.A161939C014@new.scipy.org> Author: cookedm Date: 2007-04-01 16:01:12 -0500 (Sun, 01 Apr 2007) New Revision: 3637 Modified: trunk/numpy/core/src/arrayobject.c Log: Fix compiler warning on AMD64 Modified: trunk/numpy/core/src/arrayobject.c =================================================================== --- trunk/numpy/core/src/arrayobject.c 2007-04-01 20:32:07 UTC (rev 3636) +++ trunk/numpy/core/src/arrayobject.c 2007-04-01 21:01:12 UTC (rev 3637) @@ -2673,7 +2673,7 @@ static PyObject * array_subscript(PyArrayObject *self, PyObject *op) { - int nd, oned, fancy; + int nd, fancy; PyArrayObject *other; PyArrayMapIterObject *mit; @@ -2729,7 +2729,7 @@ return (PyObject *)self; } else { - oned = 0; + intp oned = 0; Py_INCREF(self->descr); return PyArray_NewFromDescr(self->ob_type, self->descr, @@ -2747,6 +2747,7 @@ fancy = fancy_indexing_check(op); if (fancy != SOBJ_NOTFANCY) { + int oned; oned = ((self->nd == 1) && !(PyTuple_Check(op) && PyTuple_GET_SIZE(op) > 1)); From numpy-svn at scipy.org Sun Apr 1 19:06:06 2007 From: numpy-svn at scipy.org (numpy-svn at scipy.org) Date: Sun, 1 Apr 2007 18:06:06 -0500 (CDT) Subject: [Numpy-svn] r3638 - trunk/numpy/core/src Message-ID: <20070401230606.E9DF439C247@new.scipy.org> Author: oliphant Date: 2007-04-01 18:06:02 -0500 (Sun, 01 Apr 2007) New Revision: 3638 Modified: trunk/numpy/core/src/scalarmathmodule.c.src Log: Fix ticket #463 wherein hex and oct did not work for values that could not be converted to an integer. Modified: trunk/numpy/core/src/scalarmathmodule.c.src =================================================================== --- trunk/numpy/core/src/scalarmathmodule.c.src 2007-04-01 21:01:12 UTC (rev 3637) +++ trunk/numpy/core/src/scalarmathmodule.c.src 2007-04-01 23:06:02 UTC (rev 3638) @@ -815,14 +815,16 @@ /**begin repeat #name=(byte,ubyte,short,ushort,int,uint,long,ulong,longlong,ulonglong,float,double,longdouble,cfloat,cdouble,clongdouble)*2# #oper=oct*16, hex*16# + #kind=(int*5, long*5, int, long*2, int, long*2)*2# + #cap=(Int*5, Long*5, Int, Long*2, Int, Long*2)*2# **/ static PyObject * @name at _@oper@(PyObject *obj) { PyObject *pyint; - pyint = @name at _int(obj); + pyint = @name at _@kind@(obj); if (pyint == NULL) return NULL; - return PyInt_Type.tp_as_number->nb_ at oper@(pyint); + return Py at cap@_Type.tp_as_number->nb_ at oper@(pyint); } /**end repeat**/ From numpy-svn at scipy.org Sun Apr 1 19:22:18 2007 From: numpy-svn at scipy.org (numpy-svn at scipy.org) Date: Sun, 1 Apr 2007 18:22:18 -0500 (CDT) Subject: [Numpy-svn] r3639 - trunk/numpy/core/src Message-ID: <20070401232218.77C9839C247@new.scipy.org> Author: oliphant Date: 2007-04-01 18:22:15 -0500 (Sun, 01 Apr 2007) New Revision: 3639 Modified: trunk/numpy/core/src/arrayobject.c Log: Do not use floating-point numbers to copy data as it will not work when high-order bits are set that do not fit in the floating-point representation. Modified: trunk/numpy/core/src/arrayobject.c =================================================================== --- trunk/numpy/core/src/arrayobject.c 2007-04-01 23:06:02 UTC (rev 3638) +++ trunk/numpy/core/src/arrayobject.c 2007-04-01 23:22:15 UTC (rev 3639) @@ -324,7 +324,7 @@ switch(elsize) { case 8: - _FAST_MOVE(Float64); + _FAST_MOVE(Int64); case 4: _FAST_MOVE(Int32); case 1: @@ -333,8 +333,8 @@ _FAST_MOVE(Int16); case 16: for (i=0; i Author: pearu Date: 2007-04-02 01:56:49 -0500 (Mon, 02 Apr 2007) New Revision: 3640 Modified: trunk/numpy/f2py/cb_rules.py Log: Applying patch from ticket 437. Modified: trunk/numpy/f2py/cb_rules.py =================================================================== --- trunk/numpy/f2py/cb_rules.py 2007-04-01 23:22:15 UTC (rev 3639) +++ trunk/numpy/f2py/cb_rules.py 2007-04-02 06:56:49 UTC (rev 3640) @@ -64,7 +64,7 @@ \tif (PyCObject_Check(#name#_capi)) { \t#name#_typedef #name#_cptr; \t#name#_cptr = PyCObject_AsVoidPtr(#name#_capi); -\t#returncptr#(*#name#_cptr)(#optargs_nm##args_nm#); +\t#returncptr#(*#name#_cptr)(#optargs_nm##args_nm##strarglens_nm#); \t#return# \t} \tif (capi_arglist==NULL) { @@ -288,9 +288,9 @@ isarray:'#ctype# *', isstring:'#ctype#' }, - 'strarglens':{isstring:',int #varname#_cb_len'}, # untested with multiple args - 'strarglens_td':{isstring:',int'}, # untested with multiple args - + 'strarglens':{isstring:',int #varname#_cb_len'}, # untested with multiple args + 'strarglens_td':{isstring:',int'}, # untested with multiple args + 'strarglens_nm':{isstring:',#varname#_cb_len'}, # untested with multiple args }, { # Scalars 'decl':{l_not(isintent_c):'\t#ctype# #varname#=(*#varname#_cb_capi);'}, From numpy-svn at scipy.org Mon Apr 2 08:06:10 2007 From: numpy-svn at scipy.org (numpy-svn at scipy.org) Date: Mon, 2 Apr 2007 07:06:10 -0500 (CDT) Subject: [Numpy-svn] r3641 - in trunk/numpy/core: . tests Message-ID: <20070402120610.87D70C7C041@new.scipy.org> Author: cookedm Date: 2007-04-02 07:06:06 -0500 (Mon, 02 Apr 2007) New Revision: 3641 Modified: trunk/numpy/core/numeric.py trunk/numpy/core/tests/test_numeric.py Log: binary_repr handles negative numbers now, and takes an optional width argument. base_repr raise ValueError if the number is negative or base > 36 Modified: trunk/numpy/core/numeric.py =================================================================== --- trunk/numpy/core/numeric.py 2007-04-02 06:56:49 UTC (rev 3640) +++ trunk/numpy/core/numeric.py 2007-04-02 12:06:06 UTC (rev 3641) @@ -546,29 +546,44 @@ 'F':'1111', 'L':''} -def binary_repr(num): +def binary_repr(num, width=None): """Return the binary representation of the input number as a string. This is equivalent to using base_repr with base 2, but about 25x faster. + + For negative numbers, if width is not given, a - sign is added to the + front. If width is given, the two's complement of the number is + returned, with respect to that width. """ + sign = '' + if num < 0: + if width is None: + sign = '-' + num = -num + else: + # replace num with its 2-complement + num = 2**width + num + elif num == 0: + return '0' ostr = hex(num) - bin = '' - for ch in ostr[2:]: - bin += _lkup[ch] - if '1' in bin: - ind = 0 - while bin[ind] == '0': - ind += 1 - return bin[ind:] - else: - return '0' + bin = ''.join([_lkup[ch] for ch in ostr[2:]]) + bin = bin.lstrip('0') + if width is not None: + bin = bin.zfill(width) + return sign + bin def base_repr (number, base=2, padding=0): - """Return the representation of a number in any given base. + """Return the representation of a number in the given base. + + Base can't be larger than 36. """ + if number < 0: + raise ValueError("negative numbers not handled in base_repr") + if base > 36: + raise ValueError("bases greater than 36 not handled in base_repr") + chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ' - import math lnb = math.log(base) res = padding*chars[0] Modified: trunk/numpy/core/tests/test_numeric.py =================================================================== --- trunk/numpy/core/tests/test_numeric.py 2007-04-02 06:56:49 UTC (rev 3640) +++ trunk/numpy/core/tests/test_numeric.py 2007-04-02 12:06:06 UTC (rev 3641) @@ -248,6 +248,9 @@ def test_large(self): assert_equal(binary_repr(10736848),'101000111101010011010000') + def test_negative(self): + assert_equal(binary_repr(-1), '-1') + assert_equal(binary_repr(-1, width=8), '11111111') def assert_array_strict_equal(x, y): assert_array_equal(x, y) From numpy-svn at scipy.org Mon Apr 2 08:08:36 2007 From: numpy-svn at scipy.org (numpy-svn at scipy.org) Date: Mon, 2 Apr 2007 07:08:36 -0500 (CDT) Subject: [Numpy-svn] r3642 - trunk/numpy/random/mtrand Message-ID: <20070402120836.ABB71C7C02E@new.scipy.org> Author: cookedm Date: 2007-04-02 07:08:34 -0500 (Mon, 02 Apr 2007) New Revision: 3642 Modified: trunk/numpy/random/mtrand/randomkit.c Log: Fixes #488. In rk_interval, use rk_random if the interval size is less than 2**32. For 64-bit machines, this means results will agree with 32-bit machines, and will be faster for these interval sizes (one less rk_random evaluation). Modified: trunk/numpy/random/mtrand/randomkit.c =================================================================== --- trunk/numpy/random/mtrand/randomkit.c 2007-04-02 12:06:06 UTC (rev 3641) +++ trunk/numpy/random/mtrand/randomkit.c 2007-04-02 12:08:34 UTC (rev 3642) @@ -248,7 +248,15 @@ #endif /* Search a random value in [0..mask] <= max */ +#if ULONG_MAX > 0xffffffffUL + if (max <= 0xffffffffUL) { + while ((value = (rk_random(state) & mask)) > max); + } else { + while ((value = (rk_ulong(state) & mask)) > max); + } +#else while ((value = (rk_ulong(state) & mask)) > max); +#endif return value; } From numpy-svn at scipy.org Mon Apr 2 09:27:51 2007 From: numpy-svn at scipy.org (numpy-svn at scipy.org) Date: Mon, 2 Apr 2007 08:27:51 -0500 (CDT) Subject: [Numpy-svn] r3643 - trunk/numpy/random/mtrand Message-ID: <20070402132751.B84B839C120@new.scipy.org> Author: cookedm Date: 2007-04-02 08:27:42 -0500 (Mon, 02 Apr 2007) New Revision: 3643 Modified: trunk/numpy/random/mtrand/mtrand.c trunk/numpy/random/mtrand/mtrand.pyx Log: Fix #484: random state not portable between 32-bit and 64-bit architectures The random state now uses a uint32 array on both architectures. It should also handle old pickles. Modified: trunk/numpy/random/mtrand/mtrand.c =================================================================== --- trunk/numpy/random/mtrand/mtrand.c 2007-04-02 12:08:34 UTC (rev 3642) +++ trunk/numpy/random/mtrand/mtrand.c 2007-04-02 13:27:42 UTC (rev 3643) @@ -1,4 +1,4 @@ -/* Generated by Pyrex 0.9.5.1 on Tue Mar 20 04:39:16 2007 */ +/* Generated by Pyrex 0.9.5.1a on Mon Apr 2 09:24:19 2007 */ #include "Python.h" #include "structmember.h" @@ -39,10 +39,10 @@ static PyObject *__Pyx_UnpackItem(PyObject *); /*proto*/ static int __Pyx_EndUnpack(PyObject *); /*proto*/ +static PyObject *__Pyx_GetExcValue(void); /*proto*/ + static int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type); /*proto*/ -static PyObject *__Pyx_GetExcValue(void); /*proto*/ - static int __Pyx_InternStrings(__Pyx_InternTabEntry *t); /*proto*/ static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); /*proto*/ @@ -209,11 +209,11 @@ Py_INCREF(__pyx_v_size); arrayObject = ((PyArrayObject *)Py_None); Py_INCREF(Py_None); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":129 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":129 */ __pyx_1 = __pyx_v_size == Py_None; if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":130 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":130 */ __pyx_2 = PyFloat_FromDouble(__pyx_v_func(__pyx_v_state)); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 130; goto __pyx_L1;} __pyx_r = __pyx_2; __pyx_2 = 0; @@ -222,7 +222,7 @@ } /*else*/ { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":132 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":132 */ __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 132; goto __pyx_L1;} __pyx_3 = PyObject_GetAttr(__pyx_2, __pyx_n_empty); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 132; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; @@ -242,20 +242,20 @@ arrayObject = ((PyArrayObject *)__pyx_4); Py_DECREF(__pyx_4); __pyx_4 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":133 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":133 */ __pyx_v_length = PyArray_SIZE(arrayObject); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":134 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":134 */ __pyx_v_array_data = ((double (*))arrayObject->data); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":135 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":135 */ for (__pyx_v_i = 0; __pyx_v_i < __pyx_v_length; ++__pyx_v_i) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":136 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":136 */ (__pyx_v_array_data[__pyx_v_i]) = __pyx_v_func(__pyx_v_state); } - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":137 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":137 */ Py_INCREF(((PyObject *)arrayObject)); __pyx_r = ((PyObject *)arrayObject); goto __pyx_L0; @@ -289,11 +289,11 @@ Py_INCREF(__pyx_v_size); arrayObject = ((PyArrayObject *)Py_None); Py_INCREF(Py_None); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":146 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":146 */ __pyx_1 = __pyx_v_size == Py_None; if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":147 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":147 */ __pyx_2 = PyFloat_FromDouble(__pyx_v_func(__pyx_v_state,__pyx_v_a)); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 147; goto __pyx_L1;} __pyx_r = __pyx_2; __pyx_2 = 0; @@ -302,7 +302,7 @@ } /*else*/ { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":149 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":149 */ __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 149; goto __pyx_L1;} __pyx_3 = PyObject_GetAttr(__pyx_2, __pyx_n_empty); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 149; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; @@ -322,20 +322,20 @@ arrayObject = ((PyArrayObject *)__pyx_4); Py_DECREF(__pyx_4); __pyx_4 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":150 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":150 */ __pyx_v_length = PyArray_SIZE(arrayObject); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":151 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":151 */ __pyx_v_array_data = ((double (*))arrayObject->data); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":152 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":152 */ for (__pyx_v_i = 0; __pyx_v_i < __pyx_v_length; ++__pyx_v_i) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":153 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":153 */ (__pyx_v_array_data[__pyx_v_i]) = __pyx_v_func(__pyx_v_state,__pyx_v_a); } - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":154 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":154 */ Py_INCREF(((PyObject *)arrayObject)); __pyx_r = ((PyObject *)arrayObject); goto __pyx_L0; @@ -382,44 +382,44 @@ __pyx_v_itera = ((PyArrayIterObject *)Py_None); Py_INCREF(Py_None); __pyx_v_multi = ((PyArrayMultiIterObject *)Py_None); Py_INCREF(Py_None); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":165 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":165 */ __pyx_1 = __pyx_v_size == Py_None; if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":166 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":166 */ __pyx_2 = PyArray_SimpleNew(__pyx_v_oa->nd,__pyx_v_oa->dimensions,NPY_DOUBLE); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 166; goto __pyx_L1;} Py_INCREF(((PyObject *)((PyArrayObject *)__pyx_2))); Py_DECREF(((PyObject *)arrayObject)); arrayObject = ((PyArrayObject *)__pyx_2); Py_DECREF(__pyx_2); __pyx_2 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":167 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":167 */ __pyx_v_length = PyArray_SIZE(arrayObject); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":168 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":168 */ __pyx_v_array_data = ((double (*))arrayObject->data); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":169 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":169 */ __pyx_2 = PyArray_IterNew(((PyObject *)__pyx_v_oa)); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 169; goto __pyx_L1;} Py_INCREF(((PyObject *)((PyArrayIterObject *)__pyx_2))); Py_DECREF(((PyObject *)__pyx_v_itera)); __pyx_v_itera = ((PyArrayIterObject *)__pyx_2); Py_DECREF(__pyx_2); __pyx_2 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":170 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":170 */ for (__pyx_v_i = 0; __pyx_v_i < __pyx_v_length; ++__pyx_v_i) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":171 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":171 */ (__pyx_v_array_data[__pyx_v_i]) = __pyx_v_func(__pyx_v_state,(((double (*))__pyx_v_itera->dataptr)[0])); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":172 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":172 */ PyArray_ITER_NEXT(__pyx_v_itera); } goto __pyx_L2; } /*else*/ { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":174 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":174 */ __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 174; goto __pyx_L1;} __pyx_3 = PyObject_GetAttr(__pyx_2, __pyx_n_empty); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 174; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; @@ -439,21 +439,21 @@ arrayObject = ((PyArrayObject *)__pyx_4); Py_DECREF(__pyx_4); __pyx_4 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":175 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":175 */ __pyx_v_array_data = ((double (*))arrayObject->data); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":176 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":176 */ __pyx_3 = PyArray_MultiIterNew(2,((void (*))arrayObject),((void (*))__pyx_v_oa)); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 176; goto __pyx_L1;} Py_INCREF(((PyObject *)((PyArrayMultiIterObject *)__pyx_3))); Py_DECREF(((PyObject *)__pyx_v_multi)); __pyx_v_multi = ((PyArrayMultiIterObject *)__pyx_3); Py_DECREF(__pyx_3); __pyx_3 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":178 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":178 */ __pyx_1 = (__pyx_v_multi->size != PyArray_SIZE(arrayObject)); if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":179 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":179 */ __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 179; goto __pyx_L1;} __pyx_4 = PyTuple_New(1); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 179; goto __pyx_L1;} Py_INCREF(__pyx_k61p); @@ -468,23 +468,23 @@ } __pyx_L5:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":180 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":180 */ __pyx_5 = __pyx_v_multi->size; for (__pyx_v_i = 0; __pyx_v_i < __pyx_5; ++__pyx_v_i) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":181 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":181 */ __pyx_v_oa_data = ((double (*))PyArray_MultiIter_DATA(__pyx_v_multi,1)); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":182 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":182 */ (__pyx_v_array_data[__pyx_v_i]) = __pyx_v_func(__pyx_v_state,(__pyx_v_oa_data[0])); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":183 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":183 */ PyArray_MultiIter_NEXTi(__pyx_v_multi,1); } } __pyx_L2:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":184 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":184 */ Py_INCREF(((PyObject *)arrayObject)); __pyx_r = ((PyObject *)arrayObject); goto __pyx_L0; @@ -519,11 +519,11 @@ Py_INCREF(__pyx_v_size); arrayObject = ((PyArrayObject *)Py_None); Py_INCREF(Py_None); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":193 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":193 */ __pyx_1 = __pyx_v_size == Py_None; if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":194 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":194 */ __pyx_2 = PyFloat_FromDouble(__pyx_v_func(__pyx_v_state,__pyx_v_a,__pyx_v_b)); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 194; goto __pyx_L1;} __pyx_r = __pyx_2; __pyx_2 = 0; @@ -532,7 +532,7 @@ } /*else*/ { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":196 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":196 */ __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 196; goto __pyx_L1;} __pyx_3 = PyObject_GetAttr(__pyx_2, __pyx_n_empty); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 196; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; @@ -552,20 +552,20 @@ arrayObject = ((PyArrayObject *)__pyx_4); Py_DECREF(__pyx_4); __pyx_4 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":197 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":197 */ __pyx_v_length = PyArray_SIZE(arrayObject); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":198 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":198 */ __pyx_v_array_data = ((double (*))arrayObject->data); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":199 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":199 */ for (__pyx_v_i = 0; __pyx_v_i < __pyx_v_length; ++__pyx_v_i) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":200 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":200 */ (__pyx_v_array_data[__pyx_v_i]) = __pyx_v_func(__pyx_v_state,__pyx_v_a,__pyx_v_b); } - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":201 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":201 */ Py_INCREF(((PyObject *)arrayObject)); __pyx_r = ((PyObject *)arrayObject); goto __pyx_L0; @@ -609,48 +609,48 @@ arrayObject = ((PyArrayObject *)Py_None); Py_INCREF(Py_None); __pyx_v_multi = ((PyArrayMultiIterObject *)Py_None); Py_INCREF(Py_None); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":214 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":214 */ __pyx_1 = __pyx_v_size == Py_None; if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":215 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":215 */ __pyx_2 = PyArray_MultiIterNew(2,((void (*))__pyx_v_oa),((void (*))__pyx_v_ob)); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 215; goto __pyx_L1;} Py_INCREF(((PyObject *)((PyArrayMultiIterObject *)__pyx_2))); Py_DECREF(((PyObject *)__pyx_v_multi)); __pyx_v_multi = ((PyArrayMultiIterObject *)__pyx_2); Py_DECREF(__pyx_2); __pyx_2 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":216 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":216 */ __pyx_2 = PyArray_SimpleNew(__pyx_v_multi->nd,__pyx_v_multi->dimensions,NPY_DOUBLE); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 216; goto __pyx_L1;} Py_INCREF(((PyObject *)((PyArrayObject *)__pyx_2))); Py_DECREF(((PyObject *)arrayObject)); arrayObject = ((PyArrayObject *)__pyx_2); Py_DECREF(__pyx_2); __pyx_2 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":217 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":217 */ __pyx_v_array_data = ((double (*))arrayObject->data); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":218 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":218 */ __pyx_3 = __pyx_v_multi->size; for (__pyx_v_i = 0; __pyx_v_i < __pyx_3; ++__pyx_v_i) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":219 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":219 */ __pyx_v_oa_data = ((double (*))PyArray_MultiIter_DATA(__pyx_v_multi,0)); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":220 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":220 */ __pyx_v_ob_data = ((double (*))PyArray_MultiIter_DATA(__pyx_v_multi,1)); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":221 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":221 */ (__pyx_v_array_data[__pyx_v_i]) = __pyx_v_func(__pyx_v_state,(__pyx_v_oa_data[0]),(__pyx_v_ob_data[0])); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":222 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":222 */ PyArray_MultiIter_NEXT(__pyx_v_multi); } goto __pyx_L2; } /*else*/ { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":224 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":224 */ __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 224; goto __pyx_L1;} __pyx_4 = PyObject_GetAttr(__pyx_2, __pyx_n_empty); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 224; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; @@ -670,21 +670,21 @@ arrayObject = ((PyArrayObject *)__pyx_5); Py_DECREF(__pyx_5); __pyx_5 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":225 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":225 */ __pyx_v_array_data = ((double (*))arrayObject->data); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":226 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":226 */ __pyx_4 = PyArray_MultiIterNew(3,((void (*))arrayObject),((void (*))__pyx_v_oa),((void (*))__pyx_v_ob)); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 226; goto __pyx_L1;} Py_INCREF(((PyObject *)((PyArrayMultiIterObject *)__pyx_4))); Py_DECREF(((PyObject *)__pyx_v_multi)); __pyx_v_multi = ((PyArrayMultiIterObject *)__pyx_4); Py_DECREF(__pyx_4); __pyx_4 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":227 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":227 */ __pyx_1 = (__pyx_v_multi->size != PyArray_SIZE(arrayObject)); if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":228 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":228 */ __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 228; goto __pyx_L1;} __pyx_5 = PyTuple_New(1); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 228; goto __pyx_L1;} Py_INCREF(__pyx_k62p); @@ -699,29 +699,29 @@ } __pyx_L5:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":229 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":229 */ __pyx_3 = __pyx_v_multi->size; for (__pyx_v_i = 0; __pyx_v_i < __pyx_3; ++__pyx_v_i) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":230 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":230 */ __pyx_v_oa_data = ((double (*))PyArray_MultiIter_DATA(__pyx_v_multi,1)); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":231 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":231 */ __pyx_v_ob_data = ((double (*))PyArray_MultiIter_DATA(__pyx_v_multi,2)); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":232 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":232 */ (__pyx_v_array_data[__pyx_v_i]) = __pyx_v_func(__pyx_v_state,(__pyx_v_oa_data[0]),(__pyx_v_ob_data[0])); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":233 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":233 */ PyArray_MultiIter_NEXTi(__pyx_v_multi,1); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":234 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":234 */ PyArray_MultiIter_NEXTi(__pyx_v_multi,2); } } __pyx_L2:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":235 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":235 */ Py_INCREF(((PyObject *)arrayObject)); __pyx_r = ((PyObject *)arrayObject); goto __pyx_L0; @@ -756,11 +756,11 @@ Py_INCREF(__pyx_v_size); arrayObject = ((PyArrayObject *)Py_None); Py_INCREF(Py_None); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":245 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":245 */ __pyx_1 = __pyx_v_size == Py_None; if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":246 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":246 */ __pyx_2 = PyFloat_FromDouble(__pyx_v_func(__pyx_v_state,__pyx_v_a,__pyx_v_b,__pyx_v_c)); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 246; goto __pyx_L1;} __pyx_r = __pyx_2; __pyx_2 = 0; @@ -769,7 +769,7 @@ } /*else*/ { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":248 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":248 */ __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 248; goto __pyx_L1;} __pyx_3 = PyObject_GetAttr(__pyx_2, __pyx_n_empty); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 248; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; @@ -789,20 +789,20 @@ arrayObject = ((PyArrayObject *)__pyx_4); Py_DECREF(__pyx_4); __pyx_4 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":249 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":249 */ __pyx_v_length = PyArray_SIZE(arrayObject); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":250 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":250 */ __pyx_v_array_data = ((double (*))arrayObject->data); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":251 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":251 */ for (__pyx_v_i = 0; __pyx_v_i < __pyx_v_length; ++__pyx_v_i) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":252 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":252 */ (__pyx_v_array_data[__pyx_v_i]) = __pyx_v_func(__pyx_v_state,__pyx_v_a,__pyx_v_b,__pyx_v_c); } - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":253 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":253 */ Py_INCREF(((PyObject *)arrayObject)); __pyx_r = ((PyObject *)arrayObject); goto __pyx_L0; @@ -848,51 +848,51 @@ arrayObject = ((PyArrayObject *)Py_None); Py_INCREF(Py_None); __pyx_v_multi = ((PyArrayMultiIterObject *)Py_None); Py_INCREF(Py_None); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":267 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":267 */ __pyx_1 = __pyx_v_size == Py_None; if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":268 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":268 */ __pyx_2 = PyArray_MultiIterNew(3,((void (*))__pyx_v_oa),((void (*))__pyx_v_ob),((void (*))__pyx_v_oc)); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 268; goto __pyx_L1;} Py_INCREF(((PyObject *)((PyArrayMultiIterObject *)__pyx_2))); Py_DECREF(((PyObject *)__pyx_v_multi)); __pyx_v_multi = ((PyArrayMultiIterObject *)__pyx_2); Py_DECREF(__pyx_2); __pyx_2 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":269 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":269 */ __pyx_2 = PyArray_SimpleNew(__pyx_v_multi->nd,__pyx_v_multi->dimensions,NPY_DOUBLE); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 269; goto __pyx_L1;} Py_INCREF(((PyObject *)((PyArrayObject *)__pyx_2))); Py_DECREF(((PyObject *)arrayObject)); arrayObject = ((PyArrayObject *)__pyx_2); Py_DECREF(__pyx_2); __pyx_2 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":270 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":270 */ __pyx_v_array_data = ((double (*))arrayObject->data); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":271 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":271 */ __pyx_3 = __pyx_v_multi->size; for (__pyx_v_i = 0; __pyx_v_i < __pyx_3; ++__pyx_v_i) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":272 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":272 */ __pyx_v_oa_data = ((double (*))PyArray_MultiIter_DATA(__pyx_v_multi,0)); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":273 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":273 */ __pyx_v_ob_data = ((double (*))PyArray_MultiIter_DATA(__pyx_v_multi,1)); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":274 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":274 */ __pyx_v_oc_data = ((double (*))PyArray_MultiIter_DATA(__pyx_v_multi,2)); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":275 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":275 */ (__pyx_v_array_data[__pyx_v_i]) = __pyx_v_func(__pyx_v_state,(__pyx_v_oa_data[0]),(__pyx_v_ob_data[0]),(__pyx_v_oc_data[0])); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":276 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":276 */ PyArray_MultiIter_NEXT(__pyx_v_multi); } goto __pyx_L2; } /*else*/ { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":278 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":278 */ __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 278; goto __pyx_L1;} __pyx_4 = PyObject_GetAttr(__pyx_2, __pyx_n_empty); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 278; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; @@ -912,21 +912,21 @@ arrayObject = ((PyArrayObject *)__pyx_5); Py_DECREF(__pyx_5); __pyx_5 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":279 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":279 */ __pyx_v_array_data = ((double (*))arrayObject->data); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":280 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":280 */ __pyx_4 = PyArray_MultiIterNew(4,((void (*))arrayObject),((void (*))__pyx_v_oa),((void (*))__pyx_v_ob),((void (*))__pyx_v_oc)); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 280; goto __pyx_L1;} Py_INCREF(((PyObject *)((PyArrayMultiIterObject *)__pyx_4))); Py_DECREF(((PyObject *)__pyx_v_multi)); __pyx_v_multi = ((PyArrayMultiIterObject *)__pyx_4); Py_DECREF(__pyx_4); __pyx_4 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":282 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":282 */ __pyx_1 = (__pyx_v_multi->size != PyArray_SIZE(arrayObject)); if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":283 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":283 */ __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 283; goto __pyx_L1;} __pyx_5 = PyTuple_New(1); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 283; goto __pyx_L1;} Py_INCREF(__pyx_k63p); @@ -941,29 +941,29 @@ } __pyx_L5:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":284 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":284 */ __pyx_3 = __pyx_v_multi->size; for (__pyx_v_i = 0; __pyx_v_i < __pyx_3; ++__pyx_v_i) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":285 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":285 */ __pyx_v_oa_data = ((double (*))PyArray_MultiIter_DATA(__pyx_v_multi,1)); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":286 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":286 */ __pyx_v_ob_data = ((double (*))PyArray_MultiIter_DATA(__pyx_v_multi,2)); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":287 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":287 */ __pyx_v_oc_data = ((double (*))PyArray_MultiIter_DATA(__pyx_v_multi,3)); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":288 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":288 */ (__pyx_v_array_data[__pyx_v_i]) = __pyx_v_func(__pyx_v_state,(__pyx_v_oa_data[0]),(__pyx_v_ob_data[0]),(__pyx_v_oc_data[0])); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":289 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":289 */ PyArray_MultiIter_NEXT(__pyx_v_multi); } } __pyx_L2:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":290 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":290 */ Py_INCREF(((PyObject *)arrayObject)); __pyx_r = ((PyObject *)arrayObject); goto __pyx_L0; @@ -1001,11 +1001,11 @@ Py_INCREF(__pyx_v_size); arrayObject = ((PyArrayObject *)Py_None); Py_INCREF(Py_None); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":298 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":298 */ __pyx_1 = __pyx_v_size == Py_None; if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":299 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":299 */ __pyx_2 = PyInt_FromLong(__pyx_v_func(__pyx_v_state)); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 299; goto __pyx_L1;} __pyx_r = __pyx_2; __pyx_2 = 0; @@ -1014,7 +1014,7 @@ } /*else*/ { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":301 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":301 */ __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 301; goto __pyx_L1;} __pyx_3 = PyObject_GetAttr(__pyx_2, __pyx_n_empty); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 301; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; @@ -1032,20 +1032,20 @@ arrayObject = ((PyArrayObject *)__pyx_2); Py_DECREF(__pyx_2); __pyx_2 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":302 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":302 */ __pyx_v_length = PyArray_SIZE(arrayObject); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":303 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":303 */ __pyx_v_array_data = ((long (*))arrayObject->data); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":304 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":304 */ for (__pyx_v_i = 0; __pyx_v_i < __pyx_v_length; ++__pyx_v_i) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":305 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":305 */ (__pyx_v_array_data[__pyx_v_i]) = __pyx_v_func(__pyx_v_state); } - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":306 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":306 */ Py_INCREF(((PyObject *)arrayObject)); __pyx_r = ((PyObject *)arrayObject); goto __pyx_L0; @@ -1079,11 +1079,11 @@ Py_INCREF(__pyx_v_size); arrayObject = ((PyArrayObject *)Py_None); Py_INCREF(Py_None); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":314 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":314 */ __pyx_1 = __pyx_v_size == Py_None; if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":315 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":315 */ __pyx_2 = PyInt_FromLong(__pyx_v_func(__pyx_v_state,__pyx_v_n,__pyx_v_p)); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 315; goto __pyx_L1;} __pyx_r = __pyx_2; __pyx_2 = 0; @@ -1092,7 +1092,7 @@ } /*else*/ { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":317 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":317 */ __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 317; goto __pyx_L1;} __pyx_3 = PyObject_GetAttr(__pyx_2, __pyx_n_empty); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 317; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; @@ -1110,20 +1110,20 @@ arrayObject = ((PyArrayObject *)__pyx_2); Py_DECREF(__pyx_2); __pyx_2 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":318 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":318 */ __pyx_v_length = PyArray_SIZE(arrayObject); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":319 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":319 */ __pyx_v_array_data = ((long (*))arrayObject->data); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":320 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":320 */ for (__pyx_v_i = 0; __pyx_v_i < __pyx_v_length; ++__pyx_v_i) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":321 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":321 */ (__pyx_v_array_data[__pyx_v_i]) = __pyx_v_func(__pyx_v_state,__pyx_v_n,__pyx_v_p); } - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":322 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":322 */ Py_INCREF(((PyObject *)arrayObject)); __pyx_r = ((PyObject *)arrayObject); goto __pyx_L0; @@ -1167,48 +1167,48 @@ arrayObject = ((PyArrayObject *)Py_None); Py_INCREF(Py_None); __pyx_v_multi = ((PyArrayMultiIterObject *)Py_None); Py_INCREF(Py_None); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":333 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":333 */ __pyx_1 = __pyx_v_size == Py_None; if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":334 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":334 */ __pyx_2 = PyArray_MultiIterNew(2,((void (*))__pyx_v_on),((void (*))__pyx_v_op)); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 334; goto __pyx_L1;} Py_INCREF(((PyObject *)((PyArrayMultiIterObject *)__pyx_2))); Py_DECREF(((PyObject *)__pyx_v_multi)); __pyx_v_multi = ((PyArrayMultiIterObject *)__pyx_2); Py_DECREF(__pyx_2); __pyx_2 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":335 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":335 */ __pyx_2 = PyArray_SimpleNew(__pyx_v_multi->nd,__pyx_v_multi->dimensions,NPY_LONG); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 335; goto __pyx_L1;} Py_INCREF(((PyObject *)((PyArrayObject *)__pyx_2))); Py_DECREF(((PyObject *)arrayObject)); arrayObject = ((PyArrayObject *)__pyx_2); Py_DECREF(__pyx_2); __pyx_2 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":336 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":336 */ __pyx_v_array_data = ((long (*))arrayObject->data); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":337 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":337 */ __pyx_3 = __pyx_v_multi->size; for (__pyx_v_i = 0; __pyx_v_i < __pyx_3; ++__pyx_v_i) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":338 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":338 */ __pyx_v_on_data = ((long (*))PyArray_MultiIter_DATA(__pyx_v_multi,0)); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":339 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":339 */ __pyx_v_op_data = ((double (*))PyArray_MultiIter_DATA(__pyx_v_multi,1)); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":340 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":340 */ (__pyx_v_array_data[__pyx_v_i]) = __pyx_v_func(__pyx_v_state,(__pyx_v_on_data[0]),(__pyx_v_op_data[0])); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":341 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":341 */ PyArray_MultiIter_NEXT(__pyx_v_multi); } goto __pyx_L2; } /*else*/ { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":343 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":343 */ __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 343; goto __pyx_L1;} __pyx_4 = PyObject_GetAttr(__pyx_2, __pyx_n_empty); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 343; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; @@ -1226,21 +1226,21 @@ arrayObject = ((PyArrayObject *)__pyx_2); Py_DECREF(__pyx_2); __pyx_2 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":344 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":344 */ __pyx_v_array_data = ((long (*))arrayObject->data); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":345 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":345 */ __pyx_4 = PyArray_MultiIterNew(3,((void (*))arrayObject),((void (*))__pyx_v_on),((void (*))__pyx_v_op)); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 345; goto __pyx_L1;} Py_INCREF(((PyObject *)((PyArrayMultiIterObject *)__pyx_4))); Py_DECREF(((PyObject *)__pyx_v_multi)); __pyx_v_multi = ((PyArrayMultiIterObject *)__pyx_4); Py_DECREF(__pyx_4); __pyx_4 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":346 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":346 */ __pyx_1 = (__pyx_v_multi->size != PyArray_SIZE(arrayObject)); if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":347 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":347 */ __pyx_5 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 347; goto __pyx_L1;} __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 347; goto __pyx_L1;} Py_INCREF(__pyx_k64p); @@ -1255,29 +1255,29 @@ } __pyx_L5:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":348 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":348 */ __pyx_3 = __pyx_v_multi->size; for (__pyx_v_i = 0; __pyx_v_i < __pyx_3; ++__pyx_v_i) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":349 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":349 */ __pyx_v_on_data = ((long (*))PyArray_MultiIter_DATA(__pyx_v_multi,1)); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":350 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":350 */ __pyx_v_op_data = ((double (*))PyArray_MultiIter_DATA(__pyx_v_multi,2)); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":351 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":351 */ (__pyx_v_array_data[__pyx_v_i]) = __pyx_v_func(__pyx_v_state,(__pyx_v_on_data[0]),(__pyx_v_op_data[0])); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":352 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":352 */ PyArray_MultiIter_NEXTi(__pyx_v_multi,1); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":353 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":353 */ PyArray_MultiIter_NEXTi(__pyx_v_multi,2); } } __pyx_L2:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":355 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":355 */ Py_INCREF(((PyObject *)arrayObject)); __pyx_r = ((PyObject *)arrayObject); goto __pyx_L0; @@ -1312,11 +1312,11 @@ Py_INCREF(__pyx_v_size); arrayObject = ((PyArrayObject *)Py_None); Py_INCREF(Py_None); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":364 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":364 */ __pyx_1 = __pyx_v_size == Py_None; if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":365 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":365 */ __pyx_2 = PyInt_FromLong(__pyx_v_func(__pyx_v_state,__pyx_v_n,__pyx_v_m,__pyx_v_N)); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 365; goto __pyx_L1;} __pyx_r = __pyx_2; __pyx_2 = 0; @@ -1325,7 +1325,7 @@ } /*else*/ { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":367 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":367 */ __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 367; goto __pyx_L1;} __pyx_3 = PyObject_GetAttr(__pyx_2, __pyx_n_empty); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 367; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; @@ -1343,20 +1343,20 @@ arrayObject = ((PyArrayObject *)__pyx_2); Py_DECREF(__pyx_2); __pyx_2 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":368 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":368 */ __pyx_v_length = PyArray_SIZE(arrayObject); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":369 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":369 */ __pyx_v_array_data = ((long (*))arrayObject->data); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":370 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":370 */ for (__pyx_v_i = 0; __pyx_v_i < __pyx_v_length; ++__pyx_v_i) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":371 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":371 */ (__pyx_v_array_data[__pyx_v_i]) = __pyx_v_func(__pyx_v_state,__pyx_v_n,__pyx_v_m,__pyx_v_N); } - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":372 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":372 */ Py_INCREF(((PyObject *)arrayObject)); __pyx_r = ((PyObject *)arrayObject); goto __pyx_L0; @@ -1402,51 +1402,51 @@ arrayObject = ((PyArrayObject *)Py_None); Py_INCREF(Py_None); __pyx_v_multi = ((PyArrayMultiIterObject *)Py_None); Py_INCREF(Py_None); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":385 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":385 */ __pyx_1 = __pyx_v_size == Py_None; if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":386 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":386 */ __pyx_2 = PyArray_MultiIterNew(3,((void (*))__pyx_v_on),((void (*))__pyx_v_om),((void (*))__pyx_v_oN)); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 386; goto __pyx_L1;} Py_INCREF(((PyObject *)((PyArrayMultiIterObject *)__pyx_2))); Py_DECREF(((PyObject *)__pyx_v_multi)); __pyx_v_multi = ((PyArrayMultiIterObject *)__pyx_2); Py_DECREF(__pyx_2); __pyx_2 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":387 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":387 */ __pyx_2 = PyArray_SimpleNew(__pyx_v_multi->nd,__pyx_v_multi->dimensions,NPY_LONG); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 387; goto __pyx_L1;} Py_INCREF(((PyObject *)((PyArrayObject *)__pyx_2))); Py_DECREF(((PyObject *)arrayObject)); arrayObject = ((PyArrayObject *)__pyx_2); Py_DECREF(__pyx_2); __pyx_2 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":388 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":388 */ __pyx_v_array_data = ((long (*))arrayObject->data); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":389 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":389 */ __pyx_3 = __pyx_v_multi->size; for (__pyx_v_i = 0; __pyx_v_i < __pyx_3; ++__pyx_v_i) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":390 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":390 */ __pyx_v_on_data = ((long (*))PyArray_MultiIter_DATA(__pyx_v_multi,0)); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":391 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":391 */ __pyx_v_om_data = ((long (*))PyArray_MultiIter_DATA(__pyx_v_multi,1)); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":392 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":392 */ __pyx_v_oN_data = ((long (*))PyArray_MultiIter_DATA(__pyx_v_multi,2)); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":393 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":393 */ (__pyx_v_array_data[__pyx_v_i]) = __pyx_v_func(__pyx_v_state,(__pyx_v_on_data[0]),(__pyx_v_om_data[0]),(__pyx_v_oN_data[0])); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":394 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":394 */ PyArray_MultiIter_NEXT(__pyx_v_multi); } goto __pyx_L2; } /*else*/ { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":396 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":396 */ __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 396; goto __pyx_L1;} __pyx_4 = PyObject_GetAttr(__pyx_2, __pyx_n_empty); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 396; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; @@ -1464,21 +1464,21 @@ arrayObject = ((PyArrayObject *)__pyx_2); Py_DECREF(__pyx_2); __pyx_2 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":397 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":397 */ __pyx_v_array_data = ((long (*))arrayObject->data); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":398 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":398 */ __pyx_4 = PyArray_MultiIterNew(4,((void (*))arrayObject),((void (*))__pyx_v_on),((void (*))__pyx_v_om),((void (*))__pyx_v_oN)); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 398; goto __pyx_L1;} Py_INCREF(((PyObject *)((PyArrayMultiIterObject *)__pyx_4))); Py_DECREF(((PyObject *)__pyx_v_multi)); __pyx_v_multi = ((PyArrayMultiIterObject *)__pyx_4); Py_DECREF(__pyx_4); __pyx_4 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":400 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":400 */ __pyx_1 = (__pyx_v_multi->size != PyArray_SIZE(arrayObject)); if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":401 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":401 */ __pyx_5 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 401; goto __pyx_L1;} __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 401; goto __pyx_L1;} Py_INCREF(__pyx_k65p); @@ -1493,29 +1493,29 @@ } __pyx_L5:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":402 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":402 */ __pyx_3 = __pyx_v_multi->size; for (__pyx_v_i = 0; __pyx_v_i < __pyx_3; ++__pyx_v_i) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":403 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":403 */ __pyx_v_on_data = ((long (*))PyArray_MultiIter_DATA(__pyx_v_multi,1)); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":404 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":404 */ __pyx_v_om_data = ((long (*))PyArray_MultiIter_DATA(__pyx_v_multi,2)); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":405 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":405 */ __pyx_v_oN_data = ((long (*))PyArray_MultiIter_DATA(__pyx_v_multi,3)); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":406 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":406 */ (__pyx_v_array_data[__pyx_v_i]) = __pyx_v_func(__pyx_v_state,(__pyx_v_on_data[0]),(__pyx_v_om_data[0]),(__pyx_v_oN_data[0])); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":407 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":407 */ PyArray_MultiIter_NEXT(__pyx_v_multi); } } __pyx_L2:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":409 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":409 */ Py_INCREF(((PyObject *)arrayObject)); __pyx_r = ((PyObject *)arrayObject); goto __pyx_L0; @@ -1551,11 +1551,11 @@ Py_INCREF(__pyx_v_size); arrayObject = ((PyArrayObject *)Py_None); Py_INCREF(Py_None); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":417 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":417 */ __pyx_1 = __pyx_v_size == Py_None; if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":418 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":418 */ __pyx_2 = PyInt_FromLong(__pyx_v_func(__pyx_v_state,__pyx_v_a)); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 418; goto __pyx_L1;} __pyx_r = __pyx_2; __pyx_2 = 0; @@ -1564,7 +1564,7 @@ } /*else*/ { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":420 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":420 */ __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 420; goto __pyx_L1;} __pyx_3 = PyObject_GetAttr(__pyx_2, __pyx_n_empty); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 420; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; @@ -1582,20 +1582,20 @@ arrayObject = ((PyArrayObject *)__pyx_2); Py_DECREF(__pyx_2); __pyx_2 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":421 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":421 */ __pyx_v_length = PyArray_SIZE(arrayObject); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":422 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":422 */ __pyx_v_array_data = ((long (*))arrayObject->data); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":423 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":423 */ for (__pyx_v_i = 0; __pyx_v_i < __pyx_v_length; ++__pyx_v_i) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":424 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":424 */ (__pyx_v_array_data[__pyx_v_i]) = __pyx_v_func(__pyx_v_state,__pyx_v_a); } - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":425 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":425 */ Py_INCREF(((PyObject *)arrayObject)); __pyx_r = ((PyObject *)arrayObject); goto __pyx_L0; @@ -1640,44 +1640,44 @@ __pyx_v_multi = ((PyArrayMultiIterObject *)Py_None); Py_INCREF(Py_None); __pyx_v_itera = ((PyArrayIterObject *)Py_None); Py_INCREF(Py_None); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":436 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":436 */ __pyx_1 = __pyx_v_size == Py_None; if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":437 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":437 */ __pyx_2 = PyArray_SimpleNew(__pyx_v_oa->nd,__pyx_v_oa->dimensions,NPY_LONG); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 437; goto __pyx_L1;} Py_INCREF(((PyObject *)((PyArrayObject *)__pyx_2))); Py_DECREF(((PyObject *)arrayObject)); arrayObject = ((PyArrayObject *)__pyx_2); Py_DECREF(__pyx_2); __pyx_2 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":438 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":438 */ __pyx_v_length = PyArray_SIZE(arrayObject); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":439 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":439 */ __pyx_v_array_data = ((long (*))arrayObject->data); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":440 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":440 */ __pyx_2 = PyArray_IterNew(((PyObject *)__pyx_v_oa)); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 440; goto __pyx_L1;} Py_INCREF(((PyObject *)((PyArrayIterObject *)__pyx_2))); Py_DECREF(((PyObject *)__pyx_v_itera)); __pyx_v_itera = ((PyArrayIterObject *)__pyx_2); Py_DECREF(__pyx_2); __pyx_2 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":441 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":441 */ for (__pyx_v_i = 0; __pyx_v_i < __pyx_v_length; ++__pyx_v_i) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":442 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":442 */ (__pyx_v_array_data[__pyx_v_i]) = __pyx_v_func(__pyx_v_state,(((double (*))__pyx_v_itera->dataptr)[0])); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":443 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":443 */ PyArray_ITER_NEXT(__pyx_v_itera); } goto __pyx_L2; } /*else*/ { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":445 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":445 */ __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 445; goto __pyx_L1;} __pyx_3 = PyObject_GetAttr(__pyx_2, __pyx_n_empty); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 445; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; @@ -1695,21 +1695,21 @@ arrayObject = ((PyArrayObject *)__pyx_2); Py_DECREF(__pyx_2); __pyx_2 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":446 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":446 */ __pyx_v_array_data = ((long (*))arrayObject->data); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":447 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":447 */ __pyx_3 = PyArray_MultiIterNew(2,((void (*))arrayObject),((void (*))__pyx_v_oa)); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 447; goto __pyx_L1;} Py_INCREF(((PyObject *)((PyArrayMultiIterObject *)__pyx_3))); Py_DECREF(((PyObject *)__pyx_v_multi)); __pyx_v_multi = ((PyArrayMultiIterObject *)__pyx_3); Py_DECREF(__pyx_3); __pyx_3 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":448 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":448 */ __pyx_1 = (__pyx_v_multi->size != PyArray_SIZE(arrayObject)); if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":449 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":449 */ __pyx_4 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 449; goto __pyx_L1;} __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 449; goto __pyx_L1;} Py_INCREF(__pyx_k66p); @@ -1724,23 +1724,23 @@ } __pyx_L5:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":450 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":450 */ __pyx_5 = __pyx_v_multi->size; for (__pyx_v_i = 0; __pyx_v_i < __pyx_5; ++__pyx_v_i) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":451 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":451 */ __pyx_v_oa_data = ((double (*))PyArray_MultiIter_DATA(__pyx_v_multi,1)); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":452 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":452 */ (__pyx_v_array_data[__pyx_v_i]) = __pyx_v_func(__pyx_v_state,(__pyx_v_oa_data[0])); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":453 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":453 */ PyArray_MultiIter_NEXTi(__pyx_v_multi,1); } } __pyx_L2:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":454 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":454 */ Py_INCREF(((PyObject *)arrayObject)); __pyx_r = ((PyObject *)arrayObject); goto __pyx_L0; @@ -1770,29 +1770,29 @@ long __pyx_v_i; double __pyx_r; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":459 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":459 */ __pyx_v_sum = (__pyx_v_darr[0]); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":460 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":460 */ __pyx_v_c = 0.0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":461 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":461 */ for (__pyx_v_i = 1; __pyx_v_i < __pyx_v_n; ++__pyx_v_i) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":462 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":462 */ __pyx_v_y = ((__pyx_v_darr[__pyx_v_i]) - __pyx_v_c); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":463 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":463 */ __pyx_v_t = (__pyx_v_sum + __pyx_v_y); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":464 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":464 */ __pyx_v_c = ((__pyx_v_t - __pyx_v_sum) - __pyx_v_y); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":465 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":465 */ __pyx_v_sum = __pyx_v_t; } - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":466 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":466 */ __pyx_r = __pyx_v_sum; goto __pyx_L0; @@ -1814,10 +1814,10 @@ Py_INCREF(__pyx_v_self); Py_INCREF(__pyx_v_seed); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":489 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":489 */ ((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state = ((rk_state (*))PyMem_Malloc((sizeof(rk_state )))); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":491 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":491 */ __pyx_1 = PyObject_GetAttr(__pyx_v_self, __pyx_n_seed); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 491; goto __pyx_L1;} __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 491; goto __pyx_L1;} Py_INCREF(__pyx_v_seed); @@ -1846,14 +1846,14 @@ int __pyx_1; Py_INCREF(__pyx_v_self); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":494 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":494 */ __pyx_1 = (((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state != NULL); if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":495 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":495 */ PyMem_Free(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":496 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":496 */ ((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state = NULL; goto __pyx_L2; } @@ -1883,11 +1883,11 @@ Py_INCREF(__pyx_v_seed); arrayObject_obj = ((PyArrayObject *)Py_None); Py_INCREF(Py_None); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":510 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":510 */ __pyx_1 = __pyx_v_seed == Py_None; if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":511 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":511 */ __pyx_v_errcode = rk_randomseed(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state); goto __pyx_L2; } @@ -1904,21 +1904,21 @@ Py_DECREF(__pyx_2); __pyx_2 = 0; if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":513 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":513 */ __pyx_5 = PyInt_AsUnsignedLongMask(__pyx_v_seed); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 513; goto __pyx_L1;} rk_seed(__pyx_5,((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state); goto __pyx_L2; } /*else*/ { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":515 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":515 */ __pyx_3 = PyArray_ContiguousFromObject(__pyx_v_seed,NPY_LONG,1,1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 515; goto __pyx_L1;} Py_INCREF(((PyObject *)((PyArrayObject *)__pyx_3))); Py_DECREF(((PyObject *)arrayObject_obj)); arrayObject_obj = ((PyArrayObject *)__pyx_3); Py_DECREF(__pyx_3); __pyx_3 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":516 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":516 */ init_by_array(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state,((unsigned long (*))arrayObject_obj->data),(arrayObject_obj->dimensions[0])); } __pyx_L2:; @@ -1938,6 +1938,9 @@ return __pyx_r; } +static PyObject *__pyx_n_uint; +static PyObject *__pyx_n_asarray; +static PyObject *__pyx_n_uint32; static PyObject *__pyx_n_MT19937; @@ -1955,37 +1958,59 @@ Py_INCREF(__pyx_v_self); arrayObject_state = ((PyArrayObject *)Py_None); Py_INCREF(Py_None); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":525 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":525 */ __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 525; goto __pyx_L1;} __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_n_empty); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 525; goto __pyx_L1;} Py_DECREF(__pyx_1); __pyx_1 = 0; __pyx_1 = PyInt_FromLong(624); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 525; goto __pyx_L1;} - __pyx_3 = __Pyx_GetName(__pyx_b, __pyx_n_int); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 525; goto __pyx_L1;} - __pyx_4 = PyTuple_New(2); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 525; goto __pyx_L1;} - PyTuple_SET_ITEM(__pyx_4, 0, __pyx_1); - PyTuple_SET_ITEM(__pyx_4, 1, __pyx_3); + __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 525; goto __pyx_L1;} + __pyx_4 = PyObject_GetAttr(__pyx_3, __pyx_n_uint); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 525; goto __pyx_L1;} + Py_DECREF(__pyx_3); __pyx_3 = 0; + __pyx_3 = PyTuple_New(2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 525; goto __pyx_L1;} + PyTuple_SET_ITEM(__pyx_3, 0, __pyx_1); + PyTuple_SET_ITEM(__pyx_3, 1, __pyx_4); __pyx_1 = 0; - __pyx_3 = 0; - __pyx_1 = PyObject_CallObject(__pyx_2, __pyx_4); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 525; goto __pyx_L1;} + __pyx_4 = 0; + __pyx_1 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 525; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; - Py_DECREF(__pyx_4); __pyx_4 = 0; + Py_DECREF(__pyx_3); __pyx_3 = 0; Py_INCREF(((PyObject *)((PyArrayObject *)__pyx_1))); Py_DECREF(((PyObject *)arrayObject_state)); arrayObject_state = ((PyArrayObject *)__pyx_1); Py_DECREF(__pyx_1); __pyx_1 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":526 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":526 */ memcpy(((void (*))arrayObject_state->data),((void (*))((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state->key),(624 * (sizeof(long )))); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":527 */ - __pyx_3 = PyInt_FromLong(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state->pos); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 527; goto __pyx_L1;} - __pyx_2 = PyTuple_New(3); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 527; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":527 */ + __pyx_4 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 527; goto __pyx_L1;} + __pyx_2 = PyObject_GetAttr(__pyx_4, __pyx_n_asarray); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 527; goto __pyx_L1;} + Py_DECREF(__pyx_4); __pyx_4 = 0; + __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 527; goto __pyx_L1;} + __pyx_1 = PyObject_GetAttr(__pyx_3, __pyx_n_uint32); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 527; goto __pyx_L1;} + Py_DECREF(__pyx_3); __pyx_3 = 0; + __pyx_4 = PyTuple_New(2); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 527; goto __pyx_L1;} + Py_INCREF(((PyObject *)arrayObject_state)); + PyTuple_SET_ITEM(__pyx_4, 0, ((PyObject *)arrayObject_state)); + PyTuple_SET_ITEM(__pyx_4, 1, __pyx_1); + __pyx_1 = 0; + __pyx_3 = PyObject_CallObject(__pyx_2, __pyx_4); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 527; goto __pyx_L1;} + Py_DECREF(__pyx_2); __pyx_2 = 0; + Py_DECREF(__pyx_4); __pyx_4 = 0; + Py_INCREF(((PyObject *)((PyArrayObject *)__pyx_3))); + Py_DECREF(((PyObject *)arrayObject_state)); + arrayObject_state = ((PyArrayObject *)__pyx_3); + Py_DECREF(__pyx_3); __pyx_3 = 0; + + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":528 */ + __pyx_1 = PyInt_FromLong(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state->pos); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 528; goto __pyx_L1;} + __pyx_2 = PyTuple_New(3); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 528; goto __pyx_L1;} Py_INCREF(__pyx_n_MT19937); PyTuple_SET_ITEM(__pyx_2, 0, __pyx_n_MT19937); Py_INCREF(((PyObject *)arrayObject_state)); PyTuple_SET_ITEM(__pyx_2, 1, ((PyObject *)arrayObject_state)); - PyTuple_SET_ITEM(__pyx_2, 2, __pyx_3); - __pyx_3 = 0; + PyTuple_SET_ITEM(__pyx_2, 2, __pyx_1); + __pyx_1 = 0; __pyx_r = __pyx_2; __pyx_2 = 0; goto __pyx_L0; @@ -2005,6 +2030,8 @@ return __pyx_r; } +static PyObject *__pyx_n_TypeError; + static PyObject *__pyx_k69p; static PyObject *__pyx_k70p; @@ -2012,7 +2039,7 @@ static char (__pyx_k70[]) = "state must be 624 longs"; static PyObject *__pyx_f_6mtrand_11RandomState_set_state(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static char __pyx_doc_6mtrand_11RandomState_set_state[] = "Set the state from a tuple.\n \n state = (\'MT19937\', int key[624], int pos)\n \n set_state(state)\n "; +static char __pyx_doc_6mtrand_11RandomState_set_state[] = "Set the state from a tuple.\n\n state = (\'MT19937\', int key[624], int pos)\n\n set_state(state)\n "; static PyObject *__pyx_f_6mtrand_11RandomState_set_state(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_state = 0; PyArrayObject *arrayObject_obj; @@ -2032,79 +2059,108 @@ __pyx_v_algorithm_name = Py_None; Py_INCREF(Py_None); __pyx_v_key = Py_None; Py_INCREF(Py_None); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":538 */ - __pyx_1 = PyInt_FromLong(0); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 538; goto __pyx_L1;} - __pyx_2 = PyObject_GetItem(__pyx_v_state, __pyx_1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 538; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":539 */ + __pyx_1 = PyInt_FromLong(0); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 539; goto __pyx_L1;} + __pyx_2 = PyObject_GetItem(__pyx_v_state, __pyx_1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 539; goto __pyx_L1;} Py_DECREF(__pyx_1); __pyx_1 = 0; Py_DECREF(__pyx_v_algorithm_name); __pyx_v_algorithm_name = __pyx_2; __pyx_2 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":539 */ - if (PyObject_Cmp(__pyx_v_algorithm_name, __pyx_n_MT19937, &__pyx_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 539; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":540 */ + if (PyObject_Cmp(__pyx_v_algorithm_name, __pyx_n_MT19937, &__pyx_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 540; goto __pyx_L1;} __pyx_3 = __pyx_3 != 0; if (__pyx_3) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":540 */ - __pyx_1 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 540; goto __pyx_L1;} - __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 540; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":541 */ + __pyx_1 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 541; goto __pyx_L1;} + __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 541; goto __pyx_L1;} Py_INCREF(__pyx_k69p); PyTuple_SET_ITEM(__pyx_2, 0, __pyx_k69p); - __pyx_4 = PyObject_CallObject(__pyx_1, __pyx_2); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 540; goto __pyx_L1;} + __pyx_4 = PyObject_CallObject(__pyx_1, __pyx_2); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 541; goto __pyx_L1;} Py_DECREF(__pyx_1); __pyx_1 = 0; Py_DECREF(__pyx_2); __pyx_2 = 0; __Pyx_Raise(__pyx_4, 0, 0); Py_DECREF(__pyx_4); __pyx_4 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 540; goto __pyx_L1;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 541; goto __pyx_L1;} goto __pyx_L2; } __pyx_L2:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":541 */ - __pyx_1 = PySequence_GetSlice(__pyx_v_state, 1, 0x7fffffff); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 541; goto __pyx_L1;} - __pyx_2 = PyObject_GetIter(__pyx_1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 541; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":542 */ + __pyx_1 = PySequence_GetSlice(__pyx_v_state, 1, 0x7fffffff); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 542; goto __pyx_L1;} + __pyx_2 = PyObject_GetIter(__pyx_1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 542; goto __pyx_L1;} Py_DECREF(__pyx_1); __pyx_1 = 0; - __pyx_4 = __Pyx_UnpackItem(__pyx_2); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 541; goto __pyx_L1;} + __pyx_4 = __Pyx_UnpackItem(__pyx_2); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 542; goto __pyx_L1;} Py_DECREF(__pyx_v_key); __pyx_v_key = __pyx_4; __pyx_4 = 0; - __pyx_1 = __Pyx_UnpackItem(__pyx_2); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 541; goto __pyx_L1;} - __pyx_3 = PyInt_AsLong(__pyx_1); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 541; goto __pyx_L1;} + __pyx_1 = __Pyx_UnpackItem(__pyx_2); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 542; goto __pyx_L1;} + __pyx_3 = PyInt_AsLong(__pyx_1); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 542; goto __pyx_L1;} Py_DECREF(__pyx_1); __pyx_1 = 0; __pyx_v_pos = __pyx_3; - if (__Pyx_EndUnpack(__pyx_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 541; goto __pyx_L1;} + if (__Pyx_EndUnpack(__pyx_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 542; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":542 */ - __pyx_4 = PyArray_ContiguousFromObject(__pyx_v_key,NPY_LONG,1,1); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 542; goto __pyx_L1;} - Py_INCREF(((PyObject *)((PyArrayObject *)__pyx_4))); - Py_DECREF(((PyObject *)arrayObject_obj)); - arrayObject_obj = ((PyArrayObject *)__pyx_4); - Py_DECREF(__pyx_4); __pyx_4 = 0; + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":543 */ + /*try:*/ { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":543 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":544 */ + __pyx_4 = PyArray_ContiguousFromObject(__pyx_v_key,NPY_ULONG,1,1); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 544; goto __pyx_L3;} + Py_INCREF(((PyObject *)((PyArrayObject *)__pyx_4))); + Py_DECREF(((PyObject *)arrayObject_obj)); + arrayObject_obj = ((PyArrayObject *)__pyx_4); + Py_DECREF(__pyx_4); __pyx_4 = 0; + } + goto __pyx_L4; + __pyx_L3:; + Py_XDECREF(__pyx_1); __pyx_1 = 0; + Py_XDECREF(__pyx_2); __pyx_2 = 0; + Py_XDECREF(__pyx_4); __pyx_4 = 0; + + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":545 */ + __pyx_1 = __Pyx_GetName(__pyx_b, __pyx_n_TypeError); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 545; goto __pyx_L1;} + __pyx_3 = PyErr_ExceptionMatches(__pyx_1); + Py_DECREF(__pyx_1); __pyx_1 = 0; + if (__pyx_3) { + __Pyx_AddTraceback("mtrand.set_state"); + __pyx_2 = __Pyx_GetExcValue(); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 545; goto __pyx_L1;} + Py_DECREF(__pyx_2); __pyx_2 = 0; + + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":547 */ + __pyx_4 = PyArray_ContiguousFromObject(__pyx_v_key,NPY_LONG,1,1); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 547; goto __pyx_L1;} + Py_INCREF(((PyObject *)((PyArrayObject *)__pyx_4))); + Py_DECREF(((PyObject *)arrayObject_obj)); + arrayObject_obj = ((PyArrayObject *)__pyx_4); + Py_DECREF(__pyx_4); __pyx_4 = 0; + goto __pyx_L4; + } + goto __pyx_L1; + __pyx_L4:; + + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":548 */ __pyx_3 = ((arrayObject_obj->dimensions[0]) != 624); if (__pyx_3) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":544 */ - __pyx_1 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 544; goto __pyx_L1;} - __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 544; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":549 */ + __pyx_1 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 549; goto __pyx_L1;} + __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 549; goto __pyx_L1;} Py_INCREF(__pyx_k70p); PyTuple_SET_ITEM(__pyx_2, 0, __pyx_k70p); - __pyx_4 = PyObject_CallObject(__pyx_1, __pyx_2); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 544; goto __pyx_L1;} + __pyx_4 = PyObject_CallObject(__pyx_1, __pyx_2); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 549; goto __pyx_L1;} Py_DECREF(__pyx_1); __pyx_1 = 0; Py_DECREF(__pyx_2); __pyx_2 = 0; __Pyx_Raise(__pyx_4, 0, 0); Py_DECREF(__pyx_4); __pyx_4 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 544; goto __pyx_L1;} - goto __pyx_L3; + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 549; goto __pyx_L1;} + goto __pyx_L5; } - __pyx_L3:; + __pyx_L5:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":545 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":550 */ memcpy(((void (*))((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state->key),((void (*))arrayObject_obj->data),(624 * (sizeof(long )))); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":546 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":551 */ ((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state->pos = __pyx_v_pos; __pyx_r = Py_None; Py_INCREF(Py_None); @@ -2133,9 +2189,9 @@ if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "", __pyx_argnames)) return 0; Py_INCREF(__pyx_v_self); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":550 */ - __pyx_1 = PyObject_GetAttr(__pyx_v_self, __pyx_n_get_state); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 550; goto __pyx_L1;} - __pyx_2 = PyObject_CallObject(__pyx_1, 0); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 550; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":555 */ + __pyx_1 = PyObject_GetAttr(__pyx_v_self, __pyx_n_get_state); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 555; goto __pyx_L1;} + __pyx_2 = PyObject_CallObject(__pyx_1, 0); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 555; goto __pyx_L1;} Py_DECREF(__pyx_1); __pyx_1 = 0; __pyx_r = __pyx_2; __pyx_2 = 0; @@ -2165,12 +2221,12 @@ Py_INCREF(__pyx_v_self); Py_INCREF(__pyx_v_state); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":553 */ - __pyx_1 = PyObject_GetAttr(__pyx_v_self, __pyx_n_set_state); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 553; goto __pyx_L1;} - __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 553; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":558 */ + __pyx_1 = PyObject_GetAttr(__pyx_v_self, __pyx_n_set_state); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 558; goto __pyx_L1;} + __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 558; goto __pyx_L1;} Py_INCREF(__pyx_v_state); PyTuple_SET_ITEM(__pyx_2, 0, __pyx_v_state); - __pyx_3 = PyObject_CallObject(__pyx_1, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 553; goto __pyx_L1;} + __pyx_3 = PyObject_CallObject(__pyx_1, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 558; goto __pyx_L1;} Py_DECREF(__pyx_1); __pyx_1 = 0; Py_DECREF(__pyx_2); __pyx_2 = 0; Py_DECREF(__pyx_3); __pyx_3 = 0; @@ -2203,17 +2259,17 @@ if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "", __pyx_argnames)) return 0; Py_INCREF(__pyx_v_self); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":556 */ - __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 556; goto __pyx_L1;} - __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_n_random); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 556; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":561 */ + __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 561; goto __pyx_L1;} + __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_n_random); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 561; goto __pyx_L1;} Py_DECREF(__pyx_1); __pyx_1 = 0; - __pyx_1 = PyObject_GetAttr(__pyx_2, __pyx_n___RandomState_ctor); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 556; goto __pyx_L1;} + __pyx_1 = PyObject_GetAttr(__pyx_2, __pyx_n___RandomState_ctor); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 561; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; - __pyx_2 = PyTuple_New(0); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 556; goto __pyx_L1;} - __pyx_3 = PyObject_GetAttr(__pyx_v_self, __pyx_n_get_state); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 556; goto __pyx_L1;} - __pyx_4 = PyObject_CallObject(__pyx_3, 0); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 556; goto __pyx_L1;} + __pyx_2 = PyTuple_New(0); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 561; goto __pyx_L1;} + __pyx_3 = PyObject_GetAttr(__pyx_v_self, __pyx_n_get_state); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 561; goto __pyx_L1;} + __pyx_4 = PyObject_CallObject(__pyx_3, 0); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 561; goto __pyx_L1;} Py_DECREF(__pyx_3); __pyx_3 = 0; - __pyx_3 = PyTuple_New(3); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 556; goto __pyx_L1;} + __pyx_3 = PyTuple_New(3); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 561; goto __pyx_L1;} PyTuple_SET_ITEM(__pyx_3, 0, __pyx_1); PyTuple_SET_ITEM(__pyx_3, 1, __pyx_2); PyTuple_SET_ITEM(__pyx_3, 2, __pyx_4); @@ -2250,8 +2306,8 @@ Py_INCREF(__pyx_v_self); Py_INCREF(__pyx_v_size); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":564 */ - __pyx_1 = __pyx_f_6mtrand_cont0_array(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state,rk_double,__pyx_v_size); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 564; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":569 */ + __pyx_1 = __pyx_f_6mtrand_cont0_array(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state,rk_double,__pyx_v_size); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 569; goto __pyx_L1;} __pyx_r = __pyx_1; __pyx_1 = 0; goto __pyx_L0; @@ -2280,8 +2336,8 @@ Py_INCREF(__pyx_v_self); Py_INCREF(__pyx_v_size); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":571 */ - __pyx_1 = __pyx_f_6mtrand_disc0_array(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state,rk_long,__pyx_v_size); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 571; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":576 */ + __pyx_1 = __pyx_f_6mtrand_disc0_array(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state,rk_long,__pyx_v_size); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 576; goto __pyx_L1;} __pyx_r = __pyx_1; __pyx_1 = 0; goto __pyx_L0; @@ -2331,58 +2387,58 @@ Py_INCREF(__pyx_v_size); arrayObject = ((PyArrayObject *)Py_None); Py_INCREF(Py_None); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":586 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":591 */ __pyx_1 = __pyx_v_high == Py_None; if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":587 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":592 */ __pyx_v_lo = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":588 */ - __pyx_2 = PyInt_AsLong(__pyx_v_low); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 588; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":593 */ + __pyx_2 = PyInt_AsLong(__pyx_v_low); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 593; goto __pyx_L1;} __pyx_v_hi = __pyx_2; goto __pyx_L2; } /*else*/ { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":590 */ - __pyx_2 = PyInt_AsLong(__pyx_v_low); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 590; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":595 */ + __pyx_2 = PyInt_AsLong(__pyx_v_low); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 595; goto __pyx_L1;} __pyx_v_lo = __pyx_2; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":591 */ - __pyx_2 = PyInt_AsLong(__pyx_v_high); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 591; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":596 */ + __pyx_2 = PyInt_AsLong(__pyx_v_high); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 596; goto __pyx_L1;} __pyx_v_hi = __pyx_2; } __pyx_L2:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":593 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":598 */ __pyx_v_diff = ((__pyx_v_hi - __pyx_v_lo) - 1); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":594 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":599 */ __pyx_1 = (__pyx_v_diff < 0); if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":595 */ - __pyx_3 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 595; goto __pyx_L1;} - __pyx_4 = PyTuple_New(1); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 595; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":600 */ + __pyx_3 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 600; goto __pyx_L1;} + __pyx_4 = PyTuple_New(1); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 600; goto __pyx_L1;} Py_INCREF(__pyx_k71p); PyTuple_SET_ITEM(__pyx_4, 0, __pyx_k71p); - __pyx_5 = PyObject_CallObject(__pyx_3, __pyx_4); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 595; goto __pyx_L1;} + __pyx_5 = PyObject_CallObject(__pyx_3, __pyx_4); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 600; goto __pyx_L1;} Py_DECREF(__pyx_3); __pyx_3 = 0; Py_DECREF(__pyx_4); __pyx_4 = 0; __Pyx_Raise(__pyx_5, 0, 0); Py_DECREF(__pyx_5); __pyx_5 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 595; goto __pyx_L1;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 600; goto __pyx_L1;} goto __pyx_L3; } __pyx_L3:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":597 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":602 */ __pyx_1 = __pyx_v_size == Py_None; if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":598 */ - __pyx_3 = PyLong_FromUnsignedLong((rk_interval(__pyx_v_diff,((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state) + __pyx_v_lo)); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 598; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":603 */ + __pyx_3 = PyLong_FromUnsignedLong((rk_interval(__pyx_v_diff,((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state) + __pyx_v_lo)); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 603; goto __pyx_L1;} __pyx_r = __pyx_3; __pyx_3 = 0; goto __pyx_L0; @@ -2390,17 +2446,17 @@ } /*else*/ { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":600 */ - __pyx_4 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 600; goto __pyx_L1;} - __pyx_5 = PyObject_GetAttr(__pyx_4, __pyx_n_empty); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 600; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":605 */ + __pyx_4 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 605; goto __pyx_L1;} + __pyx_5 = PyObject_GetAttr(__pyx_4, __pyx_n_empty); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 605; goto __pyx_L1;} Py_DECREF(__pyx_4); __pyx_4 = 0; - __pyx_3 = __Pyx_GetName(__pyx_b, __pyx_n_int); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 600; goto __pyx_L1;} - __pyx_4 = PyTuple_New(2); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 600; goto __pyx_L1;} + __pyx_3 = __Pyx_GetName(__pyx_b, __pyx_n_int); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 605; goto __pyx_L1;} + __pyx_4 = PyTuple_New(2); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 605; goto __pyx_L1;} Py_INCREF(__pyx_v_size); PyTuple_SET_ITEM(__pyx_4, 0, __pyx_v_size); PyTuple_SET_ITEM(__pyx_4, 1, __pyx_3); __pyx_3 = 0; - __pyx_3 = PyObject_CallObject(__pyx_5, __pyx_4); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 600; goto __pyx_L1;} + __pyx_3 = PyObject_CallObject(__pyx_5, __pyx_4); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 605; goto __pyx_L1;} Py_DECREF(__pyx_5); __pyx_5 = 0; Py_DECREF(__pyx_4); __pyx_4 = 0; Py_INCREF(((PyObject *)((PyArrayObject *)__pyx_3))); @@ -2408,20 +2464,20 @@ arrayObject = ((PyArrayObject *)__pyx_3); Py_DECREF(__pyx_3); __pyx_3 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":601 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":606 */ __pyx_v_length = PyArray_SIZE(arrayObject); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":602 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":607 */ __pyx_v_array_data = ((long (*))arrayObject->data); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":603 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":608 */ for (__pyx_v_i = 0; __pyx_v_i < __pyx_v_length; ++__pyx_v_i) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":604 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":609 */ (__pyx_v_array_data[__pyx_v_i]) = (__pyx_v_lo + ((long )rk_interval(__pyx_v_diff,((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state))); } - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":605 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":610 */ Py_INCREF(((PyObject *)arrayObject)); __pyx_r = ((PyObject *)arrayObject); goto __pyx_L0; @@ -2458,19 +2514,19 @@ Py_INCREF(__pyx_v_self); __pyx_v_bytestring = Py_None; Py_INCREF(Py_None); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":613 */ - __pyx_1 = PyString_FromStringAndSize(NULL,__pyx_v_length); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 613; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":618 */ + __pyx_1 = PyString_FromStringAndSize(NULL,__pyx_v_length); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 618; goto __pyx_L1;} Py_DECREF(__pyx_v_bytestring); __pyx_v_bytestring = __pyx_1; __pyx_1 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":614 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":619 */ __pyx_v_bytes = PyString_AS_STRING(__pyx_v_bytestring); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":615 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":620 */ rk_fill(__pyx_v_bytes,__pyx_v_length,((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":616 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":621 */ Py_INCREF(__pyx_v_bytestring); __pyx_r = __pyx_v_bytestring; goto __pyx_L0; @@ -2520,18 +2576,18 @@ __pyx_v_odiff = ((PyArrayObject *)Py_None); Py_INCREF(Py_None); __pyx_v_temp = Py_None; Py_INCREF(Py_None); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":627 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":632 */ __pyx_v_flow = PyFloat_AsDouble(__pyx_v_low); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":628 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":633 */ __pyx_v_fhigh = PyFloat_AsDouble(__pyx_v_high); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":629 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":634 */ __pyx_1 = (!PyErr_Occurred()); if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":630 */ - __pyx_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 (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 630; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":635 */ + __pyx_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 (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 635; goto __pyx_L1;} __pyx_r = __pyx_2; __pyx_2 = 0; goto __pyx_L0; @@ -2539,51 +2595,51 @@ } __pyx_L2:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":631 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":636 */ PyErr_Clear(); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":632 */ - __pyx_2 = PyArray_FROM_OTF(__pyx_v_low,NPY_DOUBLE,NPY_ALIGNED); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 632; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":637 */ + __pyx_2 = PyArray_FROM_OTF(__pyx_v_low,NPY_DOUBLE,NPY_ALIGNED); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 637; goto __pyx_L1;} Py_INCREF(((PyObject *)((PyArrayObject *)__pyx_2))); Py_DECREF(((PyObject *)__pyx_v_olow)); __pyx_v_olow = ((PyArrayObject *)__pyx_2); Py_DECREF(__pyx_2); __pyx_2 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":633 */ - __pyx_2 = PyArray_FROM_OTF(__pyx_v_high,NPY_DOUBLE,NPY_ALIGNED); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 633; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":638 */ + __pyx_2 = PyArray_FROM_OTF(__pyx_v_high,NPY_DOUBLE,NPY_ALIGNED); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 638; goto __pyx_L1;} Py_INCREF(((PyObject *)((PyArrayObject *)__pyx_2))); Py_DECREF(((PyObject *)__pyx_v_ohigh)); __pyx_v_ohigh = ((PyArrayObject *)__pyx_2); Py_DECREF(__pyx_2); __pyx_2 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":634 */ - __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 634; goto __pyx_L1;} - __pyx_3 = PyObject_GetAttr(__pyx_2, __pyx_n_subtract); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 634; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":639 */ + __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 639; goto __pyx_L1;} + __pyx_3 = PyObject_GetAttr(__pyx_2, __pyx_n_subtract); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 639; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; - __pyx_2 = PyTuple_New(2); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 634; goto __pyx_L1;} + __pyx_2 = PyTuple_New(2); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 639; goto __pyx_L1;} Py_INCREF(((PyObject *)__pyx_v_ohigh)); PyTuple_SET_ITEM(__pyx_2, 0, ((PyObject *)__pyx_v_ohigh)); Py_INCREF(((PyObject *)__pyx_v_olow)); PyTuple_SET_ITEM(__pyx_2, 1, ((PyObject *)__pyx_v_olow)); - __pyx_4 = PyObject_CallObject(__pyx_3, __pyx_2); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 634; goto __pyx_L1;} + __pyx_4 = PyObject_CallObject(__pyx_3, __pyx_2); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 639; goto __pyx_L1;} Py_DECREF(__pyx_3); __pyx_3 = 0; Py_DECREF(__pyx_2); __pyx_2 = 0; Py_DECREF(__pyx_v_temp); __pyx_v_temp = __pyx_4; __pyx_4 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":635 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":640 */ Py_INCREF(__pyx_v_temp); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":637 */ - __pyx_3 = PyArray_EnsureArray(__pyx_v_temp); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 637; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":642 */ + __pyx_3 = PyArray_EnsureArray(__pyx_v_temp); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 642; goto __pyx_L1;} Py_INCREF(((PyObject *)((PyArrayObject *)__pyx_3))); Py_DECREF(((PyObject *)__pyx_v_odiff)); __pyx_v_odiff = ((PyArrayObject *)__pyx_3); Py_DECREF(__pyx_3); __pyx_3 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":638 */ - __pyx_2 = __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 (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 638; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":643 */ + __pyx_2 = __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 (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 643; goto __pyx_L1;} __pyx_r = __pyx_2; __pyx_2 = 0; goto __pyx_L0; @@ -2632,24 +2688,24 @@ } Py_INCREF(__pyx_v_self); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":651 */ - __pyx_1 = __Pyx_GetName(__pyx_b, __pyx_n_len); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 651; goto __pyx_L1;} - __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 651; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":656 */ + __pyx_1 = __Pyx_GetName(__pyx_b, __pyx_n_len); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 656; goto __pyx_L1;} + __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 656; goto __pyx_L1;} Py_INCREF(__pyx_v_args); PyTuple_SET_ITEM(__pyx_2, 0, __pyx_v_args); - __pyx_3 = PyObject_CallObject(__pyx_1, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 651; goto __pyx_L1;} + __pyx_3 = PyObject_CallObject(__pyx_1, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 656; goto __pyx_L1;} Py_DECREF(__pyx_1); __pyx_1 = 0; Py_DECREF(__pyx_2); __pyx_2 = 0; - __pyx_1 = PyInt_FromLong(0); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 651; goto __pyx_L1;} - if (PyObject_Cmp(__pyx_3, __pyx_1, &__pyx_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 651; goto __pyx_L1;} + __pyx_1 = PyInt_FromLong(0); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 656; goto __pyx_L1;} + if (PyObject_Cmp(__pyx_3, __pyx_1, &__pyx_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 656; goto __pyx_L1;} __pyx_4 = __pyx_4 == 0; Py_DECREF(__pyx_3); __pyx_3 = 0; Py_DECREF(__pyx_1); __pyx_1 = 0; if (__pyx_4) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":652 */ - __pyx_2 = PyObject_GetAttr(__pyx_v_self, __pyx_n_random_sample); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 652; goto __pyx_L1;} - __pyx_3 = PyObject_CallObject(__pyx_2, 0); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 652; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":657 */ + __pyx_2 = PyObject_GetAttr(__pyx_v_self, __pyx_n_random_sample); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 657; goto __pyx_L1;} + __pyx_3 = PyObject_CallObject(__pyx_2, 0); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 657; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; __pyx_r = __pyx_3; __pyx_3 = 0; @@ -2658,12 +2714,12 @@ } /*else*/ { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":654 */ - __pyx_1 = PyObject_GetAttr(__pyx_v_self, __pyx_n_random_sample); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 654; goto __pyx_L1;} - __pyx_2 = PyTuple_New(0); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 654; goto __pyx_L1;} - __pyx_3 = PyDict_New(); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 654; goto __pyx_L1;} - if (PyDict_SetItem(__pyx_3, __pyx_n_size, __pyx_v_args) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 654; goto __pyx_L1;} - __pyx_5 = PyEval_CallObjectWithKeywords(__pyx_1, __pyx_2, __pyx_3); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 654; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":659 */ + __pyx_1 = PyObject_GetAttr(__pyx_v_self, __pyx_n_random_sample); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 659; goto __pyx_L1;} + __pyx_2 = PyTuple_New(0); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 659; goto __pyx_L1;} + __pyx_3 = PyDict_New(); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 659; goto __pyx_L1;} + if (PyDict_SetItem(__pyx_3, __pyx_n_size, __pyx_v_args) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 659; goto __pyx_L1;} + __pyx_5 = PyEval_CallObjectWithKeywords(__pyx_1, __pyx_2, __pyx_3); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 659; goto __pyx_L1;} Py_DECREF(__pyx_1); __pyx_1 = 0; Py_DECREF(__pyx_2); __pyx_2 = 0; Py_DECREF(__pyx_3); __pyx_3 = 0; @@ -2709,24 +2765,24 @@ } Py_INCREF(__pyx_v_self); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":666 */ - __pyx_1 = __Pyx_GetName(__pyx_b, __pyx_n_len); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 666; goto __pyx_L1;} - __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 666; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":671 */ + __pyx_1 = __Pyx_GetName(__pyx_b, __pyx_n_len); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 671; goto __pyx_L1;} + __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 671; goto __pyx_L1;} Py_INCREF(__pyx_v_args); PyTuple_SET_ITEM(__pyx_2, 0, __pyx_v_args); - __pyx_3 = PyObject_CallObject(__pyx_1, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 666; goto __pyx_L1;} + __pyx_3 = PyObject_CallObject(__pyx_1, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 671; goto __pyx_L1;} Py_DECREF(__pyx_1); __pyx_1 = 0; Py_DECREF(__pyx_2); __pyx_2 = 0; - __pyx_1 = PyInt_FromLong(0); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 666; goto __pyx_L1;} - if (PyObject_Cmp(__pyx_3, __pyx_1, &__pyx_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 666; goto __pyx_L1;} + __pyx_1 = PyInt_FromLong(0); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 671; goto __pyx_L1;} + if (PyObject_Cmp(__pyx_3, __pyx_1, &__pyx_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 671; goto __pyx_L1;} __pyx_4 = __pyx_4 == 0; Py_DECREF(__pyx_3); __pyx_3 = 0; Py_DECREF(__pyx_1); __pyx_1 = 0; if (__pyx_4) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":667 */ - __pyx_2 = PyObject_GetAttr(__pyx_v_self, __pyx_n_standard_normal); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 667; goto __pyx_L1;} - __pyx_3 = PyObject_CallObject(__pyx_2, 0); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 667; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":672 */ + __pyx_2 = PyObject_GetAttr(__pyx_v_self, __pyx_n_standard_normal); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 672; goto __pyx_L1;} + __pyx_3 = PyObject_CallObject(__pyx_2, 0); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 672; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; __pyx_r = __pyx_3; __pyx_3 = 0; @@ -2735,12 +2791,12 @@ } /*else*/ { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":669 */ - __pyx_1 = PyObject_GetAttr(__pyx_v_self, __pyx_n_standard_normal); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 669; goto __pyx_L1;} - __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 669; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":674 */ + __pyx_1 = PyObject_GetAttr(__pyx_v_self, __pyx_n_standard_normal); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 674; goto __pyx_L1;} + __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 674; goto __pyx_L1;} Py_INCREF(__pyx_v_args); PyTuple_SET_ITEM(__pyx_2, 0, __pyx_v_args); - __pyx_3 = PyObject_CallObject(__pyx_1, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 669; goto __pyx_L1;} + __pyx_3 = PyObject_CallObject(__pyx_1, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 674; goto __pyx_L1;} Py_DECREF(__pyx_1); __pyx_1 = 0; Py_DECREF(__pyx_2); __pyx_2 = 0; __pyx_r = __pyx_3; @@ -2785,17 +2841,17 @@ Py_INCREF(__pyx_v_high); Py_INCREF(__pyx_v_size); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":678 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":683 */ __pyx_1 = __pyx_v_high == Py_None; if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":679 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":684 */ Py_INCREF(__pyx_v_low); Py_DECREF(__pyx_v_high); __pyx_v_high = __pyx_v_low; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":680 */ - __pyx_2 = PyInt_FromLong(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 680; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":685 */ + __pyx_2 = PyInt_FromLong(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 685; goto __pyx_L1;} Py_DECREF(__pyx_v_low); __pyx_v_low = __pyx_2; __pyx_2 = 0; @@ -2803,19 +2859,19 @@ } __pyx_L2:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":681 */ - __pyx_2 = PyObject_GetAttr(__pyx_v_self, __pyx_n_randint); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 681; goto __pyx_L1;} - __pyx_3 = PyInt_FromLong(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 681; goto __pyx_L1;} - __pyx_4 = PyNumber_Add(__pyx_v_high, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 681; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":686 */ + __pyx_2 = PyObject_GetAttr(__pyx_v_self, __pyx_n_randint); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 686; goto __pyx_L1;} + __pyx_3 = PyInt_FromLong(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 686; goto __pyx_L1;} + __pyx_4 = PyNumber_Add(__pyx_v_high, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 686; goto __pyx_L1;} Py_DECREF(__pyx_3); __pyx_3 = 0; - __pyx_3 = PyTuple_New(3); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 681; goto __pyx_L1;} + __pyx_3 = PyTuple_New(3); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 686; goto __pyx_L1;} Py_INCREF(__pyx_v_low); PyTuple_SET_ITEM(__pyx_3, 0, __pyx_v_low); PyTuple_SET_ITEM(__pyx_3, 1, __pyx_4); Py_INCREF(__pyx_v_size); PyTuple_SET_ITEM(__pyx_3, 2, __pyx_v_size); __pyx_4 = 0; - __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 681; goto __pyx_L1;} + __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 686; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; Py_DECREF(__pyx_3); __pyx_3 = 0; __pyx_r = __pyx_4; @@ -2850,8 +2906,8 @@ Py_INCREF(__pyx_v_self); Py_INCREF(__pyx_v_size); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":689 */ - __pyx_1 = __pyx_f_6mtrand_cont0_array(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state,rk_gauss,__pyx_v_size); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 689; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":694 */ + __pyx_1 = __pyx_f_6mtrand_cont0_array(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state,rk_gauss,__pyx_v_size); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 694; goto __pyx_L1;} __pyx_r = __pyx_1; __pyx_1 = 0; goto __pyx_L0; @@ -2905,37 +2961,37 @@ __pyx_v_oloc = ((PyArrayObject *)Py_None); Py_INCREF(Py_None); __pyx_v_oscale = ((PyArrayObject *)Py_None); Py_INCREF(Py_None); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":699 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":704 */ __pyx_v_floc = PyFloat_AsDouble(__pyx_v_loc); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":700 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":705 */ __pyx_v_fscale = PyFloat_AsDouble(__pyx_v_scale); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":701 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":706 */ __pyx_1 = (!PyErr_Occurred()); if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":702 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":707 */ __pyx_1 = (__pyx_v_fscale <= 0); if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":703 */ - __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 703; goto __pyx_L1;} - __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 703; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":708 */ + __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 708; goto __pyx_L1;} + __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 708; goto __pyx_L1;} Py_INCREF(__pyx_k73p); PyTuple_SET_ITEM(__pyx_3, 0, __pyx_k73p); - __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 703; goto __pyx_L1;} + __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 708; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; Py_DECREF(__pyx_3); __pyx_3 = 0; __Pyx_Raise(__pyx_4, 0, 0); Py_DECREF(__pyx_4); __pyx_4 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 703; goto __pyx_L1;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 708; goto __pyx_L1;} goto __pyx_L3; } __pyx_L3:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":704 */ - __pyx_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 (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 704; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":709 */ + __pyx_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 (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 709; goto __pyx_L1;} __pyx_r = __pyx_2; __pyx_2 = 0; goto __pyx_L0; @@ -2943,66 +2999,66 @@ } __pyx_L2:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":706 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":711 */ PyErr_Clear(); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":708 */ - __pyx_3 = PyArray_FROM_OTF(__pyx_v_loc,NPY_DOUBLE,NPY_ALIGNED); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 708; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":713 */ + __pyx_3 = PyArray_FROM_OTF(__pyx_v_loc,NPY_DOUBLE,NPY_ALIGNED); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 713; goto __pyx_L1;} Py_INCREF(((PyObject *)((PyArrayObject *)__pyx_3))); Py_DECREF(((PyObject *)__pyx_v_oloc)); __pyx_v_oloc = ((PyArrayObject *)__pyx_3); Py_DECREF(__pyx_3); __pyx_3 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":709 */ - __pyx_4 = PyArray_FROM_OTF(__pyx_v_scale,NPY_DOUBLE,NPY_ALIGNED); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 709; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":714 */ + __pyx_4 = PyArray_FROM_OTF(__pyx_v_scale,NPY_DOUBLE,NPY_ALIGNED); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 714; goto __pyx_L1;} Py_INCREF(((PyObject *)((PyArrayObject *)__pyx_4))); Py_DECREF(((PyObject *)__pyx_v_oscale)); __pyx_v_oscale = ((PyArrayObject *)__pyx_4); Py_DECREF(__pyx_4); __pyx_4 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":710 */ - __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 710; goto __pyx_L1;} - __pyx_3 = PyObject_GetAttr(__pyx_2, __pyx_n_any); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 710; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":715 */ + __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 715; goto __pyx_L1;} + __pyx_3 = PyObject_GetAttr(__pyx_2, __pyx_n_any); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 715; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; - __pyx_4 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 710; goto __pyx_L1;} - __pyx_2 = PyObject_GetAttr(__pyx_4, __pyx_n_less_equal); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 710; goto __pyx_L1;} + __pyx_4 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 715; goto __pyx_L1;} + __pyx_2 = PyObject_GetAttr(__pyx_4, __pyx_n_less_equal); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 715; goto __pyx_L1;} Py_DECREF(__pyx_4); __pyx_4 = 0; - __pyx_4 = PyInt_FromLong(0); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 710; goto __pyx_L1;} - __pyx_5 = PyTuple_New(2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 710; goto __pyx_L1;} + __pyx_4 = PyInt_FromLong(0); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 715; goto __pyx_L1;} + __pyx_5 = PyTuple_New(2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 715; goto __pyx_L1;} Py_INCREF(((PyObject *)__pyx_v_oscale)); PyTuple_SET_ITEM(__pyx_5, 0, ((PyObject *)__pyx_v_oscale)); PyTuple_SET_ITEM(__pyx_5, 1, __pyx_4); __pyx_4 = 0; - __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_5); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 710; goto __pyx_L1;} + __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_5); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 715; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; Py_DECREF(__pyx_5); __pyx_5 = 0; - __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 710; goto __pyx_L1;} + __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 715; goto __pyx_L1;} PyTuple_SET_ITEM(__pyx_2, 0, __pyx_4); __pyx_4 = 0; - __pyx_5 = PyObject_CallObject(__pyx_3, __pyx_2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 710; goto __pyx_L1;} + __pyx_5 = PyObject_CallObject(__pyx_3, __pyx_2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 715; goto __pyx_L1;} Py_DECREF(__pyx_3); __pyx_3 = 0; Py_DECREF(__pyx_2); __pyx_2 = 0; - __pyx_1 = PyObject_IsTrue(__pyx_5); if (__pyx_1 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 710; goto __pyx_L1;} + __pyx_1 = PyObject_IsTrue(__pyx_5); if (__pyx_1 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 715; goto __pyx_L1;} Py_DECREF(__pyx_5); __pyx_5 = 0; if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":711 */ - __pyx_4 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 711; goto __pyx_L1;} - __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 711; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":716 */ + __pyx_4 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 716; goto __pyx_L1;} + __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 716; goto __pyx_L1;} Py_INCREF(__pyx_k74p); PyTuple_SET_ITEM(__pyx_3, 0, __pyx_k74p); - __pyx_2 = PyObject_CallObject(__pyx_4, __pyx_3); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 711; goto __pyx_L1;} + __pyx_2 = PyObject_CallObject(__pyx_4, __pyx_3); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 716; goto __pyx_L1;} Py_DECREF(__pyx_4); __pyx_4 = 0; Py_DECREF(__pyx_3); __pyx_3 = 0; __Pyx_Raise(__pyx_2, 0, 0); Py_DECREF(__pyx_2); __pyx_2 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 711; goto __pyx_L1;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 716; goto __pyx_L1;} goto __pyx_L4; } __pyx_L4:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":712 */ - __pyx_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 (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 712; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":717 */ + __pyx_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 (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 717; goto __pyx_L1;} __pyx_r = __pyx_5; __pyx_5 = 0; goto __pyx_L0; @@ -3062,56 +3118,56 @@ __pyx_v_oa = ((PyArrayObject *)Py_None); Py_INCREF(Py_None); __pyx_v_ob = ((PyArrayObject *)Py_None); Py_INCREF(Py_None); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":722 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":727 */ __pyx_v_fa = PyFloat_AsDouble(__pyx_v_a); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":723 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":728 */ __pyx_v_fb = PyFloat_AsDouble(__pyx_v_b); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":724 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":729 */ __pyx_1 = (!PyErr_Occurred()); if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":725 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":730 */ __pyx_1 = (__pyx_v_fa <= 0); if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":726 */ - __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 726; goto __pyx_L1;} - __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 726; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":731 */ + __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 731; goto __pyx_L1;} + __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 731; goto __pyx_L1;} Py_INCREF(__pyx_k75p); PyTuple_SET_ITEM(__pyx_3, 0, __pyx_k75p); - __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 726; goto __pyx_L1;} + __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 731; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; Py_DECREF(__pyx_3); __pyx_3 = 0; __Pyx_Raise(__pyx_4, 0, 0); Py_DECREF(__pyx_4); __pyx_4 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 726; goto __pyx_L1;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 731; goto __pyx_L1;} goto __pyx_L3; } __pyx_L3:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":727 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":732 */ __pyx_1 = (__pyx_v_fb <= 0); if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":728 */ - __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 728; goto __pyx_L1;} - __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 728; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":733 */ + __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 733; goto __pyx_L1;} + __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 733; goto __pyx_L1;} Py_INCREF(__pyx_k76p); PyTuple_SET_ITEM(__pyx_3, 0, __pyx_k76p); - __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 728; goto __pyx_L1;} + __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 733; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; Py_DECREF(__pyx_3); __pyx_3 = 0; __Pyx_Raise(__pyx_4, 0, 0); Py_DECREF(__pyx_4); __pyx_4 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 728; goto __pyx_L1;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 733; goto __pyx_L1;} goto __pyx_L4; } __pyx_L4:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":729 */ - __pyx_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 (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 729; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":734 */ + __pyx_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 (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 734; goto __pyx_L1;} __pyx_r = __pyx_2; __pyx_2 = 0; goto __pyx_L0; @@ -3119,107 +3175,107 @@ } __pyx_L2:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":731 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":736 */ PyErr_Clear(); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":733 */ - __pyx_3 = PyArray_FROM_OTF(__pyx_v_a,NPY_DOUBLE,NPY_ALIGNED); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 733; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":738 */ + __pyx_3 = PyArray_FROM_OTF(__pyx_v_a,NPY_DOUBLE,NPY_ALIGNED); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 738; goto __pyx_L1;} Py_INCREF(((PyObject *)((PyArrayObject *)__pyx_3))); Py_DECREF(((PyObject *)__pyx_v_oa)); __pyx_v_oa = ((PyArrayObject *)__pyx_3); Py_DECREF(__pyx_3); __pyx_3 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":734 */ - __pyx_4 = PyArray_FROM_OTF(__pyx_v_b,NPY_DOUBLE,NPY_ALIGNED); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 734; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":739 */ + __pyx_4 = PyArray_FROM_OTF(__pyx_v_b,NPY_DOUBLE,NPY_ALIGNED); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 739; goto __pyx_L1;} Py_INCREF(((PyObject *)((PyArrayObject *)__pyx_4))); Py_DECREF(((PyObject *)__pyx_v_ob)); __pyx_v_ob = ((PyArrayObject *)__pyx_4); Py_DECREF(__pyx_4); __pyx_4 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":735 */ - __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 735; goto __pyx_L1;} - __pyx_3 = PyObject_GetAttr(__pyx_2, __pyx_n_any); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 735; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":740 */ + __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 740; goto __pyx_L1;} + __pyx_3 = PyObject_GetAttr(__pyx_2, __pyx_n_any); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 740; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; - __pyx_4 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 735; goto __pyx_L1;} - __pyx_2 = PyObject_GetAttr(__pyx_4, __pyx_n_less_equal); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 735; goto __pyx_L1;} + __pyx_4 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 740; goto __pyx_L1;} + __pyx_2 = PyObject_GetAttr(__pyx_4, __pyx_n_less_equal); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 740; goto __pyx_L1;} Py_DECREF(__pyx_4); __pyx_4 = 0; - __pyx_4 = PyInt_FromLong(0); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 735; goto __pyx_L1;} - __pyx_5 = PyTuple_New(2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 735; goto __pyx_L1;} + __pyx_4 = PyInt_FromLong(0); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 740; goto __pyx_L1;} + __pyx_5 = PyTuple_New(2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 740; goto __pyx_L1;} Py_INCREF(((PyObject *)__pyx_v_oa)); PyTuple_SET_ITEM(__pyx_5, 0, ((PyObject *)__pyx_v_oa)); PyTuple_SET_ITEM(__pyx_5, 1, __pyx_4); __pyx_4 = 0; - __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_5); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 735; goto __pyx_L1;} + __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_5); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 740; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; Py_DECREF(__pyx_5); __pyx_5 = 0; - __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 735; goto __pyx_L1;} + __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 740; goto __pyx_L1;} PyTuple_SET_ITEM(__pyx_2, 0, __pyx_4); __pyx_4 = 0; - __pyx_5 = PyObject_CallObject(__pyx_3, __pyx_2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 735; goto __pyx_L1;} + __pyx_5 = PyObject_CallObject(__pyx_3, __pyx_2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 740; goto __pyx_L1;} Py_DECREF(__pyx_3); __pyx_3 = 0; Py_DECREF(__pyx_2); __pyx_2 = 0; - __pyx_1 = PyObject_IsTrue(__pyx_5); if (__pyx_1 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 735; goto __pyx_L1;} + __pyx_1 = PyObject_IsTrue(__pyx_5); if (__pyx_1 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 740; goto __pyx_L1;} Py_DECREF(__pyx_5); __pyx_5 = 0; if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":736 */ - __pyx_4 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 736; goto __pyx_L1;} - __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 736; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":741 */ + __pyx_4 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 741; goto __pyx_L1;} + __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 741; goto __pyx_L1;} Py_INCREF(__pyx_k77p); PyTuple_SET_ITEM(__pyx_3, 0, __pyx_k77p); - __pyx_2 = PyObject_CallObject(__pyx_4, __pyx_3); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 736; goto __pyx_L1;} + __pyx_2 = PyObject_CallObject(__pyx_4, __pyx_3); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 741; goto __pyx_L1;} Py_DECREF(__pyx_4); __pyx_4 = 0; Py_DECREF(__pyx_3); __pyx_3 = 0; __Pyx_Raise(__pyx_2, 0, 0); Py_DECREF(__pyx_2); __pyx_2 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 736; goto __pyx_L1;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 741; goto __pyx_L1;} goto __pyx_L5; } __pyx_L5:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":737 */ - __pyx_5 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 737; goto __pyx_L1;} - __pyx_4 = PyObject_GetAttr(__pyx_5, __pyx_n_any); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 737; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":742 */ + __pyx_5 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 742; goto __pyx_L1;} + __pyx_4 = PyObject_GetAttr(__pyx_5, __pyx_n_any); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 742; goto __pyx_L1;} Py_DECREF(__pyx_5); __pyx_5 = 0; - __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 737; goto __pyx_L1;} - __pyx_2 = PyObject_GetAttr(__pyx_3, __pyx_n_less_equal); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 737; goto __pyx_L1;} + __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 742; goto __pyx_L1;} + __pyx_2 = PyObject_GetAttr(__pyx_3, __pyx_n_less_equal); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 742; goto __pyx_L1;} Py_DECREF(__pyx_3); __pyx_3 = 0; - __pyx_5 = PyInt_FromLong(0); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 737; goto __pyx_L1;} - __pyx_3 = PyTuple_New(2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 737; goto __pyx_L1;} + __pyx_5 = PyInt_FromLong(0); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 742; goto __pyx_L1;} + __pyx_3 = PyTuple_New(2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 742; goto __pyx_L1;} Py_INCREF(((PyObject *)__pyx_v_ob)); PyTuple_SET_ITEM(__pyx_3, 0, ((PyObject *)__pyx_v_ob)); PyTuple_SET_ITEM(__pyx_3, 1, __pyx_5); __pyx_5 = 0; - __pyx_5 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 737; goto __pyx_L1;} + __pyx_5 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 742; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; Py_DECREF(__pyx_3); __pyx_3 = 0; - __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 737; goto __pyx_L1;} + __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 742; goto __pyx_L1;} PyTuple_SET_ITEM(__pyx_2, 0, __pyx_5); __pyx_5 = 0; - __pyx_3 = PyObject_CallObject(__pyx_4, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 737; goto __pyx_L1;} + __pyx_3 = PyObject_CallObject(__pyx_4, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 742; goto __pyx_L1;} Py_DECREF(__pyx_4); __pyx_4 = 0; Py_DECREF(__pyx_2); __pyx_2 = 0; - __pyx_1 = PyObject_IsTrue(__pyx_3); if (__pyx_1 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 737; goto __pyx_L1;} + __pyx_1 = PyObject_IsTrue(__pyx_3); if (__pyx_1 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 742; goto __pyx_L1;} Py_DECREF(__pyx_3); __pyx_3 = 0; if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":738 */ - __pyx_5 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 738; goto __pyx_L1;} - __pyx_4 = PyTuple_New(1); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 738; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":743 */ + __pyx_5 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 743; goto __pyx_L1;} + __pyx_4 = PyTuple_New(1); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 743; goto __pyx_L1;} Py_INCREF(__pyx_k78p); PyTuple_SET_ITEM(__pyx_4, 0, __pyx_k78p); - __pyx_2 = PyObject_CallObject(__pyx_5, __pyx_4); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 738; goto __pyx_L1;} + __pyx_2 = PyObject_CallObject(__pyx_5, __pyx_4); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 743; goto __pyx_L1;} Py_DECREF(__pyx_5); __pyx_5 = 0; Py_DECREF(__pyx_4); __pyx_4 = 0; __Pyx_Raise(__pyx_2, 0, 0); Py_DECREF(__pyx_2); __pyx_2 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 738; goto __pyx_L1;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 743; goto __pyx_L1;} goto __pyx_L6; } __pyx_L6:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":739 */ - __pyx_3 = __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 (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 739; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":744 */ + __pyx_3 = __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 (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 744; goto __pyx_L1;} __pyx_r = __pyx_3; __pyx_3 = 0; goto __pyx_L0; @@ -3271,34 +3327,34 @@ Py_INCREF(__pyx_v_size); __pyx_v_oscale = ((PyArrayObject *)Py_None); Py_INCREF(Py_None); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":749 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":754 */ __pyx_v_fscale = PyFloat_AsDouble(__pyx_v_scale); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":750 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":755 */ __pyx_1 = (!PyErr_Occurred()); if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":751 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":756 */ __pyx_1 = (__pyx_v_fscale <= 0); if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":752 */ - __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 752; goto __pyx_L1;} - __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 752; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":757 */ + __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 757; goto __pyx_L1;} + __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 757; goto __pyx_L1;} Py_INCREF(__pyx_k79p); PyTuple_SET_ITEM(__pyx_3, 0, __pyx_k79p); - __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 752; goto __pyx_L1;} + __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 757; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; Py_DECREF(__pyx_3); __pyx_3 = 0; __Pyx_Raise(__pyx_4, 0, 0); Py_DECREF(__pyx_4); __pyx_4 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 752; goto __pyx_L1;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 757; goto __pyx_L1;} goto __pyx_L3; } __pyx_L3:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":753 */ - __pyx_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 (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 753; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":758 */ + __pyx_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 (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 758; goto __pyx_L1;} __pyx_r = __pyx_2; __pyx_2 = 0; goto __pyx_L0; @@ -3306,59 +3362,59 @@ } __pyx_L2:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":755 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":760 */ PyErr_Clear(); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":757 */ - __pyx_3 = PyArray_FROM_OTF(__pyx_v_scale,NPY_DOUBLE,NPY_ALIGNED); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 757; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":762 */ + __pyx_3 = PyArray_FROM_OTF(__pyx_v_scale,NPY_DOUBLE,NPY_ALIGNED); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 762; goto __pyx_L1;} Py_INCREF(((PyObject *)((PyArrayObject *)__pyx_3))); Py_DECREF(((PyObject *)__pyx_v_oscale)); __pyx_v_oscale = ((PyArrayObject *)__pyx_3); Py_DECREF(__pyx_3); __pyx_3 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":758 */ - __pyx_4 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 758; goto __pyx_L1;} - __pyx_2 = PyObject_GetAttr(__pyx_4, __pyx_n_any); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 758; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":763 */ + __pyx_4 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 763; goto __pyx_L1;} + __pyx_2 = PyObject_GetAttr(__pyx_4, __pyx_n_any); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 763; goto __pyx_L1;} Py_DECREF(__pyx_4); __pyx_4 = 0; - __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 758; goto __pyx_L1;} - __pyx_4 = PyObject_GetAttr(__pyx_3, __pyx_n_less_equal); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 758; goto __pyx_L1;} + __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 763; goto __pyx_L1;} + __pyx_4 = PyObject_GetAttr(__pyx_3, __pyx_n_less_equal); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 763; goto __pyx_L1;} Py_DECREF(__pyx_3); __pyx_3 = 0; - __pyx_3 = PyFloat_FromDouble(0.0); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 758; goto __pyx_L1;} - __pyx_5 = PyTuple_New(2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 758; goto __pyx_L1;} + __pyx_3 = PyFloat_FromDouble(0.0); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 763; goto __pyx_L1;} + __pyx_5 = PyTuple_New(2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 763; goto __pyx_L1;} Py_INCREF(((PyObject *)__pyx_v_oscale)); PyTuple_SET_ITEM(__pyx_5, 0, ((PyObject *)__pyx_v_oscale)); PyTuple_SET_ITEM(__pyx_5, 1, __pyx_3); __pyx_3 = 0; - __pyx_3 = PyObject_CallObject(__pyx_4, __pyx_5); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 758; goto __pyx_L1;} + __pyx_3 = PyObject_CallObject(__pyx_4, __pyx_5); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 763; goto __pyx_L1;} Py_DECREF(__pyx_4); __pyx_4 = 0; Py_DECREF(__pyx_5); __pyx_5 = 0; - __pyx_4 = PyTuple_New(1); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 758; goto __pyx_L1;} + __pyx_4 = PyTuple_New(1); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 763; goto __pyx_L1;} PyTuple_SET_ITEM(__pyx_4, 0, __pyx_3); __pyx_3 = 0; - __pyx_5 = PyObject_CallObject(__pyx_2, __pyx_4); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 758; goto __pyx_L1;} + __pyx_5 = PyObject_CallObject(__pyx_2, __pyx_4); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 763; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; Py_DECREF(__pyx_4); __pyx_4 = 0; - __pyx_1 = PyObject_IsTrue(__pyx_5); if (__pyx_1 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 758; goto __pyx_L1;} + __pyx_1 = PyObject_IsTrue(__pyx_5); if (__pyx_1 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 763; goto __pyx_L1;} Py_DECREF(__pyx_5); __pyx_5 = 0; if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":759 */ - __pyx_3 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 759; goto __pyx_L1;} - __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 759; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":764 */ + __pyx_3 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 764; goto __pyx_L1;} + __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 764; goto __pyx_L1;} Py_INCREF(__pyx_k80p); PyTuple_SET_ITEM(__pyx_2, 0, __pyx_k80p); - __pyx_4 = PyObject_CallObject(__pyx_3, __pyx_2); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 759; goto __pyx_L1;} + __pyx_4 = PyObject_CallObject(__pyx_3, __pyx_2); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 764; goto __pyx_L1;} Py_DECREF(__pyx_3); __pyx_3 = 0; Py_DECREF(__pyx_2); __pyx_2 = 0; __Pyx_Raise(__pyx_4, 0, 0); Py_DECREF(__pyx_4); __pyx_4 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 759; goto __pyx_L1;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 764; goto __pyx_L1;} goto __pyx_L4; } __pyx_L4:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":760 */ - __pyx_5 = __pyx_f_6mtrand_cont1_array(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state,rk_exponential,__pyx_v_size,__pyx_v_oscale); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 760; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":765 */ + __pyx_5 = __pyx_f_6mtrand_cont1_array(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state,rk_exponential,__pyx_v_size,__pyx_v_oscale); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 765; goto __pyx_L1;} __pyx_r = __pyx_5; __pyx_5 = 0; goto __pyx_L0; @@ -3392,8 +3448,8 @@ Py_INCREF(__pyx_v_self); Py_INCREF(__pyx_v_size); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":767 */ - __pyx_1 = __pyx_f_6mtrand_cont0_array(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state,rk_standard_exponential,__pyx_v_size); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 767; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":772 */ + __pyx_1 = __pyx_f_6mtrand_cont0_array(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state,rk_standard_exponential,__pyx_v_size); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 772; goto __pyx_L1;} __pyx_r = __pyx_1; __pyx_1 = 0; goto __pyx_L0; @@ -3437,34 +3493,34 @@ Py_INCREF(__pyx_v_size); __pyx_v_oshape = ((PyArrayObject *)Py_None); Py_INCREF(Py_None); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":777 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":782 */ __pyx_v_fshape = PyFloat_AsDouble(__pyx_v_shape); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":778 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":783 */ __pyx_1 = (!PyErr_Occurred()); if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":779 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":784 */ __pyx_1 = (__pyx_v_fshape <= 0); if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":780 */ - __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 780; goto __pyx_L1;} - __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 780; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":785 */ + __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 785; goto __pyx_L1;} + __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 785; goto __pyx_L1;} Py_INCREF(__pyx_k81p); PyTuple_SET_ITEM(__pyx_3, 0, __pyx_k81p); - __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 780; goto __pyx_L1;} + __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 785; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; Py_DECREF(__pyx_3); __pyx_3 = 0; __Pyx_Raise(__pyx_4, 0, 0); Py_DECREF(__pyx_4); __pyx_4 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 780; goto __pyx_L1;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 785; goto __pyx_L1;} goto __pyx_L3; } __pyx_L3:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":781 */ - __pyx_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 (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 781; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":786 */ + __pyx_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 (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 786; goto __pyx_L1;} __pyx_r = __pyx_2; __pyx_2 = 0; goto __pyx_L0; @@ -3472,59 +3528,59 @@ } __pyx_L2:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":783 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":788 */ PyErr_Clear(); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":784 */ - __pyx_3 = PyArray_FROM_OTF(__pyx_v_shape,NPY_DOUBLE,NPY_ALIGNED); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 784; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":789 */ + __pyx_3 = PyArray_FROM_OTF(__pyx_v_shape,NPY_DOUBLE,NPY_ALIGNED); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 789; goto __pyx_L1;} Py_INCREF(((PyObject *)((PyArrayObject *)__pyx_3))); Py_DECREF(((PyObject *)__pyx_v_oshape)); __pyx_v_oshape = ((PyArrayObject *)__pyx_3); Py_DECREF(__pyx_3); __pyx_3 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":785 */ - __pyx_4 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 785; goto __pyx_L1;} - __pyx_2 = PyObject_GetAttr(__pyx_4, __pyx_n_any); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 785; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":790 */ + __pyx_4 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 790; goto __pyx_L1;} + __pyx_2 = PyObject_GetAttr(__pyx_4, __pyx_n_any); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 790; goto __pyx_L1;} Py_DECREF(__pyx_4); __pyx_4 = 0; - __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 785; goto __pyx_L1;} - __pyx_4 = PyObject_GetAttr(__pyx_3, __pyx_n_less_equal); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 785; goto __pyx_L1;} + __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 790; goto __pyx_L1;} + __pyx_4 = PyObject_GetAttr(__pyx_3, __pyx_n_less_equal); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 790; goto __pyx_L1;} Py_DECREF(__pyx_3); __pyx_3 = 0; - __pyx_3 = PyFloat_FromDouble(0.0); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 785; goto __pyx_L1;} - __pyx_5 = PyTuple_New(2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 785; goto __pyx_L1;} + __pyx_3 = PyFloat_FromDouble(0.0); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 790; goto __pyx_L1;} + __pyx_5 = PyTuple_New(2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 790; goto __pyx_L1;} Py_INCREF(((PyObject *)__pyx_v_oshape)); PyTuple_SET_ITEM(__pyx_5, 0, ((PyObject *)__pyx_v_oshape)); PyTuple_SET_ITEM(__pyx_5, 1, __pyx_3); __pyx_3 = 0; - __pyx_3 = PyObject_CallObject(__pyx_4, __pyx_5); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 785; goto __pyx_L1;} + __pyx_3 = PyObject_CallObject(__pyx_4, __pyx_5); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 790; goto __pyx_L1;} Py_DECREF(__pyx_4); __pyx_4 = 0; Py_DECREF(__pyx_5); __pyx_5 = 0; - __pyx_4 = PyTuple_New(1); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 785; goto __pyx_L1;} + __pyx_4 = PyTuple_New(1); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 790; goto __pyx_L1;} PyTuple_SET_ITEM(__pyx_4, 0, __pyx_3); __pyx_3 = 0; - __pyx_5 = PyObject_CallObject(__pyx_2, __pyx_4); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 785; goto __pyx_L1;} + __pyx_5 = PyObject_CallObject(__pyx_2, __pyx_4); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 790; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; Py_DECREF(__pyx_4); __pyx_4 = 0; - __pyx_1 = PyObject_IsTrue(__pyx_5); if (__pyx_1 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 785; goto __pyx_L1;} + __pyx_1 = PyObject_IsTrue(__pyx_5); if (__pyx_1 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 790; goto __pyx_L1;} Py_DECREF(__pyx_5); __pyx_5 = 0; if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":786 */ - __pyx_3 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 786; goto __pyx_L1;} - __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 786; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":791 */ + __pyx_3 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 791; goto __pyx_L1;} + __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 791; goto __pyx_L1;} Py_INCREF(__pyx_k82p); PyTuple_SET_ITEM(__pyx_2, 0, __pyx_k82p); - __pyx_4 = PyObject_CallObject(__pyx_3, __pyx_2); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 786; goto __pyx_L1;} + __pyx_4 = PyObject_CallObject(__pyx_3, __pyx_2); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 791; goto __pyx_L1;} Py_DECREF(__pyx_3); __pyx_3 = 0; Py_DECREF(__pyx_2); __pyx_2 = 0; __Pyx_Raise(__pyx_4, 0, 0); Py_DECREF(__pyx_4); __pyx_4 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 786; goto __pyx_L1;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 791; goto __pyx_L1;} goto __pyx_L4; } __pyx_L4:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":787 */ - __pyx_5 = __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 (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 787; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":792 */ + __pyx_5 = __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 (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 792; goto __pyx_L1;} __pyx_r = __pyx_5; __pyx_5 = 0; goto __pyx_L0; @@ -3583,56 +3639,56 @@ __pyx_v_oshape = ((PyArrayObject *)Py_None); Py_INCREF(Py_None); __pyx_v_oscale = ((PyArrayObject *)Py_None); Py_INCREF(Py_None); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":797 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":802 */ __pyx_v_fshape = PyFloat_AsDouble(__pyx_v_shape); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":798 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":803 */ __pyx_v_fscale = PyFloat_AsDouble(__pyx_v_scale); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":799 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":804 */ __pyx_1 = (!PyErr_Occurred()); if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":800 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":805 */ __pyx_1 = (__pyx_v_fshape <= 0); if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":801 */ - __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 801; goto __pyx_L1;} - __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 801; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":806 */ + __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 806; goto __pyx_L1;} + __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 806; goto __pyx_L1;} Py_INCREF(__pyx_k83p); PyTuple_SET_ITEM(__pyx_3, 0, __pyx_k83p); - __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 801; goto __pyx_L1;} + __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 806; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; Py_DECREF(__pyx_3); __pyx_3 = 0; __Pyx_Raise(__pyx_4, 0, 0); Py_DECREF(__pyx_4); __pyx_4 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 801; goto __pyx_L1;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 806; goto __pyx_L1;} goto __pyx_L3; } __pyx_L3:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":802 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":807 */ __pyx_1 = (__pyx_v_fscale <= 0); if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":803 */ - __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 803; goto __pyx_L1;} - __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 803; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":808 */ + __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 808; goto __pyx_L1;} + __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 808; goto __pyx_L1;} Py_INCREF(__pyx_k84p); PyTuple_SET_ITEM(__pyx_3, 0, __pyx_k84p); - __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 803; goto __pyx_L1;} + __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 808; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; Py_DECREF(__pyx_3); __pyx_3 = 0; __Pyx_Raise(__pyx_4, 0, 0); Py_DECREF(__pyx_4); __pyx_4 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 803; goto __pyx_L1;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 808; goto __pyx_L1;} goto __pyx_L4; } __pyx_L4:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":804 */ - __pyx_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 (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 804; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":809 */ + __pyx_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 (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 809; goto __pyx_L1;} __pyx_r = __pyx_2; __pyx_2 = 0; goto __pyx_L0; @@ -3640,107 +3696,107 @@ } __pyx_L2:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":806 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":811 */ PyErr_Clear(); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":807 */ - __pyx_3 = PyArray_FROM_OTF(__pyx_v_shape,NPY_DOUBLE,NPY_ALIGNED); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 807; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":812 */ + __pyx_3 = PyArray_FROM_OTF(__pyx_v_shape,NPY_DOUBLE,NPY_ALIGNED); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 812; goto __pyx_L1;} Py_INCREF(((PyObject *)((PyArrayObject *)__pyx_3))); Py_DECREF(((PyObject *)__pyx_v_oshape)); __pyx_v_oshape = ((PyArrayObject *)__pyx_3); Py_DECREF(__pyx_3); __pyx_3 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":808 */ - __pyx_4 = PyArray_FROM_OTF(__pyx_v_scale,NPY_DOUBLE,NPY_ALIGNED); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 808; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":813 */ + __pyx_4 = PyArray_FROM_OTF(__pyx_v_scale,NPY_DOUBLE,NPY_ALIGNED); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 813; goto __pyx_L1;} Py_INCREF(((PyObject *)((PyArrayObject *)__pyx_4))); Py_DECREF(((PyObject *)__pyx_v_oscale)); __pyx_v_oscale = ((PyArrayObject *)__pyx_4); Py_DECREF(__pyx_4); __pyx_4 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":809 */ - __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 809; goto __pyx_L1;} - __pyx_3 = PyObject_GetAttr(__pyx_2, __pyx_n_any); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 809; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":814 */ + __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 814; goto __pyx_L1;} + __pyx_3 = PyObject_GetAttr(__pyx_2, __pyx_n_any); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 814; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; - __pyx_4 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 809; goto __pyx_L1;} - __pyx_2 = PyObject_GetAttr(__pyx_4, __pyx_n_less_equal); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 809; goto __pyx_L1;} + __pyx_4 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 814; goto __pyx_L1;} + __pyx_2 = PyObject_GetAttr(__pyx_4, __pyx_n_less_equal); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 814; goto __pyx_L1;} Py_DECREF(__pyx_4); __pyx_4 = 0; - __pyx_4 = PyFloat_FromDouble(0.0); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 809; goto __pyx_L1;} - __pyx_5 = PyTuple_New(2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 809; goto __pyx_L1;} + __pyx_4 = PyFloat_FromDouble(0.0); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 814; goto __pyx_L1;} + __pyx_5 = PyTuple_New(2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 814; goto __pyx_L1;} Py_INCREF(((PyObject *)__pyx_v_oshape)); PyTuple_SET_ITEM(__pyx_5, 0, ((PyObject *)__pyx_v_oshape)); PyTuple_SET_ITEM(__pyx_5, 1, __pyx_4); __pyx_4 = 0; - __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_5); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 809; goto __pyx_L1;} + __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_5); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 814; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; Py_DECREF(__pyx_5); __pyx_5 = 0; - __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 809; goto __pyx_L1;} + __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 814; goto __pyx_L1;} PyTuple_SET_ITEM(__pyx_2, 0, __pyx_4); __pyx_4 = 0; - __pyx_5 = PyObject_CallObject(__pyx_3, __pyx_2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 809; goto __pyx_L1;} + __pyx_5 = PyObject_CallObject(__pyx_3, __pyx_2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 814; goto __pyx_L1;} Py_DECREF(__pyx_3); __pyx_3 = 0; Py_DECREF(__pyx_2); __pyx_2 = 0; - __pyx_1 = PyObject_IsTrue(__pyx_5); if (__pyx_1 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 809; goto __pyx_L1;} + __pyx_1 = PyObject_IsTrue(__pyx_5); if (__pyx_1 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 814; goto __pyx_L1;} Py_DECREF(__pyx_5); __pyx_5 = 0; if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":810 */ - __pyx_4 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 810; goto __pyx_L1;} - __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 810; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":815 */ + __pyx_4 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 815; goto __pyx_L1;} + __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 815; goto __pyx_L1;} Py_INCREF(__pyx_k85p); PyTuple_SET_ITEM(__pyx_3, 0, __pyx_k85p); - __pyx_2 = PyObject_CallObject(__pyx_4, __pyx_3); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 810; goto __pyx_L1;} + __pyx_2 = PyObject_CallObject(__pyx_4, __pyx_3); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 815; goto __pyx_L1;} Py_DECREF(__pyx_4); __pyx_4 = 0; Py_DECREF(__pyx_3); __pyx_3 = 0; __Pyx_Raise(__pyx_2, 0, 0); Py_DECREF(__pyx_2); __pyx_2 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 810; goto __pyx_L1;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 815; goto __pyx_L1;} goto __pyx_L5; } __pyx_L5:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":811 */ - __pyx_5 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 811; goto __pyx_L1;} - __pyx_4 = PyObject_GetAttr(__pyx_5, __pyx_n_any); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 811; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":816 */ + __pyx_5 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 816; goto __pyx_L1;} + __pyx_4 = PyObject_GetAttr(__pyx_5, __pyx_n_any); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 816; goto __pyx_L1;} Py_DECREF(__pyx_5); __pyx_5 = 0; - __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 811; goto __pyx_L1;} - __pyx_2 = PyObject_GetAttr(__pyx_3, __pyx_n_less_equal); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 811; goto __pyx_L1;} + __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 816; goto __pyx_L1;} + __pyx_2 = PyObject_GetAttr(__pyx_3, __pyx_n_less_equal); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 816; goto __pyx_L1;} Py_DECREF(__pyx_3); __pyx_3 = 0; - __pyx_5 = PyFloat_FromDouble(0.0); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 811; goto __pyx_L1;} - __pyx_3 = PyTuple_New(2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 811; goto __pyx_L1;} + __pyx_5 = PyFloat_FromDouble(0.0); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 816; goto __pyx_L1;} + __pyx_3 = PyTuple_New(2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 816; goto __pyx_L1;} Py_INCREF(((PyObject *)__pyx_v_oscale)); PyTuple_SET_ITEM(__pyx_3, 0, ((PyObject *)__pyx_v_oscale)); PyTuple_SET_ITEM(__pyx_3, 1, __pyx_5); __pyx_5 = 0; - __pyx_5 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 811; goto __pyx_L1;} + __pyx_5 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 816; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; Py_DECREF(__pyx_3); __pyx_3 = 0; - __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 811; goto __pyx_L1;} + __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 816; goto __pyx_L1;} PyTuple_SET_ITEM(__pyx_2, 0, __pyx_5); __pyx_5 = 0; - __pyx_3 = PyObject_CallObject(__pyx_4, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 811; goto __pyx_L1;} + __pyx_3 = PyObject_CallObject(__pyx_4, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 816; goto __pyx_L1;} Py_DECREF(__pyx_4); __pyx_4 = 0; Py_DECREF(__pyx_2); __pyx_2 = 0; - __pyx_1 = PyObject_IsTrue(__pyx_3); if (__pyx_1 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 811; goto __pyx_L1;} + __pyx_1 = PyObject_IsTrue(__pyx_3); if (__pyx_1 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 816; goto __pyx_L1;} Py_DECREF(__pyx_3); __pyx_3 = 0; if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":812 */ - __pyx_5 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 812; goto __pyx_L1;} - __pyx_4 = PyTuple_New(1); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 812; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":817 */ + __pyx_5 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 817; goto __pyx_L1;} + __pyx_4 = PyTuple_New(1); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 817; goto __pyx_L1;} Py_INCREF(__pyx_k86p); PyTuple_SET_ITEM(__pyx_4, 0, __pyx_k86p); - __pyx_2 = PyObject_CallObject(__pyx_5, __pyx_4); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 812; goto __pyx_L1;} + __pyx_2 = PyObject_CallObject(__pyx_5, __pyx_4); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 817; goto __pyx_L1;} Py_DECREF(__pyx_5); __pyx_5 = 0; Py_DECREF(__pyx_4); __pyx_4 = 0; __Pyx_Raise(__pyx_2, 0, 0); Py_DECREF(__pyx_2); __pyx_2 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 812; goto __pyx_L1;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 817; goto __pyx_L1;} goto __pyx_L6; } __pyx_L6:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":813 */ - __pyx_3 = __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 (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 813; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":818 */ + __pyx_3 = __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 (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 818; goto __pyx_L1;} __pyx_r = __pyx_3; __pyx_3 = 0; goto __pyx_L0; @@ -3800,56 +3856,56 @@ __pyx_v_odfnum = ((PyArrayObject *)Py_None); Py_INCREF(Py_None); __pyx_v_odfden = ((PyArrayObject *)Py_None); Py_INCREF(Py_None); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":823 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":828 */ __pyx_v_fdfnum = PyFloat_AsDouble(__pyx_v_dfnum); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":824 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":829 */ __pyx_v_fdfden = PyFloat_AsDouble(__pyx_v_dfden); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":825 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":830 */ __pyx_1 = (!PyErr_Occurred()); if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":826 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":831 */ __pyx_1 = (__pyx_v_fdfnum <= 0); if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":827 */ - __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 827; goto __pyx_L1;} - __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 827; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":832 */ + __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 832; goto __pyx_L1;} + __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 832; goto __pyx_L1;} Py_INCREF(__pyx_k87p); PyTuple_SET_ITEM(__pyx_3, 0, __pyx_k87p); - __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 827; goto __pyx_L1;} + __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 832; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; Py_DECREF(__pyx_3); __pyx_3 = 0; __Pyx_Raise(__pyx_4, 0, 0); Py_DECREF(__pyx_4); __pyx_4 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 827; goto __pyx_L1;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 832; goto __pyx_L1;} goto __pyx_L3; } __pyx_L3:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":828 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":833 */ __pyx_1 = (__pyx_v_fdfden <= 0); if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":829 */ - __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 829; goto __pyx_L1;} - __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 829; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":834 */ + __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 834; goto __pyx_L1;} + __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 834; goto __pyx_L1;} Py_INCREF(__pyx_k88p); PyTuple_SET_ITEM(__pyx_3, 0, __pyx_k88p); - __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 829; goto __pyx_L1;} + __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 834; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; Py_DECREF(__pyx_3); __pyx_3 = 0; __Pyx_Raise(__pyx_4, 0, 0); Py_DECREF(__pyx_4); __pyx_4 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 829; goto __pyx_L1;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 834; goto __pyx_L1;} goto __pyx_L4; } __pyx_L4:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":830 */ - __pyx_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 (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 830; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":835 */ + __pyx_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 (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 835; goto __pyx_L1;} __pyx_r = __pyx_2; __pyx_2 = 0; goto __pyx_L0; @@ -3857,107 +3913,107 @@ } __pyx_L2:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":832 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":837 */ PyErr_Clear(); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":834 */ - __pyx_3 = PyArray_FROM_OTF(__pyx_v_dfnum,NPY_DOUBLE,NPY_ALIGNED); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 834; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":839 */ + __pyx_3 = PyArray_FROM_OTF(__pyx_v_dfnum,NPY_DOUBLE,NPY_ALIGNED); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 839; goto __pyx_L1;} Py_INCREF(((PyObject *)((PyArrayObject *)__pyx_3))); Py_DECREF(((PyObject *)__pyx_v_odfnum)); __pyx_v_odfnum = ((PyArrayObject *)__pyx_3); Py_DECREF(__pyx_3); __pyx_3 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":835 */ - __pyx_4 = PyArray_FROM_OTF(__pyx_v_dfden,NPY_DOUBLE,NPY_ALIGNED); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 835; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":840 */ + __pyx_4 = PyArray_FROM_OTF(__pyx_v_dfden,NPY_DOUBLE,NPY_ALIGNED); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 840; goto __pyx_L1;} Py_INCREF(((PyObject *)((PyArrayObject *)__pyx_4))); Py_DECREF(((PyObject *)__pyx_v_odfden)); __pyx_v_odfden = ((PyArrayObject *)__pyx_4); Py_DECREF(__pyx_4); __pyx_4 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":836 */ - __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 836; goto __pyx_L1;} - __pyx_3 = PyObject_GetAttr(__pyx_2, __pyx_n_any); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 836; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":841 */ + __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 841; goto __pyx_L1;} + __pyx_3 = PyObject_GetAttr(__pyx_2, __pyx_n_any); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 841; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; - __pyx_4 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 836; goto __pyx_L1;} - __pyx_2 = PyObject_GetAttr(__pyx_4, __pyx_n_less_equal); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 836; goto __pyx_L1;} + __pyx_4 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 841; goto __pyx_L1;} + __pyx_2 = PyObject_GetAttr(__pyx_4, __pyx_n_less_equal); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 841; goto __pyx_L1;} Py_DECREF(__pyx_4); __pyx_4 = 0; - __pyx_4 = PyFloat_FromDouble(0.0); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 836; goto __pyx_L1;} - __pyx_5 = PyTuple_New(2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 836; goto __pyx_L1;} + __pyx_4 = PyFloat_FromDouble(0.0); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 841; goto __pyx_L1;} + __pyx_5 = PyTuple_New(2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 841; goto __pyx_L1;} Py_INCREF(((PyObject *)__pyx_v_odfnum)); PyTuple_SET_ITEM(__pyx_5, 0, ((PyObject *)__pyx_v_odfnum)); PyTuple_SET_ITEM(__pyx_5, 1, __pyx_4); __pyx_4 = 0; - __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_5); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 836; goto __pyx_L1;} + __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_5); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 841; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; Py_DECREF(__pyx_5); __pyx_5 = 0; - __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 836; goto __pyx_L1;} + __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 841; goto __pyx_L1;} PyTuple_SET_ITEM(__pyx_2, 0, __pyx_4); __pyx_4 = 0; - __pyx_5 = PyObject_CallObject(__pyx_3, __pyx_2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 836; goto __pyx_L1;} + __pyx_5 = PyObject_CallObject(__pyx_3, __pyx_2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 841; goto __pyx_L1;} Py_DECREF(__pyx_3); __pyx_3 = 0; Py_DECREF(__pyx_2); __pyx_2 = 0; - __pyx_1 = PyObject_IsTrue(__pyx_5); if (__pyx_1 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 836; goto __pyx_L1;} + __pyx_1 = PyObject_IsTrue(__pyx_5); if (__pyx_1 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 841; goto __pyx_L1;} Py_DECREF(__pyx_5); __pyx_5 = 0; if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":837 */ - __pyx_4 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 837; goto __pyx_L1;} - __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 837; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":842 */ + __pyx_4 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 842; goto __pyx_L1;} + __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 842; goto __pyx_L1;} Py_INCREF(__pyx_k89p); PyTuple_SET_ITEM(__pyx_3, 0, __pyx_k89p); - __pyx_2 = PyObject_CallObject(__pyx_4, __pyx_3); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 837; goto __pyx_L1;} + __pyx_2 = PyObject_CallObject(__pyx_4, __pyx_3); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 842; goto __pyx_L1;} Py_DECREF(__pyx_4); __pyx_4 = 0; Py_DECREF(__pyx_3); __pyx_3 = 0; __Pyx_Raise(__pyx_2, 0, 0); Py_DECREF(__pyx_2); __pyx_2 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 837; goto __pyx_L1;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 842; goto __pyx_L1;} goto __pyx_L5; } __pyx_L5:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":838 */ - __pyx_5 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 838; goto __pyx_L1;} - __pyx_4 = PyObject_GetAttr(__pyx_5, __pyx_n_any); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 838; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":843 */ + __pyx_5 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 843; goto __pyx_L1;} + __pyx_4 = PyObject_GetAttr(__pyx_5, __pyx_n_any); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 843; goto __pyx_L1;} Py_DECREF(__pyx_5); __pyx_5 = 0; - __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 838; goto __pyx_L1;} - __pyx_2 = PyObject_GetAttr(__pyx_3, __pyx_n_less_equal); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 838; goto __pyx_L1;} + __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 843; goto __pyx_L1;} + __pyx_2 = PyObject_GetAttr(__pyx_3, __pyx_n_less_equal); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 843; goto __pyx_L1;} Py_DECREF(__pyx_3); __pyx_3 = 0; - __pyx_5 = PyFloat_FromDouble(0.0); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 838; goto __pyx_L1;} - __pyx_3 = PyTuple_New(2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 838; goto __pyx_L1;} + __pyx_5 = PyFloat_FromDouble(0.0); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 843; goto __pyx_L1;} + __pyx_3 = PyTuple_New(2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 843; goto __pyx_L1;} Py_INCREF(((PyObject *)__pyx_v_odfden)); PyTuple_SET_ITEM(__pyx_3, 0, ((PyObject *)__pyx_v_odfden)); PyTuple_SET_ITEM(__pyx_3, 1, __pyx_5); __pyx_5 = 0; - __pyx_5 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 838; goto __pyx_L1;} + __pyx_5 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 843; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; Py_DECREF(__pyx_3); __pyx_3 = 0; - __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 838; goto __pyx_L1;} + __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 843; goto __pyx_L1;} PyTuple_SET_ITEM(__pyx_2, 0, __pyx_5); __pyx_5 = 0; - __pyx_3 = PyObject_CallObject(__pyx_4, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 838; goto __pyx_L1;} + __pyx_3 = PyObject_CallObject(__pyx_4, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 843; goto __pyx_L1;} Py_DECREF(__pyx_4); __pyx_4 = 0; Py_DECREF(__pyx_2); __pyx_2 = 0; - __pyx_1 = PyObject_IsTrue(__pyx_3); if (__pyx_1 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 838; goto __pyx_L1;} + __pyx_1 = PyObject_IsTrue(__pyx_3); if (__pyx_1 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 843; goto __pyx_L1;} Py_DECREF(__pyx_3); __pyx_3 = 0; if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":839 */ - __pyx_5 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 839; goto __pyx_L1;} - __pyx_4 = PyTuple_New(1); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 839; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":844 */ + __pyx_5 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 844; goto __pyx_L1;} + __pyx_4 = PyTuple_New(1); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 844; goto __pyx_L1;} Py_INCREF(__pyx_k90p); PyTuple_SET_ITEM(__pyx_4, 0, __pyx_k90p); - __pyx_2 = PyObject_CallObject(__pyx_5, __pyx_4); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 839; goto __pyx_L1;} + __pyx_2 = PyObject_CallObject(__pyx_5, __pyx_4); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 844; goto __pyx_L1;} Py_DECREF(__pyx_5); __pyx_5 = 0; Py_DECREF(__pyx_4); __pyx_4 = 0; __Pyx_Raise(__pyx_2, 0, 0); Py_DECREF(__pyx_2); __pyx_2 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 839; goto __pyx_L1;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 844; goto __pyx_L1;} goto __pyx_L6; } __pyx_L6:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":840 */ - __pyx_3 = __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 (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 840; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":845 */ + __pyx_3 = __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 (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 845; goto __pyx_L1;} __pyx_r = __pyx_3; __pyx_3 = 0; goto __pyx_L0; @@ -4028,78 +4084,78 @@ __pyx_v_odfden = ((PyArrayObject *)Py_None); Py_INCREF(Py_None); __pyx_v_ononc = ((PyArrayObject *)Py_None); Py_INCREF(Py_None); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":850 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":855 */ __pyx_v_fdfnum = PyFloat_AsDouble(__pyx_v_dfnum); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":851 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":856 */ __pyx_v_fdfden = PyFloat_AsDouble(__pyx_v_dfden); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":852 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":857 */ __pyx_v_fnonc = PyFloat_AsDouble(__pyx_v_nonc); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":853 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":858 */ __pyx_1 = (!PyErr_Occurred()); if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":854 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":859 */ __pyx_1 = (__pyx_v_fdfnum <= 1); if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":855 */ - __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 855; goto __pyx_L1;} - __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 855; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":860 */ + __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 860; goto __pyx_L1;} + __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 860; goto __pyx_L1;} Py_INCREF(__pyx_k91p); PyTuple_SET_ITEM(__pyx_3, 0, __pyx_k91p); - __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 855; goto __pyx_L1;} + __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 860; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; Py_DECREF(__pyx_3); __pyx_3 = 0; __Pyx_Raise(__pyx_4, 0, 0); Py_DECREF(__pyx_4); __pyx_4 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 855; goto __pyx_L1;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 860; goto __pyx_L1;} goto __pyx_L3; } __pyx_L3:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":856 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":861 */ __pyx_1 = (__pyx_v_fdfden <= 0); if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":857 */ - __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 857; goto __pyx_L1;} - __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 857; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":862 */ + __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 862; goto __pyx_L1;} + __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 862; goto __pyx_L1;} Py_INCREF(__pyx_k92p); PyTuple_SET_ITEM(__pyx_3, 0, __pyx_k92p); - __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 857; goto __pyx_L1;} + __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 862; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; Py_DECREF(__pyx_3); __pyx_3 = 0; __Pyx_Raise(__pyx_4, 0, 0); Py_DECREF(__pyx_4); __pyx_4 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 857; goto __pyx_L1;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 862; goto __pyx_L1;} goto __pyx_L4; } __pyx_L4:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":858 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":863 */ __pyx_1 = (__pyx_v_fnonc < 0); if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":859 */ - __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 859; goto __pyx_L1;} - __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 859; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":864 */ + __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 864; goto __pyx_L1;} + __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 864; goto __pyx_L1;} Py_INCREF(__pyx_k93p); PyTuple_SET_ITEM(__pyx_3, 0, __pyx_k93p); - __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 859; goto __pyx_L1;} + __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 864; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; Py_DECREF(__pyx_3); __pyx_3 = 0; __Pyx_Raise(__pyx_4, 0, 0); Py_DECREF(__pyx_4); __pyx_4 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 859; goto __pyx_L1;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 864; goto __pyx_L1;} goto __pyx_L5; } __pyx_L5:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":860 */ - __pyx_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 (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 860; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":865 */ + __pyx_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 (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 865; goto __pyx_L1;} __pyx_r = __pyx_2; __pyx_2 = 0; goto __pyx_L0; @@ -4107,155 +4163,155 @@ } __pyx_L2:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":863 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":868 */ PyErr_Clear(); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":865 */ - __pyx_3 = PyArray_FROM_OTF(__pyx_v_dfnum,NPY_DOUBLE,NPY_ALIGNED); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 865; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":870 */ + __pyx_3 = PyArray_FROM_OTF(__pyx_v_dfnum,NPY_DOUBLE,NPY_ALIGNED); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 870; goto __pyx_L1;} Py_INCREF(((PyObject *)((PyArrayObject *)__pyx_3))); Py_DECREF(((PyObject *)__pyx_v_odfnum)); __pyx_v_odfnum = ((PyArrayObject *)__pyx_3); Py_DECREF(__pyx_3); __pyx_3 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":866 */ - __pyx_4 = PyArray_FROM_OTF(__pyx_v_dfden,NPY_DOUBLE,NPY_ALIGNED); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 866; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":871 */ + __pyx_4 = PyArray_FROM_OTF(__pyx_v_dfden,NPY_DOUBLE,NPY_ALIGNED); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 871; goto __pyx_L1;} Py_INCREF(((PyObject *)((PyArrayObject *)__pyx_4))); Py_DECREF(((PyObject *)__pyx_v_odfden)); __pyx_v_odfden = ((PyArrayObject *)__pyx_4); Py_DECREF(__pyx_4); __pyx_4 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":867 */ - __pyx_2 = PyArray_FROM_OTF(__pyx_v_nonc,NPY_DOUBLE,NPY_ALIGNED); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 867; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":872 */ + __pyx_2 = PyArray_FROM_OTF(__pyx_v_nonc,NPY_DOUBLE,NPY_ALIGNED); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 872; goto __pyx_L1;} Py_INCREF(((PyObject *)((PyArrayObject *)__pyx_2))); Py_DECREF(((PyObject *)__pyx_v_ononc)); __pyx_v_ononc = ((PyArrayObject *)__pyx_2); Py_DECREF(__pyx_2); __pyx_2 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":869 */ - __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 869; goto __pyx_L1;} - __pyx_4 = PyObject_GetAttr(__pyx_3, __pyx_n_any); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 869; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":874 */ + __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 874; goto __pyx_L1;} + __pyx_4 = PyObject_GetAttr(__pyx_3, __pyx_n_any); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 874; goto __pyx_L1;} Py_DECREF(__pyx_3); __pyx_3 = 0; - __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 869; goto __pyx_L1;} - __pyx_3 = PyObject_GetAttr(__pyx_2, __pyx_n_less_equal); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 869; goto __pyx_L1;} + __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 874; goto __pyx_L1;} + __pyx_3 = PyObject_GetAttr(__pyx_2, __pyx_n_less_equal); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 874; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; - __pyx_2 = PyFloat_FromDouble(1.0); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 869; goto __pyx_L1;} - __pyx_5 = PyTuple_New(2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 869; goto __pyx_L1;} + __pyx_2 = PyFloat_FromDouble(1.0); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 874; goto __pyx_L1;} + __pyx_5 = PyTuple_New(2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 874; goto __pyx_L1;} Py_INCREF(((PyObject *)__pyx_v_odfnum)); PyTuple_SET_ITEM(__pyx_5, 0, ((PyObject *)__pyx_v_odfnum)); PyTuple_SET_ITEM(__pyx_5, 1, __pyx_2); __pyx_2 = 0; - __pyx_2 = PyObject_CallObject(__pyx_3, __pyx_5); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 869; goto __pyx_L1;} + __pyx_2 = PyObject_CallObject(__pyx_3, __pyx_5); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 874; goto __pyx_L1;} Py_DECREF(__pyx_3); __pyx_3 = 0; Py_DECREF(__pyx_5); __pyx_5 = 0; - __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 869; goto __pyx_L1;} + __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 874; goto __pyx_L1;} PyTuple_SET_ITEM(__pyx_3, 0, __pyx_2); __pyx_2 = 0; - __pyx_5 = PyObject_CallObject(__pyx_4, __pyx_3); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 869; goto __pyx_L1;} + __pyx_5 = PyObject_CallObject(__pyx_4, __pyx_3); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 874; goto __pyx_L1;} Py_DECREF(__pyx_4); __pyx_4 = 0; Py_DECREF(__pyx_3); __pyx_3 = 0; - __pyx_1 = PyObject_IsTrue(__pyx_5); if (__pyx_1 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 869; goto __pyx_L1;} + __pyx_1 = PyObject_IsTrue(__pyx_5); if (__pyx_1 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 874; goto __pyx_L1;} Py_DECREF(__pyx_5); __pyx_5 = 0; if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":870 */ - __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 870; goto __pyx_L1;} - __pyx_4 = PyTuple_New(1); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 870; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":875 */ + __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 875; goto __pyx_L1;} + __pyx_4 = PyTuple_New(1); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 875; goto __pyx_L1;} Py_INCREF(__pyx_k94p); PyTuple_SET_ITEM(__pyx_4, 0, __pyx_k94p); - __pyx_3 = PyObject_CallObject(__pyx_2, __pyx_4); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 870; goto __pyx_L1;} + __pyx_3 = PyObject_CallObject(__pyx_2, __pyx_4); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 875; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; Py_DECREF(__pyx_4); __pyx_4 = 0; __Pyx_Raise(__pyx_3, 0, 0); Py_DECREF(__pyx_3); __pyx_3 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 870; goto __pyx_L1;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 875; goto __pyx_L1;} goto __pyx_L6; } __pyx_L6:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":871 */ - __pyx_5 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 871; goto __pyx_L1;} - __pyx_2 = PyObject_GetAttr(__pyx_5, __pyx_n_any); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 871; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":876 */ + __pyx_5 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 876; goto __pyx_L1;} + __pyx_2 = PyObject_GetAttr(__pyx_5, __pyx_n_any); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 876; goto __pyx_L1;} Py_DECREF(__pyx_5); __pyx_5 = 0; - __pyx_4 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 871; goto __pyx_L1;} - __pyx_3 = PyObject_GetAttr(__pyx_4, __pyx_n_less_equal); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 871; goto __pyx_L1;} + __pyx_4 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 876; goto __pyx_L1;} + __pyx_3 = PyObject_GetAttr(__pyx_4, __pyx_n_less_equal); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 876; goto __pyx_L1;} Py_DECREF(__pyx_4); __pyx_4 = 0; - __pyx_5 = PyFloat_FromDouble(0.0); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 871; goto __pyx_L1;} - __pyx_4 = PyTuple_New(2); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 871; goto __pyx_L1;} + __pyx_5 = PyFloat_FromDouble(0.0); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 876; goto __pyx_L1;} + __pyx_4 = PyTuple_New(2); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 876; goto __pyx_L1;} Py_INCREF(((PyObject *)__pyx_v_odfden)); PyTuple_SET_ITEM(__pyx_4, 0, ((PyObject *)__pyx_v_odfden)); PyTuple_SET_ITEM(__pyx_4, 1, __pyx_5); __pyx_5 = 0; - __pyx_5 = PyObject_CallObject(__pyx_3, __pyx_4); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 871; goto __pyx_L1;} + __pyx_5 = PyObject_CallObject(__pyx_3, __pyx_4); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 876; goto __pyx_L1;} Py_DECREF(__pyx_3); __pyx_3 = 0; Py_DECREF(__pyx_4); __pyx_4 = 0; - __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 871; goto __pyx_L1;} + __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 876; goto __pyx_L1;} PyTuple_SET_ITEM(__pyx_3, 0, __pyx_5); __pyx_5 = 0; - __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 871; goto __pyx_L1;} + __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 876; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; Py_DECREF(__pyx_3); __pyx_3 = 0; - __pyx_1 = PyObject_IsTrue(__pyx_4); if (__pyx_1 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 871; goto __pyx_L1;} + __pyx_1 = PyObject_IsTrue(__pyx_4); if (__pyx_1 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 876; goto __pyx_L1;} Py_DECREF(__pyx_4); __pyx_4 = 0; if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":872 */ - __pyx_5 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 872; goto __pyx_L1;} - __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 872; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":877 */ + __pyx_5 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 877; goto __pyx_L1;} + __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 877; goto __pyx_L1;} Py_INCREF(__pyx_k95p); PyTuple_SET_ITEM(__pyx_2, 0, __pyx_k95p); - __pyx_3 = PyObject_CallObject(__pyx_5, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 872; goto __pyx_L1;} + __pyx_3 = PyObject_CallObject(__pyx_5, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 877; goto __pyx_L1;} Py_DECREF(__pyx_5); __pyx_5 = 0; Py_DECREF(__pyx_2); __pyx_2 = 0; __Pyx_Raise(__pyx_3, 0, 0); Py_DECREF(__pyx_3); __pyx_3 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 872; goto __pyx_L1;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 877; goto __pyx_L1;} goto __pyx_L7; } __pyx_L7:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":873 */ - __pyx_4 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 873; goto __pyx_L1;} - __pyx_5 = PyObject_GetAttr(__pyx_4, __pyx_n_any); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 873; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":878 */ + __pyx_4 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 878; goto __pyx_L1;} + __pyx_5 = PyObject_GetAttr(__pyx_4, __pyx_n_any); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 878; goto __pyx_L1;} Py_DECREF(__pyx_4); __pyx_4 = 0; - __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 873; goto __pyx_L1;} - __pyx_3 = PyObject_GetAttr(__pyx_2, __pyx_n_less); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 873; goto __pyx_L1;} + __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 878; goto __pyx_L1;} + __pyx_3 = PyObject_GetAttr(__pyx_2, __pyx_n_less); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 878; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; - __pyx_4 = PyFloat_FromDouble(0.0); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 873; goto __pyx_L1;} - __pyx_2 = PyTuple_New(2); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 873; goto __pyx_L1;} + __pyx_4 = PyFloat_FromDouble(0.0); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 878; goto __pyx_L1;} + __pyx_2 = PyTuple_New(2); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 878; goto __pyx_L1;} Py_INCREF(((PyObject *)__pyx_v_ononc)); PyTuple_SET_ITEM(__pyx_2, 0, ((PyObject *)__pyx_v_ononc)); PyTuple_SET_ITEM(__pyx_2, 1, __pyx_4); __pyx_4 = 0; - __pyx_4 = PyObject_CallObject(__pyx_3, __pyx_2); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 873; goto __pyx_L1;} + __pyx_4 = PyObject_CallObject(__pyx_3, __pyx_2); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 878; goto __pyx_L1;} Py_DECREF(__pyx_3); __pyx_3 = 0; Py_DECREF(__pyx_2); __pyx_2 = 0; - __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 873; goto __pyx_L1;} + __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 878; goto __pyx_L1;} PyTuple_SET_ITEM(__pyx_3, 0, __pyx_4); __pyx_4 = 0; - __pyx_2 = PyObject_CallObject(__pyx_5, __pyx_3); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 873; goto __pyx_L1;} + __pyx_2 = PyObject_CallObject(__pyx_5, __pyx_3); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 878; goto __pyx_L1;} Py_DECREF(__pyx_5); __pyx_5 = 0; Py_DECREF(__pyx_3); __pyx_3 = 0; - __pyx_1 = PyObject_IsTrue(__pyx_2); if (__pyx_1 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 873; goto __pyx_L1;} + __pyx_1 = PyObject_IsTrue(__pyx_2); if (__pyx_1 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 878; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":874 */ - __pyx_4 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 874; goto __pyx_L1;} - __pyx_5 = PyTuple_New(1); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 874; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":879 */ + __pyx_4 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 879; goto __pyx_L1;} + __pyx_5 = PyTuple_New(1); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 879; goto __pyx_L1;} Py_INCREF(__pyx_k96p); PyTuple_SET_ITEM(__pyx_5, 0, __pyx_k96p); - __pyx_3 = PyObject_CallObject(__pyx_4, __pyx_5); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 874; goto __pyx_L1;} + __pyx_3 = PyObject_CallObject(__pyx_4, __pyx_5); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 879; goto __pyx_L1;} Py_DECREF(__pyx_4); __pyx_4 = 0; Py_DECREF(__pyx_5); __pyx_5 = 0; __Pyx_Raise(__pyx_3, 0, 0); Py_DECREF(__pyx_3); __pyx_3 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 874; goto __pyx_L1;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 879; goto __pyx_L1;} goto __pyx_L8; } __pyx_L8:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":875 */ - __pyx_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 (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 875; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":880 */ + __pyx_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 (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 880; goto __pyx_L1;} __pyx_r = __pyx_2; __pyx_2 = 0; goto __pyx_L0; @@ -4308,34 +4364,34 @@ Py_INCREF(__pyx_v_size); __pyx_v_odf = ((PyArrayObject *)Py_None); Py_INCREF(Py_None); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":886 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":891 */ __pyx_v_fdf = PyFloat_AsDouble(__pyx_v_df); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":887 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":892 */ __pyx_1 = (!PyErr_Occurred()); if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":888 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":893 */ __pyx_1 = (__pyx_v_fdf <= 0); if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":889 */ - __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 889; goto __pyx_L1;} - __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 889; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":894 */ + __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 894; goto __pyx_L1;} + __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 894; goto __pyx_L1;} Py_INCREF(__pyx_k97p); PyTuple_SET_ITEM(__pyx_3, 0, __pyx_k97p); - __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 889; goto __pyx_L1;} + __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 894; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; Py_DECREF(__pyx_3); __pyx_3 = 0; __Pyx_Raise(__pyx_4, 0, 0); Py_DECREF(__pyx_4); __pyx_4 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 889; goto __pyx_L1;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 894; goto __pyx_L1;} goto __pyx_L3; } __pyx_L3:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":890 */ - __pyx_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 (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 890; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":895 */ + __pyx_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 (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 895; goto __pyx_L1;} __pyx_r = __pyx_2; __pyx_2 = 0; goto __pyx_L0; @@ -4343,59 +4399,59 @@ } __pyx_L2:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":892 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":897 */ PyErr_Clear(); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":894 */ - __pyx_3 = PyArray_FROM_OTF(__pyx_v_df,NPY_DOUBLE,NPY_ALIGNED); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 894; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":899 */ + __pyx_3 = PyArray_FROM_OTF(__pyx_v_df,NPY_DOUBLE,NPY_ALIGNED); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 899; goto __pyx_L1;} Py_INCREF(((PyObject *)((PyArrayObject *)__pyx_3))); Py_DECREF(((PyObject *)__pyx_v_odf)); __pyx_v_odf = ((PyArrayObject *)__pyx_3); Py_DECREF(__pyx_3); __pyx_3 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":895 */ - __pyx_4 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 895; goto __pyx_L1;} - __pyx_2 = PyObject_GetAttr(__pyx_4, __pyx_n_any); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 895; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":900 */ + __pyx_4 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 900; goto __pyx_L1;} + __pyx_2 = PyObject_GetAttr(__pyx_4, __pyx_n_any); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 900; goto __pyx_L1;} Py_DECREF(__pyx_4); __pyx_4 = 0; - __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 895; goto __pyx_L1;} - __pyx_4 = PyObject_GetAttr(__pyx_3, __pyx_n_less_equal); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 895; goto __pyx_L1;} + __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 900; goto __pyx_L1;} + __pyx_4 = PyObject_GetAttr(__pyx_3, __pyx_n_less_equal); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 900; goto __pyx_L1;} Py_DECREF(__pyx_3); __pyx_3 = 0; - __pyx_3 = PyFloat_FromDouble(0.0); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 895; goto __pyx_L1;} - __pyx_5 = PyTuple_New(2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 895; goto __pyx_L1;} + __pyx_3 = PyFloat_FromDouble(0.0); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 900; goto __pyx_L1;} + __pyx_5 = PyTuple_New(2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 900; goto __pyx_L1;} Py_INCREF(((PyObject *)__pyx_v_odf)); PyTuple_SET_ITEM(__pyx_5, 0, ((PyObject *)__pyx_v_odf)); PyTuple_SET_ITEM(__pyx_5, 1, __pyx_3); __pyx_3 = 0; - __pyx_3 = PyObject_CallObject(__pyx_4, __pyx_5); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 895; goto __pyx_L1;} + __pyx_3 = PyObject_CallObject(__pyx_4, __pyx_5); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 900; goto __pyx_L1;} Py_DECREF(__pyx_4); __pyx_4 = 0; Py_DECREF(__pyx_5); __pyx_5 = 0; - __pyx_4 = PyTuple_New(1); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 895; goto __pyx_L1;} + __pyx_4 = PyTuple_New(1); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 900; goto __pyx_L1;} PyTuple_SET_ITEM(__pyx_4, 0, __pyx_3); __pyx_3 = 0; - __pyx_5 = PyObject_CallObject(__pyx_2, __pyx_4); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 895; goto __pyx_L1;} + __pyx_5 = PyObject_CallObject(__pyx_2, __pyx_4); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 900; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; Py_DECREF(__pyx_4); __pyx_4 = 0; - __pyx_1 = PyObject_IsTrue(__pyx_5); if (__pyx_1 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 895; goto __pyx_L1;} + __pyx_1 = PyObject_IsTrue(__pyx_5); if (__pyx_1 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 900; goto __pyx_L1;} Py_DECREF(__pyx_5); __pyx_5 = 0; if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":896 */ - __pyx_3 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 896; goto __pyx_L1;} - __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 896; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":901 */ + __pyx_3 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 901; goto __pyx_L1;} + __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 901; goto __pyx_L1;} Py_INCREF(__pyx_k98p); PyTuple_SET_ITEM(__pyx_2, 0, __pyx_k98p); - __pyx_4 = PyObject_CallObject(__pyx_3, __pyx_2); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 896; goto __pyx_L1;} + __pyx_4 = PyObject_CallObject(__pyx_3, __pyx_2); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 901; goto __pyx_L1;} Py_DECREF(__pyx_3); __pyx_3 = 0; Py_DECREF(__pyx_2); __pyx_2 = 0; __Pyx_Raise(__pyx_4, 0, 0); Py_DECREF(__pyx_4); __pyx_4 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 896; goto __pyx_L1;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 901; goto __pyx_L1;} goto __pyx_L4; } __pyx_L4:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":897 */ - __pyx_5 = __pyx_f_6mtrand_cont1_array(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state,rk_chisquare,__pyx_v_size,__pyx_v_odf); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 897; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":902 */ + __pyx_5 = __pyx_f_6mtrand_cont1_array(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state,rk_chisquare,__pyx_v_size,__pyx_v_odf); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 902; goto __pyx_L1;} __pyx_r = __pyx_5; __pyx_5 = 0; goto __pyx_L0; @@ -4453,56 +4509,56 @@ __pyx_v_odf = ((PyArrayObject *)Py_None); Py_INCREF(Py_None); __pyx_v_ononc = ((PyArrayObject *)Py_None); Py_INCREF(Py_None); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":906 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":911 */ __pyx_v_fdf = PyFloat_AsDouble(__pyx_v_df); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":907 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":912 */ __pyx_v_fnonc = PyFloat_AsDouble(__pyx_v_nonc); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":908 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":913 */ __pyx_1 = (!PyErr_Occurred()); if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":909 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":914 */ __pyx_1 = (__pyx_v_fdf <= 1); if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":910 */ - __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 910; goto __pyx_L1;} - __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 910; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":915 */ + __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 915; goto __pyx_L1;} + __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 915; goto __pyx_L1;} Py_INCREF(__pyx_k99p); PyTuple_SET_ITEM(__pyx_3, 0, __pyx_k99p); - __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 910; goto __pyx_L1;} + __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 915; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; Py_DECREF(__pyx_3); __pyx_3 = 0; __Pyx_Raise(__pyx_4, 0, 0); Py_DECREF(__pyx_4); __pyx_4 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 910; goto __pyx_L1;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 915; goto __pyx_L1;} goto __pyx_L3; } __pyx_L3:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":911 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":916 */ __pyx_1 = (__pyx_v_fnonc <= 0); if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":912 */ - __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 912; goto __pyx_L1;} - __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 912; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":917 */ + __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 917; goto __pyx_L1;} + __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 917; goto __pyx_L1;} Py_INCREF(__pyx_k100p); PyTuple_SET_ITEM(__pyx_3, 0, __pyx_k100p); - __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 912; goto __pyx_L1;} + __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 917; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; Py_DECREF(__pyx_3); __pyx_3 = 0; __Pyx_Raise(__pyx_4, 0, 0); Py_DECREF(__pyx_4); __pyx_4 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 912; goto __pyx_L1;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 917; goto __pyx_L1;} goto __pyx_L4; } __pyx_L4:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":913 */ - __pyx_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 (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 913; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":918 */ + __pyx_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 (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 918; goto __pyx_L1;} __pyx_r = __pyx_2; __pyx_2 = 0; goto __pyx_L0; @@ -4510,107 +4566,107 @@ } __pyx_L2:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":916 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":921 */ PyErr_Clear(); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":918 */ - __pyx_3 = PyArray_FROM_OTF(__pyx_v_df,NPY_DOUBLE,NPY_ALIGNED); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 918; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":923 */ + __pyx_3 = PyArray_FROM_OTF(__pyx_v_df,NPY_DOUBLE,NPY_ALIGNED); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 923; goto __pyx_L1;} Py_INCREF(((PyObject *)((PyArrayObject *)__pyx_3))); Py_DECREF(((PyObject *)__pyx_v_odf)); __pyx_v_odf = ((PyArrayObject *)__pyx_3); Py_DECREF(__pyx_3); __pyx_3 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":919 */ - __pyx_4 = PyArray_FROM_OTF(__pyx_v_nonc,NPY_DOUBLE,NPY_ALIGNED); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 919; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":924 */ + __pyx_4 = PyArray_FROM_OTF(__pyx_v_nonc,NPY_DOUBLE,NPY_ALIGNED); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 924; goto __pyx_L1;} Py_INCREF(((PyObject *)((PyArrayObject *)__pyx_4))); Py_DECREF(((PyObject *)__pyx_v_ononc)); __pyx_v_ononc = ((PyArrayObject *)__pyx_4); Py_DECREF(__pyx_4); __pyx_4 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":920 */ - __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 920; goto __pyx_L1;} - __pyx_3 = PyObject_GetAttr(__pyx_2, __pyx_n_any); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 920; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":925 */ + __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 925; goto __pyx_L1;} + __pyx_3 = PyObject_GetAttr(__pyx_2, __pyx_n_any); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 925; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; - __pyx_4 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 920; goto __pyx_L1;} - __pyx_2 = PyObject_GetAttr(__pyx_4, __pyx_n_less_equal); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 920; goto __pyx_L1;} + __pyx_4 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 925; goto __pyx_L1;} + __pyx_2 = PyObject_GetAttr(__pyx_4, __pyx_n_less_equal); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 925; goto __pyx_L1;} Py_DECREF(__pyx_4); __pyx_4 = 0; - __pyx_4 = PyFloat_FromDouble(0.0); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 920; goto __pyx_L1;} - __pyx_5 = PyTuple_New(2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 920; goto __pyx_L1;} + __pyx_4 = PyFloat_FromDouble(0.0); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 925; goto __pyx_L1;} + __pyx_5 = PyTuple_New(2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 925; goto __pyx_L1;} Py_INCREF(((PyObject *)__pyx_v_odf)); PyTuple_SET_ITEM(__pyx_5, 0, ((PyObject *)__pyx_v_odf)); PyTuple_SET_ITEM(__pyx_5, 1, __pyx_4); __pyx_4 = 0; - __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_5); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 920; goto __pyx_L1;} + __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_5); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 925; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; Py_DECREF(__pyx_5); __pyx_5 = 0; - __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 920; goto __pyx_L1;} + __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 925; goto __pyx_L1;} PyTuple_SET_ITEM(__pyx_2, 0, __pyx_4); __pyx_4 = 0; - __pyx_5 = PyObject_CallObject(__pyx_3, __pyx_2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 920; goto __pyx_L1;} + __pyx_5 = PyObject_CallObject(__pyx_3, __pyx_2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 925; goto __pyx_L1;} Py_DECREF(__pyx_3); __pyx_3 = 0; Py_DECREF(__pyx_2); __pyx_2 = 0; - __pyx_1 = PyObject_IsTrue(__pyx_5); if (__pyx_1 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 920; goto __pyx_L1;} + __pyx_1 = PyObject_IsTrue(__pyx_5); if (__pyx_1 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 925; goto __pyx_L1;} Py_DECREF(__pyx_5); __pyx_5 = 0; if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":921 */ - __pyx_4 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 921; goto __pyx_L1;} - __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 921; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":926 */ + __pyx_4 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 926; goto __pyx_L1;} + __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 926; goto __pyx_L1;} Py_INCREF(__pyx_k101p); PyTuple_SET_ITEM(__pyx_3, 0, __pyx_k101p); - __pyx_2 = PyObject_CallObject(__pyx_4, __pyx_3); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 921; goto __pyx_L1;} + __pyx_2 = PyObject_CallObject(__pyx_4, __pyx_3); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 926; goto __pyx_L1;} Py_DECREF(__pyx_4); __pyx_4 = 0; Py_DECREF(__pyx_3); __pyx_3 = 0; __Pyx_Raise(__pyx_2, 0, 0); Py_DECREF(__pyx_2); __pyx_2 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 921; goto __pyx_L1;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 926; goto __pyx_L1;} goto __pyx_L5; } __pyx_L5:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":922 */ - __pyx_5 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 922; goto __pyx_L1;} - __pyx_4 = PyObject_GetAttr(__pyx_5, __pyx_n_any); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 922; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":927 */ + __pyx_5 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 927; goto __pyx_L1;} + __pyx_4 = PyObject_GetAttr(__pyx_5, __pyx_n_any); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 927; goto __pyx_L1;} Py_DECREF(__pyx_5); __pyx_5 = 0; - __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 922; goto __pyx_L1;} - __pyx_2 = PyObject_GetAttr(__pyx_3, __pyx_n_less_equal); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 922; goto __pyx_L1;} + __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 927; goto __pyx_L1;} + __pyx_2 = PyObject_GetAttr(__pyx_3, __pyx_n_less_equal); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 927; goto __pyx_L1;} Py_DECREF(__pyx_3); __pyx_3 = 0; - __pyx_5 = PyFloat_FromDouble(0.0); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 922; goto __pyx_L1;} - __pyx_3 = PyTuple_New(2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 922; goto __pyx_L1;} + __pyx_5 = PyFloat_FromDouble(0.0); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 927; goto __pyx_L1;} + __pyx_3 = PyTuple_New(2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 927; goto __pyx_L1;} Py_INCREF(((PyObject *)__pyx_v_ononc)); PyTuple_SET_ITEM(__pyx_3, 0, ((PyObject *)__pyx_v_ononc)); PyTuple_SET_ITEM(__pyx_3, 1, __pyx_5); __pyx_5 = 0; - __pyx_5 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 922; goto __pyx_L1;} + __pyx_5 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 927; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; Py_DECREF(__pyx_3); __pyx_3 = 0; - __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 922; goto __pyx_L1;} + __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 927; goto __pyx_L1;} PyTuple_SET_ITEM(__pyx_2, 0, __pyx_5); __pyx_5 = 0; - __pyx_3 = PyObject_CallObject(__pyx_4, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 922; goto __pyx_L1;} + __pyx_3 = PyObject_CallObject(__pyx_4, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 927; goto __pyx_L1;} Py_DECREF(__pyx_4); __pyx_4 = 0; Py_DECREF(__pyx_2); __pyx_2 = 0; - __pyx_1 = PyObject_IsTrue(__pyx_3); if (__pyx_1 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 922; goto __pyx_L1;} + __pyx_1 = PyObject_IsTrue(__pyx_3); if (__pyx_1 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 927; goto __pyx_L1;} Py_DECREF(__pyx_3); __pyx_3 = 0; if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":923 */ - __pyx_5 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 923; goto __pyx_L1;} - __pyx_4 = PyTuple_New(1); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 923; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":928 */ + __pyx_5 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 928; goto __pyx_L1;} + __pyx_4 = PyTuple_New(1); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 928; goto __pyx_L1;} Py_INCREF(__pyx_k102p); PyTuple_SET_ITEM(__pyx_4, 0, __pyx_k102p); - __pyx_2 = PyObject_CallObject(__pyx_5, __pyx_4); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 923; goto __pyx_L1;} + __pyx_2 = PyObject_CallObject(__pyx_5, __pyx_4); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 928; goto __pyx_L1;} Py_DECREF(__pyx_5); __pyx_5 = 0; Py_DECREF(__pyx_4); __pyx_4 = 0; __Pyx_Raise(__pyx_2, 0, 0); Py_DECREF(__pyx_2); __pyx_2 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 923; goto __pyx_L1;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 928; goto __pyx_L1;} goto __pyx_L6; } __pyx_L6:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":924 */ - __pyx_3 = __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 (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 924; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":929 */ + __pyx_3 = __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 (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 929; goto __pyx_L1;} __pyx_r = __pyx_3; __pyx_3 = 0; goto __pyx_L0; @@ -4646,8 +4702,8 @@ Py_INCREF(__pyx_v_self); Py_INCREF(__pyx_v_size); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":932 */ - __pyx_1 = __pyx_f_6mtrand_cont0_array(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state,rk_standard_cauchy,__pyx_v_size); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 932; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":937 */ + __pyx_1 = __pyx_f_6mtrand_cont0_array(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state,rk_standard_cauchy,__pyx_v_size); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 937; goto __pyx_L1;} __pyx_r = __pyx_1; __pyx_1 = 0; goto __pyx_L0; @@ -4691,34 +4747,34 @@ Py_INCREF(__pyx_v_size); __pyx_v_odf = ((PyArrayObject *)Py_None); Py_INCREF(Py_None); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":942 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":947 */ __pyx_v_fdf = PyFloat_AsDouble(__pyx_v_df); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":943 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":948 */ __pyx_1 = (!PyErr_Occurred()); if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":944 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":949 */ __pyx_1 = (__pyx_v_fdf <= 0); if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":945 */ - __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 945; goto __pyx_L1;} - __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 945; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":950 */ + __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 950; goto __pyx_L1;} + __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 950; goto __pyx_L1;} Py_INCREF(__pyx_k103p); PyTuple_SET_ITEM(__pyx_3, 0, __pyx_k103p); - __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 945; goto __pyx_L1;} + __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 950; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; Py_DECREF(__pyx_3); __pyx_3 = 0; __Pyx_Raise(__pyx_4, 0, 0); Py_DECREF(__pyx_4); __pyx_4 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 945; goto __pyx_L1;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 950; goto __pyx_L1;} goto __pyx_L3; } __pyx_L3:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":946 */ - __pyx_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 (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 946; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":951 */ + __pyx_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 (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 951; goto __pyx_L1;} __pyx_r = __pyx_2; __pyx_2 = 0; goto __pyx_L0; @@ -4726,59 +4782,59 @@ } __pyx_L2:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":948 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":953 */ PyErr_Clear(); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":950 */ - __pyx_3 = PyArray_FROM_OTF(__pyx_v_df,NPY_DOUBLE,NPY_ALIGNED); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 950; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":955 */ + __pyx_3 = PyArray_FROM_OTF(__pyx_v_df,NPY_DOUBLE,NPY_ALIGNED); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 955; goto __pyx_L1;} Py_INCREF(((PyObject *)((PyArrayObject *)__pyx_3))); Py_DECREF(((PyObject *)__pyx_v_odf)); __pyx_v_odf = ((PyArrayObject *)__pyx_3); Py_DECREF(__pyx_3); __pyx_3 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":951 */ - __pyx_4 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 951; goto __pyx_L1;} - __pyx_2 = PyObject_GetAttr(__pyx_4, __pyx_n_any); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 951; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":956 */ + __pyx_4 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 956; goto __pyx_L1;} + __pyx_2 = PyObject_GetAttr(__pyx_4, __pyx_n_any); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 956; goto __pyx_L1;} Py_DECREF(__pyx_4); __pyx_4 = 0; - __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 951; goto __pyx_L1;} - __pyx_4 = PyObject_GetAttr(__pyx_3, __pyx_n_less_equal); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 951; goto __pyx_L1;} + __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 956; goto __pyx_L1;} + __pyx_4 = PyObject_GetAttr(__pyx_3, __pyx_n_less_equal); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 956; goto __pyx_L1;} Py_DECREF(__pyx_3); __pyx_3 = 0; - __pyx_3 = PyFloat_FromDouble(0.0); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 951; goto __pyx_L1;} - __pyx_5 = PyTuple_New(2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 951; goto __pyx_L1;} + __pyx_3 = PyFloat_FromDouble(0.0); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 956; goto __pyx_L1;} + __pyx_5 = PyTuple_New(2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 956; goto __pyx_L1;} Py_INCREF(((PyObject *)__pyx_v_odf)); PyTuple_SET_ITEM(__pyx_5, 0, ((PyObject *)__pyx_v_odf)); PyTuple_SET_ITEM(__pyx_5, 1, __pyx_3); __pyx_3 = 0; - __pyx_3 = PyObject_CallObject(__pyx_4, __pyx_5); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 951; goto __pyx_L1;} + __pyx_3 = PyObject_CallObject(__pyx_4, __pyx_5); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 956; goto __pyx_L1;} Py_DECREF(__pyx_4); __pyx_4 = 0; Py_DECREF(__pyx_5); __pyx_5 = 0; - __pyx_4 = PyTuple_New(1); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 951; goto __pyx_L1;} + __pyx_4 = PyTuple_New(1); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 956; goto __pyx_L1;} PyTuple_SET_ITEM(__pyx_4, 0, __pyx_3); __pyx_3 = 0; - __pyx_5 = PyObject_CallObject(__pyx_2, __pyx_4); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 951; goto __pyx_L1;} + __pyx_5 = PyObject_CallObject(__pyx_2, __pyx_4); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 956; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; Py_DECREF(__pyx_4); __pyx_4 = 0; - __pyx_1 = PyObject_IsTrue(__pyx_5); if (__pyx_1 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 951; goto __pyx_L1;} + __pyx_1 = PyObject_IsTrue(__pyx_5); if (__pyx_1 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 956; goto __pyx_L1;} Py_DECREF(__pyx_5); __pyx_5 = 0; if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":952 */ - __pyx_3 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 952; goto __pyx_L1;} - __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 952; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":957 */ + __pyx_3 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 957; goto __pyx_L1;} + __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 957; goto __pyx_L1;} Py_INCREF(__pyx_k104p); PyTuple_SET_ITEM(__pyx_2, 0, __pyx_k104p); - __pyx_4 = PyObject_CallObject(__pyx_3, __pyx_2); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 952; goto __pyx_L1;} + __pyx_4 = PyObject_CallObject(__pyx_3, __pyx_2); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 957; goto __pyx_L1;} Py_DECREF(__pyx_3); __pyx_3 = 0; Py_DECREF(__pyx_2); __pyx_2 = 0; __Pyx_Raise(__pyx_4, 0, 0); Py_DECREF(__pyx_4); __pyx_4 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 952; goto __pyx_L1;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 957; goto __pyx_L1;} goto __pyx_L4; } __pyx_L4:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":953 */ - __pyx_5 = __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 (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 953; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":958 */ + __pyx_5 = __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 (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 958; goto __pyx_L1;} __pyx_r = __pyx_5; __pyx_5 = 0; goto __pyx_L0; @@ -4832,37 +4888,37 @@ __pyx_v_omu = ((PyArrayObject *)Py_None); Py_INCREF(Py_None); __pyx_v_okappa = ((PyArrayObject *)Py_None); Py_INCREF(Py_None); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":964 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":969 */ __pyx_v_fmu = PyFloat_AsDouble(__pyx_v_mu); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":965 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":970 */ __pyx_v_fkappa = PyFloat_AsDouble(__pyx_v_kappa); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":966 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":971 */ __pyx_1 = (!PyErr_Occurred()); if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":967 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":972 */ __pyx_1 = (__pyx_v_fkappa < 0); if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":968 */ - __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 968; goto __pyx_L1;} - __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 968; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":973 */ + __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 973; goto __pyx_L1;} + __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 973; goto __pyx_L1;} Py_INCREF(__pyx_k105p); PyTuple_SET_ITEM(__pyx_3, 0, __pyx_k105p); - __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 968; goto __pyx_L1;} + __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 973; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; Py_DECREF(__pyx_3); __pyx_3 = 0; __Pyx_Raise(__pyx_4, 0, 0); Py_DECREF(__pyx_4); __pyx_4 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 968; goto __pyx_L1;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 973; goto __pyx_L1;} goto __pyx_L3; } __pyx_L3:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":969 */ - __pyx_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 (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 969; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":974 */ + __pyx_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 (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 974; goto __pyx_L1;} __pyx_r = __pyx_2; __pyx_2 = 0; goto __pyx_L0; @@ -4870,66 +4926,66 @@ } __pyx_L2:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":971 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":976 */ PyErr_Clear(); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":973 */ - __pyx_3 = PyArray_FROM_OTF(__pyx_v_mu,NPY_DOUBLE,NPY_ALIGNED); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 973; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":978 */ + __pyx_3 = PyArray_FROM_OTF(__pyx_v_mu,NPY_DOUBLE,NPY_ALIGNED); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 978; goto __pyx_L1;} Py_INCREF(((PyObject *)((PyArrayObject *)__pyx_3))); Py_DECREF(((PyObject *)__pyx_v_omu)); __pyx_v_omu = ((PyArrayObject *)__pyx_3); Py_DECREF(__pyx_3); __pyx_3 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":974 */ - __pyx_4 = PyArray_FROM_OTF(__pyx_v_kappa,NPY_DOUBLE,NPY_ALIGNED); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 974; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":979 */ + __pyx_4 = PyArray_FROM_OTF(__pyx_v_kappa,NPY_DOUBLE,NPY_ALIGNED); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 979; goto __pyx_L1;} Py_INCREF(((PyObject *)((PyArrayObject *)__pyx_4))); Py_DECREF(((PyObject *)__pyx_v_okappa)); __pyx_v_okappa = ((PyArrayObject *)__pyx_4); Py_DECREF(__pyx_4); __pyx_4 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":975 */ - __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 975; goto __pyx_L1;} - __pyx_3 = PyObject_GetAttr(__pyx_2, __pyx_n_any); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 975; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":980 */ + __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 980; goto __pyx_L1;} + __pyx_3 = PyObject_GetAttr(__pyx_2, __pyx_n_any); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 980; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; - __pyx_4 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 975; goto __pyx_L1;} - __pyx_2 = PyObject_GetAttr(__pyx_4, __pyx_n_less); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 975; goto __pyx_L1;} + __pyx_4 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 980; goto __pyx_L1;} + __pyx_2 = PyObject_GetAttr(__pyx_4, __pyx_n_less); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 980; goto __pyx_L1;} Py_DECREF(__pyx_4); __pyx_4 = 0; - __pyx_4 = PyFloat_FromDouble(0.0); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 975; goto __pyx_L1;} - __pyx_5 = PyTuple_New(2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 975; goto __pyx_L1;} + __pyx_4 = PyFloat_FromDouble(0.0); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 980; goto __pyx_L1;} + __pyx_5 = PyTuple_New(2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 980; goto __pyx_L1;} Py_INCREF(((PyObject *)__pyx_v_okappa)); PyTuple_SET_ITEM(__pyx_5, 0, ((PyObject *)__pyx_v_okappa)); PyTuple_SET_ITEM(__pyx_5, 1, __pyx_4); __pyx_4 = 0; - __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_5); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 975; goto __pyx_L1;} + __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_5); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 980; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; Py_DECREF(__pyx_5); __pyx_5 = 0; - __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 975; goto __pyx_L1;} + __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 980; goto __pyx_L1;} PyTuple_SET_ITEM(__pyx_2, 0, __pyx_4); __pyx_4 = 0; - __pyx_5 = PyObject_CallObject(__pyx_3, __pyx_2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 975; goto __pyx_L1;} + __pyx_5 = PyObject_CallObject(__pyx_3, __pyx_2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 980; goto __pyx_L1;} Py_DECREF(__pyx_3); __pyx_3 = 0; Py_DECREF(__pyx_2); __pyx_2 = 0; - __pyx_1 = PyObject_IsTrue(__pyx_5); if (__pyx_1 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 975; goto __pyx_L1;} + __pyx_1 = PyObject_IsTrue(__pyx_5); if (__pyx_1 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 980; goto __pyx_L1;} Py_DECREF(__pyx_5); __pyx_5 = 0; if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":976 */ - __pyx_4 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 976; goto __pyx_L1;} - __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 976; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":981 */ + __pyx_4 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 981; goto __pyx_L1;} + __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 981; goto __pyx_L1;} Py_INCREF(__pyx_k106p); PyTuple_SET_ITEM(__pyx_3, 0, __pyx_k106p); - __pyx_2 = PyObject_CallObject(__pyx_4, __pyx_3); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 976; goto __pyx_L1;} + __pyx_2 = PyObject_CallObject(__pyx_4, __pyx_3); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 981; goto __pyx_L1;} Py_DECREF(__pyx_4); __pyx_4 = 0; Py_DECREF(__pyx_3); __pyx_3 = 0; __Pyx_Raise(__pyx_2, 0, 0); Py_DECREF(__pyx_2); __pyx_2 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 976; goto __pyx_L1;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 981; goto __pyx_L1;} goto __pyx_L4; } __pyx_L4:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":977 */ - __pyx_5 = __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 (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 977; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":982 */ + __pyx_5 = __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 (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 982; goto __pyx_L1;} __pyx_r = __pyx_5; __pyx_5 = 0; goto __pyx_L0; @@ -4980,34 +5036,34 @@ Py_INCREF(__pyx_v_size); __pyx_v_oa = ((PyArrayObject *)Py_None); Py_INCREF(Py_None); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":987 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":992 */ __pyx_v_fa = PyFloat_AsDouble(__pyx_v_a); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":988 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":993 */ __pyx_1 = (!PyErr_Occurred()); if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":989 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":994 */ __pyx_1 = (__pyx_v_fa <= 0); if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":990 */ - __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 990; goto __pyx_L1;} - __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 990; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":995 */ + __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 995; goto __pyx_L1;} + __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 995; goto __pyx_L1;} Py_INCREF(__pyx_k107p); PyTuple_SET_ITEM(__pyx_3, 0, __pyx_k107p); - __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 990; goto __pyx_L1;} + __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 995; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; Py_DECREF(__pyx_3); __pyx_3 = 0; __Pyx_Raise(__pyx_4, 0, 0); Py_DECREF(__pyx_4); __pyx_4 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 990; goto __pyx_L1;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 995; goto __pyx_L1;} goto __pyx_L3; } __pyx_L3:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":991 */ - __pyx_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 (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 991; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":996 */ + __pyx_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 (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 996; goto __pyx_L1;} __pyx_r = __pyx_2; __pyx_2 = 0; goto __pyx_L0; @@ -5015,59 +5071,59 @@ } __pyx_L2:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":993 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":998 */ PyErr_Clear(); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":995 */ - __pyx_3 = PyArray_FROM_OTF(__pyx_v_a,NPY_DOUBLE,NPY_ALIGNED); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 995; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1000 */ + __pyx_3 = PyArray_FROM_OTF(__pyx_v_a,NPY_DOUBLE,NPY_ALIGNED); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1000; goto __pyx_L1;} Py_INCREF(((PyObject *)((PyArrayObject *)__pyx_3))); Py_DECREF(((PyObject *)__pyx_v_oa)); __pyx_v_oa = ((PyArrayObject *)__pyx_3); Py_DECREF(__pyx_3); __pyx_3 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":996 */ - __pyx_4 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 996; goto __pyx_L1;} - __pyx_2 = PyObject_GetAttr(__pyx_4, __pyx_n_any); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 996; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1001 */ + __pyx_4 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1001; goto __pyx_L1;} + __pyx_2 = PyObject_GetAttr(__pyx_4, __pyx_n_any); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1001; goto __pyx_L1;} Py_DECREF(__pyx_4); __pyx_4 = 0; - __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 996; goto __pyx_L1;} - __pyx_4 = PyObject_GetAttr(__pyx_3, __pyx_n_less_equal); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 996; goto __pyx_L1;} + __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1001; goto __pyx_L1;} + __pyx_4 = PyObject_GetAttr(__pyx_3, __pyx_n_less_equal); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1001; goto __pyx_L1;} Py_DECREF(__pyx_3); __pyx_3 = 0; - __pyx_3 = PyFloat_FromDouble(0.0); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 996; goto __pyx_L1;} - __pyx_5 = PyTuple_New(2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 996; goto __pyx_L1;} + __pyx_3 = PyFloat_FromDouble(0.0); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1001; goto __pyx_L1;} + __pyx_5 = PyTuple_New(2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1001; goto __pyx_L1;} Py_INCREF(((PyObject *)__pyx_v_oa)); PyTuple_SET_ITEM(__pyx_5, 0, ((PyObject *)__pyx_v_oa)); PyTuple_SET_ITEM(__pyx_5, 1, __pyx_3); __pyx_3 = 0; - __pyx_3 = PyObject_CallObject(__pyx_4, __pyx_5); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 996; goto __pyx_L1;} + __pyx_3 = PyObject_CallObject(__pyx_4, __pyx_5); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1001; goto __pyx_L1;} Py_DECREF(__pyx_4); __pyx_4 = 0; Py_DECREF(__pyx_5); __pyx_5 = 0; - __pyx_4 = PyTuple_New(1); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 996; goto __pyx_L1;} + __pyx_4 = PyTuple_New(1); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1001; goto __pyx_L1;} PyTuple_SET_ITEM(__pyx_4, 0, __pyx_3); __pyx_3 = 0; - __pyx_5 = PyObject_CallObject(__pyx_2, __pyx_4); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 996; goto __pyx_L1;} + __pyx_5 = PyObject_CallObject(__pyx_2, __pyx_4); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1001; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; Py_DECREF(__pyx_4); __pyx_4 = 0; - __pyx_1 = PyObject_IsTrue(__pyx_5); if (__pyx_1 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 996; goto __pyx_L1;} + __pyx_1 = PyObject_IsTrue(__pyx_5); if (__pyx_1 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1001; goto __pyx_L1;} Py_DECREF(__pyx_5); __pyx_5 = 0; if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":997 */ - __pyx_3 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 997; goto __pyx_L1;} - __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 997; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1002 */ + __pyx_3 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1002; goto __pyx_L1;} + __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1002; goto __pyx_L1;} Py_INCREF(__pyx_k108p); PyTuple_SET_ITEM(__pyx_2, 0, __pyx_k108p); - __pyx_4 = PyObject_CallObject(__pyx_3, __pyx_2); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 997; goto __pyx_L1;} + __pyx_4 = PyObject_CallObject(__pyx_3, __pyx_2); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1002; goto __pyx_L1;} Py_DECREF(__pyx_3); __pyx_3 = 0; Py_DECREF(__pyx_2); __pyx_2 = 0; __Pyx_Raise(__pyx_4, 0, 0); Py_DECREF(__pyx_4); __pyx_4 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 997; goto __pyx_L1;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1002; goto __pyx_L1;} goto __pyx_L4; } __pyx_L4:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":998 */ - __pyx_5 = __pyx_f_6mtrand_cont1_array(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state,rk_pareto,__pyx_v_size,__pyx_v_oa); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 998; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1003 */ + __pyx_5 = __pyx_f_6mtrand_cont1_array(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state,rk_pareto,__pyx_v_size,__pyx_v_oa); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1003; goto __pyx_L1;} __pyx_r = __pyx_5; __pyx_5 = 0; goto __pyx_L0; @@ -5116,34 +5172,34 @@ Py_INCREF(__pyx_v_size); __pyx_v_oa = ((PyArrayObject *)Py_None); Py_INCREF(Py_None); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1008 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1013 */ __pyx_v_fa = PyFloat_AsDouble(__pyx_v_a); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1009 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1014 */ __pyx_1 = (!PyErr_Occurred()); if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1010 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1015 */ __pyx_1 = (__pyx_v_fa <= 0); if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1011 */ - __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1011; goto __pyx_L1;} - __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1011; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1016 */ + __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1016; goto __pyx_L1;} + __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1016; goto __pyx_L1;} Py_INCREF(__pyx_k109p); PyTuple_SET_ITEM(__pyx_3, 0, __pyx_k109p); - __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1011; goto __pyx_L1;} + __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1016; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; Py_DECREF(__pyx_3); __pyx_3 = 0; __Pyx_Raise(__pyx_4, 0, 0); Py_DECREF(__pyx_4); __pyx_4 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1011; goto __pyx_L1;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1016; goto __pyx_L1;} goto __pyx_L3; } __pyx_L3:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1012 */ - __pyx_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 (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1012; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1017 */ + __pyx_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 (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1017; goto __pyx_L1;} __pyx_r = __pyx_2; __pyx_2 = 0; goto __pyx_L0; @@ -5151,59 +5207,59 @@ } __pyx_L2:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1014 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1019 */ PyErr_Clear(); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1016 */ - __pyx_3 = PyArray_FROM_OTF(__pyx_v_a,NPY_DOUBLE,NPY_ALIGNED); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1016; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1021 */ + __pyx_3 = PyArray_FROM_OTF(__pyx_v_a,NPY_DOUBLE,NPY_ALIGNED); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1021; goto __pyx_L1;} Py_INCREF(((PyObject *)((PyArrayObject *)__pyx_3))); Py_DECREF(((PyObject *)__pyx_v_oa)); __pyx_v_oa = ((PyArrayObject *)__pyx_3); Py_DECREF(__pyx_3); __pyx_3 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1017 */ - __pyx_4 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1017; goto __pyx_L1;} - __pyx_2 = PyObject_GetAttr(__pyx_4, __pyx_n_any); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1017; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1022 */ + __pyx_4 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1022; goto __pyx_L1;} + __pyx_2 = PyObject_GetAttr(__pyx_4, __pyx_n_any); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1022; goto __pyx_L1;} Py_DECREF(__pyx_4); __pyx_4 = 0; - __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1017; goto __pyx_L1;} - __pyx_4 = PyObject_GetAttr(__pyx_3, __pyx_n_less_equal); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1017; goto __pyx_L1;} + __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1022; goto __pyx_L1;} + __pyx_4 = PyObject_GetAttr(__pyx_3, __pyx_n_less_equal); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1022; goto __pyx_L1;} Py_DECREF(__pyx_3); __pyx_3 = 0; - __pyx_3 = PyFloat_FromDouble(0.0); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1017; goto __pyx_L1;} - __pyx_5 = PyTuple_New(2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1017; goto __pyx_L1;} + __pyx_3 = PyFloat_FromDouble(0.0); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1022; goto __pyx_L1;} + __pyx_5 = PyTuple_New(2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1022; goto __pyx_L1;} Py_INCREF(((PyObject *)__pyx_v_oa)); PyTuple_SET_ITEM(__pyx_5, 0, ((PyObject *)__pyx_v_oa)); PyTuple_SET_ITEM(__pyx_5, 1, __pyx_3); __pyx_3 = 0; - __pyx_3 = PyObject_CallObject(__pyx_4, __pyx_5); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1017; goto __pyx_L1;} + __pyx_3 = PyObject_CallObject(__pyx_4, __pyx_5); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1022; goto __pyx_L1;} Py_DECREF(__pyx_4); __pyx_4 = 0; Py_DECREF(__pyx_5); __pyx_5 = 0; - __pyx_4 = PyTuple_New(1); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1017; goto __pyx_L1;} + __pyx_4 = PyTuple_New(1); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1022; goto __pyx_L1;} PyTuple_SET_ITEM(__pyx_4, 0, __pyx_3); __pyx_3 = 0; - __pyx_5 = PyObject_CallObject(__pyx_2, __pyx_4); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1017; goto __pyx_L1;} + __pyx_5 = PyObject_CallObject(__pyx_2, __pyx_4); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1022; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; Py_DECREF(__pyx_4); __pyx_4 = 0; - __pyx_1 = PyObject_IsTrue(__pyx_5); if (__pyx_1 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1017; goto __pyx_L1;} + __pyx_1 = PyObject_IsTrue(__pyx_5); if (__pyx_1 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1022; goto __pyx_L1;} Py_DECREF(__pyx_5); __pyx_5 = 0; if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1018 */ - __pyx_3 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1018; goto __pyx_L1;} - __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1018; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1023 */ + __pyx_3 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1023; goto __pyx_L1;} + __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1023; goto __pyx_L1;} Py_INCREF(__pyx_k110p); PyTuple_SET_ITEM(__pyx_2, 0, __pyx_k110p); - __pyx_4 = PyObject_CallObject(__pyx_3, __pyx_2); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1018; goto __pyx_L1;} + __pyx_4 = PyObject_CallObject(__pyx_3, __pyx_2); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1023; goto __pyx_L1;} Py_DECREF(__pyx_3); __pyx_3 = 0; Py_DECREF(__pyx_2); __pyx_2 = 0; __Pyx_Raise(__pyx_4, 0, 0); Py_DECREF(__pyx_4); __pyx_4 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1018; goto __pyx_L1;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1023; goto __pyx_L1;} goto __pyx_L4; } __pyx_L4:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1019 */ - __pyx_5 = __pyx_f_6mtrand_cont1_array(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state,rk_weibull,__pyx_v_size,__pyx_v_oa); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1019; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1024 */ + __pyx_5 = __pyx_f_6mtrand_cont1_array(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state,rk_weibull,__pyx_v_size,__pyx_v_oa); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1024; goto __pyx_L1;} __pyx_r = __pyx_5; __pyx_5 = 0; goto __pyx_L0; @@ -5252,34 +5308,34 @@ Py_INCREF(__pyx_v_size); __pyx_v_oa = ((PyArrayObject *)Py_None); Py_INCREF(Py_None); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1029 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1034 */ __pyx_v_fa = PyFloat_AsDouble(__pyx_v_a); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1030 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1035 */ __pyx_1 = (!PyErr_Occurred()); if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1031 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1036 */ __pyx_1 = (__pyx_v_fa <= 0); if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1032 */ - __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1032; goto __pyx_L1;} - __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1032; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1037 */ + __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1037; goto __pyx_L1;} + __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1037; goto __pyx_L1;} Py_INCREF(__pyx_k111p); PyTuple_SET_ITEM(__pyx_3, 0, __pyx_k111p); - __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1032; goto __pyx_L1;} + __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1037; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; Py_DECREF(__pyx_3); __pyx_3 = 0; __Pyx_Raise(__pyx_4, 0, 0); Py_DECREF(__pyx_4); __pyx_4 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1032; goto __pyx_L1;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1037; goto __pyx_L1;} goto __pyx_L3; } __pyx_L3:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1033 */ - __pyx_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 (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1033; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1038 */ + __pyx_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 (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1038; goto __pyx_L1;} __pyx_r = __pyx_2; __pyx_2 = 0; goto __pyx_L0; @@ -5287,59 +5343,59 @@ } __pyx_L2:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1035 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1040 */ PyErr_Clear(); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1037 */ - __pyx_3 = PyArray_FROM_OTF(__pyx_v_a,NPY_DOUBLE,NPY_ALIGNED); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1037; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1042 */ + __pyx_3 = PyArray_FROM_OTF(__pyx_v_a,NPY_DOUBLE,NPY_ALIGNED); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1042; goto __pyx_L1;} Py_INCREF(((PyObject *)((PyArrayObject *)__pyx_3))); Py_DECREF(((PyObject *)__pyx_v_oa)); __pyx_v_oa = ((PyArrayObject *)__pyx_3); Py_DECREF(__pyx_3); __pyx_3 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1038 */ - __pyx_4 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1038; goto __pyx_L1;} - __pyx_2 = PyObject_GetAttr(__pyx_4, __pyx_n_any); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1038; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1043 */ + __pyx_4 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1043; goto __pyx_L1;} + __pyx_2 = PyObject_GetAttr(__pyx_4, __pyx_n_any); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1043; goto __pyx_L1;} Py_DECREF(__pyx_4); __pyx_4 = 0; - __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1038; goto __pyx_L1;} - __pyx_4 = PyObject_GetAttr(__pyx_3, __pyx_n_less_equal); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1038; goto __pyx_L1;} + __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1043; goto __pyx_L1;} + __pyx_4 = PyObject_GetAttr(__pyx_3, __pyx_n_less_equal); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1043; goto __pyx_L1;} Py_DECREF(__pyx_3); __pyx_3 = 0; - __pyx_3 = PyFloat_FromDouble(0.0); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1038; goto __pyx_L1;} - __pyx_5 = PyTuple_New(2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1038; goto __pyx_L1;} + __pyx_3 = PyFloat_FromDouble(0.0); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1043; goto __pyx_L1;} + __pyx_5 = PyTuple_New(2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1043; goto __pyx_L1;} Py_INCREF(((PyObject *)__pyx_v_oa)); PyTuple_SET_ITEM(__pyx_5, 0, ((PyObject *)__pyx_v_oa)); PyTuple_SET_ITEM(__pyx_5, 1, __pyx_3); __pyx_3 = 0; - __pyx_3 = PyObject_CallObject(__pyx_4, __pyx_5); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1038; goto __pyx_L1;} + __pyx_3 = PyObject_CallObject(__pyx_4, __pyx_5); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1043; goto __pyx_L1;} Py_DECREF(__pyx_4); __pyx_4 = 0; Py_DECREF(__pyx_5); __pyx_5 = 0; - __pyx_4 = PyTuple_New(1); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1038; goto __pyx_L1;} + __pyx_4 = PyTuple_New(1); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1043; goto __pyx_L1;} PyTuple_SET_ITEM(__pyx_4, 0, __pyx_3); __pyx_3 = 0; - __pyx_5 = PyObject_CallObject(__pyx_2, __pyx_4); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1038; goto __pyx_L1;} + __pyx_5 = PyObject_CallObject(__pyx_2, __pyx_4); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1043; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; Py_DECREF(__pyx_4); __pyx_4 = 0; - __pyx_1 = PyObject_IsTrue(__pyx_5); if (__pyx_1 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1038; goto __pyx_L1;} + __pyx_1 = PyObject_IsTrue(__pyx_5); if (__pyx_1 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1043; goto __pyx_L1;} Py_DECREF(__pyx_5); __pyx_5 = 0; if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1039 */ - __pyx_3 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1039; goto __pyx_L1;} - __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1039; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1044 */ + __pyx_3 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1044; goto __pyx_L1;} + __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1044; goto __pyx_L1;} Py_INCREF(__pyx_k112p); PyTuple_SET_ITEM(__pyx_2, 0, __pyx_k112p); - __pyx_4 = PyObject_CallObject(__pyx_3, __pyx_2); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1039; goto __pyx_L1;} + __pyx_4 = PyObject_CallObject(__pyx_3, __pyx_2); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1044; goto __pyx_L1;} Py_DECREF(__pyx_3); __pyx_3 = 0; Py_DECREF(__pyx_2); __pyx_2 = 0; __Pyx_Raise(__pyx_4, 0, 0); Py_DECREF(__pyx_4); __pyx_4 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1039; goto __pyx_L1;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1044; goto __pyx_L1;} goto __pyx_L4; } __pyx_L4:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1040 */ - __pyx_5 = __pyx_f_6mtrand_cont1_array(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state,rk_power,__pyx_v_size,__pyx_v_oa); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1040; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1045 */ + __pyx_5 = __pyx_f_6mtrand_cont1_array(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state,rk_power,__pyx_v_size,__pyx_v_oa); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1045; goto __pyx_L1;} __pyx_r = __pyx_5; __pyx_5 = 0; goto __pyx_L0; @@ -5395,37 +5451,37 @@ __pyx_v_oloc = ((PyArrayObject *)Py_None); Py_INCREF(Py_None); __pyx_v_oscale = ((PyArrayObject *)Py_None); Py_INCREF(Py_None); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1050 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1055 */ __pyx_v_floc = PyFloat_AsDouble(__pyx_v_loc); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1051 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1056 */ __pyx_v_fscale = PyFloat_AsDouble(__pyx_v_scale); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1052 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1057 */ __pyx_1 = (!PyErr_Occurred()); if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1053 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1058 */ __pyx_1 = (__pyx_v_fscale <= 0); if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1054 */ - __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1054; goto __pyx_L1;} - __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1054; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1059 */ + __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1059; goto __pyx_L1;} + __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1059; goto __pyx_L1;} Py_INCREF(__pyx_k113p); PyTuple_SET_ITEM(__pyx_3, 0, __pyx_k113p); - __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1054; goto __pyx_L1;} + __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1059; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; Py_DECREF(__pyx_3); __pyx_3 = 0; __Pyx_Raise(__pyx_4, 0, 0); Py_DECREF(__pyx_4); __pyx_4 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1054; goto __pyx_L1;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1059; goto __pyx_L1;} goto __pyx_L3; } __pyx_L3:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1055 */ - __pyx_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 (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1055; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1060 */ + __pyx_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 (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1060; goto __pyx_L1;} __pyx_r = __pyx_2; __pyx_2 = 0; goto __pyx_L0; @@ -5433,66 +5489,66 @@ } __pyx_L2:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1057 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1062 */ PyErr_Clear(); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1058 */ - __pyx_3 = PyArray_FROM_OTF(__pyx_v_loc,NPY_DOUBLE,NPY_ALIGNED); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1058; goto __pyx_L1;} - if (!__Pyx_TypeTest(__pyx_3, __pyx_ptype_6mtrand_ndarray)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1058; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1063 */ + __pyx_3 = PyArray_FROM_OTF(__pyx_v_loc,NPY_DOUBLE,NPY_ALIGNED); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1063; goto __pyx_L1;} + if (!__Pyx_TypeTest(__pyx_3, __pyx_ptype_6mtrand_ndarray)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1063; goto __pyx_L1;} Py_DECREF(((PyObject *)__pyx_v_oloc)); __pyx_v_oloc = ((PyArrayObject *)__pyx_3); __pyx_3 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1059 */ - __pyx_4 = PyArray_FROM_OTF(__pyx_v_scale,NPY_DOUBLE,NPY_ALIGNED); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1059; goto __pyx_L1;} - if (!__Pyx_TypeTest(__pyx_4, __pyx_ptype_6mtrand_ndarray)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1059; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1064 */ + __pyx_4 = PyArray_FROM_OTF(__pyx_v_scale,NPY_DOUBLE,NPY_ALIGNED); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1064; goto __pyx_L1;} + if (!__Pyx_TypeTest(__pyx_4, __pyx_ptype_6mtrand_ndarray)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1064; goto __pyx_L1;} Py_DECREF(((PyObject *)__pyx_v_oscale)); __pyx_v_oscale = ((PyArrayObject *)__pyx_4); __pyx_4 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1060 */ - __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1060; goto __pyx_L1;} - __pyx_3 = PyObject_GetAttr(__pyx_2, __pyx_n_any); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1060; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1065 */ + __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1065; goto __pyx_L1;} + __pyx_3 = PyObject_GetAttr(__pyx_2, __pyx_n_any); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1065; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; - __pyx_4 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1060; goto __pyx_L1;} - __pyx_2 = PyObject_GetAttr(__pyx_4, __pyx_n_less_equal); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1060; goto __pyx_L1;} + __pyx_4 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1065; goto __pyx_L1;} + __pyx_2 = PyObject_GetAttr(__pyx_4, __pyx_n_less_equal); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1065; goto __pyx_L1;} Py_DECREF(__pyx_4); __pyx_4 = 0; - __pyx_4 = PyFloat_FromDouble(0.0); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1060; goto __pyx_L1;} - __pyx_5 = PyTuple_New(2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1060; goto __pyx_L1;} + __pyx_4 = PyFloat_FromDouble(0.0); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1065; goto __pyx_L1;} + __pyx_5 = PyTuple_New(2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1065; goto __pyx_L1;} Py_INCREF(((PyObject *)__pyx_v_oscale)); PyTuple_SET_ITEM(__pyx_5, 0, ((PyObject *)__pyx_v_oscale)); PyTuple_SET_ITEM(__pyx_5, 1, __pyx_4); __pyx_4 = 0; - __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_5); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1060; goto __pyx_L1;} + __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_5); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1065; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; Py_DECREF(__pyx_5); __pyx_5 = 0; - __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1060; goto __pyx_L1;} + __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1065; goto __pyx_L1;} PyTuple_SET_ITEM(__pyx_2, 0, __pyx_4); __pyx_4 = 0; - __pyx_5 = PyObject_CallObject(__pyx_3, __pyx_2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1060; goto __pyx_L1;} + __pyx_5 = PyObject_CallObject(__pyx_3, __pyx_2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1065; goto __pyx_L1;} Py_DECREF(__pyx_3); __pyx_3 = 0; Py_DECREF(__pyx_2); __pyx_2 = 0; - __pyx_1 = PyObject_IsTrue(__pyx_5); if (__pyx_1 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1060; goto __pyx_L1;} + __pyx_1 = PyObject_IsTrue(__pyx_5); if (__pyx_1 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1065; goto __pyx_L1;} Py_DECREF(__pyx_5); __pyx_5 = 0; if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1061 */ - __pyx_4 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1061; goto __pyx_L1;} - __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1061; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1066 */ + __pyx_4 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1066; goto __pyx_L1;} + __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1066; goto __pyx_L1;} Py_INCREF(__pyx_k114p); PyTuple_SET_ITEM(__pyx_3, 0, __pyx_k114p); - __pyx_2 = PyObject_CallObject(__pyx_4, __pyx_3); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1061; goto __pyx_L1;} + __pyx_2 = PyObject_CallObject(__pyx_4, __pyx_3); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1066; goto __pyx_L1;} Py_DECREF(__pyx_4); __pyx_4 = 0; Py_DECREF(__pyx_3); __pyx_3 = 0; __Pyx_Raise(__pyx_2, 0, 0); Py_DECREF(__pyx_2); __pyx_2 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1061; goto __pyx_L1;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1066; goto __pyx_L1;} goto __pyx_L4; } __pyx_L4:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1062 */ - __pyx_5 = __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 (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1062; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1067 */ + __pyx_5 = __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 (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1067; goto __pyx_L1;} __pyx_r = __pyx_5; __pyx_5 = 0; goto __pyx_L0; @@ -5550,37 +5606,37 @@ __pyx_v_oloc = ((PyArrayObject *)Py_None); Py_INCREF(Py_None); __pyx_v_oscale = ((PyArrayObject *)Py_None); Py_INCREF(Py_None); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1072 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1077 */ __pyx_v_floc = PyFloat_AsDouble(__pyx_v_loc); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1073 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1078 */ __pyx_v_fscale = PyFloat_AsDouble(__pyx_v_scale); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1074 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1079 */ __pyx_1 = (!PyErr_Occurred()); if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1075 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1080 */ __pyx_1 = (__pyx_v_fscale <= 0); if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1076 */ - __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1076; goto __pyx_L1;} - __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1076; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1081 */ + __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1081; goto __pyx_L1;} + __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1081; goto __pyx_L1;} Py_INCREF(__pyx_k115p); PyTuple_SET_ITEM(__pyx_3, 0, __pyx_k115p); - __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1076; goto __pyx_L1;} + __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1081; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; Py_DECREF(__pyx_3); __pyx_3 = 0; __Pyx_Raise(__pyx_4, 0, 0); Py_DECREF(__pyx_4); __pyx_4 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1076; goto __pyx_L1;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1081; goto __pyx_L1;} goto __pyx_L3; } __pyx_L3:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1077 */ - __pyx_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 (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1077; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1082 */ + __pyx_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 (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1082; goto __pyx_L1;} __pyx_r = __pyx_2; __pyx_2 = 0; goto __pyx_L0; @@ -5588,66 +5644,66 @@ } __pyx_L2:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1079 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1084 */ PyErr_Clear(); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1080 */ - __pyx_3 = PyArray_FROM_OTF(__pyx_v_loc,NPY_DOUBLE,NPY_ALIGNED); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1080; goto __pyx_L1;} - if (!__Pyx_TypeTest(__pyx_3, __pyx_ptype_6mtrand_ndarray)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1080; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1085 */ + __pyx_3 = PyArray_FROM_OTF(__pyx_v_loc,NPY_DOUBLE,NPY_ALIGNED); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1085; goto __pyx_L1;} + if (!__Pyx_TypeTest(__pyx_3, __pyx_ptype_6mtrand_ndarray)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1085; goto __pyx_L1;} Py_DECREF(((PyObject *)__pyx_v_oloc)); __pyx_v_oloc = ((PyArrayObject *)__pyx_3); __pyx_3 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1081 */ - __pyx_4 = PyArray_FROM_OTF(__pyx_v_scale,NPY_DOUBLE,NPY_ALIGNED); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1081; goto __pyx_L1;} - if (!__Pyx_TypeTest(__pyx_4, __pyx_ptype_6mtrand_ndarray)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1081; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1086 */ + __pyx_4 = PyArray_FROM_OTF(__pyx_v_scale,NPY_DOUBLE,NPY_ALIGNED); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1086; goto __pyx_L1;} + if (!__Pyx_TypeTest(__pyx_4, __pyx_ptype_6mtrand_ndarray)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1086; goto __pyx_L1;} Py_DECREF(((PyObject *)__pyx_v_oscale)); __pyx_v_oscale = ((PyArrayObject *)__pyx_4); __pyx_4 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1082 */ - __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1082; goto __pyx_L1;} - __pyx_3 = PyObject_GetAttr(__pyx_2, __pyx_n_any); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1082; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1087 */ + __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1087; goto __pyx_L1;} + __pyx_3 = PyObject_GetAttr(__pyx_2, __pyx_n_any); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1087; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; - __pyx_4 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1082; goto __pyx_L1;} - __pyx_2 = PyObject_GetAttr(__pyx_4, __pyx_n_less_equal); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1082; goto __pyx_L1;} + __pyx_4 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1087; goto __pyx_L1;} + __pyx_2 = PyObject_GetAttr(__pyx_4, __pyx_n_less_equal); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1087; goto __pyx_L1;} Py_DECREF(__pyx_4); __pyx_4 = 0; - __pyx_4 = PyFloat_FromDouble(0.0); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1082; goto __pyx_L1;} - __pyx_5 = PyTuple_New(2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1082; goto __pyx_L1;} + __pyx_4 = PyFloat_FromDouble(0.0); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1087; goto __pyx_L1;} + __pyx_5 = PyTuple_New(2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1087; goto __pyx_L1;} Py_INCREF(((PyObject *)__pyx_v_oscale)); PyTuple_SET_ITEM(__pyx_5, 0, ((PyObject *)__pyx_v_oscale)); PyTuple_SET_ITEM(__pyx_5, 1, __pyx_4); __pyx_4 = 0; - __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_5); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1082; goto __pyx_L1;} + __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_5); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1087; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; Py_DECREF(__pyx_5); __pyx_5 = 0; - __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1082; goto __pyx_L1;} + __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1087; goto __pyx_L1;} PyTuple_SET_ITEM(__pyx_2, 0, __pyx_4); __pyx_4 = 0; - __pyx_5 = PyObject_CallObject(__pyx_3, __pyx_2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1082; goto __pyx_L1;} + __pyx_5 = PyObject_CallObject(__pyx_3, __pyx_2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1087; goto __pyx_L1;} Py_DECREF(__pyx_3); __pyx_3 = 0; Py_DECREF(__pyx_2); __pyx_2 = 0; - __pyx_1 = PyObject_IsTrue(__pyx_5); if (__pyx_1 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1082; goto __pyx_L1;} + __pyx_1 = PyObject_IsTrue(__pyx_5); if (__pyx_1 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1087; goto __pyx_L1;} Py_DECREF(__pyx_5); __pyx_5 = 0; if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1083 */ - __pyx_4 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1083; goto __pyx_L1;} - __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1083; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1088 */ + __pyx_4 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1088; goto __pyx_L1;} + __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1088; goto __pyx_L1;} Py_INCREF(__pyx_k116p); PyTuple_SET_ITEM(__pyx_3, 0, __pyx_k116p); - __pyx_2 = PyObject_CallObject(__pyx_4, __pyx_3); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1083; goto __pyx_L1;} + __pyx_2 = PyObject_CallObject(__pyx_4, __pyx_3); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1088; goto __pyx_L1;} Py_DECREF(__pyx_4); __pyx_4 = 0; Py_DECREF(__pyx_3); __pyx_3 = 0; __Pyx_Raise(__pyx_2, 0, 0); Py_DECREF(__pyx_2); __pyx_2 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1083; goto __pyx_L1;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1088; goto __pyx_L1;} goto __pyx_L4; } __pyx_L4:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1084 */ - __pyx_5 = __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 (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1084; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1089 */ + __pyx_5 = __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 (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1089; goto __pyx_L1;} __pyx_r = __pyx_5; __pyx_5 = 0; goto __pyx_L0; @@ -5705,37 +5761,37 @@ __pyx_v_oloc = ((PyArrayObject *)Py_None); Py_INCREF(Py_None); __pyx_v_oscale = ((PyArrayObject *)Py_None); Py_INCREF(Py_None); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1094 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1099 */ __pyx_v_floc = PyFloat_AsDouble(__pyx_v_loc); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1095 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1100 */ __pyx_v_fscale = PyFloat_AsDouble(__pyx_v_scale); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1096 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1101 */ __pyx_1 = (!PyErr_Occurred()); if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1097 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1102 */ __pyx_1 = (__pyx_v_fscale <= 0); if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1098 */ - __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1098; goto __pyx_L1;} - __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1098; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1103 */ + __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1103; goto __pyx_L1;} + __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1103; goto __pyx_L1;} Py_INCREF(__pyx_k117p); PyTuple_SET_ITEM(__pyx_3, 0, __pyx_k117p); - __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1098; goto __pyx_L1;} + __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1103; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; Py_DECREF(__pyx_3); __pyx_3 = 0; __Pyx_Raise(__pyx_4, 0, 0); Py_DECREF(__pyx_4); __pyx_4 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1098; goto __pyx_L1;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1103; goto __pyx_L1;} goto __pyx_L3; } __pyx_L3:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1099 */ - __pyx_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 (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1099; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1104 */ + __pyx_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 (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1104; goto __pyx_L1;} __pyx_r = __pyx_2; __pyx_2 = 0; goto __pyx_L0; @@ -5743,66 +5799,66 @@ } __pyx_L2:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1101 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1106 */ PyErr_Clear(); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1102 */ - __pyx_3 = PyArray_FROM_OTF(__pyx_v_loc,NPY_DOUBLE,NPY_ALIGNED); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1102; goto __pyx_L1;} - if (!__Pyx_TypeTest(__pyx_3, __pyx_ptype_6mtrand_ndarray)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1102; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1107 */ + __pyx_3 = PyArray_FROM_OTF(__pyx_v_loc,NPY_DOUBLE,NPY_ALIGNED); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1107; goto __pyx_L1;} + if (!__Pyx_TypeTest(__pyx_3, __pyx_ptype_6mtrand_ndarray)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1107; goto __pyx_L1;} Py_DECREF(((PyObject *)__pyx_v_oloc)); __pyx_v_oloc = ((PyArrayObject *)__pyx_3); __pyx_3 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1103 */ - __pyx_4 = PyArray_FROM_OTF(__pyx_v_scale,NPY_DOUBLE,NPY_ALIGNED); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1103; goto __pyx_L1;} - if (!__Pyx_TypeTest(__pyx_4, __pyx_ptype_6mtrand_ndarray)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1103; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1108 */ + __pyx_4 = PyArray_FROM_OTF(__pyx_v_scale,NPY_DOUBLE,NPY_ALIGNED); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1108; goto __pyx_L1;} + if (!__Pyx_TypeTest(__pyx_4, __pyx_ptype_6mtrand_ndarray)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1108; goto __pyx_L1;} Py_DECREF(((PyObject *)__pyx_v_oscale)); __pyx_v_oscale = ((PyArrayObject *)__pyx_4); __pyx_4 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1104 */ - __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1104; goto __pyx_L1;} - __pyx_3 = PyObject_GetAttr(__pyx_2, __pyx_n_any); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1104; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1109 */ + __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1109; goto __pyx_L1;} + __pyx_3 = PyObject_GetAttr(__pyx_2, __pyx_n_any); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1109; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; - __pyx_4 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1104; goto __pyx_L1;} - __pyx_2 = PyObject_GetAttr(__pyx_4, __pyx_n_less_equal); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1104; goto __pyx_L1;} + __pyx_4 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1109; goto __pyx_L1;} + __pyx_2 = PyObject_GetAttr(__pyx_4, __pyx_n_less_equal); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1109; goto __pyx_L1;} Py_DECREF(__pyx_4); __pyx_4 = 0; - __pyx_4 = PyFloat_FromDouble(0.0); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1104; goto __pyx_L1;} - __pyx_5 = PyTuple_New(2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1104; goto __pyx_L1;} + __pyx_4 = PyFloat_FromDouble(0.0); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1109; goto __pyx_L1;} + __pyx_5 = PyTuple_New(2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1109; goto __pyx_L1;} Py_INCREF(((PyObject *)__pyx_v_oscale)); PyTuple_SET_ITEM(__pyx_5, 0, ((PyObject *)__pyx_v_oscale)); PyTuple_SET_ITEM(__pyx_5, 1, __pyx_4); __pyx_4 = 0; - __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_5); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1104; goto __pyx_L1;} + __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_5); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1109; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; Py_DECREF(__pyx_5); __pyx_5 = 0; - __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1104; goto __pyx_L1;} + __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1109; goto __pyx_L1;} PyTuple_SET_ITEM(__pyx_2, 0, __pyx_4); __pyx_4 = 0; - __pyx_5 = PyObject_CallObject(__pyx_3, __pyx_2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1104; goto __pyx_L1;} + __pyx_5 = PyObject_CallObject(__pyx_3, __pyx_2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1109; goto __pyx_L1;} Py_DECREF(__pyx_3); __pyx_3 = 0; Py_DECREF(__pyx_2); __pyx_2 = 0; - __pyx_1 = PyObject_IsTrue(__pyx_5); if (__pyx_1 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1104; goto __pyx_L1;} + __pyx_1 = PyObject_IsTrue(__pyx_5); if (__pyx_1 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1109; goto __pyx_L1;} Py_DECREF(__pyx_5); __pyx_5 = 0; if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1105 */ - __pyx_4 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1105; goto __pyx_L1;} - __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1105; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1110 */ + __pyx_4 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1110; goto __pyx_L1;} + __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1110; goto __pyx_L1;} Py_INCREF(__pyx_k118p); PyTuple_SET_ITEM(__pyx_3, 0, __pyx_k118p); - __pyx_2 = PyObject_CallObject(__pyx_4, __pyx_3); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1105; goto __pyx_L1;} + __pyx_2 = PyObject_CallObject(__pyx_4, __pyx_3); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1110; goto __pyx_L1;} Py_DECREF(__pyx_4); __pyx_4 = 0; Py_DECREF(__pyx_3); __pyx_3 = 0; __Pyx_Raise(__pyx_2, 0, 0); Py_DECREF(__pyx_2); __pyx_2 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1105; goto __pyx_L1;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1110; goto __pyx_L1;} goto __pyx_L4; } __pyx_L4:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1106 */ - __pyx_5 = __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 (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1106; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1111 */ + __pyx_5 = __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 (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1111; goto __pyx_L1;} __pyx_r = __pyx_5; __pyx_5 = 0; goto __pyx_L0; @@ -5860,37 +5916,37 @@ __pyx_v_omean = ((PyArrayObject *)Py_None); Py_INCREF(Py_None); __pyx_v_osigma = ((PyArrayObject *)Py_None); Py_INCREF(Py_None); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1121 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1126 */ __pyx_v_fmean = PyFloat_AsDouble(__pyx_v_mean); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1122 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1127 */ __pyx_v_fsigma = PyFloat_AsDouble(__pyx_v_sigma); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1124 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1129 */ __pyx_1 = (!PyErr_Occurred()); if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1125 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1130 */ __pyx_1 = (__pyx_v_fsigma <= 0); if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1126 */ - __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1126; goto __pyx_L1;} - __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1126; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1131 */ + __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1131; goto __pyx_L1;} + __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1131; goto __pyx_L1;} Py_INCREF(__pyx_k119p); PyTuple_SET_ITEM(__pyx_3, 0, __pyx_k119p); - __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1126; goto __pyx_L1;} + __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1131; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; Py_DECREF(__pyx_3); __pyx_3 = 0; __Pyx_Raise(__pyx_4, 0, 0); Py_DECREF(__pyx_4); __pyx_4 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1126; goto __pyx_L1;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1131; goto __pyx_L1;} goto __pyx_L3; } __pyx_L3:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1127 */ - __pyx_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 (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1127; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1132 */ + __pyx_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 (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1132; goto __pyx_L1;} __pyx_r = __pyx_2; __pyx_2 = 0; goto __pyx_L0; @@ -5898,66 +5954,66 @@ } __pyx_L2:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1129 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1134 */ PyErr_Clear(); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1131 */ - __pyx_3 = PyArray_FROM_OTF(__pyx_v_mean,NPY_DOUBLE,NPY_ALIGNED); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1131; goto __pyx_L1;} - if (!__Pyx_TypeTest(__pyx_3, __pyx_ptype_6mtrand_ndarray)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1131; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1136 */ + __pyx_3 = PyArray_FROM_OTF(__pyx_v_mean,NPY_DOUBLE,NPY_ALIGNED); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1136; goto __pyx_L1;} + if (!__Pyx_TypeTest(__pyx_3, __pyx_ptype_6mtrand_ndarray)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1136; goto __pyx_L1;} Py_DECREF(((PyObject *)__pyx_v_omean)); __pyx_v_omean = ((PyArrayObject *)__pyx_3); __pyx_3 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1132 */ - __pyx_4 = PyArray_FROM_OTF(__pyx_v_sigma,NPY_DOUBLE,NPY_ALIGNED); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1132; goto __pyx_L1;} - if (!__Pyx_TypeTest(__pyx_4, __pyx_ptype_6mtrand_ndarray)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1132; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1137 */ + __pyx_4 = PyArray_FROM_OTF(__pyx_v_sigma,NPY_DOUBLE,NPY_ALIGNED); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1137; goto __pyx_L1;} + if (!__Pyx_TypeTest(__pyx_4, __pyx_ptype_6mtrand_ndarray)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1137; goto __pyx_L1;} Py_DECREF(((PyObject *)__pyx_v_osigma)); __pyx_v_osigma = ((PyArrayObject *)__pyx_4); __pyx_4 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1133 */ - __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1133; goto __pyx_L1;} - __pyx_3 = PyObject_GetAttr(__pyx_2, __pyx_n_any); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1133; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1138 */ + __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1138; goto __pyx_L1;} + __pyx_3 = PyObject_GetAttr(__pyx_2, __pyx_n_any); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1138; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; - __pyx_4 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1133; goto __pyx_L1;} - __pyx_2 = PyObject_GetAttr(__pyx_4, __pyx_n_less_equal); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1133; goto __pyx_L1;} + __pyx_4 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1138; goto __pyx_L1;} + __pyx_2 = PyObject_GetAttr(__pyx_4, __pyx_n_less_equal); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1138; goto __pyx_L1;} Py_DECREF(__pyx_4); __pyx_4 = 0; - __pyx_4 = PyFloat_FromDouble(0.0); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1133; goto __pyx_L1;} - __pyx_5 = PyTuple_New(2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1133; goto __pyx_L1;} + __pyx_4 = PyFloat_FromDouble(0.0); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1138; goto __pyx_L1;} + __pyx_5 = PyTuple_New(2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1138; goto __pyx_L1;} Py_INCREF(((PyObject *)__pyx_v_osigma)); PyTuple_SET_ITEM(__pyx_5, 0, ((PyObject *)__pyx_v_osigma)); PyTuple_SET_ITEM(__pyx_5, 1, __pyx_4); __pyx_4 = 0; - __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_5); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1133; goto __pyx_L1;} + __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_5); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1138; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; Py_DECREF(__pyx_5); __pyx_5 = 0; - __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1133; goto __pyx_L1;} + __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1138; goto __pyx_L1;} PyTuple_SET_ITEM(__pyx_2, 0, __pyx_4); __pyx_4 = 0; - __pyx_5 = PyObject_CallObject(__pyx_3, __pyx_2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1133; goto __pyx_L1;} + __pyx_5 = PyObject_CallObject(__pyx_3, __pyx_2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1138; goto __pyx_L1;} Py_DECREF(__pyx_3); __pyx_3 = 0; Py_DECREF(__pyx_2); __pyx_2 = 0; - __pyx_1 = PyObject_IsTrue(__pyx_5); if (__pyx_1 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1133; goto __pyx_L1;} + __pyx_1 = PyObject_IsTrue(__pyx_5); if (__pyx_1 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1138; goto __pyx_L1;} Py_DECREF(__pyx_5); __pyx_5 = 0; if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1134 */ - __pyx_4 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1134; goto __pyx_L1;} - __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1134; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1139 */ + __pyx_4 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1139; goto __pyx_L1;} + __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1139; goto __pyx_L1;} Py_INCREF(__pyx_k120p); PyTuple_SET_ITEM(__pyx_3, 0, __pyx_k120p); - __pyx_2 = PyObject_CallObject(__pyx_4, __pyx_3); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1134; goto __pyx_L1;} + __pyx_2 = PyObject_CallObject(__pyx_4, __pyx_3); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1139; goto __pyx_L1;} Py_DECREF(__pyx_4); __pyx_4 = 0; Py_DECREF(__pyx_3); __pyx_3 = 0; __Pyx_Raise(__pyx_2, 0, 0); Py_DECREF(__pyx_2); __pyx_2 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1134; goto __pyx_L1;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1139; goto __pyx_L1;} goto __pyx_L4; } __pyx_L4:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1135 */ - __pyx_5 = __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 (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1135; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1140 */ + __pyx_5 = __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 (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1140; goto __pyx_L1;} __pyx_r = __pyx_5; __pyx_5 = 0; goto __pyx_L0; @@ -6009,34 +6065,34 @@ Py_INCREF(__pyx_v_size); __pyx_v_oscale = ((PyArrayObject *)Py_None); Py_INCREF(Py_None); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1145 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1150 */ __pyx_v_fscale = PyFloat_AsDouble(__pyx_v_scale); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1147 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1152 */ __pyx_1 = (!PyErr_Occurred()); if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1148 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1153 */ __pyx_1 = (__pyx_v_fscale <= 0); if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1149 */ - __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1149; goto __pyx_L1;} - __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1149; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1154 */ + __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1154; goto __pyx_L1;} + __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1154; goto __pyx_L1;} Py_INCREF(__pyx_k121p); PyTuple_SET_ITEM(__pyx_3, 0, __pyx_k121p); - __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1149; goto __pyx_L1;} + __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1154; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; Py_DECREF(__pyx_3); __pyx_3 = 0; __Pyx_Raise(__pyx_4, 0, 0); Py_DECREF(__pyx_4); __pyx_4 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1149; goto __pyx_L1;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1154; goto __pyx_L1;} goto __pyx_L3; } __pyx_L3:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1150 */ - __pyx_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 (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1150; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1155 */ + __pyx_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 (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1155; goto __pyx_L1;} __pyx_r = __pyx_2; __pyx_2 = 0; goto __pyx_L0; @@ -6044,59 +6100,59 @@ } __pyx_L2:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1152 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1157 */ PyErr_Clear(); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1154 */ - __pyx_3 = PyArray_FROM_OTF(__pyx_v_scale,NPY_DOUBLE,NPY_ALIGNED); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1154; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1159 */ + __pyx_3 = PyArray_FROM_OTF(__pyx_v_scale,NPY_DOUBLE,NPY_ALIGNED); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1159; goto __pyx_L1;} Py_INCREF(((PyObject *)((PyArrayObject *)__pyx_3))); Py_DECREF(((PyObject *)__pyx_v_oscale)); __pyx_v_oscale = ((PyArrayObject *)__pyx_3); Py_DECREF(__pyx_3); __pyx_3 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1155 */ - __pyx_4 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1155; goto __pyx_L1;} - __pyx_2 = PyObject_GetAttr(__pyx_4, __pyx_n_any); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1155; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1160 */ + __pyx_4 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1160; goto __pyx_L1;} + __pyx_2 = PyObject_GetAttr(__pyx_4, __pyx_n_any); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1160; goto __pyx_L1;} Py_DECREF(__pyx_4); __pyx_4 = 0; - __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1155; goto __pyx_L1;} - __pyx_4 = PyObject_GetAttr(__pyx_3, __pyx_n_less_equal); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1155; goto __pyx_L1;} + __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1160; goto __pyx_L1;} + __pyx_4 = PyObject_GetAttr(__pyx_3, __pyx_n_less_equal); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1160; goto __pyx_L1;} Py_DECREF(__pyx_3); __pyx_3 = 0; - __pyx_3 = PyFloat_FromDouble(0.0); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1155; goto __pyx_L1;} - __pyx_5 = PyTuple_New(2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1155; goto __pyx_L1;} + __pyx_3 = PyFloat_FromDouble(0.0); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1160; goto __pyx_L1;} + __pyx_5 = PyTuple_New(2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1160; goto __pyx_L1;} Py_INCREF(((PyObject *)__pyx_v_oscale)); PyTuple_SET_ITEM(__pyx_5, 0, ((PyObject *)__pyx_v_oscale)); PyTuple_SET_ITEM(__pyx_5, 1, __pyx_3); __pyx_3 = 0; - __pyx_3 = PyObject_CallObject(__pyx_4, __pyx_5); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1155; goto __pyx_L1;} + __pyx_3 = PyObject_CallObject(__pyx_4, __pyx_5); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1160; goto __pyx_L1;} Py_DECREF(__pyx_4); __pyx_4 = 0; Py_DECREF(__pyx_5); __pyx_5 = 0; - __pyx_4 = PyTuple_New(1); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1155; goto __pyx_L1;} + __pyx_4 = PyTuple_New(1); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1160; goto __pyx_L1;} PyTuple_SET_ITEM(__pyx_4, 0, __pyx_3); __pyx_3 = 0; - __pyx_5 = PyObject_CallObject(__pyx_2, __pyx_4); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1155; goto __pyx_L1;} + __pyx_5 = PyObject_CallObject(__pyx_2, __pyx_4); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1160; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; Py_DECREF(__pyx_4); __pyx_4 = 0; - __pyx_1 = PyObject_IsTrue(__pyx_5); if (__pyx_1 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1155; goto __pyx_L1;} + __pyx_1 = PyObject_IsTrue(__pyx_5); if (__pyx_1 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1160; goto __pyx_L1;} Py_DECREF(__pyx_5); __pyx_5 = 0; if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1156 */ - __pyx_3 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1156; goto __pyx_L1;} - __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1156; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1161 */ + __pyx_3 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1161; goto __pyx_L1;} + __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1161; goto __pyx_L1;} Py_INCREF(__pyx_k122p); PyTuple_SET_ITEM(__pyx_2, 0, __pyx_k122p); - __pyx_4 = PyObject_CallObject(__pyx_3, __pyx_2); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1156; goto __pyx_L1;} + __pyx_4 = PyObject_CallObject(__pyx_3, __pyx_2); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1161; goto __pyx_L1;} Py_DECREF(__pyx_3); __pyx_3 = 0; Py_DECREF(__pyx_2); __pyx_2 = 0; __Pyx_Raise(__pyx_4, 0, 0); Py_DECREF(__pyx_4); __pyx_4 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1156; goto __pyx_L1;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1161; goto __pyx_L1;} goto __pyx_L4; } __pyx_L4:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1157 */ - __pyx_5 = __pyx_f_6mtrand_cont1_array(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state,rk_rayleigh,__pyx_v_size,__pyx_v_oscale); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1157; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1162 */ + __pyx_5 = __pyx_f_6mtrand_cont1_array(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state,rk_rayleigh,__pyx_v_size,__pyx_v_oscale); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1162; goto __pyx_L1;} __pyx_r = __pyx_5; __pyx_5 = 0; goto __pyx_L0; @@ -6154,56 +6210,56 @@ __pyx_v_omean = ((PyArrayObject *)Py_None); Py_INCREF(Py_None); __pyx_v_oscale = ((PyArrayObject *)Py_None); Py_INCREF(Py_None); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1167 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1172 */ __pyx_v_fmean = PyFloat_AsDouble(__pyx_v_mean); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1168 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1173 */ __pyx_v_fscale = PyFloat_AsDouble(__pyx_v_scale); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1169 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1174 */ __pyx_1 = (!PyErr_Occurred()); if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1170 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1175 */ __pyx_1 = (__pyx_v_fmean <= 0); if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1171 */ - __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1171; goto __pyx_L1;} - __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1171; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1176 */ + __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1176; goto __pyx_L1;} + __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1176; goto __pyx_L1;} Py_INCREF(__pyx_k123p); PyTuple_SET_ITEM(__pyx_3, 0, __pyx_k123p); - __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1171; goto __pyx_L1;} + __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1176; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; Py_DECREF(__pyx_3); __pyx_3 = 0; __Pyx_Raise(__pyx_4, 0, 0); Py_DECREF(__pyx_4); __pyx_4 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1171; goto __pyx_L1;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1176; goto __pyx_L1;} goto __pyx_L3; } __pyx_L3:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1172 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1177 */ __pyx_1 = (__pyx_v_fscale <= 0); if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1173 */ - __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1173; goto __pyx_L1;} - __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1173; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1178 */ + __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1178; goto __pyx_L1;} + __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1178; goto __pyx_L1;} Py_INCREF(__pyx_k124p); PyTuple_SET_ITEM(__pyx_3, 0, __pyx_k124p); - __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1173; goto __pyx_L1;} + __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1178; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; Py_DECREF(__pyx_3); __pyx_3 = 0; __Pyx_Raise(__pyx_4, 0, 0); Py_DECREF(__pyx_4); __pyx_4 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1173; goto __pyx_L1;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1178; goto __pyx_L1;} goto __pyx_L4; } __pyx_L4:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1174 */ - __pyx_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 (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1174; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1179 */ + __pyx_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 (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1179; goto __pyx_L1;} __pyx_r = __pyx_2; __pyx_2 = 0; goto __pyx_L0; @@ -6211,104 +6267,104 @@ } __pyx_L2:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1176 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1181 */ PyErr_Clear(); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1177 */ - __pyx_3 = PyArray_FROM_OTF(__pyx_v_mean,NPY_DOUBLE,NPY_ALIGNED); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1177; goto __pyx_L1;} - if (!__Pyx_TypeTest(__pyx_3, __pyx_ptype_6mtrand_ndarray)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1177; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1182 */ + __pyx_3 = PyArray_FROM_OTF(__pyx_v_mean,NPY_DOUBLE,NPY_ALIGNED); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1182; goto __pyx_L1;} + if (!__Pyx_TypeTest(__pyx_3, __pyx_ptype_6mtrand_ndarray)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1182; goto __pyx_L1;} Py_DECREF(((PyObject *)__pyx_v_omean)); __pyx_v_omean = ((PyArrayObject *)__pyx_3); __pyx_3 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1178 */ - __pyx_4 = PyArray_FROM_OTF(__pyx_v_scale,NPY_DOUBLE,NPY_ALIGNED); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1178; goto __pyx_L1;} - if (!__Pyx_TypeTest(__pyx_4, __pyx_ptype_6mtrand_ndarray)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1178; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1183 */ + __pyx_4 = PyArray_FROM_OTF(__pyx_v_scale,NPY_DOUBLE,NPY_ALIGNED); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1183; goto __pyx_L1;} + if (!__Pyx_TypeTest(__pyx_4, __pyx_ptype_6mtrand_ndarray)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1183; goto __pyx_L1;} Py_DECREF(((PyObject *)__pyx_v_oscale)); __pyx_v_oscale = ((PyArrayObject *)__pyx_4); __pyx_4 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1179 */ - __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1179; goto __pyx_L1;} - __pyx_3 = PyObject_GetAttr(__pyx_2, __pyx_n_any); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1179; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1184 */ + __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1184; goto __pyx_L1;} + __pyx_3 = PyObject_GetAttr(__pyx_2, __pyx_n_any); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1184; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; - __pyx_4 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1179; goto __pyx_L1;} - __pyx_2 = PyObject_GetAttr(__pyx_4, __pyx_n_less_equal); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1179; goto __pyx_L1;} + __pyx_4 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1184; goto __pyx_L1;} + __pyx_2 = PyObject_GetAttr(__pyx_4, __pyx_n_less_equal); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1184; goto __pyx_L1;} Py_DECREF(__pyx_4); __pyx_4 = 0; - __pyx_4 = PyFloat_FromDouble(0.0); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1179; goto __pyx_L1;} - __pyx_5 = PyTuple_New(2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1179; goto __pyx_L1;} + __pyx_4 = PyFloat_FromDouble(0.0); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1184; goto __pyx_L1;} + __pyx_5 = PyTuple_New(2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1184; goto __pyx_L1;} Py_INCREF(((PyObject *)__pyx_v_omean)); PyTuple_SET_ITEM(__pyx_5, 0, ((PyObject *)__pyx_v_omean)); PyTuple_SET_ITEM(__pyx_5, 1, __pyx_4); __pyx_4 = 0; - __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_5); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1179; goto __pyx_L1;} + __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_5); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1184; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; Py_DECREF(__pyx_5); __pyx_5 = 0; - __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1179; goto __pyx_L1;} + __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1184; goto __pyx_L1;} PyTuple_SET_ITEM(__pyx_2, 0, __pyx_4); __pyx_4 = 0; - __pyx_5 = PyObject_CallObject(__pyx_3, __pyx_2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1179; goto __pyx_L1;} + __pyx_5 = PyObject_CallObject(__pyx_3, __pyx_2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1184; goto __pyx_L1;} Py_DECREF(__pyx_3); __pyx_3 = 0; Py_DECREF(__pyx_2); __pyx_2 = 0; - __pyx_1 = PyObject_IsTrue(__pyx_5); if (__pyx_1 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1179; goto __pyx_L1;} + __pyx_1 = PyObject_IsTrue(__pyx_5); if (__pyx_1 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1184; goto __pyx_L1;} Py_DECREF(__pyx_5); __pyx_5 = 0; if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1180 */ - __pyx_4 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1180; goto __pyx_L1;} - __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1180; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1185 */ + __pyx_4 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1185; goto __pyx_L1;} + __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1185; goto __pyx_L1;} Py_INCREF(__pyx_k125p); PyTuple_SET_ITEM(__pyx_3, 0, __pyx_k125p); - __pyx_2 = PyObject_CallObject(__pyx_4, __pyx_3); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1180; goto __pyx_L1;} + __pyx_2 = PyObject_CallObject(__pyx_4, __pyx_3); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1185; goto __pyx_L1;} Py_DECREF(__pyx_4); __pyx_4 = 0; Py_DECREF(__pyx_3); __pyx_3 = 0; __Pyx_Raise(__pyx_2, 0, 0); Py_DECREF(__pyx_2); __pyx_2 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1180; goto __pyx_L1;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1185; goto __pyx_L1;} goto __pyx_L5; } - __pyx_5 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1181; goto __pyx_L1;} - __pyx_4 = PyObject_GetAttr(__pyx_5, __pyx_n_any); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1181; goto __pyx_L1;} + __pyx_5 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1186; goto __pyx_L1;} + __pyx_4 = PyObject_GetAttr(__pyx_5, __pyx_n_any); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1186; goto __pyx_L1;} Py_DECREF(__pyx_5); __pyx_5 = 0; - __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1181; goto __pyx_L1;} - __pyx_2 = PyObject_GetAttr(__pyx_3, __pyx_n_less_equal); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1181; goto __pyx_L1;} + __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1186; goto __pyx_L1;} + __pyx_2 = PyObject_GetAttr(__pyx_3, __pyx_n_less_equal); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1186; goto __pyx_L1;} Py_DECREF(__pyx_3); __pyx_3 = 0; - __pyx_5 = PyFloat_FromDouble(0.0); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1181; goto __pyx_L1;} - __pyx_3 = PyTuple_New(2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1181; goto __pyx_L1;} + __pyx_5 = PyFloat_FromDouble(0.0); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1186; goto __pyx_L1;} + __pyx_3 = PyTuple_New(2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1186; goto __pyx_L1;} Py_INCREF(((PyObject *)__pyx_v_oscale)); PyTuple_SET_ITEM(__pyx_3, 0, ((PyObject *)__pyx_v_oscale)); PyTuple_SET_ITEM(__pyx_3, 1, __pyx_5); __pyx_5 = 0; - __pyx_5 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1181; goto __pyx_L1;} + __pyx_5 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1186; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; Py_DECREF(__pyx_3); __pyx_3 = 0; - __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1181; goto __pyx_L1;} + __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1186; goto __pyx_L1;} PyTuple_SET_ITEM(__pyx_2, 0, __pyx_5); __pyx_5 = 0; - __pyx_3 = PyObject_CallObject(__pyx_4, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1181; goto __pyx_L1;} + __pyx_3 = PyObject_CallObject(__pyx_4, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1186; goto __pyx_L1;} Py_DECREF(__pyx_4); __pyx_4 = 0; Py_DECREF(__pyx_2); __pyx_2 = 0; - __pyx_1 = PyObject_IsTrue(__pyx_3); if (__pyx_1 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1181; goto __pyx_L1;} + __pyx_1 = PyObject_IsTrue(__pyx_3); if (__pyx_1 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1186; goto __pyx_L1;} Py_DECREF(__pyx_3); __pyx_3 = 0; if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1182 */ - __pyx_5 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1182; goto __pyx_L1;} - __pyx_4 = PyTuple_New(1); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1182; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1187 */ + __pyx_5 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1187; goto __pyx_L1;} + __pyx_4 = PyTuple_New(1); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1187; goto __pyx_L1;} Py_INCREF(__pyx_k126p); PyTuple_SET_ITEM(__pyx_4, 0, __pyx_k126p); - __pyx_2 = PyObject_CallObject(__pyx_5, __pyx_4); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1182; goto __pyx_L1;} + __pyx_2 = PyObject_CallObject(__pyx_5, __pyx_4); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1187; goto __pyx_L1;} Py_DECREF(__pyx_5); __pyx_5 = 0; Py_DECREF(__pyx_4); __pyx_4 = 0; __Pyx_Raise(__pyx_2, 0, 0); Py_DECREF(__pyx_2); __pyx_2 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1182; goto __pyx_L1;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1187; goto __pyx_L1;} goto __pyx_L5; } __pyx_L5:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1183 */ - __pyx_3 = __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 (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1183; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1188 */ + __pyx_3 = __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 (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1188; goto __pyx_L1;} __pyx_r = __pyx_3; __pyx_3 = 0; goto __pyx_L0; @@ -6380,78 +6436,78 @@ __pyx_v_omode = ((PyArrayObject *)Py_None); Py_INCREF(Py_None); __pyx_v_oright = ((PyArrayObject *)Py_None); Py_INCREF(Py_None); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1196 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1201 */ __pyx_v_fleft = PyFloat_AsDouble(__pyx_v_left); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1197 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1202 */ __pyx_v_fright = PyFloat_AsDouble(__pyx_v_right); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1198 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1203 */ __pyx_v_fmode = PyFloat_AsDouble(__pyx_v_mode); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1199 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1204 */ __pyx_1 = (!PyErr_Occurred()); if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1200 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1205 */ __pyx_1 = (__pyx_v_fleft > __pyx_v_fmode); if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1201 */ - __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1201; goto __pyx_L1;} - __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1201; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1206 */ + __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1206; goto __pyx_L1;} + __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1206; goto __pyx_L1;} Py_INCREF(__pyx_k127p); PyTuple_SET_ITEM(__pyx_3, 0, __pyx_k127p); - __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1201; goto __pyx_L1;} + __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1206; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; Py_DECREF(__pyx_3); __pyx_3 = 0; __Pyx_Raise(__pyx_4, 0, 0); Py_DECREF(__pyx_4); __pyx_4 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1201; goto __pyx_L1;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1206; goto __pyx_L1;} goto __pyx_L3; } __pyx_L3:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1202 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1207 */ __pyx_1 = (__pyx_v_fmode > __pyx_v_fright); if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1203 */ - __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1203; goto __pyx_L1;} - __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1203; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1208 */ + __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1208; goto __pyx_L1;} + __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1208; goto __pyx_L1;} Py_INCREF(__pyx_k128p); PyTuple_SET_ITEM(__pyx_3, 0, __pyx_k128p); - __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1203; goto __pyx_L1;} + __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1208; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; Py_DECREF(__pyx_3); __pyx_3 = 0; __Pyx_Raise(__pyx_4, 0, 0); Py_DECREF(__pyx_4); __pyx_4 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1203; goto __pyx_L1;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1208; goto __pyx_L1;} goto __pyx_L4; } __pyx_L4:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1204 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1209 */ __pyx_1 = (__pyx_v_fleft == __pyx_v_fright); if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1205 */ - __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1205; goto __pyx_L1;} - __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1205; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1210 */ + __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1210; goto __pyx_L1;} + __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1210; goto __pyx_L1;} Py_INCREF(__pyx_k129p); PyTuple_SET_ITEM(__pyx_3, 0, __pyx_k129p); - __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1205; goto __pyx_L1;} + __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1210; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; Py_DECREF(__pyx_3); __pyx_3 = 0; __Pyx_Raise(__pyx_4, 0, 0); Py_DECREF(__pyx_4); __pyx_4 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1205; goto __pyx_L1;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1210; goto __pyx_L1;} goto __pyx_L5; } __pyx_L5:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1206 */ - __pyx_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 (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1206; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1211 */ + __pyx_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 (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1211; goto __pyx_L1;} __pyx_r = __pyx_2; __pyx_2 = 0; goto __pyx_L0; @@ -6459,152 +6515,152 @@ } __pyx_L2:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1209 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1214 */ PyErr_Clear(); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1210 */ - __pyx_3 = PyArray_FROM_OTF(__pyx_v_left,NPY_DOUBLE,NPY_ALIGNED); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1210; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1215 */ + __pyx_3 = PyArray_FROM_OTF(__pyx_v_left,NPY_DOUBLE,NPY_ALIGNED); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1215; goto __pyx_L1;} Py_INCREF(((PyObject *)((PyArrayObject *)__pyx_3))); Py_DECREF(((PyObject *)__pyx_v_oleft)); __pyx_v_oleft = ((PyArrayObject *)__pyx_3); Py_DECREF(__pyx_3); __pyx_3 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1211 */ - __pyx_4 = PyArray_FROM_OTF(__pyx_v_mode,NPY_DOUBLE,NPY_ALIGNED); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1211; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1216 */ + __pyx_4 = PyArray_FROM_OTF(__pyx_v_mode,NPY_DOUBLE,NPY_ALIGNED); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1216; goto __pyx_L1;} Py_INCREF(((PyObject *)((PyArrayObject *)__pyx_4))); Py_DECREF(((PyObject *)__pyx_v_omode)); __pyx_v_omode = ((PyArrayObject *)__pyx_4); Py_DECREF(__pyx_4); __pyx_4 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1212 */ - __pyx_2 = PyArray_FROM_OTF(__pyx_v_right,NPY_DOUBLE,NPY_ALIGNED); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1212; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1217 */ + __pyx_2 = PyArray_FROM_OTF(__pyx_v_right,NPY_DOUBLE,NPY_ALIGNED); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1217; goto __pyx_L1;} Py_INCREF(((PyObject *)((PyArrayObject *)__pyx_2))); Py_DECREF(((PyObject *)__pyx_v_oright)); __pyx_v_oright = ((PyArrayObject *)__pyx_2); Py_DECREF(__pyx_2); __pyx_2 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1214 */ - __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1214; goto __pyx_L1;} - __pyx_4 = PyObject_GetAttr(__pyx_3, __pyx_n_any); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1214; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1219 */ + __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1219; goto __pyx_L1;} + __pyx_4 = PyObject_GetAttr(__pyx_3, __pyx_n_any); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1219; goto __pyx_L1;} Py_DECREF(__pyx_3); __pyx_3 = 0; - __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1214; goto __pyx_L1;} - __pyx_3 = PyObject_GetAttr(__pyx_2, __pyx_n_greater); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1214; goto __pyx_L1;} + __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1219; goto __pyx_L1;} + __pyx_3 = PyObject_GetAttr(__pyx_2, __pyx_n_greater); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1219; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; - __pyx_2 = PyTuple_New(2); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1214; goto __pyx_L1;} + __pyx_2 = PyTuple_New(2); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1219; goto __pyx_L1;} Py_INCREF(((PyObject *)__pyx_v_oleft)); PyTuple_SET_ITEM(__pyx_2, 0, ((PyObject *)__pyx_v_oleft)); Py_INCREF(((PyObject *)__pyx_v_omode)); PyTuple_SET_ITEM(__pyx_2, 1, ((PyObject *)__pyx_v_omode)); - __pyx_5 = PyObject_CallObject(__pyx_3, __pyx_2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1214; goto __pyx_L1;} + __pyx_5 = PyObject_CallObject(__pyx_3, __pyx_2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1219; goto __pyx_L1;} Py_DECREF(__pyx_3); __pyx_3 = 0; Py_DECREF(__pyx_2); __pyx_2 = 0; - __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1214; goto __pyx_L1;} + __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1219; goto __pyx_L1;} PyTuple_SET_ITEM(__pyx_3, 0, __pyx_5); __pyx_5 = 0; - __pyx_2 = PyObject_CallObject(__pyx_4, __pyx_3); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1214; goto __pyx_L1;} + __pyx_2 = PyObject_CallObject(__pyx_4, __pyx_3); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1219; goto __pyx_L1;} Py_DECREF(__pyx_4); __pyx_4 = 0; Py_DECREF(__pyx_3); __pyx_3 = 0; - __pyx_1 = PyObject_IsTrue(__pyx_2); if (__pyx_1 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1214; goto __pyx_L1;} + __pyx_1 = PyObject_IsTrue(__pyx_2); if (__pyx_1 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1219; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1215 */ - __pyx_5 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1215; goto __pyx_L1;} - __pyx_4 = PyTuple_New(1); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1215; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1220 */ + __pyx_5 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1220; goto __pyx_L1;} + __pyx_4 = PyTuple_New(1); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1220; goto __pyx_L1;} Py_INCREF(__pyx_k130p); PyTuple_SET_ITEM(__pyx_4, 0, __pyx_k130p); - __pyx_3 = PyObject_CallObject(__pyx_5, __pyx_4); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1215; goto __pyx_L1;} + __pyx_3 = PyObject_CallObject(__pyx_5, __pyx_4); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1220; goto __pyx_L1;} Py_DECREF(__pyx_5); __pyx_5 = 0; Py_DECREF(__pyx_4); __pyx_4 = 0; __Pyx_Raise(__pyx_3, 0, 0); Py_DECREF(__pyx_3); __pyx_3 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1215; goto __pyx_L1;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1220; goto __pyx_L1;} goto __pyx_L6; } __pyx_L6:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1216 */ - __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1216; goto __pyx_L1;} - __pyx_5 = PyObject_GetAttr(__pyx_2, __pyx_n_any); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1216; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1221 */ + __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1221; goto __pyx_L1;} + __pyx_5 = PyObject_GetAttr(__pyx_2, __pyx_n_any); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1221; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; - __pyx_4 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1216; goto __pyx_L1;} - __pyx_3 = PyObject_GetAttr(__pyx_4, __pyx_n_greater); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1216; goto __pyx_L1;} + __pyx_4 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1221; goto __pyx_L1;} + __pyx_3 = PyObject_GetAttr(__pyx_4, __pyx_n_greater); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1221; goto __pyx_L1;} Py_DECREF(__pyx_4); __pyx_4 = 0; - __pyx_2 = PyTuple_New(2); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1216; goto __pyx_L1;} + __pyx_2 = PyTuple_New(2); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1221; goto __pyx_L1;} Py_INCREF(((PyObject *)__pyx_v_omode)); PyTuple_SET_ITEM(__pyx_2, 0, ((PyObject *)__pyx_v_omode)); Py_INCREF(((PyObject *)__pyx_v_oright)); PyTuple_SET_ITEM(__pyx_2, 1, ((PyObject *)__pyx_v_oright)); - __pyx_4 = PyObject_CallObject(__pyx_3, __pyx_2); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1216; goto __pyx_L1;} + __pyx_4 = PyObject_CallObject(__pyx_3, __pyx_2); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1221; goto __pyx_L1;} Py_DECREF(__pyx_3); __pyx_3 = 0; Py_DECREF(__pyx_2); __pyx_2 = 0; - __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1216; goto __pyx_L1;} + __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1221; goto __pyx_L1;} PyTuple_SET_ITEM(__pyx_3, 0, __pyx_4); __pyx_4 = 0; - __pyx_2 = PyObject_CallObject(__pyx_5, __pyx_3); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1216; goto __pyx_L1;} + __pyx_2 = PyObject_CallObject(__pyx_5, __pyx_3); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1221; goto __pyx_L1;} Py_DECREF(__pyx_5); __pyx_5 = 0; Py_DECREF(__pyx_3); __pyx_3 = 0; - __pyx_1 = PyObject_IsTrue(__pyx_2); if (__pyx_1 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1216; goto __pyx_L1;} + __pyx_1 = PyObject_IsTrue(__pyx_2); if (__pyx_1 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1221; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1217 */ - __pyx_4 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1217; goto __pyx_L1;} - __pyx_5 = PyTuple_New(1); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1217; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1222 */ + __pyx_4 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1222; goto __pyx_L1;} + __pyx_5 = PyTuple_New(1); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1222; goto __pyx_L1;} Py_INCREF(__pyx_k131p); PyTuple_SET_ITEM(__pyx_5, 0, __pyx_k131p); - __pyx_3 = PyObject_CallObject(__pyx_4, __pyx_5); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1217; goto __pyx_L1;} + __pyx_3 = PyObject_CallObject(__pyx_4, __pyx_5); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1222; goto __pyx_L1;} Py_DECREF(__pyx_4); __pyx_4 = 0; Py_DECREF(__pyx_5); __pyx_5 = 0; __Pyx_Raise(__pyx_3, 0, 0); Py_DECREF(__pyx_3); __pyx_3 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1217; goto __pyx_L1;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1222; goto __pyx_L1;} goto __pyx_L7; } __pyx_L7:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1218 */ - __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1218; goto __pyx_L1;} - __pyx_4 = PyObject_GetAttr(__pyx_2, __pyx_n_any); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1218; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1223 */ + __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1223; goto __pyx_L1;} + __pyx_4 = PyObject_GetAttr(__pyx_2, __pyx_n_any); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1223; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; - __pyx_5 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1218; goto __pyx_L1;} - __pyx_3 = PyObject_GetAttr(__pyx_5, __pyx_n_equal); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1218; goto __pyx_L1;} + __pyx_5 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1223; goto __pyx_L1;} + __pyx_3 = PyObject_GetAttr(__pyx_5, __pyx_n_equal); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1223; goto __pyx_L1;} Py_DECREF(__pyx_5); __pyx_5 = 0; - __pyx_2 = PyTuple_New(2); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1218; goto __pyx_L1;} + __pyx_2 = PyTuple_New(2); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1223; goto __pyx_L1;} Py_INCREF(((PyObject *)__pyx_v_oleft)); PyTuple_SET_ITEM(__pyx_2, 0, ((PyObject *)__pyx_v_oleft)); Py_INCREF(((PyObject *)__pyx_v_oright)); PyTuple_SET_ITEM(__pyx_2, 1, ((PyObject *)__pyx_v_oright)); - __pyx_5 = PyObject_CallObject(__pyx_3, __pyx_2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1218; goto __pyx_L1;} + __pyx_5 = PyObject_CallObject(__pyx_3, __pyx_2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1223; goto __pyx_L1;} Py_DECREF(__pyx_3); __pyx_3 = 0; Py_DECREF(__pyx_2); __pyx_2 = 0; - __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1218; goto __pyx_L1;} + __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1223; goto __pyx_L1;} PyTuple_SET_ITEM(__pyx_3, 0, __pyx_5); __pyx_5 = 0; - __pyx_2 = PyObject_CallObject(__pyx_4, __pyx_3); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1218; goto __pyx_L1;} + __pyx_2 = PyObject_CallObject(__pyx_4, __pyx_3); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1223; goto __pyx_L1;} Py_DECREF(__pyx_4); __pyx_4 = 0; Py_DECREF(__pyx_3); __pyx_3 = 0; - __pyx_1 = PyObject_IsTrue(__pyx_2); if (__pyx_1 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1218; goto __pyx_L1;} + __pyx_1 = PyObject_IsTrue(__pyx_2); if (__pyx_1 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1223; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1219 */ - __pyx_5 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1219; goto __pyx_L1;} - __pyx_4 = PyTuple_New(1); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1219; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1224 */ + __pyx_5 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1224; goto __pyx_L1;} + __pyx_4 = PyTuple_New(1); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1224; goto __pyx_L1;} Py_INCREF(__pyx_k132p); PyTuple_SET_ITEM(__pyx_4, 0, __pyx_k132p); - __pyx_3 = PyObject_CallObject(__pyx_5, __pyx_4); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1219; goto __pyx_L1;} + __pyx_3 = PyObject_CallObject(__pyx_5, __pyx_4); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1224; goto __pyx_L1;} Py_DECREF(__pyx_5); __pyx_5 = 0; Py_DECREF(__pyx_4); __pyx_4 = 0; __Pyx_Raise(__pyx_3, 0, 0); Py_DECREF(__pyx_3); __pyx_3 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1219; goto __pyx_L1;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1224; goto __pyx_L1;} goto __pyx_L8; } __pyx_L8:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1220 */ - __pyx_2 = __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 (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1220; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1225 */ + __pyx_2 = __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 (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1225; goto __pyx_L1;} __pyx_r = __pyx_2; __pyx_2 = 0; goto __pyx_L0; @@ -6670,72 +6726,72 @@ __pyx_v_on = ((PyArrayObject *)Py_None); Py_INCREF(Py_None); __pyx_v_op = ((PyArrayObject *)Py_None); Py_INCREF(Py_None); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1233 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1238 */ __pyx_v_fp = PyFloat_AsDouble(__pyx_v_p); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1234 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1239 */ __pyx_v_ln = PyInt_AsLong(__pyx_v_n); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1235 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1240 */ __pyx_1 = (!PyErr_Occurred()); if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1236 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1241 */ __pyx_1 = (__pyx_v_ln <= 0); if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1237 */ - __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1237; goto __pyx_L1;} - __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1237; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1242 */ + __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1242; goto __pyx_L1;} + __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1242; goto __pyx_L1;} Py_INCREF(__pyx_k133p); PyTuple_SET_ITEM(__pyx_3, 0, __pyx_k133p); - __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1237; goto __pyx_L1;} + __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1242; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; Py_DECREF(__pyx_3); __pyx_3 = 0; __Pyx_Raise(__pyx_4, 0, 0); Py_DECREF(__pyx_4); __pyx_4 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1237; goto __pyx_L1;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1242; goto __pyx_L1;} goto __pyx_L3; } __pyx_L3:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1238 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1243 */ __pyx_1 = (__pyx_v_fp < 0); if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1239 */ - __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1239; goto __pyx_L1;} - __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1239; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1244 */ + __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1244; goto __pyx_L1;} + __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1244; goto __pyx_L1;} Py_INCREF(__pyx_k134p); PyTuple_SET_ITEM(__pyx_3, 0, __pyx_k134p); - __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1239; goto __pyx_L1;} + __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1244; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; Py_DECREF(__pyx_3); __pyx_3 = 0; __Pyx_Raise(__pyx_4, 0, 0); Py_DECREF(__pyx_4); __pyx_4 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1239; goto __pyx_L1;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1244; goto __pyx_L1;} goto __pyx_L4; } __pyx_1 = (__pyx_v_fp > 1); if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1241 */ - __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1241; goto __pyx_L1;} - __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1241; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1246 */ + __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1246; goto __pyx_L1;} + __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1246; goto __pyx_L1;} Py_INCREF(__pyx_k135p); PyTuple_SET_ITEM(__pyx_3, 0, __pyx_k135p); - __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1241; goto __pyx_L1;} + __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1246; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; Py_DECREF(__pyx_3); __pyx_3 = 0; __Pyx_Raise(__pyx_4, 0, 0); Py_DECREF(__pyx_4); __pyx_4 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1241; goto __pyx_L1;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1246; goto __pyx_L1;} goto __pyx_L4; } __pyx_L4:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1242 */ - __pyx_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 (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1242; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1247 */ + __pyx_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 (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1247; goto __pyx_L1;} __pyx_r = __pyx_2; __pyx_2 = 0; goto __pyx_L0; @@ -6743,148 +6799,148 @@ } __pyx_L2:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1244 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1249 */ PyErr_Clear(); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1246 */ - __pyx_3 = PyArray_FROM_OTF(__pyx_v_n,NPY_LONG,NPY_ALIGNED); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1246; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1251 */ + __pyx_3 = PyArray_FROM_OTF(__pyx_v_n,NPY_LONG,NPY_ALIGNED); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1251; goto __pyx_L1;} Py_INCREF(((PyObject *)((PyArrayObject *)__pyx_3))); Py_DECREF(((PyObject *)__pyx_v_on)); __pyx_v_on = ((PyArrayObject *)__pyx_3); Py_DECREF(__pyx_3); __pyx_3 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1247 */ - __pyx_4 = PyArray_FROM_OTF(__pyx_v_p,NPY_DOUBLE,NPY_ALIGNED); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1247; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1252 */ + __pyx_4 = PyArray_FROM_OTF(__pyx_v_p,NPY_DOUBLE,NPY_ALIGNED); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1252; goto __pyx_L1;} Py_INCREF(((PyObject *)((PyArrayObject *)__pyx_4))); Py_DECREF(((PyObject *)__pyx_v_op)); __pyx_v_op = ((PyArrayObject *)__pyx_4); Py_DECREF(__pyx_4); __pyx_4 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1248 */ - __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1248; goto __pyx_L1;} - __pyx_3 = PyObject_GetAttr(__pyx_2, __pyx_n_any); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1248; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1253 */ + __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1253; goto __pyx_L1;} + __pyx_3 = PyObject_GetAttr(__pyx_2, __pyx_n_any); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1253; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; - __pyx_4 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1248; goto __pyx_L1;} - __pyx_2 = PyObject_GetAttr(__pyx_4, __pyx_n_less_equal); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1248; goto __pyx_L1;} + __pyx_4 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1253; goto __pyx_L1;} + __pyx_2 = PyObject_GetAttr(__pyx_4, __pyx_n_less_equal); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1253; goto __pyx_L1;} Py_DECREF(__pyx_4); __pyx_4 = 0; - __pyx_4 = PyInt_FromLong(0); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1248; goto __pyx_L1;} - __pyx_5 = PyTuple_New(2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1248; goto __pyx_L1;} + __pyx_4 = PyInt_FromLong(0); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1253; goto __pyx_L1;} + __pyx_5 = PyTuple_New(2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1253; goto __pyx_L1;} Py_INCREF(__pyx_v_n); PyTuple_SET_ITEM(__pyx_5, 0, __pyx_v_n); PyTuple_SET_ITEM(__pyx_5, 1, __pyx_4); __pyx_4 = 0; - __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_5); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1248; goto __pyx_L1;} + __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_5); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1253; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; Py_DECREF(__pyx_5); __pyx_5 = 0; - __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1248; goto __pyx_L1;} + __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1253; goto __pyx_L1;} PyTuple_SET_ITEM(__pyx_2, 0, __pyx_4); __pyx_4 = 0; - __pyx_5 = PyObject_CallObject(__pyx_3, __pyx_2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1248; goto __pyx_L1;} + __pyx_5 = PyObject_CallObject(__pyx_3, __pyx_2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1253; goto __pyx_L1;} Py_DECREF(__pyx_3); __pyx_3 = 0; Py_DECREF(__pyx_2); __pyx_2 = 0; - __pyx_1 = PyObject_IsTrue(__pyx_5); if (__pyx_1 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1248; goto __pyx_L1;} + __pyx_1 = PyObject_IsTrue(__pyx_5); if (__pyx_1 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1253; goto __pyx_L1;} Py_DECREF(__pyx_5); __pyx_5 = 0; if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1249 */ - __pyx_4 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1249; goto __pyx_L1;} - __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1249; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1254 */ + __pyx_4 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1254; goto __pyx_L1;} + __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1254; goto __pyx_L1;} Py_INCREF(__pyx_k136p); PyTuple_SET_ITEM(__pyx_3, 0, __pyx_k136p); - __pyx_2 = PyObject_CallObject(__pyx_4, __pyx_3); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1249; goto __pyx_L1;} + __pyx_2 = PyObject_CallObject(__pyx_4, __pyx_3); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1254; goto __pyx_L1;} Py_DECREF(__pyx_4); __pyx_4 = 0; Py_DECREF(__pyx_3); __pyx_3 = 0; __Pyx_Raise(__pyx_2, 0, 0); Py_DECREF(__pyx_2); __pyx_2 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1249; goto __pyx_L1;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1254; goto __pyx_L1;} goto __pyx_L5; } __pyx_L5:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1250 */ - __pyx_5 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1250; goto __pyx_L1;} - __pyx_4 = PyObject_GetAttr(__pyx_5, __pyx_n_any); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1250; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1255 */ + __pyx_5 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1255; goto __pyx_L1;} + __pyx_4 = PyObject_GetAttr(__pyx_5, __pyx_n_any); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1255; goto __pyx_L1;} Py_DECREF(__pyx_5); __pyx_5 = 0; - __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1250; goto __pyx_L1;} - __pyx_2 = PyObject_GetAttr(__pyx_3, __pyx_n_less); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1250; goto __pyx_L1;} + __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1255; goto __pyx_L1;} + __pyx_2 = PyObject_GetAttr(__pyx_3, __pyx_n_less); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1255; goto __pyx_L1;} Py_DECREF(__pyx_3); __pyx_3 = 0; - __pyx_5 = PyInt_FromLong(0); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1250; goto __pyx_L1;} - __pyx_3 = PyTuple_New(2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1250; goto __pyx_L1;} + __pyx_5 = PyInt_FromLong(0); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1255; goto __pyx_L1;} + __pyx_3 = PyTuple_New(2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1255; goto __pyx_L1;} Py_INCREF(__pyx_v_p); PyTuple_SET_ITEM(__pyx_3, 0, __pyx_v_p); PyTuple_SET_ITEM(__pyx_3, 1, __pyx_5); __pyx_5 = 0; - __pyx_5 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1250; goto __pyx_L1;} + __pyx_5 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1255; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; Py_DECREF(__pyx_3); __pyx_3 = 0; - __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1250; goto __pyx_L1;} + __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1255; goto __pyx_L1;} PyTuple_SET_ITEM(__pyx_2, 0, __pyx_5); __pyx_5 = 0; - __pyx_3 = PyObject_CallObject(__pyx_4, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1250; goto __pyx_L1;} + __pyx_3 = PyObject_CallObject(__pyx_4, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1255; goto __pyx_L1;} Py_DECREF(__pyx_4); __pyx_4 = 0; Py_DECREF(__pyx_2); __pyx_2 = 0; - __pyx_1 = PyObject_IsTrue(__pyx_3); if (__pyx_1 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1250; goto __pyx_L1;} + __pyx_1 = PyObject_IsTrue(__pyx_3); if (__pyx_1 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1255; goto __pyx_L1;} Py_DECREF(__pyx_3); __pyx_3 = 0; if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1251 */ - __pyx_5 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1251; goto __pyx_L1;} - __pyx_4 = PyTuple_New(1); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1251; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1256 */ + __pyx_5 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1256; goto __pyx_L1;} + __pyx_4 = PyTuple_New(1); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1256; goto __pyx_L1;} Py_INCREF(__pyx_k137p); PyTuple_SET_ITEM(__pyx_4, 0, __pyx_k137p); - __pyx_2 = PyObject_CallObject(__pyx_5, __pyx_4); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1251; goto __pyx_L1;} + __pyx_2 = PyObject_CallObject(__pyx_5, __pyx_4); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1256; goto __pyx_L1;} Py_DECREF(__pyx_5); __pyx_5 = 0; Py_DECREF(__pyx_4); __pyx_4 = 0; __Pyx_Raise(__pyx_2, 0, 0); Py_DECREF(__pyx_2); __pyx_2 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1251; goto __pyx_L1;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1256; goto __pyx_L1;} goto __pyx_L6; } __pyx_L6:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1252 */ - __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1252; goto __pyx_L1;} - __pyx_5 = PyObject_GetAttr(__pyx_3, __pyx_n_any); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1252; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1257 */ + __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1257; goto __pyx_L1;} + __pyx_5 = PyObject_GetAttr(__pyx_3, __pyx_n_any); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1257; goto __pyx_L1;} Py_DECREF(__pyx_3); __pyx_3 = 0; - __pyx_4 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1252; goto __pyx_L1;} - __pyx_2 = PyObject_GetAttr(__pyx_4, __pyx_n_greater); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1252; goto __pyx_L1;} + __pyx_4 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1257; goto __pyx_L1;} + __pyx_2 = PyObject_GetAttr(__pyx_4, __pyx_n_greater); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1257; goto __pyx_L1;} Py_DECREF(__pyx_4); __pyx_4 = 0; - __pyx_3 = PyInt_FromLong(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1252; goto __pyx_L1;} - __pyx_4 = PyTuple_New(2); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1252; goto __pyx_L1;} + __pyx_3 = PyInt_FromLong(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1257; goto __pyx_L1;} + __pyx_4 = PyTuple_New(2); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1257; goto __pyx_L1;} Py_INCREF(__pyx_v_p); PyTuple_SET_ITEM(__pyx_4, 0, __pyx_v_p); PyTuple_SET_ITEM(__pyx_4, 1, __pyx_3); __pyx_3 = 0; - __pyx_3 = PyObject_CallObject(__pyx_2, __pyx_4); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1252; goto __pyx_L1;} + __pyx_3 = PyObject_CallObject(__pyx_2, __pyx_4); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1257; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; Py_DECREF(__pyx_4); __pyx_4 = 0; - __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1252; goto __pyx_L1;} + __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1257; goto __pyx_L1;} PyTuple_SET_ITEM(__pyx_2, 0, __pyx_3); __pyx_3 = 0; - __pyx_4 = PyObject_CallObject(__pyx_5, __pyx_2); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1252; goto __pyx_L1;} + __pyx_4 = PyObject_CallObject(__pyx_5, __pyx_2); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1257; goto __pyx_L1;} Py_DECREF(__pyx_5); __pyx_5 = 0; Py_DECREF(__pyx_2); __pyx_2 = 0; - __pyx_1 = PyObject_IsTrue(__pyx_4); if (__pyx_1 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1252; goto __pyx_L1;} + __pyx_1 = PyObject_IsTrue(__pyx_4); if (__pyx_1 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1257; goto __pyx_L1;} Py_DECREF(__pyx_4); __pyx_4 = 0; if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1253 */ - __pyx_3 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1253; goto __pyx_L1;} - __pyx_5 = PyTuple_New(1); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1253; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1258 */ + __pyx_3 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1258; goto __pyx_L1;} + __pyx_5 = PyTuple_New(1); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1258; goto __pyx_L1;} Py_INCREF(__pyx_k138p); PyTuple_SET_ITEM(__pyx_5, 0, __pyx_k138p); - __pyx_2 = PyObject_CallObject(__pyx_3, __pyx_5); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1253; goto __pyx_L1;} + __pyx_2 = PyObject_CallObject(__pyx_3, __pyx_5); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1258; goto __pyx_L1;} Py_DECREF(__pyx_3); __pyx_3 = 0; Py_DECREF(__pyx_5); __pyx_5 = 0; __Pyx_Raise(__pyx_2, 0, 0); Py_DECREF(__pyx_2); __pyx_2 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1253; goto __pyx_L1;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1258; goto __pyx_L1;} goto __pyx_L7; } __pyx_L7:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1254 */ - __pyx_4 = __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 (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1254; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1259 */ + __pyx_4 = __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 (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1259; goto __pyx_L1;} __pyx_r = __pyx_4; __pyx_4 = 0; goto __pyx_L0; @@ -6948,72 +7004,72 @@ __pyx_v_on = ((PyArrayObject *)Py_None); Py_INCREF(Py_None); __pyx_v_op = ((PyArrayObject *)Py_None); Py_INCREF(Py_None); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1266 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1271 */ __pyx_v_fp = PyFloat_AsDouble(__pyx_v_p); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1267 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1272 */ __pyx_v_ln = PyInt_AsLong(__pyx_v_n); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1268 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1273 */ __pyx_1 = (!PyErr_Occurred()); if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1269 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1274 */ __pyx_1 = (__pyx_v_ln <= 0); if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1270 */ - __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1270; goto __pyx_L1;} - __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1270; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1275 */ + __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1275; goto __pyx_L1;} + __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1275; goto __pyx_L1;} Py_INCREF(__pyx_k139p); PyTuple_SET_ITEM(__pyx_3, 0, __pyx_k139p); - __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1270; goto __pyx_L1;} + __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1275; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; Py_DECREF(__pyx_3); __pyx_3 = 0; __Pyx_Raise(__pyx_4, 0, 0); Py_DECREF(__pyx_4); __pyx_4 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1270; goto __pyx_L1;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1275; goto __pyx_L1;} goto __pyx_L3; } __pyx_L3:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1271 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1276 */ __pyx_1 = (__pyx_v_fp < 0); if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1272 */ - __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1272; goto __pyx_L1;} - __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1272; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1277 */ + __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1277; goto __pyx_L1;} + __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1277; goto __pyx_L1;} Py_INCREF(__pyx_k140p); PyTuple_SET_ITEM(__pyx_3, 0, __pyx_k140p); - __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1272; goto __pyx_L1;} + __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1277; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; Py_DECREF(__pyx_3); __pyx_3 = 0; __Pyx_Raise(__pyx_4, 0, 0); Py_DECREF(__pyx_4); __pyx_4 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1272; goto __pyx_L1;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1277; goto __pyx_L1;} goto __pyx_L4; } __pyx_1 = (__pyx_v_fp > 1); if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1274 */ - __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1274; goto __pyx_L1;} - __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1274; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1279 */ + __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1279; goto __pyx_L1;} + __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1279; goto __pyx_L1;} Py_INCREF(__pyx_k141p); PyTuple_SET_ITEM(__pyx_3, 0, __pyx_k141p); - __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1274; goto __pyx_L1;} + __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1279; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; Py_DECREF(__pyx_3); __pyx_3 = 0; __Pyx_Raise(__pyx_4, 0, 0); Py_DECREF(__pyx_4); __pyx_4 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1274; goto __pyx_L1;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1279; goto __pyx_L1;} goto __pyx_L4; } __pyx_L4:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1275 */ - __pyx_2 = __pyx_f_6mtrand_discnp_array_sc(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state,rk_negative_binomial,__pyx_v_size,__pyx_v_ln,__pyx_v_fp); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1275; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1280 */ + __pyx_2 = __pyx_f_6mtrand_discnp_array_sc(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state,rk_negative_binomial,__pyx_v_size,__pyx_v_ln,__pyx_v_fp); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1280; goto __pyx_L1;} __pyx_r = __pyx_2; __pyx_2 = 0; goto __pyx_L0; @@ -7021,148 +7077,148 @@ } __pyx_L2:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1278 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1283 */ PyErr_Clear(); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1280 */ - __pyx_3 = PyArray_FROM_OTF(__pyx_v_n,NPY_LONG,NPY_ALIGNED); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1280; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1285 */ + __pyx_3 = PyArray_FROM_OTF(__pyx_v_n,NPY_LONG,NPY_ALIGNED); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1285; goto __pyx_L1;} Py_INCREF(((PyObject *)((PyArrayObject *)__pyx_3))); Py_DECREF(((PyObject *)__pyx_v_on)); __pyx_v_on = ((PyArrayObject *)__pyx_3); Py_DECREF(__pyx_3); __pyx_3 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1281 */ - __pyx_4 = PyArray_FROM_OTF(__pyx_v_p,NPY_DOUBLE,NPY_ALIGNED); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1281; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1286 */ + __pyx_4 = PyArray_FROM_OTF(__pyx_v_p,NPY_DOUBLE,NPY_ALIGNED); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1286; goto __pyx_L1;} Py_INCREF(((PyObject *)((PyArrayObject *)__pyx_4))); Py_DECREF(((PyObject *)__pyx_v_op)); __pyx_v_op = ((PyArrayObject *)__pyx_4); Py_DECREF(__pyx_4); __pyx_4 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1282 */ - __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1282; goto __pyx_L1;} - __pyx_3 = PyObject_GetAttr(__pyx_2, __pyx_n_any); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1282; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1287 */ + __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1287; goto __pyx_L1;} + __pyx_3 = PyObject_GetAttr(__pyx_2, __pyx_n_any); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1287; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; - __pyx_4 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1282; goto __pyx_L1;} - __pyx_2 = PyObject_GetAttr(__pyx_4, __pyx_n_less_equal); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1282; goto __pyx_L1;} + __pyx_4 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1287; goto __pyx_L1;} + __pyx_2 = PyObject_GetAttr(__pyx_4, __pyx_n_less_equal); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1287; goto __pyx_L1;} Py_DECREF(__pyx_4); __pyx_4 = 0; - __pyx_4 = PyInt_FromLong(0); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1282; goto __pyx_L1;} - __pyx_5 = PyTuple_New(2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1282; goto __pyx_L1;} + __pyx_4 = PyInt_FromLong(0); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1287; goto __pyx_L1;} + __pyx_5 = PyTuple_New(2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1287; goto __pyx_L1;} Py_INCREF(__pyx_v_n); PyTuple_SET_ITEM(__pyx_5, 0, __pyx_v_n); PyTuple_SET_ITEM(__pyx_5, 1, __pyx_4); __pyx_4 = 0; - __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_5); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1282; goto __pyx_L1;} + __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_5); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1287; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; Py_DECREF(__pyx_5); __pyx_5 = 0; - __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1282; goto __pyx_L1;} + __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1287; goto __pyx_L1;} PyTuple_SET_ITEM(__pyx_2, 0, __pyx_4); __pyx_4 = 0; - __pyx_5 = PyObject_CallObject(__pyx_3, __pyx_2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1282; goto __pyx_L1;} + __pyx_5 = PyObject_CallObject(__pyx_3, __pyx_2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1287; goto __pyx_L1;} Py_DECREF(__pyx_3); __pyx_3 = 0; Py_DECREF(__pyx_2); __pyx_2 = 0; - __pyx_1 = PyObject_IsTrue(__pyx_5); if (__pyx_1 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1282; goto __pyx_L1;} + __pyx_1 = PyObject_IsTrue(__pyx_5); if (__pyx_1 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1287; goto __pyx_L1;} Py_DECREF(__pyx_5); __pyx_5 = 0; if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1283 */ - __pyx_4 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1283; goto __pyx_L1;} - __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1283; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1288 */ + __pyx_4 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1288; goto __pyx_L1;} + __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1288; goto __pyx_L1;} Py_INCREF(__pyx_k142p); PyTuple_SET_ITEM(__pyx_3, 0, __pyx_k142p); - __pyx_2 = PyObject_CallObject(__pyx_4, __pyx_3); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1283; goto __pyx_L1;} + __pyx_2 = PyObject_CallObject(__pyx_4, __pyx_3); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1288; goto __pyx_L1;} Py_DECREF(__pyx_4); __pyx_4 = 0; Py_DECREF(__pyx_3); __pyx_3 = 0; __Pyx_Raise(__pyx_2, 0, 0); Py_DECREF(__pyx_2); __pyx_2 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1283; goto __pyx_L1;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1288; goto __pyx_L1;} goto __pyx_L5; } __pyx_L5:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1284 */ - __pyx_5 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1284; goto __pyx_L1;} - __pyx_4 = PyObject_GetAttr(__pyx_5, __pyx_n_any); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1284; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1289 */ + __pyx_5 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1289; goto __pyx_L1;} + __pyx_4 = PyObject_GetAttr(__pyx_5, __pyx_n_any); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1289; goto __pyx_L1;} Py_DECREF(__pyx_5); __pyx_5 = 0; - __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1284; goto __pyx_L1;} - __pyx_2 = PyObject_GetAttr(__pyx_3, __pyx_n_less); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1284; goto __pyx_L1;} + __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1289; goto __pyx_L1;} + __pyx_2 = PyObject_GetAttr(__pyx_3, __pyx_n_less); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1289; goto __pyx_L1;} Py_DECREF(__pyx_3); __pyx_3 = 0; - __pyx_5 = PyInt_FromLong(0); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1284; goto __pyx_L1;} - __pyx_3 = PyTuple_New(2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1284; goto __pyx_L1;} + __pyx_5 = PyInt_FromLong(0); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1289; goto __pyx_L1;} + __pyx_3 = PyTuple_New(2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1289; goto __pyx_L1;} Py_INCREF(__pyx_v_p); PyTuple_SET_ITEM(__pyx_3, 0, __pyx_v_p); PyTuple_SET_ITEM(__pyx_3, 1, __pyx_5); __pyx_5 = 0; - __pyx_5 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1284; goto __pyx_L1;} + __pyx_5 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1289; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; Py_DECREF(__pyx_3); __pyx_3 = 0; - __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1284; goto __pyx_L1;} + __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1289; goto __pyx_L1;} PyTuple_SET_ITEM(__pyx_2, 0, __pyx_5); __pyx_5 = 0; - __pyx_3 = PyObject_CallObject(__pyx_4, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1284; goto __pyx_L1;} + __pyx_3 = PyObject_CallObject(__pyx_4, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1289; goto __pyx_L1;} Py_DECREF(__pyx_4); __pyx_4 = 0; Py_DECREF(__pyx_2); __pyx_2 = 0; - __pyx_1 = PyObject_IsTrue(__pyx_3); if (__pyx_1 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1284; goto __pyx_L1;} + __pyx_1 = PyObject_IsTrue(__pyx_3); if (__pyx_1 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1289; goto __pyx_L1;} Py_DECREF(__pyx_3); __pyx_3 = 0; if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1285 */ - __pyx_5 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1285; goto __pyx_L1;} - __pyx_4 = PyTuple_New(1); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1285; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1290 */ + __pyx_5 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1290; goto __pyx_L1;} + __pyx_4 = PyTuple_New(1); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1290; goto __pyx_L1;} Py_INCREF(__pyx_k143p); PyTuple_SET_ITEM(__pyx_4, 0, __pyx_k143p); - __pyx_2 = PyObject_CallObject(__pyx_5, __pyx_4); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1285; goto __pyx_L1;} + __pyx_2 = PyObject_CallObject(__pyx_5, __pyx_4); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1290; goto __pyx_L1;} Py_DECREF(__pyx_5); __pyx_5 = 0; Py_DECREF(__pyx_4); __pyx_4 = 0; __Pyx_Raise(__pyx_2, 0, 0); Py_DECREF(__pyx_2); __pyx_2 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1285; goto __pyx_L1;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1290; goto __pyx_L1;} goto __pyx_L6; } __pyx_L6:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1286 */ - __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1286; goto __pyx_L1;} - __pyx_5 = PyObject_GetAttr(__pyx_3, __pyx_n_any); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1286; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1291 */ + __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1291; goto __pyx_L1;} + __pyx_5 = PyObject_GetAttr(__pyx_3, __pyx_n_any); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1291; goto __pyx_L1;} Py_DECREF(__pyx_3); __pyx_3 = 0; - __pyx_4 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1286; goto __pyx_L1;} - __pyx_2 = PyObject_GetAttr(__pyx_4, __pyx_n_greater); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1286; goto __pyx_L1;} + __pyx_4 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1291; goto __pyx_L1;} + __pyx_2 = PyObject_GetAttr(__pyx_4, __pyx_n_greater); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1291; goto __pyx_L1;} Py_DECREF(__pyx_4); __pyx_4 = 0; - __pyx_3 = PyInt_FromLong(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1286; goto __pyx_L1;} - __pyx_4 = PyTuple_New(2); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1286; goto __pyx_L1;} + __pyx_3 = PyInt_FromLong(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1291; goto __pyx_L1;} + __pyx_4 = PyTuple_New(2); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1291; goto __pyx_L1;} Py_INCREF(__pyx_v_p); PyTuple_SET_ITEM(__pyx_4, 0, __pyx_v_p); PyTuple_SET_ITEM(__pyx_4, 1, __pyx_3); __pyx_3 = 0; - __pyx_3 = PyObject_CallObject(__pyx_2, __pyx_4); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1286; goto __pyx_L1;} + __pyx_3 = PyObject_CallObject(__pyx_2, __pyx_4); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1291; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; Py_DECREF(__pyx_4); __pyx_4 = 0; - __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1286; goto __pyx_L1;} + __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1291; goto __pyx_L1;} PyTuple_SET_ITEM(__pyx_2, 0, __pyx_3); __pyx_3 = 0; - __pyx_4 = PyObject_CallObject(__pyx_5, __pyx_2); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1286; goto __pyx_L1;} + __pyx_4 = PyObject_CallObject(__pyx_5, __pyx_2); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1291; goto __pyx_L1;} Py_DECREF(__pyx_5); __pyx_5 = 0; Py_DECREF(__pyx_2); __pyx_2 = 0; - __pyx_1 = PyObject_IsTrue(__pyx_4); if (__pyx_1 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1286; goto __pyx_L1;} + __pyx_1 = PyObject_IsTrue(__pyx_4); if (__pyx_1 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1291; goto __pyx_L1;} Py_DECREF(__pyx_4); __pyx_4 = 0; if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1287 */ - __pyx_3 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1287; goto __pyx_L1;} - __pyx_5 = PyTuple_New(1); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1287; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1292 */ + __pyx_3 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1292; goto __pyx_L1;} + __pyx_5 = PyTuple_New(1); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1292; goto __pyx_L1;} Py_INCREF(__pyx_k144p); PyTuple_SET_ITEM(__pyx_5, 0, __pyx_k144p); - __pyx_2 = PyObject_CallObject(__pyx_3, __pyx_5); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1287; goto __pyx_L1;} + __pyx_2 = PyObject_CallObject(__pyx_3, __pyx_5); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1292; goto __pyx_L1;} Py_DECREF(__pyx_3); __pyx_3 = 0; Py_DECREF(__pyx_5); __pyx_5 = 0; __Pyx_Raise(__pyx_2, 0, 0); Py_DECREF(__pyx_2); __pyx_2 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1287; goto __pyx_L1;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1292; goto __pyx_L1;} goto __pyx_L7; } __pyx_L7:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1288 */ - __pyx_4 = __pyx_f_6mtrand_discnp_array(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state,rk_negative_binomial,__pyx_v_size,__pyx_v_on,__pyx_v_op); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1288; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1293 */ + __pyx_4 = __pyx_f_6mtrand_discnp_array(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state,rk_negative_binomial,__pyx_v_size,__pyx_v_on,__pyx_v_op); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1293; goto __pyx_L1;} __pyx_r = __pyx_4; __pyx_4 = 0; goto __pyx_L0; @@ -7214,37 +7270,37 @@ Py_INCREF(__pyx_v_size); __pyx_v_olam = ((PyArrayObject *)Py_None); Py_INCREF(Py_None); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1298 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1303 */ __pyx_v_flam = PyFloat_AsDouble(__pyx_v_lam); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1299 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1304 */ __pyx_1 = (!PyErr_Occurred()); if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1300 */ - __pyx_2 = PyInt_FromLong(0); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1300; goto __pyx_L1;} - if (PyObject_Cmp(__pyx_v_lam, __pyx_2, &__pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1300; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1305 */ + __pyx_2 = PyInt_FromLong(0); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1305; goto __pyx_L1;} + if (PyObject_Cmp(__pyx_v_lam, __pyx_2, &__pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1305; goto __pyx_L1;} __pyx_1 = __pyx_1 < 0; Py_DECREF(__pyx_2); __pyx_2 = 0; if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1301 */ - __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1301; goto __pyx_L1;} - __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1301; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1306 */ + __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1306; goto __pyx_L1;} + __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1306; goto __pyx_L1;} Py_INCREF(__pyx_k145p); PyTuple_SET_ITEM(__pyx_3, 0, __pyx_k145p); - __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1301; goto __pyx_L1;} + __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1306; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; Py_DECREF(__pyx_3); __pyx_3 = 0; __Pyx_Raise(__pyx_4, 0, 0); Py_DECREF(__pyx_4); __pyx_4 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1301; goto __pyx_L1;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1306; goto __pyx_L1;} goto __pyx_L3; } __pyx_L3:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1302 */ - __pyx_2 = __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 (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1302; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1307 */ + __pyx_2 = __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 (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1307; goto __pyx_L1;} __pyx_r = __pyx_2; __pyx_2 = 0; goto __pyx_L0; @@ -7252,59 +7308,59 @@ } __pyx_L2:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1304 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1309 */ PyErr_Clear(); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1306 */ - __pyx_3 = PyArray_FROM_OTF(__pyx_v_lam,NPY_DOUBLE,NPY_ALIGNED); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1306; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1311 */ + __pyx_3 = PyArray_FROM_OTF(__pyx_v_lam,NPY_DOUBLE,NPY_ALIGNED); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1311; goto __pyx_L1;} Py_INCREF(((PyObject *)((PyArrayObject *)__pyx_3))); Py_DECREF(((PyObject *)__pyx_v_olam)); __pyx_v_olam = ((PyArrayObject *)__pyx_3); Py_DECREF(__pyx_3); __pyx_3 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1307 */ - __pyx_4 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1307; goto __pyx_L1;} - __pyx_2 = PyObject_GetAttr(__pyx_4, __pyx_n_any); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1307; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1312 */ + __pyx_4 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1312; goto __pyx_L1;} + __pyx_2 = PyObject_GetAttr(__pyx_4, __pyx_n_any); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1312; goto __pyx_L1;} Py_DECREF(__pyx_4); __pyx_4 = 0; - __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1307; goto __pyx_L1;} - __pyx_4 = PyObject_GetAttr(__pyx_3, __pyx_n_less); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1307; goto __pyx_L1;} + __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1312; goto __pyx_L1;} + __pyx_4 = PyObject_GetAttr(__pyx_3, __pyx_n_less); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1312; goto __pyx_L1;} Py_DECREF(__pyx_3); __pyx_3 = 0; - __pyx_3 = PyInt_FromLong(0); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1307; goto __pyx_L1;} - __pyx_5 = PyTuple_New(2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1307; goto __pyx_L1;} + __pyx_3 = PyInt_FromLong(0); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1312; goto __pyx_L1;} + __pyx_5 = PyTuple_New(2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1312; goto __pyx_L1;} Py_INCREF(((PyObject *)__pyx_v_olam)); PyTuple_SET_ITEM(__pyx_5, 0, ((PyObject *)__pyx_v_olam)); PyTuple_SET_ITEM(__pyx_5, 1, __pyx_3); __pyx_3 = 0; - __pyx_3 = PyObject_CallObject(__pyx_4, __pyx_5); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1307; goto __pyx_L1;} + __pyx_3 = PyObject_CallObject(__pyx_4, __pyx_5); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1312; goto __pyx_L1;} Py_DECREF(__pyx_4); __pyx_4 = 0; Py_DECREF(__pyx_5); __pyx_5 = 0; - __pyx_4 = PyTuple_New(1); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1307; goto __pyx_L1;} + __pyx_4 = PyTuple_New(1); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1312; goto __pyx_L1;} PyTuple_SET_ITEM(__pyx_4, 0, __pyx_3); __pyx_3 = 0; - __pyx_5 = PyObject_CallObject(__pyx_2, __pyx_4); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1307; goto __pyx_L1;} + __pyx_5 = PyObject_CallObject(__pyx_2, __pyx_4); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1312; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; Py_DECREF(__pyx_4); __pyx_4 = 0; - __pyx_1 = PyObject_IsTrue(__pyx_5); if (__pyx_1 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1307; goto __pyx_L1;} + __pyx_1 = PyObject_IsTrue(__pyx_5); if (__pyx_1 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1312; goto __pyx_L1;} Py_DECREF(__pyx_5); __pyx_5 = 0; if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1308 */ - __pyx_3 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1308; goto __pyx_L1;} - __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1308; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1313 */ + __pyx_3 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1313; goto __pyx_L1;} + __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1313; goto __pyx_L1;} Py_INCREF(__pyx_k146p); PyTuple_SET_ITEM(__pyx_2, 0, __pyx_k146p); - __pyx_4 = PyObject_CallObject(__pyx_3, __pyx_2); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1308; goto __pyx_L1;} + __pyx_4 = PyObject_CallObject(__pyx_3, __pyx_2); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1313; goto __pyx_L1;} Py_DECREF(__pyx_3); __pyx_3 = 0; Py_DECREF(__pyx_2); __pyx_2 = 0; __Pyx_Raise(__pyx_4, 0, 0); Py_DECREF(__pyx_4); __pyx_4 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1308; goto __pyx_L1;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1313; goto __pyx_L1;} goto __pyx_L4; } __pyx_L4:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1309 */ - __pyx_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 (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1309; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1314 */ + __pyx_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 (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1314; goto __pyx_L1;} __pyx_r = __pyx_5; __pyx_5 = 0; goto __pyx_L0; @@ -7353,34 +7409,34 @@ Py_INCREF(__pyx_v_size); __pyx_v_oa = ((PyArrayObject *)Py_None); Py_INCREF(Py_None); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1319 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1324 */ __pyx_v_fa = PyFloat_AsDouble(__pyx_v_a); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1320 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1325 */ __pyx_1 = (!PyErr_Occurred()); if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1321 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1326 */ __pyx_1 = (__pyx_v_fa <= 1.0); if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1322 */ - __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1322; goto __pyx_L1;} - __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1322; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1327 */ + __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1327; goto __pyx_L1;} + __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1327; goto __pyx_L1;} Py_INCREF(__pyx_k147p); PyTuple_SET_ITEM(__pyx_3, 0, __pyx_k147p); - __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1322; goto __pyx_L1;} + __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1327; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; Py_DECREF(__pyx_3); __pyx_3 = 0; __Pyx_Raise(__pyx_4, 0, 0); Py_DECREF(__pyx_4); __pyx_4 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1322; goto __pyx_L1;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1327; goto __pyx_L1;} goto __pyx_L3; } __pyx_L3:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1323 */ - __pyx_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 (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1323; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1328 */ + __pyx_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 (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1328; goto __pyx_L1;} __pyx_r = __pyx_2; __pyx_2 = 0; goto __pyx_L0; @@ -7388,59 +7444,59 @@ } __pyx_L2:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1325 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1330 */ PyErr_Clear(); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1327 */ - __pyx_3 = PyArray_FROM_OTF(__pyx_v_a,NPY_DOUBLE,NPY_ALIGNED); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1327; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1332 */ + __pyx_3 = PyArray_FROM_OTF(__pyx_v_a,NPY_DOUBLE,NPY_ALIGNED); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1332; goto __pyx_L1;} Py_INCREF(((PyObject *)((PyArrayObject *)__pyx_3))); Py_DECREF(((PyObject *)__pyx_v_oa)); __pyx_v_oa = ((PyArrayObject *)__pyx_3); Py_DECREF(__pyx_3); __pyx_3 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1328 */ - __pyx_4 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1328; goto __pyx_L1;} - __pyx_2 = PyObject_GetAttr(__pyx_4, __pyx_n_any); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1328; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1333 */ + __pyx_4 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1333; goto __pyx_L1;} + __pyx_2 = PyObject_GetAttr(__pyx_4, __pyx_n_any); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1333; goto __pyx_L1;} Py_DECREF(__pyx_4); __pyx_4 = 0; - __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1328; goto __pyx_L1;} - __pyx_4 = PyObject_GetAttr(__pyx_3, __pyx_n_less_equal); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1328; goto __pyx_L1;} + __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1333; goto __pyx_L1;} + __pyx_4 = PyObject_GetAttr(__pyx_3, __pyx_n_less_equal); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1333; goto __pyx_L1;} Py_DECREF(__pyx_3); __pyx_3 = 0; - __pyx_3 = PyFloat_FromDouble(1.0); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1328; goto __pyx_L1;} - __pyx_5 = PyTuple_New(2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1328; goto __pyx_L1;} + __pyx_3 = PyFloat_FromDouble(1.0); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1333; goto __pyx_L1;} + __pyx_5 = PyTuple_New(2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1333; goto __pyx_L1;} Py_INCREF(((PyObject *)__pyx_v_oa)); PyTuple_SET_ITEM(__pyx_5, 0, ((PyObject *)__pyx_v_oa)); PyTuple_SET_ITEM(__pyx_5, 1, __pyx_3); __pyx_3 = 0; - __pyx_3 = PyObject_CallObject(__pyx_4, __pyx_5); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1328; goto __pyx_L1;} + __pyx_3 = PyObject_CallObject(__pyx_4, __pyx_5); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1333; goto __pyx_L1;} Py_DECREF(__pyx_4); __pyx_4 = 0; Py_DECREF(__pyx_5); __pyx_5 = 0; - __pyx_4 = PyTuple_New(1); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1328; goto __pyx_L1;} + __pyx_4 = PyTuple_New(1); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1333; goto __pyx_L1;} PyTuple_SET_ITEM(__pyx_4, 0, __pyx_3); __pyx_3 = 0; - __pyx_5 = PyObject_CallObject(__pyx_2, __pyx_4); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1328; goto __pyx_L1;} + __pyx_5 = PyObject_CallObject(__pyx_2, __pyx_4); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1333; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; Py_DECREF(__pyx_4); __pyx_4 = 0; - __pyx_1 = PyObject_IsTrue(__pyx_5); if (__pyx_1 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1328; goto __pyx_L1;} + __pyx_1 = PyObject_IsTrue(__pyx_5); if (__pyx_1 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1333; goto __pyx_L1;} Py_DECREF(__pyx_5); __pyx_5 = 0; if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1329 */ - __pyx_3 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1329; goto __pyx_L1;} - __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1329; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1334 */ + __pyx_3 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1334; goto __pyx_L1;} + __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1334; goto __pyx_L1;} Py_INCREF(__pyx_k148p); PyTuple_SET_ITEM(__pyx_2, 0, __pyx_k148p); - __pyx_4 = PyObject_CallObject(__pyx_3, __pyx_2); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1329; goto __pyx_L1;} + __pyx_4 = PyObject_CallObject(__pyx_3, __pyx_2); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1334; goto __pyx_L1;} Py_DECREF(__pyx_3); __pyx_3 = 0; Py_DECREF(__pyx_2); __pyx_2 = 0; __Pyx_Raise(__pyx_4, 0, 0); Py_DECREF(__pyx_4); __pyx_4 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1329; goto __pyx_L1;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1334; goto __pyx_L1;} goto __pyx_L4; } __pyx_L4:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1330 */ - __pyx_5 = __pyx_f_6mtrand_discd_array(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state,rk_zipf,__pyx_v_size,__pyx_v_oa); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1330; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1335 */ + __pyx_5 = __pyx_f_6mtrand_discd_array(((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state,rk_zipf,__pyx_v_size,__pyx_v_oa); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1335; goto __pyx_L1;} __pyx_r = __pyx_5; __pyx_5 = 0; goto __pyx_L0; @@ -7493,53 +7549,53 @@ Py_INCREF(__pyx_v_size); __pyx_v_op = ((PyArrayObject *)Py_None); Py_INCREF(Py_None); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1341 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1346 */ __pyx_v_fp = PyFloat_AsDouble(__pyx_v_p); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1342 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1347 */ __pyx_1 = (!PyErr_Occurred()); if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1343 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1348 */ __pyx_1 = (__pyx_v_fp < 0.0); if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1344 */ - __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1344; goto __pyx_L1;} - __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1344; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1349 */ + __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1349; goto __pyx_L1;} + __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1349; goto __pyx_L1;} Py_INCREF(__pyx_k149p); PyTuple_SET_ITEM(__pyx_3, 0, __pyx_k149p); - __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1344; goto __pyx_L1;} + __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1349; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; Py_DECREF(__pyx_3); __pyx_3 = 0; __Pyx_Raise(__pyx_4, 0, 0); Py_DECREF(__pyx_4); __pyx_4 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1344; goto __pyx_L1;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1349; goto __pyx_L1;} goto __pyx_L3; } __pyx_L3:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1345 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1350 */ __pyx_1 = (__pyx_v_fp > 1.0); if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1346 */ - __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1346; goto __pyx_L1;} - __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1346; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1351 */ + __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1351; goto __pyx_L1;} + __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1351; goto __pyx_L1;} Py_INCREF(__pyx_k150p); PyTuple_SET_ITEM(__pyx_3, 0, __pyx_k150p); - __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1346; goto __pyx_L1;} + __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1351; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; Py_DECREF(__pyx_3); __pyx_3 = 0; __Pyx_Raise(__pyx_4, 0, 0); Py_DECREF(__pyx_4); __pyx_4 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1346; goto __pyx_L1;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1351; goto __pyx_L1;} goto __pyx_L4; } __pyx_L4:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1347 */ - __pyx_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 (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1347; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1352 */ + __pyx_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 (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1352; goto __pyx_L1;} __pyx_r = __pyx_2; __pyx_2 = 0; goto __pyx_L0; @@ -7547,100 +7603,100 @@ } __pyx_L2:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1349 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1354 */ PyErr_Clear(); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1352 */ - __pyx_3 = PyArray_FROM_OTF(__pyx_v_p,NPY_DOUBLE,NPY_ALIGNED); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1352; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1357 */ + __pyx_3 = PyArray_FROM_OTF(__pyx_v_p,NPY_DOUBLE,NPY_ALIGNED); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1357; goto __pyx_L1;} Py_INCREF(((PyObject *)((PyArrayObject *)__pyx_3))); Py_DECREF(((PyObject *)__pyx_v_op)); __pyx_v_op = ((PyArrayObject *)__pyx_3); Py_DECREF(__pyx_3); __pyx_3 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1353 */ - __pyx_4 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1353; goto __pyx_L1;} - __pyx_2 = PyObject_GetAttr(__pyx_4, __pyx_n_any); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1353; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1358 */ + __pyx_4 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1358; goto __pyx_L1;} + __pyx_2 = PyObject_GetAttr(__pyx_4, __pyx_n_any); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1358; goto __pyx_L1;} Py_DECREF(__pyx_4); __pyx_4 = 0; - __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1353; goto __pyx_L1;} - __pyx_4 = PyObject_GetAttr(__pyx_3, __pyx_n_less); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1353; goto __pyx_L1;} + __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1358; goto __pyx_L1;} + __pyx_4 = PyObject_GetAttr(__pyx_3, __pyx_n_less); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1358; goto __pyx_L1;} Py_DECREF(__pyx_3); __pyx_3 = 0; - __pyx_3 = PyFloat_FromDouble(0.0); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1353; goto __pyx_L1;} - __pyx_5 = PyTuple_New(2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1353; goto __pyx_L1;} + __pyx_3 = PyFloat_FromDouble(0.0); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1358; goto __pyx_L1;} + __pyx_5 = PyTuple_New(2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1358; goto __pyx_L1;} Py_INCREF(((PyObject *)__pyx_v_op)); PyTuple_SET_ITEM(__pyx_5, 0, ((PyObject *)__pyx_v_op)); PyTuple_SET_ITEM(__pyx_5, 1, __pyx_3); __pyx_3 = 0; - __pyx_3 = PyObject_CallObject(__pyx_4, __pyx_5); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1353; goto __pyx_L1;} + __pyx_3 = PyObject_CallObject(__pyx_4, __pyx_5); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1358; goto __pyx_L1;} Py_DECREF(__pyx_4); __pyx_4 = 0; Py_DECREF(__pyx_5); __pyx_5 = 0; - __pyx_4 = PyTuple_New(1); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1353; goto __pyx_L1;} + __pyx_4 = PyTuple_New(1); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1358; goto __pyx_L1;} PyTuple_SET_ITEM(__pyx_4, 0, __pyx_3); __pyx_3 = 0; - __pyx_5 = PyObject_CallObject(__pyx_2, __pyx_4); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1353; goto __pyx_L1;} + __pyx_5 = PyObject_CallObject(__pyx_2, __pyx_4); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1358; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; Py_DECREF(__pyx_4); __pyx_4 = 0; - __pyx_1 = PyObject_IsTrue(__pyx_5); if (__pyx_1 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1353; goto __pyx_L1;} + __pyx_1 = PyObject_IsTrue(__pyx_5); if (__pyx_1 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1358; goto __pyx_L1;} Py_DECREF(__pyx_5); __pyx_5 = 0; if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1354 */ - __pyx_3 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1354; goto __pyx_L1;} - __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1354; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1359 */ + __pyx_3 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1359; goto __pyx_L1;} + __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1359; goto __pyx_L1;} Py_INCREF(__pyx_k151p); PyTuple_SET_ITEM(__pyx_2, 0, __pyx_k151p); - __pyx_4 = PyObject_CallObject(__pyx_3, __pyx_2); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1354; goto __pyx_L1;} + __pyx_4 = PyObject_CallObject(__pyx_3, __pyx_2); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1359; goto __pyx_L1;} Py_DECREF(__pyx_3); __pyx_3 = 0; Py_DECREF(__pyx_2); __pyx_2 = 0; __Pyx_Raise(__pyx_4, 0, 0); Py_DECREF(__pyx_4); __pyx_4 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1354; goto __pyx_L1;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1359; goto __pyx_L1;} goto __pyx_L5; } __pyx_L5:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1355 */ - __pyx_5 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1355; goto __pyx_L1;} - __pyx_3 = PyObject_GetAttr(__pyx_5, __pyx_n_any); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1355; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1360 */ + __pyx_5 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1360; goto __pyx_L1;} + __pyx_3 = PyObject_GetAttr(__pyx_5, __pyx_n_any); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1360; goto __pyx_L1;} Py_DECREF(__pyx_5); __pyx_5 = 0; - __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1355; goto __pyx_L1;} - __pyx_4 = PyObject_GetAttr(__pyx_2, __pyx_n_greater); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1355; goto __pyx_L1;} + __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1360; goto __pyx_L1;} + __pyx_4 = PyObject_GetAttr(__pyx_2, __pyx_n_greater); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1360; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; - __pyx_5 = PyFloat_FromDouble(1.0); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1355; goto __pyx_L1;} - __pyx_2 = PyTuple_New(2); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1355; goto __pyx_L1;} + __pyx_5 = PyFloat_FromDouble(1.0); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1360; goto __pyx_L1;} + __pyx_2 = PyTuple_New(2); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1360; goto __pyx_L1;} Py_INCREF(((PyObject *)__pyx_v_op)); PyTuple_SET_ITEM(__pyx_2, 0, ((PyObject *)__pyx_v_op)); PyTuple_SET_ITEM(__pyx_2, 1, __pyx_5); __pyx_5 = 0; - __pyx_5 = PyObject_CallObject(__pyx_4, __pyx_2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1355; goto __pyx_L1;} + __pyx_5 = PyObject_CallObject(__pyx_4, __pyx_2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1360; goto __pyx_L1;} Py_DECREF(__pyx_4); __pyx_4 = 0; Py_DECREF(__pyx_2); __pyx_2 = 0; - __pyx_4 = PyTuple_New(1); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1355; goto __pyx_L1;} + __pyx_4 = PyTuple_New(1); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1360; goto __pyx_L1;} PyTuple_SET_ITEM(__pyx_4, 0, __pyx_5); __pyx_5 = 0; - __pyx_2 = PyObject_CallObject(__pyx_3, __pyx_4); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1355; goto __pyx_L1;} + __pyx_2 = PyObject_CallObject(__pyx_3, __pyx_4); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1360; goto __pyx_L1;} Py_DECREF(__pyx_3); __pyx_3 = 0; Py_DECREF(__pyx_4); __pyx_4 = 0; - __pyx_1 = PyObject_IsTrue(__pyx_2); if (__pyx_1 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1355; goto __pyx_L1;} + __pyx_1 = PyObject_IsTrue(__pyx_2); if (__pyx_1 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1360; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1356 */ - __pyx_5 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1356; goto __pyx_L1;} - __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1356; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1361 */ + __pyx_5 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1361; goto __pyx_L1;} + __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1361; goto __pyx_L1;} Py_INCREF(__pyx_k152p); PyTuple_SET_ITEM(__pyx_3, 0, __pyx_k152p); - __pyx_4 = PyObject_CallObject(__pyx_5, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1356; goto __pyx_L1;} + __pyx_4 = PyObject_CallObject(__pyx_5, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1361; goto __pyx_L1;} Py_DECREF(__pyx_5); __pyx_5 = 0; Py_DECREF(__pyx_3); __pyx_3 = 0; __Pyx_Raise(__pyx_4, 0, 0); Py_DECREF(__pyx_4); __pyx_4 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1356; goto __pyx_L1;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1361; goto __pyx_L1;} goto __pyx_L6; } __pyx_L6:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1357 */ - __pyx_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 (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1357; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1362 */ + __pyx_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 (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1362; goto __pyx_L1;} __pyx_r = __pyx_2; __pyx_2 = 0; goto __pyx_L0; @@ -7714,109 +7770,109 @@ __pyx_v_onbad = ((PyArrayObject *)Py_None); Py_INCREF(Py_None); __pyx_v_onsample = ((PyArrayObject *)Py_None); Py_INCREF(Py_None); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1372 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1377 */ __pyx_v_lngood = PyInt_AsLong(__pyx_v_ngood); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1373 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1378 */ __pyx_v_lnbad = PyInt_AsLong(__pyx_v_nbad); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1374 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1379 */ __pyx_v_lnsample = PyInt_AsLong(__pyx_v_nsample); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1375 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1380 */ __pyx_1 = (!PyErr_Occurred()); if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1376 */ - __pyx_2 = PyInt_FromLong(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1376; goto __pyx_L1;} - if (PyObject_Cmp(__pyx_v_ngood, __pyx_2, &__pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1376; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1381 */ + __pyx_2 = PyInt_FromLong(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1381; goto __pyx_L1;} + if (PyObject_Cmp(__pyx_v_ngood, __pyx_2, &__pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1381; goto __pyx_L1;} __pyx_1 = __pyx_1 < 0; Py_DECREF(__pyx_2); __pyx_2 = 0; if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1377 */ - __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1377; goto __pyx_L1;} - __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1377; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1382 */ + __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1382; goto __pyx_L1;} + __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1382; goto __pyx_L1;} Py_INCREF(__pyx_k153p); PyTuple_SET_ITEM(__pyx_3, 0, __pyx_k153p); - __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1377; goto __pyx_L1;} + __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1382; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; Py_DECREF(__pyx_3); __pyx_3 = 0; __Pyx_Raise(__pyx_4, 0, 0); Py_DECREF(__pyx_4); __pyx_4 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1377; goto __pyx_L1;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1382; goto __pyx_L1;} goto __pyx_L3; } __pyx_L3:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1378 */ - __pyx_2 = PyInt_FromLong(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1378; goto __pyx_L1;} - if (PyObject_Cmp(__pyx_v_nbad, __pyx_2, &__pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1378; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1383 */ + __pyx_2 = PyInt_FromLong(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1383; goto __pyx_L1;} + if (PyObject_Cmp(__pyx_v_nbad, __pyx_2, &__pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1383; goto __pyx_L1;} __pyx_1 = __pyx_1 < 0; Py_DECREF(__pyx_2); __pyx_2 = 0; if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1379 */ - __pyx_3 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1379; goto __pyx_L1;} - __pyx_4 = PyTuple_New(1); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1379; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1384 */ + __pyx_3 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1384; goto __pyx_L1;} + __pyx_4 = PyTuple_New(1); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1384; goto __pyx_L1;} Py_INCREF(__pyx_k154p); PyTuple_SET_ITEM(__pyx_4, 0, __pyx_k154p); - __pyx_2 = PyObject_CallObject(__pyx_3, __pyx_4); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1379; goto __pyx_L1;} + __pyx_2 = PyObject_CallObject(__pyx_3, __pyx_4); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1384; goto __pyx_L1;} Py_DECREF(__pyx_3); __pyx_3 = 0; Py_DECREF(__pyx_4); __pyx_4 = 0; __Pyx_Raise(__pyx_2, 0, 0); Py_DECREF(__pyx_2); __pyx_2 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1379; goto __pyx_L1;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1384; goto __pyx_L1;} goto __pyx_L4; } __pyx_L4:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1380 */ - __pyx_3 = PyInt_FromLong(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1380; goto __pyx_L1;} - if (PyObject_Cmp(__pyx_v_nsample, __pyx_3, &__pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1380; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1385 */ + __pyx_3 = PyInt_FromLong(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1385; goto __pyx_L1;} + if (PyObject_Cmp(__pyx_v_nsample, __pyx_3, &__pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1385; goto __pyx_L1;} __pyx_1 = __pyx_1 < 0; Py_DECREF(__pyx_3); __pyx_3 = 0; if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1381 */ - __pyx_4 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1381; goto __pyx_L1;} - __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1381; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1386 */ + __pyx_4 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1386; goto __pyx_L1;} + __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1386; goto __pyx_L1;} Py_INCREF(__pyx_k155p); PyTuple_SET_ITEM(__pyx_2, 0, __pyx_k155p); - __pyx_3 = PyObject_CallObject(__pyx_4, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1381; goto __pyx_L1;} + __pyx_3 = PyObject_CallObject(__pyx_4, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1386; goto __pyx_L1;} Py_DECREF(__pyx_4); __pyx_4 = 0; Py_DECREF(__pyx_2); __pyx_2 = 0; __Pyx_Raise(__pyx_3, 0, 0); Py_DECREF(__pyx_3); __pyx_3 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1381; goto __pyx_L1;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1386; goto __pyx_L1;} goto __pyx_L5; } __pyx_L5:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1382 */ - __pyx_4 = PyNumber_Add(__pyx_v_ngood, __pyx_v_nbad); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1382; goto __pyx_L1;} - if (PyObject_Cmp(__pyx_4, __pyx_v_nsample, &__pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1382; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1387 */ + __pyx_4 = PyNumber_Add(__pyx_v_ngood, __pyx_v_nbad); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1387; goto __pyx_L1;} + if (PyObject_Cmp(__pyx_4, __pyx_v_nsample, &__pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1387; goto __pyx_L1;} __pyx_1 = __pyx_1 < 0; Py_DECREF(__pyx_4); __pyx_4 = 0; if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1383 */ - __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1383; goto __pyx_L1;} - __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1383; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1388 */ + __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1388; goto __pyx_L1;} + __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1388; goto __pyx_L1;} Py_INCREF(__pyx_k156p); PyTuple_SET_ITEM(__pyx_3, 0, __pyx_k156p); - __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1383; goto __pyx_L1;} + __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1388; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; Py_DECREF(__pyx_3); __pyx_3 = 0; __Pyx_Raise(__pyx_4, 0, 0); Py_DECREF(__pyx_4); __pyx_4 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1383; goto __pyx_L1;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1388; goto __pyx_L1;} goto __pyx_L6; } __pyx_L6:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1384 */ - __pyx_2 = __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 (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1384; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1389 */ + __pyx_2 = __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 (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1389; goto __pyx_L1;} __pyx_r = __pyx_2; __pyx_2 = 0; goto __pyx_L0; @@ -7824,206 +7880,206 @@ } __pyx_L2:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1388 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1393 */ PyErr_Clear(); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1390 */ - __pyx_3 = PyArray_FROM_OTF(__pyx_v_ngood,NPY_LONG,NPY_ALIGNED); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1390; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1395 */ + __pyx_3 = PyArray_FROM_OTF(__pyx_v_ngood,NPY_LONG,NPY_ALIGNED); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1395; goto __pyx_L1;} Py_INCREF(((PyObject *)((PyArrayObject *)__pyx_3))); Py_DECREF(((PyObject *)__pyx_v_ongood)); __pyx_v_ongood = ((PyArrayObject *)__pyx_3); Py_DECREF(__pyx_3); __pyx_3 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1391 */ - __pyx_4 = PyArray_FROM_OTF(__pyx_v_nbad,NPY_LONG,NPY_ALIGNED); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1391; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1396 */ + __pyx_4 = PyArray_FROM_OTF(__pyx_v_nbad,NPY_LONG,NPY_ALIGNED); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1396; goto __pyx_L1;} Py_INCREF(((PyObject *)((PyArrayObject *)__pyx_4))); Py_DECREF(((PyObject *)__pyx_v_onbad)); __pyx_v_onbad = ((PyArrayObject *)__pyx_4); Py_DECREF(__pyx_4); __pyx_4 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1392 */ - __pyx_2 = PyArray_FROM_OTF(__pyx_v_nsample,NPY_LONG,NPY_ALIGNED); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1392; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1397 */ + __pyx_2 = PyArray_FROM_OTF(__pyx_v_nsample,NPY_LONG,NPY_ALIGNED); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1397; goto __pyx_L1;} Py_INCREF(((PyObject *)((PyArrayObject *)__pyx_2))); Py_DECREF(((PyObject *)__pyx_v_onsample)); __pyx_v_onsample = ((PyArrayObject *)__pyx_2); Py_DECREF(__pyx_2); __pyx_2 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1393 */ - __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1393; goto __pyx_L1;} - __pyx_4 = PyObject_GetAttr(__pyx_3, __pyx_n_any); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1393; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1398 */ + __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1398; goto __pyx_L1;} + __pyx_4 = PyObject_GetAttr(__pyx_3, __pyx_n_any); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1398; goto __pyx_L1;} Py_DECREF(__pyx_3); __pyx_3 = 0; - __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1393; goto __pyx_L1;} - __pyx_3 = PyObject_GetAttr(__pyx_2, __pyx_n_less); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1393; goto __pyx_L1;} + __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1398; goto __pyx_L1;} + __pyx_3 = PyObject_GetAttr(__pyx_2, __pyx_n_less); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1398; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; - __pyx_2 = PyInt_FromLong(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1393; goto __pyx_L1;} - __pyx_5 = PyTuple_New(2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1393; goto __pyx_L1;} + __pyx_2 = PyInt_FromLong(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1398; goto __pyx_L1;} + __pyx_5 = PyTuple_New(2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1398; goto __pyx_L1;} Py_INCREF(((PyObject *)__pyx_v_ongood)); PyTuple_SET_ITEM(__pyx_5, 0, ((PyObject *)__pyx_v_ongood)); PyTuple_SET_ITEM(__pyx_5, 1, __pyx_2); __pyx_2 = 0; - __pyx_2 = PyObject_CallObject(__pyx_3, __pyx_5); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1393; goto __pyx_L1;} + __pyx_2 = PyObject_CallObject(__pyx_3, __pyx_5); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1398; goto __pyx_L1;} Py_DECREF(__pyx_3); __pyx_3 = 0; Py_DECREF(__pyx_5); __pyx_5 = 0; - __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1393; goto __pyx_L1;} + __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1398; goto __pyx_L1;} PyTuple_SET_ITEM(__pyx_3, 0, __pyx_2); __pyx_2 = 0; - __pyx_5 = PyObject_CallObject(__pyx_4, __pyx_3); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1393; goto __pyx_L1;} + __pyx_5 = PyObject_CallObject(__pyx_4, __pyx_3); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1398; goto __pyx_L1;} Py_DECREF(__pyx_4); __pyx_4 = 0; Py_DECREF(__pyx_3); __pyx_3 = 0; - __pyx_1 = PyObject_IsTrue(__pyx_5); if (__pyx_1 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1393; goto __pyx_L1;} + __pyx_1 = PyObject_IsTrue(__pyx_5); if (__pyx_1 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1398; goto __pyx_L1;} Py_DECREF(__pyx_5); __pyx_5 = 0; if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1394 */ - __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1394; goto __pyx_L1;} - __pyx_4 = PyTuple_New(1); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1394; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1399 */ + __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1399; goto __pyx_L1;} + __pyx_4 = PyTuple_New(1); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1399; goto __pyx_L1;} Py_INCREF(__pyx_k157p); PyTuple_SET_ITEM(__pyx_4, 0, __pyx_k157p); - __pyx_3 = PyObject_CallObject(__pyx_2, __pyx_4); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1394; goto __pyx_L1;} + __pyx_3 = PyObject_CallObject(__pyx_2, __pyx_4); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1399; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; Py_DECREF(__pyx_4); __pyx_4 = 0; __Pyx_Raise(__pyx_3, 0, 0); Py_DECREF(__pyx_3); __pyx_3 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1394; goto __pyx_L1;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1399; goto __pyx_L1;} goto __pyx_L7; } __pyx_L7:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1395 */ - __pyx_5 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1395; goto __pyx_L1;} - __pyx_2 = PyObject_GetAttr(__pyx_5, __pyx_n_any); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1395; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1400 */ + __pyx_5 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1400; goto __pyx_L1;} + __pyx_2 = PyObject_GetAttr(__pyx_5, __pyx_n_any); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1400; goto __pyx_L1;} Py_DECREF(__pyx_5); __pyx_5 = 0; - __pyx_4 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1395; goto __pyx_L1;} - __pyx_3 = PyObject_GetAttr(__pyx_4, __pyx_n_less); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1395; goto __pyx_L1;} + __pyx_4 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1400; goto __pyx_L1;} + __pyx_3 = PyObject_GetAttr(__pyx_4, __pyx_n_less); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1400; goto __pyx_L1;} Py_DECREF(__pyx_4); __pyx_4 = 0; - __pyx_5 = PyInt_FromLong(1); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1395; goto __pyx_L1;} - __pyx_4 = PyTuple_New(2); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1395; goto __pyx_L1;} + __pyx_5 = PyInt_FromLong(1); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1400; goto __pyx_L1;} + __pyx_4 = PyTuple_New(2); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1400; goto __pyx_L1;} Py_INCREF(((PyObject *)__pyx_v_onbad)); PyTuple_SET_ITEM(__pyx_4, 0, ((PyObject *)__pyx_v_onbad)); PyTuple_SET_ITEM(__pyx_4, 1, __pyx_5); __pyx_5 = 0; - __pyx_5 = PyObject_CallObject(__pyx_3, __pyx_4); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1395; goto __pyx_L1;} + __pyx_5 = PyObject_CallObject(__pyx_3, __pyx_4); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1400; goto __pyx_L1;} Py_DECREF(__pyx_3); __pyx_3 = 0; Py_DECREF(__pyx_4); __pyx_4 = 0; - __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1395; goto __pyx_L1;} + __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1400; goto __pyx_L1;} PyTuple_SET_ITEM(__pyx_3, 0, __pyx_5); __pyx_5 = 0; - __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1395; goto __pyx_L1;} + __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1400; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; Py_DECREF(__pyx_3); __pyx_3 = 0; - __pyx_1 = PyObject_IsTrue(__pyx_4); if (__pyx_1 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1395; goto __pyx_L1;} + __pyx_1 = PyObject_IsTrue(__pyx_4); if (__pyx_1 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1400; goto __pyx_L1;} Py_DECREF(__pyx_4); __pyx_4 = 0; if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1396 */ - __pyx_5 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1396; goto __pyx_L1;} - __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1396; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1401 */ + __pyx_5 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1401; goto __pyx_L1;} + __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1401; goto __pyx_L1;} Py_INCREF(__pyx_k158p); PyTuple_SET_ITEM(__pyx_2, 0, __pyx_k158p); - __pyx_3 = PyObject_CallObject(__pyx_5, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1396; goto __pyx_L1;} + __pyx_3 = PyObject_CallObject(__pyx_5, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1401; goto __pyx_L1;} Py_DECREF(__pyx_5); __pyx_5 = 0; Py_DECREF(__pyx_2); __pyx_2 = 0; __Pyx_Raise(__pyx_3, 0, 0); Py_DECREF(__pyx_3); __pyx_3 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1396; goto __pyx_L1;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1401; goto __pyx_L1;} goto __pyx_L8; } __pyx_L8:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1397 */ - __pyx_4 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1397; goto __pyx_L1;} - __pyx_5 = PyObject_GetAttr(__pyx_4, __pyx_n_any); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1397; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1402 */ + __pyx_4 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1402; goto __pyx_L1;} + __pyx_5 = PyObject_GetAttr(__pyx_4, __pyx_n_any); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1402; goto __pyx_L1;} Py_DECREF(__pyx_4); __pyx_4 = 0; - __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1397; goto __pyx_L1;} - __pyx_3 = PyObject_GetAttr(__pyx_2, __pyx_n_less); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1397; goto __pyx_L1;} + __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1402; goto __pyx_L1;} + __pyx_3 = PyObject_GetAttr(__pyx_2, __pyx_n_less); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1402; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; - __pyx_4 = PyInt_FromLong(1); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1397; goto __pyx_L1;} - __pyx_2 = PyTuple_New(2); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1397; goto __pyx_L1;} + __pyx_4 = PyInt_FromLong(1); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1402; goto __pyx_L1;} + __pyx_2 = PyTuple_New(2); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1402; goto __pyx_L1;} Py_INCREF(((PyObject *)__pyx_v_onsample)); PyTuple_SET_ITEM(__pyx_2, 0, ((PyObject *)__pyx_v_onsample)); PyTuple_SET_ITEM(__pyx_2, 1, __pyx_4); __pyx_4 = 0; - __pyx_4 = PyObject_CallObject(__pyx_3, __pyx_2); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1397; goto __pyx_L1;} + __pyx_4 = PyObject_CallObject(__pyx_3, __pyx_2); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1402; goto __pyx_L1;} Py_DECREF(__pyx_3); __pyx_3 = 0; Py_DECREF(__pyx_2); __pyx_2 = 0; - __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1397; goto __pyx_L1;} + __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1402; goto __pyx_L1;} PyTuple_SET_ITEM(__pyx_3, 0, __pyx_4); __pyx_4 = 0; - __pyx_2 = PyObject_CallObject(__pyx_5, __pyx_3); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1397; goto __pyx_L1;} + __pyx_2 = PyObject_CallObject(__pyx_5, __pyx_3); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1402; goto __pyx_L1;} Py_DECREF(__pyx_5); __pyx_5 = 0; Py_DECREF(__pyx_3); __pyx_3 = 0; - __pyx_1 = PyObject_IsTrue(__pyx_2); if (__pyx_1 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1397; goto __pyx_L1;} + __pyx_1 = PyObject_IsTrue(__pyx_2); if (__pyx_1 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1402; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1398 */ - __pyx_4 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1398; goto __pyx_L1;} - __pyx_5 = PyTuple_New(1); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1398; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1403 */ + __pyx_4 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1403; goto __pyx_L1;} + __pyx_5 = PyTuple_New(1); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1403; goto __pyx_L1;} Py_INCREF(__pyx_k159p); PyTuple_SET_ITEM(__pyx_5, 0, __pyx_k159p); - __pyx_3 = PyObject_CallObject(__pyx_4, __pyx_5); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1398; goto __pyx_L1;} + __pyx_3 = PyObject_CallObject(__pyx_4, __pyx_5); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1403; goto __pyx_L1;} Py_DECREF(__pyx_4); __pyx_4 = 0; Py_DECREF(__pyx_5); __pyx_5 = 0; __Pyx_Raise(__pyx_3, 0, 0); Py_DECREF(__pyx_3); __pyx_3 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1398; goto __pyx_L1;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1403; goto __pyx_L1;} goto __pyx_L9; } __pyx_L9:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1399 */ - __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1399; goto __pyx_L1;} - __pyx_4 = PyObject_GetAttr(__pyx_2, __pyx_n_any); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1399; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1404 */ + __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1404; goto __pyx_L1;} + __pyx_4 = PyObject_GetAttr(__pyx_2, __pyx_n_any); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1404; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; - __pyx_5 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1399; goto __pyx_L1;} - __pyx_3 = PyObject_GetAttr(__pyx_5, __pyx_n_less); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1399; goto __pyx_L1;} + __pyx_5 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1404; goto __pyx_L1;} + __pyx_3 = PyObject_GetAttr(__pyx_5, __pyx_n_less); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1404; goto __pyx_L1;} Py_DECREF(__pyx_5); __pyx_5 = 0; - __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1399; goto __pyx_L1;} - __pyx_5 = PyObject_GetAttr(__pyx_2, __pyx_n_add); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1399; goto __pyx_L1;} + __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1404; goto __pyx_L1;} + __pyx_5 = PyObject_GetAttr(__pyx_2, __pyx_n_add); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1404; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; - __pyx_2 = PyTuple_New(2); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1399; goto __pyx_L1;} + __pyx_2 = PyTuple_New(2); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1404; goto __pyx_L1;} Py_INCREF(((PyObject *)__pyx_v_ongood)); PyTuple_SET_ITEM(__pyx_2, 0, ((PyObject *)__pyx_v_ongood)); Py_INCREF(((PyObject *)__pyx_v_onbad)); PyTuple_SET_ITEM(__pyx_2, 1, ((PyObject *)__pyx_v_onbad)); - __pyx_6 = PyObject_CallObject(__pyx_5, __pyx_2); if (!__pyx_6) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1399; goto __pyx_L1;} + __pyx_6 = PyObject_CallObject(__pyx_5, __pyx_2); if (!__pyx_6) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1404; goto __pyx_L1;} Py_DECREF(__pyx_5); __pyx_5 = 0; Py_DECREF(__pyx_2); __pyx_2 = 0; - __pyx_5 = PyTuple_New(2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1399; goto __pyx_L1;} + __pyx_5 = PyTuple_New(2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1404; goto __pyx_L1;} PyTuple_SET_ITEM(__pyx_5, 0, __pyx_6); Py_INCREF(((PyObject *)__pyx_v_onsample)); PyTuple_SET_ITEM(__pyx_5, 1, ((PyObject *)__pyx_v_onsample)); __pyx_6 = 0; - __pyx_2 = PyObject_CallObject(__pyx_3, __pyx_5); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1399; goto __pyx_L1;} + __pyx_2 = PyObject_CallObject(__pyx_3, __pyx_5); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1404; goto __pyx_L1;} Py_DECREF(__pyx_3); __pyx_3 = 0; Py_DECREF(__pyx_5); __pyx_5 = 0; - __pyx_6 = PyTuple_New(1); if (!__pyx_6) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1399; goto __pyx_L1;} + __pyx_6 = PyTuple_New(1); if (!__pyx_6) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1404; goto __pyx_L1;} PyTuple_SET_ITEM(__pyx_6, 0, __pyx_2); __pyx_2 = 0; - __pyx_3 = PyObject_CallObject(__pyx_4, __pyx_6); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1399; goto __pyx_L1;} + __pyx_3 = PyObject_CallObject(__pyx_4, __pyx_6); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1404; goto __pyx_L1;} Py_DECREF(__pyx_4); __pyx_4 = 0; Py_DECREF(__pyx_6); __pyx_6 = 0; - __pyx_1 = PyObject_IsTrue(__pyx_3); if (__pyx_1 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1399; goto __pyx_L1;} + __pyx_1 = PyObject_IsTrue(__pyx_3); if (__pyx_1 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1404; goto __pyx_L1;} Py_DECREF(__pyx_3); __pyx_3 = 0; if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1400 */ - __pyx_5 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1400; goto __pyx_L1;} - __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1400; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1405 */ + __pyx_5 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1405; goto __pyx_L1;} + __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1405; goto __pyx_L1;} Py_INCREF(__pyx_k160p); PyTuple_SET_ITEM(__pyx_2, 0, __pyx_k160p); - __pyx_4 = PyObject_CallObject(__pyx_5, __pyx_2); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1400; goto __pyx_L1;} + __pyx_4 = PyObject_CallObject(__pyx_5, __pyx_2); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1405; goto __pyx_L1;} Py_DECREF(__pyx_5); __pyx_5 = 0; Py_DECREF(__pyx_2); __pyx_2 = 0; __Pyx_Raise(__pyx_4, 0, 0); Py_DECREF(__pyx_4); __pyx_4 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1400; goto __pyx_L1;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1405; goto __pyx_L1;} goto __pyx_L10; } __pyx_L10:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1401 */ - __pyx_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 (!__pyx_6) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1401; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1406 */ + __pyx_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 (!__pyx_6) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1406; goto __pyx_L1;} __pyx_r = __pyx_6; __pyx_6 = 0; goto __pyx_L0; @@ -8081,53 +8137,53 @@ Py_INCREF(__pyx_v_size); __pyx_v_op = ((PyArrayObject *)Py_None); Py_INCREF(Py_None); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1412 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1417 */ __pyx_v_fp = PyFloat_AsDouble(__pyx_v_p); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1413 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1418 */ __pyx_1 = (!PyErr_Occurred()); if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1414 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1419 */ __pyx_1 = (__pyx_v_fp < 0.0); if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1415 */ - __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1415; goto __pyx_L1;} - __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1415; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1420 */ + __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1420; goto __pyx_L1;} + __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1420; goto __pyx_L1;} Py_INCREF(__pyx_k161p); PyTuple_SET_ITEM(__pyx_3, 0, __pyx_k161p); - __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1415; goto __pyx_L1;} + __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1420; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; Py_DECREF(__pyx_3); __pyx_3 = 0; __Pyx_Raise(__pyx_4, 0, 0); Py_DECREF(__pyx_4); __pyx_4 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1415; goto __pyx_L1;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1420; goto __pyx_L1;} goto __pyx_L3; } __pyx_L3:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1416 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1421 */ __pyx_1 = (__pyx_v_fp > 1.0); if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1417 */ - __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1417; goto __pyx_L1;} - __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1417; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1422 */ + __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1422; goto __pyx_L1;} + __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1422; goto __pyx_L1;} Py_INCREF(__pyx_k162p); PyTuple_SET_ITEM(__pyx_3, 0, __pyx_k162p); - __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1417; goto __pyx_L1;} + __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1422; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; Py_DECREF(__pyx_3); __pyx_3 = 0; __Pyx_Raise(__pyx_4, 0, 0); Py_DECREF(__pyx_4); __pyx_4 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1417; goto __pyx_L1;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1422; goto __pyx_L1;} goto __pyx_L4; } __pyx_L4:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1418 */ - __pyx_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 (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1418; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1423 */ + __pyx_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 (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1423; goto __pyx_L1;} __pyx_r = __pyx_2; __pyx_2 = 0; goto __pyx_L0; @@ -8135,100 +8191,100 @@ } __pyx_L2:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1420 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1425 */ PyErr_Clear(); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1422 */ - __pyx_3 = PyArray_FROM_OTF(__pyx_v_p,NPY_DOUBLE,NPY_ALIGNED); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1422; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1427 */ + __pyx_3 = PyArray_FROM_OTF(__pyx_v_p,NPY_DOUBLE,NPY_ALIGNED); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1427; goto __pyx_L1;} Py_INCREF(((PyObject *)((PyArrayObject *)__pyx_3))); Py_DECREF(((PyObject *)__pyx_v_op)); __pyx_v_op = ((PyArrayObject *)__pyx_3); Py_DECREF(__pyx_3); __pyx_3 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1423 */ - __pyx_4 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1423; goto __pyx_L1;} - __pyx_2 = PyObject_GetAttr(__pyx_4, __pyx_n_any); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1423; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1428 */ + __pyx_4 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1428; goto __pyx_L1;} + __pyx_2 = PyObject_GetAttr(__pyx_4, __pyx_n_any); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1428; goto __pyx_L1;} Py_DECREF(__pyx_4); __pyx_4 = 0; - __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1423; goto __pyx_L1;} - __pyx_4 = PyObject_GetAttr(__pyx_3, __pyx_n_less); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1423; goto __pyx_L1;} + __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1428; goto __pyx_L1;} + __pyx_4 = PyObject_GetAttr(__pyx_3, __pyx_n_less); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1428; goto __pyx_L1;} Py_DECREF(__pyx_3); __pyx_3 = 0; - __pyx_3 = PyFloat_FromDouble(0.0); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1423; goto __pyx_L1;} - __pyx_5 = PyTuple_New(2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1423; goto __pyx_L1;} + __pyx_3 = PyFloat_FromDouble(0.0); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1428; goto __pyx_L1;} + __pyx_5 = PyTuple_New(2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1428; goto __pyx_L1;} Py_INCREF(((PyObject *)__pyx_v_op)); PyTuple_SET_ITEM(__pyx_5, 0, ((PyObject *)__pyx_v_op)); PyTuple_SET_ITEM(__pyx_5, 1, __pyx_3); __pyx_3 = 0; - __pyx_3 = PyObject_CallObject(__pyx_4, __pyx_5); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1423; goto __pyx_L1;} + __pyx_3 = PyObject_CallObject(__pyx_4, __pyx_5); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1428; goto __pyx_L1;} Py_DECREF(__pyx_4); __pyx_4 = 0; Py_DECREF(__pyx_5); __pyx_5 = 0; - __pyx_4 = PyTuple_New(1); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1423; goto __pyx_L1;} + __pyx_4 = PyTuple_New(1); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1428; goto __pyx_L1;} PyTuple_SET_ITEM(__pyx_4, 0, __pyx_3); __pyx_3 = 0; - __pyx_5 = PyObject_CallObject(__pyx_2, __pyx_4); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1423; goto __pyx_L1;} + __pyx_5 = PyObject_CallObject(__pyx_2, __pyx_4); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1428; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; Py_DECREF(__pyx_4); __pyx_4 = 0; - __pyx_1 = PyObject_IsTrue(__pyx_5); if (__pyx_1 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1423; goto __pyx_L1;} + __pyx_1 = PyObject_IsTrue(__pyx_5); if (__pyx_1 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1428; goto __pyx_L1;} Py_DECREF(__pyx_5); __pyx_5 = 0; if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1424 */ - __pyx_3 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1424; goto __pyx_L1;} - __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1424; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1429 */ + __pyx_3 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1429; goto __pyx_L1;} + __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1429; goto __pyx_L1;} Py_INCREF(__pyx_k163p); PyTuple_SET_ITEM(__pyx_2, 0, __pyx_k163p); - __pyx_4 = PyObject_CallObject(__pyx_3, __pyx_2); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1424; goto __pyx_L1;} + __pyx_4 = PyObject_CallObject(__pyx_3, __pyx_2); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1429; goto __pyx_L1;} Py_DECREF(__pyx_3); __pyx_3 = 0; Py_DECREF(__pyx_2); __pyx_2 = 0; __Pyx_Raise(__pyx_4, 0, 0); Py_DECREF(__pyx_4); __pyx_4 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1424; goto __pyx_L1;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1429; goto __pyx_L1;} goto __pyx_L5; } __pyx_L5:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1425 */ - __pyx_5 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1425; goto __pyx_L1;} - __pyx_3 = PyObject_GetAttr(__pyx_5, __pyx_n_any); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1425; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1430 */ + __pyx_5 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1430; goto __pyx_L1;} + __pyx_3 = PyObject_GetAttr(__pyx_5, __pyx_n_any); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1430; goto __pyx_L1;} Py_DECREF(__pyx_5); __pyx_5 = 0; - __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1425; goto __pyx_L1;} - __pyx_4 = PyObject_GetAttr(__pyx_2, __pyx_n_greater); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1425; goto __pyx_L1;} + __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1430; goto __pyx_L1;} + __pyx_4 = PyObject_GetAttr(__pyx_2, __pyx_n_greater); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1430; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; - __pyx_5 = PyFloat_FromDouble(1.0); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1425; goto __pyx_L1;} - __pyx_2 = PyTuple_New(2); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1425; goto __pyx_L1;} + __pyx_5 = PyFloat_FromDouble(1.0); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1430; goto __pyx_L1;} + __pyx_2 = PyTuple_New(2); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1430; goto __pyx_L1;} Py_INCREF(((PyObject *)__pyx_v_op)); PyTuple_SET_ITEM(__pyx_2, 0, ((PyObject *)__pyx_v_op)); PyTuple_SET_ITEM(__pyx_2, 1, __pyx_5); __pyx_5 = 0; - __pyx_5 = PyObject_CallObject(__pyx_4, __pyx_2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1425; goto __pyx_L1;} + __pyx_5 = PyObject_CallObject(__pyx_4, __pyx_2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1430; goto __pyx_L1;} Py_DECREF(__pyx_4); __pyx_4 = 0; Py_DECREF(__pyx_2); __pyx_2 = 0; - __pyx_4 = PyTuple_New(1); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1425; goto __pyx_L1;} + __pyx_4 = PyTuple_New(1); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1430; goto __pyx_L1;} PyTuple_SET_ITEM(__pyx_4, 0, __pyx_5); __pyx_5 = 0; - __pyx_2 = PyObject_CallObject(__pyx_3, __pyx_4); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1425; goto __pyx_L1;} + __pyx_2 = PyObject_CallObject(__pyx_3, __pyx_4); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1430; goto __pyx_L1;} Py_DECREF(__pyx_3); __pyx_3 = 0; Py_DECREF(__pyx_4); __pyx_4 = 0; - __pyx_1 = PyObject_IsTrue(__pyx_2); if (__pyx_1 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1425; goto __pyx_L1;} + __pyx_1 = PyObject_IsTrue(__pyx_2); if (__pyx_1 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1430; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; if (__pyx_1) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1426 */ - __pyx_5 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1426; goto __pyx_L1;} - __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1426; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1431 */ + __pyx_5 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1431; goto __pyx_L1;} + __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1431; goto __pyx_L1;} Py_INCREF(__pyx_k164p); PyTuple_SET_ITEM(__pyx_3, 0, __pyx_k164p); - __pyx_4 = PyObject_CallObject(__pyx_5, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1426; goto __pyx_L1;} + __pyx_4 = PyObject_CallObject(__pyx_5, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1431; goto __pyx_L1;} Py_DECREF(__pyx_5); __pyx_5 = 0; Py_DECREF(__pyx_3); __pyx_3 = 0; __Pyx_Raise(__pyx_4, 0, 0); Py_DECREF(__pyx_4); __pyx_4 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1426; goto __pyx_L1;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1431; goto __pyx_L1;} goto __pyx_L6; } __pyx_L6:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1427 */ - __pyx_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 (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1427; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1432 */ + __pyx_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 (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1432; goto __pyx_L1;} __pyx_r = __pyx_2; __pyx_2 = 0; goto __pyx_L0; @@ -8306,40 +8362,40 @@ __pyx_v_s = Py_None; Py_INCREF(Py_None); __pyx_v_v = Py_None; Py_INCREF(Py_None); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1448 */ - __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1448; goto __pyx_L1;} - __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_n_array); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1448; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1453 */ + __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1453; goto __pyx_L1;} + __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_n_array); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1453; goto __pyx_L1;} Py_DECREF(__pyx_1); __pyx_1 = 0; - __pyx_1 = PyTuple_New(1); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1448; goto __pyx_L1;} + __pyx_1 = PyTuple_New(1); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1453; goto __pyx_L1;} Py_INCREF(__pyx_v_mean); PyTuple_SET_ITEM(__pyx_1, 0, __pyx_v_mean); - __pyx_3 = PyObject_CallObject(__pyx_2, __pyx_1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1448; goto __pyx_L1;} + __pyx_3 = PyObject_CallObject(__pyx_2, __pyx_1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1453; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; Py_DECREF(__pyx_1); __pyx_1 = 0; Py_DECREF(__pyx_v_mean); __pyx_v_mean = __pyx_3; __pyx_3 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1449 */ - __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1449; goto __pyx_L1;} - __pyx_1 = PyObject_GetAttr(__pyx_2, __pyx_n_array); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1449; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1454 */ + __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1454; goto __pyx_L1;} + __pyx_1 = PyObject_GetAttr(__pyx_2, __pyx_n_array); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1454; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; - __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1449; goto __pyx_L1;} + __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1454; goto __pyx_L1;} Py_INCREF(__pyx_v_cov); PyTuple_SET_ITEM(__pyx_3, 0, __pyx_v_cov); - __pyx_2 = PyObject_CallObject(__pyx_1, __pyx_3); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1449; goto __pyx_L1;} + __pyx_2 = PyObject_CallObject(__pyx_1, __pyx_3); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1454; goto __pyx_L1;} Py_DECREF(__pyx_1); __pyx_1 = 0; Py_DECREF(__pyx_3); __pyx_3 = 0; Py_DECREF(__pyx_v_cov); __pyx_v_cov = __pyx_2; __pyx_2 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1450 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1455 */ __pyx_4 = __pyx_v_size == Py_None; if (__pyx_4) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1451 */ - __pyx_1 = PyList_New(0); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1451; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1456 */ + __pyx_1 = PyList_New(0); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1456; goto __pyx_L1;} Py_DECREF(__pyx_v_shape); __pyx_v_shape = __pyx_1; __pyx_1 = 0; @@ -8347,140 +8403,140 @@ } /*else*/ { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1453 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1458 */ Py_INCREF(__pyx_v_size); Py_DECREF(__pyx_v_shape); __pyx_v_shape = __pyx_v_size; } __pyx_L2:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1454 */ - __pyx_3 = __Pyx_GetName(__pyx_b, __pyx_n_len); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1454; goto __pyx_L1;} - __pyx_2 = PyObject_GetAttr(__pyx_v_mean, __pyx_n_shape); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1454; goto __pyx_L1;} - __pyx_1 = PyTuple_New(1); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1454; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1459 */ + __pyx_3 = __Pyx_GetName(__pyx_b, __pyx_n_len); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1459; goto __pyx_L1;} + __pyx_2 = PyObject_GetAttr(__pyx_v_mean, __pyx_n_shape); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1459; goto __pyx_L1;} + __pyx_1 = PyTuple_New(1); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1459; goto __pyx_L1;} PyTuple_SET_ITEM(__pyx_1, 0, __pyx_2); __pyx_2 = 0; - __pyx_2 = PyObject_CallObject(__pyx_3, __pyx_1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1454; goto __pyx_L1;} + __pyx_2 = PyObject_CallObject(__pyx_3, __pyx_1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1459; goto __pyx_L1;} Py_DECREF(__pyx_3); __pyx_3 = 0; Py_DECREF(__pyx_1); __pyx_1 = 0; - __pyx_3 = PyInt_FromLong(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1454; goto __pyx_L1;} - if (PyObject_Cmp(__pyx_2, __pyx_3, &__pyx_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1454; goto __pyx_L1;} + __pyx_3 = PyInt_FromLong(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1459; goto __pyx_L1;} + if (PyObject_Cmp(__pyx_2, __pyx_3, &__pyx_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1459; goto __pyx_L1;} __pyx_4 = __pyx_4 != 0; Py_DECREF(__pyx_2); __pyx_2 = 0; Py_DECREF(__pyx_3); __pyx_3 = 0; if (__pyx_4) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1455 */ - __pyx_1 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1455; goto __pyx_L1;} - __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1455; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1460 */ + __pyx_1 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1460; goto __pyx_L1;} + __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1460; goto __pyx_L1;} Py_INCREF(__pyx_k165p); PyTuple_SET_ITEM(__pyx_2, 0, __pyx_k165p); - __pyx_3 = PyObject_CallObject(__pyx_1, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1455; goto __pyx_L1;} + __pyx_3 = PyObject_CallObject(__pyx_1, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1460; goto __pyx_L1;} Py_DECREF(__pyx_1); __pyx_1 = 0; Py_DECREF(__pyx_2); __pyx_2 = 0; __Pyx_Raise(__pyx_3, 0, 0); Py_DECREF(__pyx_3); __pyx_3 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1455; goto __pyx_L1;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1460; goto __pyx_L1;} goto __pyx_L3; } __pyx_L3:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1456 */ - __pyx_1 = __Pyx_GetName(__pyx_b, __pyx_n_len); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1456; goto __pyx_L1;} - __pyx_2 = PyObject_GetAttr(__pyx_v_cov, __pyx_n_shape); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1456; goto __pyx_L1;} - __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1456; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1461 */ + __pyx_1 = __Pyx_GetName(__pyx_b, __pyx_n_len); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1461; goto __pyx_L1;} + __pyx_2 = PyObject_GetAttr(__pyx_v_cov, __pyx_n_shape); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1461; goto __pyx_L1;} + __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1461; goto __pyx_L1;} PyTuple_SET_ITEM(__pyx_3, 0, __pyx_2); __pyx_2 = 0; - __pyx_2 = PyObject_CallObject(__pyx_1, __pyx_3); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1456; goto __pyx_L1;} + __pyx_2 = PyObject_CallObject(__pyx_1, __pyx_3); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1461; goto __pyx_L1;} Py_DECREF(__pyx_1); __pyx_1 = 0; Py_DECREF(__pyx_3); __pyx_3 = 0; - __pyx_1 = PyInt_FromLong(2); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1456; goto __pyx_L1;} - if (PyObject_Cmp(__pyx_2, __pyx_1, &__pyx_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1456; goto __pyx_L1;} + __pyx_1 = PyInt_FromLong(2); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1461; goto __pyx_L1;} + if (PyObject_Cmp(__pyx_2, __pyx_1, &__pyx_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1461; goto __pyx_L1;} __pyx_4 = __pyx_4 != 0; Py_DECREF(__pyx_2); __pyx_2 = 0; Py_DECREF(__pyx_1); __pyx_1 = 0; if (!__pyx_4) { - __pyx_3 = PyObject_GetAttr(__pyx_v_cov, __pyx_n_shape); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1456; goto __pyx_L1;} - __pyx_2 = PyInt_FromLong(0); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1456; goto __pyx_L1;} - __pyx_1 = PyObject_GetItem(__pyx_3, __pyx_2); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1456; goto __pyx_L1;} + __pyx_3 = PyObject_GetAttr(__pyx_v_cov, __pyx_n_shape); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1461; goto __pyx_L1;} + __pyx_2 = PyInt_FromLong(0); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1461; goto __pyx_L1;} + __pyx_1 = PyObject_GetItem(__pyx_3, __pyx_2); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1461; goto __pyx_L1;} Py_DECREF(__pyx_3); __pyx_3 = 0; Py_DECREF(__pyx_2); __pyx_2 = 0; - __pyx_3 = PyObject_GetAttr(__pyx_v_cov, __pyx_n_shape); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1456; goto __pyx_L1;} - __pyx_2 = PyInt_FromLong(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1456; goto __pyx_L1;} - __pyx_5 = PyObject_GetItem(__pyx_3, __pyx_2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1456; goto __pyx_L1;} + __pyx_3 = PyObject_GetAttr(__pyx_v_cov, __pyx_n_shape); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1461; goto __pyx_L1;} + __pyx_2 = PyInt_FromLong(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1461; goto __pyx_L1;} + __pyx_5 = PyObject_GetItem(__pyx_3, __pyx_2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1461; goto __pyx_L1;} Py_DECREF(__pyx_3); __pyx_3 = 0; Py_DECREF(__pyx_2); __pyx_2 = 0; - if (PyObject_Cmp(__pyx_1, __pyx_5, &__pyx_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1456; goto __pyx_L1;} + if (PyObject_Cmp(__pyx_1, __pyx_5, &__pyx_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1461; goto __pyx_L1;} __pyx_4 = __pyx_4 != 0; Py_DECREF(__pyx_1); __pyx_1 = 0; Py_DECREF(__pyx_5); __pyx_5 = 0; } if (__pyx_4) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1457 */ - __pyx_3 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1457; goto __pyx_L1;} - __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1457; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1462 */ + __pyx_3 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1462; goto __pyx_L1;} + __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1462; goto __pyx_L1;} Py_INCREF(__pyx_k166p); PyTuple_SET_ITEM(__pyx_2, 0, __pyx_k166p); - __pyx_1 = PyObject_CallObject(__pyx_3, __pyx_2); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1457; goto __pyx_L1;} + __pyx_1 = PyObject_CallObject(__pyx_3, __pyx_2); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1462; goto __pyx_L1;} Py_DECREF(__pyx_3); __pyx_3 = 0; Py_DECREF(__pyx_2); __pyx_2 = 0; __Pyx_Raise(__pyx_1, 0, 0); Py_DECREF(__pyx_1); __pyx_1 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1457; goto __pyx_L1;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1462; goto __pyx_L1;} goto __pyx_L4; } __pyx_L4:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1458 */ - __pyx_5 = PyObject_GetAttr(__pyx_v_mean, __pyx_n_shape); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1458; goto __pyx_L1;} - __pyx_3 = PyInt_FromLong(0); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1458; goto __pyx_L1;} - __pyx_2 = PyObject_GetItem(__pyx_5, __pyx_3); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1458; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1463 */ + __pyx_5 = PyObject_GetAttr(__pyx_v_mean, __pyx_n_shape); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1463; goto __pyx_L1;} + __pyx_3 = PyInt_FromLong(0); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1463; goto __pyx_L1;} + __pyx_2 = PyObject_GetItem(__pyx_5, __pyx_3); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1463; goto __pyx_L1;} Py_DECREF(__pyx_5); __pyx_5 = 0; Py_DECREF(__pyx_3); __pyx_3 = 0; - __pyx_1 = PyObject_GetAttr(__pyx_v_cov, __pyx_n_shape); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1458; goto __pyx_L1;} - __pyx_5 = PyInt_FromLong(0); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1458; goto __pyx_L1;} - __pyx_3 = PyObject_GetItem(__pyx_1, __pyx_5); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1458; goto __pyx_L1;} + __pyx_1 = PyObject_GetAttr(__pyx_v_cov, __pyx_n_shape); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1463; goto __pyx_L1;} + __pyx_5 = PyInt_FromLong(0); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1463; goto __pyx_L1;} + __pyx_3 = PyObject_GetItem(__pyx_1, __pyx_5); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1463; goto __pyx_L1;} Py_DECREF(__pyx_1); __pyx_1 = 0; Py_DECREF(__pyx_5); __pyx_5 = 0; - if (PyObject_Cmp(__pyx_2, __pyx_3, &__pyx_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1458; goto __pyx_L1;} + if (PyObject_Cmp(__pyx_2, __pyx_3, &__pyx_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1463; goto __pyx_L1;} __pyx_4 = __pyx_4 != 0; Py_DECREF(__pyx_2); __pyx_2 = 0; Py_DECREF(__pyx_3); __pyx_3 = 0; if (__pyx_4) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1459 */ - __pyx_1 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1459; goto __pyx_L1;} - __pyx_5 = PyTuple_New(1); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1459; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1464 */ + __pyx_1 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1464; goto __pyx_L1;} + __pyx_5 = PyTuple_New(1); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1464; goto __pyx_L1;} Py_INCREF(__pyx_k167p); PyTuple_SET_ITEM(__pyx_5, 0, __pyx_k167p); - __pyx_2 = PyObject_CallObject(__pyx_1, __pyx_5); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1459; goto __pyx_L1;} + __pyx_2 = PyObject_CallObject(__pyx_1, __pyx_5); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1464; goto __pyx_L1;} Py_DECREF(__pyx_1); __pyx_1 = 0; Py_DECREF(__pyx_5); __pyx_5 = 0; __Pyx_Raise(__pyx_2, 0, 0); Py_DECREF(__pyx_2); __pyx_2 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1459; goto __pyx_L1;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1464; goto __pyx_L1;} goto __pyx_L5; } __pyx_L5:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1461 */ - __pyx_3 = __Pyx_GetName(__pyx_b, __pyx_n_isinstance); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1461; goto __pyx_L1;} - __pyx_1 = __Pyx_GetName(__pyx_b, __pyx_n_int); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1461; goto __pyx_L1;} - __pyx_5 = PyTuple_New(2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1461; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1466 */ + __pyx_3 = __Pyx_GetName(__pyx_b, __pyx_n_isinstance); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1466; goto __pyx_L1;} + __pyx_1 = __Pyx_GetName(__pyx_b, __pyx_n_int); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1466; goto __pyx_L1;} + __pyx_5 = PyTuple_New(2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1466; goto __pyx_L1;} Py_INCREF(__pyx_v_shape); PyTuple_SET_ITEM(__pyx_5, 0, __pyx_v_shape); PyTuple_SET_ITEM(__pyx_5, 1, __pyx_1); __pyx_1 = 0; - __pyx_2 = PyObject_CallObject(__pyx_3, __pyx_5); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1461; goto __pyx_L1;} + __pyx_2 = PyObject_CallObject(__pyx_3, __pyx_5); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1466; goto __pyx_L1;} Py_DECREF(__pyx_3); __pyx_3 = 0; Py_DECREF(__pyx_5); __pyx_5 = 0; - __pyx_4 = PyObject_IsTrue(__pyx_2); if (__pyx_4 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1461; goto __pyx_L1;} + __pyx_4 = PyObject_IsTrue(__pyx_2); if (__pyx_4 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1466; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; if (__pyx_4) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1462 */ - __pyx_1 = PyList_New(1); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1462; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1467 */ + __pyx_1 = PyList_New(1); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1467; goto __pyx_L1;} Py_INCREF(__pyx_v_shape); PyList_SET_ITEM(__pyx_1, 0, __pyx_v_shape); Py_DECREF(__pyx_v_shape); @@ -8490,186 +8546,186 @@ } __pyx_L6:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1463 */ - __pyx_3 = __Pyx_GetName(__pyx_b, __pyx_n_list); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1463; goto __pyx_L1;} - __pyx_5 = PySequence_GetSlice(__pyx_v_shape, 0, 0x7fffffff); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1463; goto __pyx_L1;} - __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1463; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1468 */ + __pyx_3 = __Pyx_GetName(__pyx_b, __pyx_n_list); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1468; goto __pyx_L1;} + __pyx_5 = PySequence_GetSlice(__pyx_v_shape, 0, 0x7fffffff); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1468; goto __pyx_L1;} + __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1468; goto __pyx_L1;} PyTuple_SET_ITEM(__pyx_2, 0, __pyx_5); __pyx_5 = 0; - __pyx_1 = PyObject_CallObject(__pyx_3, __pyx_2); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1463; goto __pyx_L1;} + __pyx_1 = PyObject_CallObject(__pyx_3, __pyx_2); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1468; goto __pyx_L1;} Py_DECREF(__pyx_3); __pyx_3 = 0; Py_DECREF(__pyx_2); __pyx_2 = 0; Py_DECREF(__pyx_v_final_shape); __pyx_v_final_shape = __pyx_1; __pyx_1 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1464 */ - __pyx_5 = PyObject_GetAttr(__pyx_v_final_shape, __pyx_n_append); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1464; goto __pyx_L1;} - __pyx_3 = PyObject_GetAttr(__pyx_v_mean, __pyx_n_shape); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1464; goto __pyx_L1;} - __pyx_2 = PyInt_FromLong(0); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1464; goto __pyx_L1;} - __pyx_1 = PyObject_GetItem(__pyx_3, __pyx_2); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1464; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1469 */ + __pyx_5 = PyObject_GetAttr(__pyx_v_final_shape, __pyx_n_append); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1469; goto __pyx_L1;} + __pyx_3 = PyObject_GetAttr(__pyx_v_mean, __pyx_n_shape); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1469; goto __pyx_L1;} + __pyx_2 = PyInt_FromLong(0); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1469; goto __pyx_L1;} + __pyx_1 = PyObject_GetItem(__pyx_3, __pyx_2); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1469; goto __pyx_L1;} Py_DECREF(__pyx_3); __pyx_3 = 0; Py_DECREF(__pyx_2); __pyx_2 = 0; - __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1464; goto __pyx_L1;} + __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1469; goto __pyx_L1;} PyTuple_SET_ITEM(__pyx_3, 0, __pyx_1); __pyx_1 = 0; - __pyx_2 = PyObject_CallObject(__pyx_5, __pyx_3); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1464; goto __pyx_L1;} + __pyx_2 = PyObject_CallObject(__pyx_5, __pyx_3); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1469; goto __pyx_L1;} Py_DECREF(__pyx_5); __pyx_5 = 0; Py_DECREF(__pyx_3); __pyx_3 = 0; Py_DECREF(__pyx_2); __pyx_2 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1468 */ - __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_n_standard_normal); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1468; goto __pyx_L1;} - __pyx_5 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1468; goto __pyx_L1;} - __pyx_3 = PyObject_GetAttr(__pyx_5, __pyx_n_multiply); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1468; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1473 */ + __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_n_standard_normal); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1473; goto __pyx_L1;} + __pyx_5 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1473; goto __pyx_L1;} + __pyx_3 = PyObject_GetAttr(__pyx_5, __pyx_n_multiply); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1473; goto __pyx_L1;} Py_DECREF(__pyx_5); __pyx_5 = 0; - __pyx_2 = PyObject_GetAttr(__pyx_3, __pyx_n_reduce); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1468; goto __pyx_L1;} + __pyx_2 = PyObject_GetAttr(__pyx_3, __pyx_n_reduce); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1473; goto __pyx_L1;} Py_DECREF(__pyx_3); __pyx_3 = 0; - __pyx_5 = PyTuple_New(1); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1468; goto __pyx_L1;} + __pyx_5 = PyTuple_New(1); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1473; goto __pyx_L1;} Py_INCREF(__pyx_v_final_shape); PyTuple_SET_ITEM(__pyx_5, 0, __pyx_v_final_shape); - __pyx_3 = PyObject_CallObject(__pyx_2, __pyx_5); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1468; goto __pyx_L1;} + __pyx_3 = PyObject_CallObject(__pyx_2, __pyx_5); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1473; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; Py_DECREF(__pyx_5); __pyx_5 = 0; - __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1468; goto __pyx_L1;} + __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1473; goto __pyx_L1;} PyTuple_SET_ITEM(__pyx_2, 0, __pyx_3); __pyx_3 = 0; - __pyx_5 = PyObject_CallObject(__pyx_1, __pyx_2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1468; goto __pyx_L1;} + __pyx_5 = PyObject_CallObject(__pyx_1, __pyx_2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1473; goto __pyx_L1;} Py_DECREF(__pyx_1); __pyx_1 = 0; Py_DECREF(__pyx_2); __pyx_2 = 0; Py_DECREF(__pyx_v_x); __pyx_v_x = __pyx_5; __pyx_5 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1469 */ - __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1469; goto __pyx_L1;} - __pyx_1 = PyObject_GetAttr(__pyx_3, __pyx_n_multiply); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1469; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1474 */ + __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1474; goto __pyx_L1;} + __pyx_1 = PyObject_GetAttr(__pyx_3, __pyx_n_multiply); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1474; goto __pyx_L1;} Py_DECREF(__pyx_3); __pyx_3 = 0; - __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_n_reduce); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1469; goto __pyx_L1;} + __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_n_reduce); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1474; goto __pyx_L1;} Py_DECREF(__pyx_1); __pyx_1 = 0; - __pyx_5 = __Pyx_GetName(__pyx_b, __pyx_n_len); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1469; goto __pyx_L1;} - __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1469; goto __pyx_L1;} + __pyx_5 = __Pyx_GetName(__pyx_b, __pyx_n_len); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1474; goto __pyx_L1;} + __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1474; goto __pyx_L1;} Py_INCREF(__pyx_v_final_shape); PyTuple_SET_ITEM(__pyx_3, 0, __pyx_v_final_shape); - __pyx_1 = PyObject_CallObject(__pyx_5, __pyx_3); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1469; goto __pyx_L1;} + __pyx_1 = PyObject_CallObject(__pyx_5, __pyx_3); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1474; goto __pyx_L1;} Py_DECREF(__pyx_5); __pyx_5 = 0; Py_DECREF(__pyx_3); __pyx_3 = 0; - __pyx_5 = PyInt_FromLong(1); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1469; goto __pyx_L1;} - __pyx_3 = PyNumber_Subtract(__pyx_1, __pyx_5); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1469; goto __pyx_L1;} + __pyx_5 = PyInt_FromLong(1); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1474; goto __pyx_L1;} + __pyx_3 = PyNumber_Subtract(__pyx_1, __pyx_5); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1474; goto __pyx_L1;} Py_DECREF(__pyx_1); __pyx_1 = 0; Py_DECREF(__pyx_5); __pyx_5 = 0; - __pyx_4 = PyInt_AsLong(__pyx_3); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1469; goto __pyx_L1;} + __pyx_4 = PyInt_AsLong(__pyx_3); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1474; goto __pyx_L1;} Py_DECREF(__pyx_3); __pyx_3 = 0; - __pyx_1 = PySequence_GetSlice(__pyx_v_final_shape, 0, __pyx_4); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1469; goto __pyx_L1;} - __pyx_5 = PyTuple_New(1); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1469; goto __pyx_L1;} + __pyx_1 = PySequence_GetSlice(__pyx_v_final_shape, 0, __pyx_4); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1474; goto __pyx_L1;} + __pyx_5 = PyTuple_New(1); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1474; goto __pyx_L1;} PyTuple_SET_ITEM(__pyx_5, 0, __pyx_1); __pyx_1 = 0; - __pyx_3 = PyObject_CallObject(__pyx_2, __pyx_5); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1469; goto __pyx_L1;} + __pyx_3 = PyObject_CallObject(__pyx_2, __pyx_5); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1474; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; Py_DECREF(__pyx_5); __pyx_5 = 0; - __pyx_1 = PyObject_GetAttr(__pyx_v_mean, __pyx_n_shape); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1470; goto __pyx_L1;} - __pyx_2 = PyInt_FromLong(0); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1470; goto __pyx_L1;} - __pyx_5 = PyObject_GetItem(__pyx_1, __pyx_2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1470; goto __pyx_L1;} + __pyx_1 = PyObject_GetAttr(__pyx_v_mean, __pyx_n_shape); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1475; goto __pyx_L1;} + __pyx_2 = PyInt_FromLong(0); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1475; goto __pyx_L1;} + __pyx_5 = PyObject_GetItem(__pyx_1, __pyx_2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1475; goto __pyx_L1;} Py_DECREF(__pyx_1); __pyx_1 = 0; Py_DECREF(__pyx_2); __pyx_2 = 0; - __pyx_1 = PyTuple_New(2); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1469; goto __pyx_L1;} + __pyx_1 = PyTuple_New(2); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1474; goto __pyx_L1;} PyTuple_SET_ITEM(__pyx_1, 0, __pyx_3); PyTuple_SET_ITEM(__pyx_1, 1, __pyx_5); __pyx_3 = 0; __pyx_5 = 0; - if (PyObject_SetAttr(__pyx_v_x, __pyx_n_shape, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1469; goto __pyx_L1;} + if (PyObject_SetAttr(__pyx_v_x, __pyx_n_shape, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1474; goto __pyx_L1;} Py_DECREF(__pyx_1); __pyx_1 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1478 */ - __pyx_2 = PyList_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1478; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1483 */ + __pyx_2 = PyList_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1483; goto __pyx_L1;} Py_INCREF(__pyx_n_svd); PyList_SET_ITEM(__pyx_2, 0, __pyx_n_svd); - __pyx_3 = __Pyx_Import(__pyx_k168p, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1478; goto __pyx_L1;} + __pyx_3 = __Pyx_Import(__pyx_k168p, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1483; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; - __pyx_5 = PyObject_GetAttr(__pyx_3, __pyx_n_svd); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1478; goto __pyx_L1;} + __pyx_5 = PyObject_GetAttr(__pyx_3, __pyx_n_svd); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1483; goto __pyx_L1;} Py_DECREF(__pyx_v_svd); __pyx_v_svd = __pyx_5; __pyx_5 = 0; Py_DECREF(__pyx_3); __pyx_3 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1480 */ - __pyx_1 = PyTuple_New(1); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1480; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1485 */ + __pyx_1 = PyTuple_New(1); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1485; goto __pyx_L1;} Py_INCREF(__pyx_v_cov); PyTuple_SET_ITEM(__pyx_1, 0, __pyx_v_cov); - __pyx_2 = PyObject_CallObject(__pyx_v_svd, __pyx_1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1480; goto __pyx_L1;} + __pyx_2 = PyObject_CallObject(__pyx_v_svd, __pyx_1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1485; goto __pyx_L1;} Py_DECREF(__pyx_1); __pyx_1 = 0; - __pyx_3 = PyObject_GetIter(__pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1480; goto __pyx_L1;} + __pyx_3 = PyObject_GetIter(__pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1485; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; - __pyx_5 = __Pyx_UnpackItem(__pyx_3); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1480; goto __pyx_L1;} + __pyx_5 = __Pyx_UnpackItem(__pyx_3); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1485; goto __pyx_L1;} Py_DECREF(__pyx_v_u); __pyx_v_u = __pyx_5; __pyx_5 = 0; - __pyx_1 = __Pyx_UnpackItem(__pyx_3); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1480; goto __pyx_L1;} + __pyx_1 = __Pyx_UnpackItem(__pyx_3); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1485; goto __pyx_L1;} Py_DECREF(__pyx_v_s); __pyx_v_s = __pyx_1; __pyx_1 = 0; - __pyx_2 = __Pyx_UnpackItem(__pyx_3); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1480; goto __pyx_L1;} + __pyx_2 = __Pyx_UnpackItem(__pyx_3); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1485; goto __pyx_L1;} Py_DECREF(__pyx_v_v); __pyx_v_v = __pyx_2; __pyx_2 = 0; - if (__Pyx_EndUnpack(__pyx_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1480; goto __pyx_L1;} + if (__Pyx_EndUnpack(__pyx_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1485; goto __pyx_L1;} Py_DECREF(__pyx_3); __pyx_3 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1481 */ - __pyx_5 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1481; goto __pyx_L1;} - __pyx_1 = PyObject_GetAttr(__pyx_5, __pyx_n_dot); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1481; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1486 */ + __pyx_5 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1486; goto __pyx_L1;} + __pyx_1 = PyObject_GetAttr(__pyx_5, __pyx_n_dot); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1486; goto __pyx_L1;} Py_DECREF(__pyx_5); __pyx_5 = 0; - __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1481; goto __pyx_L1;} - __pyx_3 = PyObject_GetAttr(__pyx_2, __pyx_n_sqrt); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1481; goto __pyx_L1;} + __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1486; goto __pyx_L1;} + __pyx_3 = PyObject_GetAttr(__pyx_2, __pyx_n_sqrt); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1486; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; - __pyx_5 = PyTuple_New(1); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1481; goto __pyx_L1;} + __pyx_5 = PyTuple_New(1); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1486; goto __pyx_L1;} Py_INCREF(__pyx_v_s); PyTuple_SET_ITEM(__pyx_5, 0, __pyx_v_s); - __pyx_2 = PyObject_CallObject(__pyx_3, __pyx_5); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1481; goto __pyx_L1;} + __pyx_2 = PyObject_CallObject(__pyx_3, __pyx_5); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1486; goto __pyx_L1;} Py_DECREF(__pyx_3); __pyx_3 = 0; Py_DECREF(__pyx_5); __pyx_5 = 0; - __pyx_3 = PyNumber_Multiply(__pyx_v_x, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1481; goto __pyx_L1;} + __pyx_3 = PyNumber_Multiply(__pyx_v_x, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1486; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; - __pyx_5 = PyTuple_New(2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1481; goto __pyx_L1;} + __pyx_5 = PyTuple_New(2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1486; goto __pyx_L1;} PyTuple_SET_ITEM(__pyx_5, 0, __pyx_3); Py_INCREF(__pyx_v_v); PyTuple_SET_ITEM(__pyx_5, 1, __pyx_v_v); __pyx_3 = 0; - __pyx_2 = PyObject_CallObject(__pyx_1, __pyx_5); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1481; goto __pyx_L1;} + __pyx_2 = PyObject_CallObject(__pyx_1, __pyx_5); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1486; goto __pyx_L1;} Py_DECREF(__pyx_1); __pyx_1 = 0; Py_DECREF(__pyx_5); __pyx_5 = 0; Py_DECREF(__pyx_v_x); __pyx_v_x = __pyx_2; __pyx_2 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1484 */ - __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1484; goto __pyx_L1;} - __pyx_1 = PyObject_GetAttr(__pyx_3, __pyx_n_add); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1484; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1489 */ + __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1489; goto __pyx_L1;} + __pyx_1 = PyObject_GetAttr(__pyx_3, __pyx_n_add); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1489; goto __pyx_L1;} Py_DECREF(__pyx_3); __pyx_3 = 0; - __pyx_5 = PyTuple_New(3); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1484; goto __pyx_L1;} + __pyx_5 = PyTuple_New(3); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1489; goto __pyx_L1;} Py_INCREF(__pyx_v_mean); PyTuple_SET_ITEM(__pyx_5, 0, __pyx_v_mean); Py_INCREF(__pyx_v_x); PyTuple_SET_ITEM(__pyx_5, 1, __pyx_v_x); Py_INCREF(__pyx_v_x); PyTuple_SET_ITEM(__pyx_5, 2, __pyx_v_x); - __pyx_2 = PyObject_CallObject(__pyx_1, __pyx_5); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1484; goto __pyx_L1;} + __pyx_2 = PyObject_CallObject(__pyx_1, __pyx_5); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1489; goto __pyx_L1;} Py_DECREF(__pyx_1); __pyx_1 = 0; Py_DECREF(__pyx_5); __pyx_5 = 0; Py_DECREF(__pyx_2); __pyx_2 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1485 */ - __pyx_3 = __Pyx_GetName(__pyx_b, __pyx_n_tuple); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1485; goto __pyx_L1;} - __pyx_1 = PyTuple_New(1); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1485; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1490 */ + __pyx_3 = __Pyx_GetName(__pyx_b, __pyx_n_tuple); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1490; goto __pyx_L1;} + __pyx_1 = PyTuple_New(1); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1490; goto __pyx_L1;} Py_INCREF(__pyx_v_final_shape); PyTuple_SET_ITEM(__pyx_1, 0, __pyx_v_final_shape); - __pyx_5 = PyObject_CallObject(__pyx_3, __pyx_1); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1485; goto __pyx_L1;} + __pyx_5 = PyObject_CallObject(__pyx_3, __pyx_1); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1490; goto __pyx_L1;} Py_DECREF(__pyx_3); __pyx_3 = 0; Py_DECREF(__pyx_1); __pyx_1 = 0; - if (PyObject_SetAttr(__pyx_v_x, __pyx_n_shape, __pyx_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1485; goto __pyx_L1;} + if (PyObject_SetAttr(__pyx_v_x, __pyx_n_shape, __pyx_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1490; goto __pyx_L1;} Py_DECREF(__pyx_5); __pyx_5 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1486 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1491 */ Py_INCREF(__pyx_v_x); __pyx_r = __pyx_v_x; goto __pyx_L0; @@ -8738,54 +8794,54 @@ __pyx_v_shape = Py_None; Py_INCREF(Py_None); __pyx_v_multin = Py_None; Py_INCREF(Py_None); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1504 */ - __pyx_1 = __Pyx_GetName(__pyx_b, __pyx_n_len); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1504; goto __pyx_L1;} - __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1504; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1509 */ + __pyx_1 = __Pyx_GetName(__pyx_b, __pyx_n_len); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1509; goto __pyx_L1;} + __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1509; goto __pyx_L1;} Py_INCREF(__pyx_v_pvals); PyTuple_SET_ITEM(__pyx_2, 0, __pyx_v_pvals); - __pyx_3 = PyObject_CallObject(__pyx_1, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1504; goto __pyx_L1;} + __pyx_3 = PyObject_CallObject(__pyx_1, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1509; goto __pyx_L1;} Py_DECREF(__pyx_1); __pyx_1 = 0; Py_DECREF(__pyx_2); __pyx_2 = 0; - __pyx_4 = PyInt_AsLong(__pyx_3); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1504; goto __pyx_L1;} + __pyx_4 = PyInt_AsLong(__pyx_3); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1509; goto __pyx_L1;} Py_DECREF(__pyx_3); __pyx_3 = 0; __pyx_v_d = __pyx_4; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1505 */ - __pyx_1 = PyArray_ContiguousFromObject(__pyx_v_pvals,NPY_DOUBLE,1,1); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1505; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1510 */ + __pyx_1 = PyArray_ContiguousFromObject(__pyx_v_pvals,NPY_DOUBLE,1,1); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1510; goto __pyx_L1;} Py_INCREF(((PyObject *)((PyArrayObject *)__pyx_1))); Py_DECREF(((PyObject *)arrayObject_parr)); arrayObject_parr = ((PyArrayObject *)__pyx_1); Py_DECREF(__pyx_1); __pyx_1 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1506 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1511 */ __pyx_v_pix = ((double (*))arrayObject_parr->data); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1508 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1513 */ __pyx_5 = (__pyx_f_6mtrand_kahan_sum(__pyx_v_pix,(__pyx_v_d - 1)) > 1.0); if (__pyx_5) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1509 */ - __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1509; goto __pyx_L1;} - __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1509; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1514 */ + __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1514; goto __pyx_L1;} + __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1514; goto __pyx_L1;} Py_INCREF(__pyx_k170p); PyTuple_SET_ITEM(__pyx_3, 0, __pyx_k170p); - __pyx_1 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1509; goto __pyx_L1;} + __pyx_1 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1514; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; Py_DECREF(__pyx_3); __pyx_3 = 0; __Pyx_Raise(__pyx_1, 0, 0); Py_DECREF(__pyx_1); __pyx_1 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1509; goto __pyx_L1;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1514; goto __pyx_L1;} goto __pyx_L2; } __pyx_L2:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1511 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1516 */ __pyx_5 = __pyx_v_size == Py_None; if (__pyx_5) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1512 */ - __pyx_2 = PyInt_FromLong(__pyx_v_d); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1512; goto __pyx_L1;} - __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1512; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1517 */ + __pyx_2 = PyInt_FromLong(__pyx_v_d); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1517; goto __pyx_L1;} + __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1517; goto __pyx_L1;} PyTuple_SET_ITEM(__pyx_3, 0, __pyx_2); __pyx_2 = 0; Py_DECREF(__pyx_v_shape); @@ -8793,22 +8849,22 @@ __pyx_3 = 0; goto __pyx_L3; } - __pyx_1 = __Pyx_GetName(__pyx_b, __pyx_n_type); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1513; goto __pyx_L1;} - __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1513; goto __pyx_L1;} + __pyx_1 = __Pyx_GetName(__pyx_b, __pyx_n_type); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1518; goto __pyx_L1;} + __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1518; goto __pyx_L1;} Py_INCREF(__pyx_v_size); PyTuple_SET_ITEM(__pyx_2, 0, __pyx_v_size); - __pyx_3 = PyObject_CallObject(__pyx_1, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1513; goto __pyx_L1;} + __pyx_3 = PyObject_CallObject(__pyx_1, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1518; goto __pyx_L1;} Py_DECREF(__pyx_1); __pyx_1 = 0; Py_DECREF(__pyx_2); __pyx_2 = 0; - __pyx_1 = __Pyx_GetName(__pyx_b, __pyx_n_int); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1513; goto __pyx_L1;} + __pyx_1 = __Pyx_GetName(__pyx_b, __pyx_n_int); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1518; goto __pyx_L1;} __pyx_5 = __pyx_3 == __pyx_1; Py_DECREF(__pyx_3); __pyx_3 = 0; Py_DECREF(__pyx_1); __pyx_1 = 0; if (__pyx_5) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1514 */ - __pyx_2 = PyInt_FromLong(__pyx_v_d); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1514; goto __pyx_L1;} - __pyx_3 = PyTuple_New(2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1514; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1519 */ + __pyx_2 = PyInt_FromLong(__pyx_v_d); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1519; goto __pyx_L1;} + __pyx_3 = PyTuple_New(2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1519; goto __pyx_L1;} Py_INCREF(__pyx_v_size); PyTuple_SET_ITEM(__pyx_3, 0, __pyx_v_size); PyTuple_SET_ITEM(__pyx_3, 1, __pyx_2); @@ -8820,12 +8876,12 @@ } /*else*/ { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1516 */ - __pyx_1 = PyInt_FromLong(__pyx_v_d); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1516; goto __pyx_L1;} - __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1516; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1521 */ + __pyx_1 = PyInt_FromLong(__pyx_v_d); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1521; goto __pyx_L1;} + __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1521; goto __pyx_L1;} PyTuple_SET_ITEM(__pyx_2, 0, __pyx_1); __pyx_1 = 0; - __pyx_3 = PyNumber_Add(__pyx_v_size, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1516; goto __pyx_L1;} + __pyx_3 = PyNumber_Add(__pyx_v_size, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1521; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; Py_DECREF(__pyx_v_shape); __pyx_v_shape = __pyx_3; @@ -8833,85 +8889,85 @@ } __pyx_L3:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1518 */ - __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1518; goto __pyx_L1;} - __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_n_zeros); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1518; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1523 */ + __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1523; goto __pyx_L1;} + __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_n_zeros); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1523; goto __pyx_L1;} Py_DECREF(__pyx_1); __pyx_1 = 0; - __pyx_3 = __Pyx_GetName(__pyx_b, __pyx_n_int); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1518; goto __pyx_L1;} - __pyx_1 = PyTuple_New(2); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1518; goto __pyx_L1;} + __pyx_3 = __Pyx_GetName(__pyx_b, __pyx_n_int); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1523; goto __pyx_L1;} + __pyx_1 = PyTuple_New(2); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1523; goto __pyx_L1;} Py_INCREF(__pyx_v_shape); PyTuple_SET_ITEM(__pyx_1, 0, __pyx_v_shape); PyTuple_SET_ITEM(__pyx_1, 1, __pyx_3); __pyx_3 = 0; - __pyx_3 = PyObject_CallObject(__pyx_2, __pyx_1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1518; goto __pyx_L1;} + __pyx_3 = PyObject_CallObject(__pyx_2, __pyx_1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1523; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; Py_DECREF(__pyx_1); __pyx_1 = 0; Py_DECREF(__pyx_v_multin); __pyx_v_multin = __pyx_3; __pyx_3 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1519 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1524 */ Py_INCREF(((PyObject *)((PyArrayObject *)__pyx_v_multin))); Py_DECREF(((PyObject *)arrayObject_mnarr)); arrayObject_mnarr = ((PyArrayObject *)__pyx_v_multin); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1520 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1525 */ __pyx_v_mnix = ((long (*))arrayObject_mnarr->data); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1521 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1526 */ __pyx_v_i = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1522 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1527 */ while (1) { __pyx_5 = (__pyx_v_i < PyArray_SIZE(arrayObject_mnarr)); if (!__pyx_5) break; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1523 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1528 */ __pyx_v_Sum = 1.0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1524 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1529 */ __pyx_v_dn = __pyx_v_n; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1525 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1530 */ __pyx_4 = (__pyx_v_d - 1); for (__pyx_v_j = 0; __pyx_v_j < __pyx_4; ++__pyx_v_j) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1526 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1531 */ (__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)); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1527 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1532 */ __pyx_v_dn = (__pyx_v_dn - (__pyx_v_mnix[(__pyx_v_i + __pyx_v_j)])); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1528 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1533 */ __pyx_5 = (__pyx_v_dn <= 0); if (__pyx_5) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1529 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1534 */ goto __pyx_L7; goto __pyx_L8; } __pyx_L8:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1530 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1535 */ __pyx_v_Sum = (__pyx_v_Sum - (__pyx_v_pix[__pyx_v_j])); } __pyx_L7:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1531 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1536 */ __pyx_5 = (__pyx_v_dn > 0); if (__pyx_5) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1532 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1537 */ (__pyx_v_mnix[((__pyx_v_i + __pyx_v_d) - 1)]) = __pyx_v_dn; goto __pyx_L9; } __pyx_L9:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1534 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1539 */ __pyx_v_i = (__pyx_v_i + __pyx_v_d); } - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1536 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1541 */ Py_INCREF(__pyx_v_multin); __pyx_r = __pyx_v_multin; goto __pyx_L0; @@ -8969,35 +9025,35 @@ __pyx_v_shape = Py_None; Py_INCREF(Py_None); __pyx_v_diric = Py_None; Py_INCREF(Py_None); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1593 */ - __pyx_1 = __Pyx_GetName(__pyx_b, __pyx_n_len); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1593; goto __pyx_L1;} - __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1593; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1598 */ + __pyx_1 = __Pyx_GetName(__pyx_b, __pyx_n_len); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1598; goto __pyx_L1;} + __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1598; goto __pyx_L1;} Py_INCREF(__pyx_v_alpha); PyTuple_SET_ITEM(__pyx_2, 0, __pyx_v_alpha); - __pyx_3 = PyObject_CallObject(__pyx_1, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1593; goto __pyx_L1;} + __pyx_3 = PyObject_CallObject(__pyx_1, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1598; goto __pyx_L1;} Py_DECREF(__pyx_1); __pyx_1 = 0; Py_DECREF(__pyx_2); __pyx_2 = 0; - __pyx_4 = PyInt_AsLong(__pyx_3); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1593; goto __pyx_L1;} + __pyx_4 = PyInt_AsLong(__pyx_3); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1598; goto __pyx_L1;} Py_DECREF(__pyx_3); __pyx_3 = 0; __pyx_v_k = __pyx_4; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1594 */ - __pyx_1 = PyArray_ContiguousFromObject(__pyx_v_alpha,NPY_DOUBLE,1,1); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1594; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1599 */ + __pyx_1 = PyArray_ContiguousFromObject(__pyx_v_alpha,NPY_DOUBLE,1,1); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1599; goto __pyx_L1;} Py_INCREF(((PyObject *)((PyArrayObject *)__pyx_1))); Py_DECREF(((PyObject *)__pyx_v_alpha_arr)); __pyx_v_alpha_arr = ((PyArrayObject *)__pyx_1); Py_DECREF(__pyx_1); __pyx_1 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1595 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1600 */ __pyx_v_alpha_data = ((double (*))__pyx_v_alpha_arr->data); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1597 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1602 */ __pyx_5 = __pyx_v_size == Py_None; if (__pyx_5) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1598 */ - __pyx_2 = PyInt_FromLong(__pyx_v_k); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1598; goto __pyx_L1;} - __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1598; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1603 */ + __pyx_2 = PyInt_FromLong(__pyx_v_k); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1603; goto __pyx_L1;} + __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1603; goto __pyx_L1;} PyTuple_SET_ITEM(__pyx_3, 0, __pyx_2); __pyx_2 = 0; Py_DECREF(__pyx_v_shape); @@ -9005,22 +9061,22 @@ __pyx_3 = 0; goto __pyx_L2; } - __pyx_1 = __Pyx_GetName(__pyx_b, __pyx_n_type); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1599; goto __pyx_L1;} - __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1599; goto __pyx_L1;} + __pyx_1 = __Pyx_GetName(__pyx_b, __pyx_n_type); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1604; goto __pyx_L1;} + __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1604; goto __pyx_L1;} Py_INCREF(__pyx_v_size); PyTuple_SET_ITEM(__pyx_2, 0, __pyx_v_size); - __pyx_3 = PyObject_CallObject(__pyx_1, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1599; goto __pyx_L1;} + __pyx_3 = PyObject_CallObject(__pyx_1, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1604; goto __pyx_L1;} Py_DECREF(__pyx_1); __pyx_1 = 0; Py_DECREF(__pyx_2); __pyx_2 = 0; - __pyx_1 = __Pyx_GetName(__pyx_b, __pyx_n_int); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1599; goto __pyx_L1;} + __pyx_1 = __Pyx_GetName(__pyx_b, __pyx_n_int); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1604; goto __pyx_L1;} __pyx_5 = __pyx_3 == __pyx_1; Py_DECREF(__pyx_3); __pyx_3 = 0; Py_DECREF(__pyx_1); __pyx_1 = 0; if (__pyx_5) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1600 */ - __pyx_2 = PyInt_FromLong(__pyx_v_k); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1600; goto __pyx_L1;} - __pyx_3 = PyTuple_New(2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1600; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1605 */ + __pyx_2 = PyInt_FromLong(__pyx_v_k); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1605; goto __pyx_L1;} + __pyx_3 = PyTuple_New(2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1605; goto __pyx_L1;} Py_INCREF(__pyx_v_size); PyTuple_SET_ITEM(__pyx_3, 0, __pyx_v_size); PyTuple_SET_ITEM(__pyx_3, 1, __pyx_2); @@ -9032,12 +9088,12 @@ } /*else*/ { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1602 */ - __pyx_1 = PyInt_FromLong(__pyx_v_k); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1602; goto __pyx_L1;} - __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1602; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1607 */ + __pyx_1 = PyInt_FromLong(__pyx_v_k); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1607; goto __pyx_L1;} + __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1607; goto __pyx_L1;} PyTuple_SET_ITEM(__pyx_2, 0, __pyx_1); __pyx_1 = 0; - __pyx_3 = PyNumber_Add(__pyx_v_size, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1602; goto __pyx_L1;} + __pyx_3 = PyNumber_Add(__pyx_v_size, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1607; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; Py_DECREF(__pyx_v_shape); __pyx_v_shape = __pyx_3; @@ -9045,72 +9101,72 @@ } __pyx_L2:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1604 */ - __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1604; goto __pyx_L1;} - __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_n_zeros); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1604; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1609 */ + __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1609; goto __pyx_L1;} + __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_n_zeros); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1609; goto __pyx_L1;} Py_DECREF(__pyx_1); __pyx_1 = 0; - __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1604; goto __pyx_L1;} - __pyx_1 = PyObject_GetAttr(__pyx_3, __pyx_n_float64); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1604; goto __pyx_L1;} + __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1609; goto __pyx_L1;} + __pyx_1 = PyObject_GetAttr(__pyx_3, __pyx_n_float64); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1609; goto __pyx_L1;} Py_DECREF(__pyx_3); __pyx_3 = 0; - __pyx_3 = PyTuple_New(2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1604; goto __pyx_L1;} + __pyx_3 = PyTuple_New(2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1609; goto __pyx_L1;} Py_INCREF(__pyx_v_shape); PyTuple_SET_ITEM(__pyx_3, 0, __pyx_v_shape); PyTuple_SET_ITEM(__pyx_3, 1, __pyx_1); __pyx_1 = 0; - __pyx_1 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1604; goto __pyx_L1;} + __pyx_1 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1609; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; Py_DECREF(__pyx_3); __pyx_3 = 0; Py_DECREF(__pyx_v_diric); __pyx_v_diric = __pyx_1; __pyx_1 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1605 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1610 */ Py_INCREF(((PyObject *)((PyArrayObject *)__pyx_v_diric))); Py_DECREF(((PyObject *)__pyx_v_val_arr)); __pyx_v_val_arr = ((PyArrayObject *)__pyx_v_diric); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1606 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1611 */ __pyx_v_val_data = ((double (*))__pyx_v_val_arr->data); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1608 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1613 */ __pyx_v_i = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1609 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1614 */ __pyx_v_totsize = PyArray_SIZE(__pyx_v_val_arr); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1610 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1615 */ while (1) { __pyx_5 = (__pyx_v_i < __pyx_v_totsize); if (!__pyx_5) break; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1611 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1616 */ __pyx_v_acc = 0.0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1612 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1617 */ for (__pyx_v_j = 0; __pyx_v_j < __pyx_v_k; ++__pyx_v_j) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1613 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1618 */ (__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])); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1614 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1619 */ __pyx_v_acc = (__pyx_v_acc + (__pyx_v_val_data[(__pyx_v_i + __pyx_v_j)])); } - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1615 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1620 */ __pyx_v_invacc = (1 / __pyx_v_acc); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1616 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1621 */ for (__pyx_v_j = 0; __pyx_v_j < __pyx_v_k; ++__pyx_v_j) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1617 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1622 */ (__pyx_v_val_data[(__pyx_v_i + __pyx_v_j)]) = ((__pyx_v_val_data[(__pyx_v_i + __pyx_v_j)]) * __pyx_v_invacc); } - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1618 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1623 */ __pyx_v_i = (__pyx_v_i + __pyx_v_k); } - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1620 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1625 */ Py_INCREF(__pyx_v_diric); __pyx_r = __pyx_v_diric; goto __pyx_L0; @@ -9156,37 +9212,37 @@ Py_INCREF(__pyx_v_self); Py_INCREF(__pyx_v_x); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1631 */ - __pyx_1 = __Pyx_GetName(__pyx_b, __pyx_n_len); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1631; goto __pyx_L1;} - __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1631; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1636 */ + __pyx_1 = __Pyx_GetName(__pyx_b, __pyx_n_len); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1636; goto __pyx_L1;} + __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1636; goto __pyx_L1;} Py_INCREF(__pyx_v_x); PyTuple_SET_ITEM(__pyx_2, 0, __pyx_v_x); - __pyx_3 = PyObject_CallObject(__pyx_1, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1631; goto __pyx_L1;} + __pyx_3 = PyObject_CallObject(__pyx_1, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1636; goto __pyx_L1;} Py_DECREF(__pyx_1); __pyx_1 = 0; Py_DECREF(__pyx_2); __pyx_2 = 0; - __pyx_1 = PyInt_FromLong(1); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1631; goto __pyx_L1;} - __pyx_2 = PyNumber_Subtract(__pyx_3, __pyx_1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1631; goto __pyx_L1;} + __pyx_1 = PyInt_FromLong(1); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1636; goto __pyx_L1;} + __pyx_2 = PyNumber_Subtract(__pyx_3, __pyx_1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1636; goto __pyx_L1;} Py_DECREF(__pyx_3); __pyx_3 = 0; Py_DECREF(__pyx_1); __pyx_1 = 0; - __pyx_4 = PyInt_AsLong(__pyx_2); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1631; goto __pyx_L1;} + __pyx_4 = PyInt_AsLong(__pyx_2); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1636; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; __pyx_v_i = __pyx_4; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1632 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1637 */ /*try:*/ { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1633 */ - __pyx_3 = __Pyx_GetName(__pyx_b, __pyx_n_len); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1633; goto __pyx_L2;} - __pyx_1 = PyInt_FromLong(0); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1633; goto __pyx_L2;} - __pyx_2 = PyObject_GetItem(__pyx_v_x, __pyx_1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1633; goto __pyx_L2;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1638 */ + __pyx_3 = __Pyx_GetName(__pyx_b, __pyx_n_len); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1638; goto __pyx_L2;} + __pyx_1 = PyInt_FromLong(0); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1638; goto __pyx_L2;} + __pyx_2 = PyObject_GetItem(__pyx_v_x, __pyx_1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1638; goto __pyx_L2;} Py_DECREF(__pyx_1); __pyx_1 = 0; - __pyx_1 = PyTuple_New(1); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1633; goto __pyx_L2;} + __pyx_1 = PyTuple_New(1); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1638; goto __pyx_L2;} PyTuple_SET_ITEM(__pyx_1, 0, __pyx_2); __pyx_2 = 0; - __pyx_2 = PyObject_CallObject(__pyx_3, __pyx_1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1633; goto __pyx_L2;} + __pyx_2 = PyObject_CallObject(__pyx_3, __pyx_1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1638; goto __pyx_L2;} Py_DECREF(__pyx_3); __pyx_3 = 0; Py_DECREF(__pyx_1); __pyx_1 = 0; - __pyx_4 = PyInt_AsLong(__pyx_2); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1633; goto __pyx_L2;} + __pyx_4 = PyInt_AsLong(__pyx_2); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1638; goto __pyx_L2;} Py_DECREF(__pyx_2); __pyx_2 = 0; __pyx_v_j = __pyx_4; } @@ -9196,142 +9252,142 @@ Py_XDECREF(__pyx_1); __pyx_1 = 0; Py_XDECREF(__pyx_2); __pyx_2 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1634 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1639 */ /*except:*/ { __Pyx_AddTraceback("mtrand.shuffle"); - __pyx_3 = __Pyx_GetExcValue(); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1634; goto __pyx_L1;} + __pyx_3 = __Pyx_GetExcValue(); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1639; goto __pyx_L1;} Py_DECREF(__pyx_3); __pyx_3 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1635 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1640 */ __pyx_v_j = 0; goto __pyx_L3; } __pyx_L3:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1637 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1642 */ __pyx_5 = (__pyx_v_j == 0); if (__pyx_5) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1639 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1644 */ while (1) { __pyx_5 = (__pyx_v_i > 0); if (!__pyx_5) break; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1640 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1645 */ __pyx_v_j = rk_interval(__pyx_v_i,((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1641 */ - __pyx_1 = PyInt_FromLong(__pyx_v_j); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1641; goto __pyx_L1;} - __pyx_2 = PyObject_GetItem(__pyx_v_x, __pyx_1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1641; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1646 */ + __pyx_1 = PyInt_FromLong(__pyx_v_j); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1646; goto __pyx_L1;} + __pyx_2 = PyObject_GetItem(__pyx_v_x, __pyx_1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1646; goto __pyx_L1;} Py_DECREF(__pyx_1); __pyx_1 = 0; - __pyx_3 = PyInt_FromLong(__pyx_v_i); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1641; goto __pyx_L1;} - __pyx_1 = PyObject_GetItem(__pyx_v_x, __pyx_3); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1641; goto __pyx_L1;} + __pyx_3 = PyInt_FromLong(__pyx_v_i); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1646; goto __pyx_L1;} + __pyx_1 = PyObject_GetItem(__pyx_v_x, __pyx_3); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1646; goto __pyx_L1;} Py_DECREF(__pyx_3); __pyx_3 = 0; - __pyx_3 = PyInt_FromLong(__pyx_v_i); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1641; goto __pyx_L1;} - if (PyObject_SetItem(__pyx_v_x, __pyx_3, __pyx_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1641; goto __pyx_L1;} + __pyx_3 = PyInt_FromLong(__pyx_v_i); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1646; goto __pyx_L1;} + if (PyObject_SetItem(__pyx_v_x, __pyx_3, __pyx_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1646; goto __pyx_L1;} Py_DECREF(__pyx_3); __pyx_3 = 0; Py_DECREF(__pyx_2); __pyx_2 = 0; - __pyx_2 = PyInt_FromLong(__pyx_v_j); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1641; goto __pyx_L1;} - if (PyObject_SetItem(__pyx_v_x, __pyx_2, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1641; goto __pyx_L1;} + __pyx_2 = PyInt_FromLong(__pyx_v_j); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1646; goto __pyx_L1;} + if (PyObject_SetItem(__pyx_v_x, __pyx_2, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1646; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; Py_DECREF(__pyx_1); __pyx_1 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1642 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1647 */ __pyx_v_i = (__pyx_v_i - 1); } goto __pyx_L4; } /*else*/ { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1645 */ - __pyx_3 = __Pyx_GetName(__pyx_b, __pyx_n_hasattr); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1645; goto __pyx_L1;} - __pyx_1 = PyInt_FromLong(0); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1645; goto __pyx_L1;} - __pyx_2 = PyObject_GetItem(__pyx_v_x, __pyx_1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1645; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1650 */ + __pyx_3 = __Pyx_GetName(__pyx_b, __pyx_n_hasattr); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1650; goto __pyx_L1;} + __pyx_1 = PyInt_FromLong(0); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1650; goto __pyx_L1;} + __pyx_2 = PyObject_GetItem(__pyx_v_x, __pyx_1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1650; goto __pyx_L1;} Py_DECREF(__pyx_1); __pyx_1 = 0; - __pyx_1 = PyTuple_New(2); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1645; goto __pyx_L1;} + __pyx_1 = PyTuple_New(2); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1650; goto __pyx_L1;} PyTuple_SET_ITEM(__pyx_1, 0, __pyx_2); Py_INCREF(__pyx_n_copy); PyTuple_SET_ITEM(__pyx_1, 1, __pyx_n_copy); __pyx_2 = 0; - __pyx_2 = PyObject_CallObject(__pyx_3, __pyx_1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1645; goto __pyx_L1;} + __pyx_2 = PyObject_CallObject(__pyx_3, __pyx_1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1650; goto __pyx_L1;} Py_DECREF(__pyx_3); __pyx_3 = 0; Py_DECREF(__pyx_1); __pyx_1 = 0; - __pyx_5 = PyInt_AsLong(__pyx_2); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1645; goto __pyx_L1;} + __pyx_5 = PyInt_AsLong(__pyx_2); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1650; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; __pyx_v_copy = __pyx_5; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1646 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1651 */ __pyx_5 = __pyx_v_copy; if (__pyx_5) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1647 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1652 */ while (1) { __pyx_5 = (__pyx_v_i > 0); if (!__pyx_5) break; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1648 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1653 */ __pyx_v_j = rk_interval(__pyx_v_i,((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1649 */ - __pyx_3 = PyInt_FromLong(__pyx_v_j); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1649; goto __pyx_L1;} - __pyx_1 = PyObject_GetItem(__pyx_v_x, __pyx_3); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1649; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1654 */ + __pyx_3 = PyInt_FromLong(__pyx_v_j); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1654; goto __pyx_L1;} + __pyx_1 = PyObject_GetItem(__pyx_v_x, __pyx_3); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1654; goto __pyx_L1;} Py_DECREF(__pyx_3); __pyx_3 = 0; - __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_n_copy); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1649; goto __pyx_L1;} + __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_n_copy); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1654; goto __pyx_L1;} Py_DECREF(__pyx_1); __pyx_1 = 0; - __pyx_3 = PyObject_CallObject(__pyx_2, 0); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1649; goto __pyx_L1;} + __pyx_3 = PyObject_CallObject(__pyx_2, 0); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1654; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; - __pyx_1 = PyInt_FromLong(__pyx_v_i); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1649; goto __pyx_L1;} - __pyx_2 = PyObject_GetItem(__pyx_v_x, __pyx_1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1649; goto __pyx_L1;} + __pyx_1 = PyInt_FromLong(__pyx_v_i); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1654; goto __pyx_L1;} + __pyx_2 = PyObject_GetItem(__pyx_v_x, __pyx_1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1654; goto __pyx_L1;} Py_DECREF(__pyx_1); __pyx_1 = 0; - __pyx_1 = PyObject_GetAttr(__pyx_2, __pyx_n_copy); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1649; goto __pyx_L1;} + __pyx_1 = PyObject_GetAttr(__pyx_2, __pyx_n_copy); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1654; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; - __pyx_2 = PyObject_CallObject(__pyx_1, 0); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1649; goto __pyx_L1;} + __pyx_2 = PyObject_CallObject(__pyx_1, 0); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1654; goto __pyx_L1;} Py_DECREF(__pyx_1); __pyx_1 = 0; - __pyx_1 = PyInt_FromLong(__pyx_v_i); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1649; goto __pyx_L1;} - if (PyObject_SetItem(__pyx_v_x, __pyx_1, __pyx_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1649; goto __pyx_L1;} + __pyx_1 = PyInt_FromLong(__pyx_v_i); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1654; goto __pyx_L1;} + if (PyObject_SetItem(__pyx_v_x, __pyx_1, __pyx_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1654; goto __pyx_L1;} Py_DECREF(__pyx_1); __pyx_1 = 0; Py_DECREF(__pyx_3); __pyx_3 = 0; - __pyx_3 = PyInt_FromLong(__pyx_v_j); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1649; goto __pyx_L1;} - if (PyObject_SetItem(__pyx_v_x, __pyx_3, __pyx_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1649; goto __pyx_L1;} + __pyx_3 = PyInt_FromLong(__pyx_v_j); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1654; goto __pyx_L1;} + if (PyObject_SetItem(__pyx_v_x, __pyx_3, __pyx_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1654; goto __pyx_L1;} Py_DECREF(__pyx_3); __pyx_3 = 0; Py_DECREF(__pyx_2); __pyx_2 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1650 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1655 */ __pyx_v_i = (__pyx_v_i - 1); } goto __pyx_L7; } /*else*/ { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1652 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1657 */ while (1) { __pyx_5 = (__pyx_v_i > 0); if (!__pyx_5) break; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1653 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1658 */ __pyx_v_j = rk_interval(__pyx_v_i,((struct __pyx_obj_6mtrand_RandomState *)__pyx_v_self)->internal_state); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1654 */ - __pyx_1 = PyInt_FromLong(__pyx_v_j); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1654; goto __pyx_L1;} - __pyx_2 = PyObject_GetItem(__pyx_v_x, __pyx_1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1654; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1659 */ + __pyx_1 = PyInt_FromLong(__pyx_v_j); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1659; goto __pyx_L1;} + __pyx_2 = PyObject_GetItem(__pyx_v_x, __pyx_1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1659; goto __pyx_L1;} Py_DECREF(__pyx_1); __pyx_1 = 0; - __pyx_3 = PySequence_GetSlice(__pyx_2, 0, 0x7fffffff); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1654; goto __pyx_L1;} + __pyx_3 = PySequence_GetSlice(__pyx_2, 0, 0x7fffffff); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1659; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; - __pyx_1 = PyInt_FromLong(__pyx_v_i); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1654; goto __pyx_L1;} - __pyx_2 = PyObject_GetItem(__pyx_v_x, __pyx_1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1654; goto __pyx_L1;} + __pyx_1 = PyInt_FromLong(__pyx_v_i); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1659; goto __pyx_L1;} + __pyx_2 = PyObject_GetItem(__pyx_v_x, __pyx_1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1659; goto __pyx_L1;} Py_DECREF(__pyx_1); __pyx_1 = 0; - __pyx_1 = PySequence_GetSlice(__pyx_2, 0, 0x7fffffff); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1654; goto __pyx_L1;} + __pyx_1 = PySequence_GetSlice(__pyx_2, 0, 0x7fffffff); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1659; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; - __pyx_2 = PyInt_FromLong(__pyx_v_i); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1654; goto __pyx_L1;} - if (PyObject_SetItem(__pyx_v_x, __pyx_2, __pyx_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1654; goto __pyx_L1;} + __pyx_2 = PyInt_FromLong(__pyx_v_i); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1659; goto __pyx_L1;} + if (PyObject_SetItem(__pyx_v_x, __pyx_2, __pyx_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1659; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; Py_DECREF(__pyx_3); __pyx_3 = 0; - __pyx_3 = PyInt_FromLong(__pyx_v_j); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1654; goto __pyx_L1;} - if (PyObject_SetItem(__pyx_v_x, __pyx_3, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1654; goto __pyx_L1;} + __pyx_3 = PyInt_FromLong(__pyx_v_j); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1659; goto __pyx_L1;} + if (PyObject_SetItem(__pyx_v_x, __pyx_3, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1659; goto __pyx_L1;} Py_DECREF(__pyx_3); __pyx_3 = 0; Py_DECREF(__pyx_1); __pyx_1 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1655 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1660 */ __pyx_v_i = (__pyx_v_i - 1); } } @@ -9373,37 +9429,37 @@ Py_INCREF(__pyx_v_x); __pyx_v_arr = Py_None; Py_INCREF(Py_None); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1663 */ - __pyx_1 = __Pyx_GetName(__pyx_b, __pyx_n_isinstance); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1663; goto __pyx_L1;} - __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_int); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1663; goto __pyx_L1;} - __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1663; goto __pyx_L1;} - __pyx_4 = PyObject_GetAttr(__pyx_3, __pyx_n_integer); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1663; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1668 */ + __pyx_1 = __Pyx_GetName(__pyx_b, __pyx_n_isinstance); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1668; goto __pyx_L1;} + __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_int); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1668; goto __pyx_L1;} + __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1668; goto __pyx_L1;} + __pyx_4 = PyObject_GetAttr(__pyx_3, __pyx_n_integer); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1668; goto __pyx_L1;} Py_DECREF(__pyx_3); __pyx_3 = 0; - __pyx_3 = PyTuple_New(2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1663; goto __pyx_L1;} + __pyx_3 = PyTuple_New(2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1668; goto __pyx_L1;} PyTuple_SET_ITEM(__pyx_3, 0, __pyx_2); PyTuple_SET_ITEM(__pyx_3, 1, __pyx_4); __pyx_2 = 0; __pyx_4 = 0; - __pyx_2 = PyTuple_New(2); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1663; goto __pyx_L1;} + __pyx_2 = PyTuple_New(2); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1668; goto __pyx_L1;} Py_INCREF(__pyx_v_x); PyTuple_SET_ITEM(__pyx_2, 0, __pyx_v_x); PyTuple_SET_ITEM(__pyx_2, 1, __pyx_3); __pyx_3 = 0; - __pyx_4 = PyObject_CallObject(__pyx_1, __pyx_2); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1663; goto __pyx_L1;} + __pyx_4 = PyObject_CallObject(__pyx_1, __pyx_2); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1668; goto __pyx_L1;} Py_DECREF(__pyx_1); __pyx_1 = 0; Py_DECREF(__pyx_2); __pyx_2 = 0; - __pyx_5 = PyObject_IsTrue(__pyx_4); if (__pyx_5 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1663; goto __pyx_L1;} + __pyx_5 = PyObject_IsTrue(__pyx_4); if (__pyx_5 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1668; goto __pyx_L1;} Py_DECREF(__pyx_4); __pyx_4 = 0; if (__pyx_5) { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1664 */ - __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1664; goto __pyx_L1;} - __pyx_1 = PyObject_GetAttr(__pyx_3, __pyx_n_arange); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1664; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1669 */ + __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1669; goto __pyx_L1;} + __pyx_1 = PyObject_GetAttr(__pyx_3, __pyx_n_arange); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1669; goto __pyx_L1;} Py_DECREF(__pyx_3); __pyx_3 = 0; - __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1664; goto __pyx_L1;} + __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1669; goto __pyx_L1;} Py_INCREF(__pyx_v_x); PyTuple_SET_ITEM(__pyx_2, 0, __pyx_v_x); - __pyx_4 = PyObject_CallObject(__pyx_1, __pyx_2); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1664; goto __pyx_L1;} + __pyx_4 = PyObject_CallObject(__pyx_1, __pyx_2); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1669; goto __pyx_L1;} Py_DECREF(__pyx_1); __pyx_1 = 0; Py_DECREF(__pyx_2); __pyx_2 = 0; Py_DECREF(__pyx_v_arr); @@ -9413,14 +9469,14 @@ } /*else*/ { - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1666 */ - __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1666; goto __pyx_L1;} - __pyx_1 = PyObject_GetAttr(__pyx_3, __pyx_n_array); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1666; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1671 */ + __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_n__sp); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1671; goto __pyx_L1;} + __pyx_1 = PyObject_GetAttr(__pyx_3, __pyx_n_array); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1671; goto __pyx_L1;} Py_DECREF(__pyx_3); __pyx_3 = 0; - __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1666; goto __pyx_L1;} + __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1671; goto __pyx_L1;} Py_INCREF(__pyx_v_x); PyTuple_SET_ITEM(__pyx_2, 0, __pyx_v_x); - __pyx_4 = PyObject_CallObject(__pyx_1, __pyx_2); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1666; goto __pyx_L1;} + __pyx_4 = PyObject_CallObject(__pyx_1, __pyx_2); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1671; goto __pyx_L1;} Py_DECREF(__pyx_1); __pyx_1 = 0; Py_DECREF(__pyx_2); __pyx_2 = 0; Py_DECREF(__pyx_v_arr); @@ -9429,17 +9485,17 @@ } __pyx_L2:; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1667 */ - __pyx_3 = PyObject_GetAttr(__pyx_v_self, __pyx_n_shuffle); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1667; goto __pyx_L1;} - __pyx_1 = PyTuple_New(1); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1667; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1672 */ + __pyx_3 = PyObject_GetAttr(__pyx_v_self, __pyx_n_shuffle); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1672; goto __pyx_L1;} + __pyx_1 = PyTuple_New(1); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1672; goto __pyx_L1;} Py_INCREF(__pyx_v_arr); PyTuple_SET_ITEM(__pyx_1, 0, __pyx_v_arr); - __pyx_2 = PyObject_CallObject(__pyx_3, __pyx_1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1667; goto __pyx_L1;} + __pyx_2 = PyObject_CallObject(__pyx_3, __pyx_1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1672; goto __pyx_L1;} Py_DECREF(__pyx_3); __pyx_3 = 0; Py_DECREF(__pyx_1); __pyx_1 = 0; Py_DECREF(__pyx_2); __pyx_2 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1668 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1673 */ Py_INCREF(__pyx_v_arr); __pyx_r = __pyx_v_arr; goto __pyx_L0; @@ -9462,6 +9518,7 @@ static __Pyx_InternTabEntry __pyx_intern_tab[] = { {&__pyx_n_MT19937, "MT19937"}, + {&__pyx_n_TypeError, "TypeError"}, {&__pyx_n_ValueError, "ValueError"}, {&__pyx_n___RandomState_ctor, "__RandomState_ctor"}, {&__pyx_n__rand, "_rand"}, @@ -9471,6 +9528,7 @@ {&__pyx_n_append, "append"}, {&__pyx_n_arange, "arange"}, {&__pyx_n_array, "array"}, + {&__pyx_n_asarray, "asarray"}, {&__pyx_n_beta, "beta"}, {&__pyx_n_binomial, "binomial"}, {&__pyx_n_bytes, "bytes"}, @@ -9537,6 +9595,8 @@ {&__pyx_n_triangular, "triangular"}, {&__pyx_n_tuple, "tuple"}, {&__pyx_n_type, "type"}, + {&__pyx_n_uint, "uint"}, + {&__pyx_n_uint32, "uint32"}, {&__pyx_n_uniform, "uniform"}, {&__pyx_n_vonmises, "vonmises"}, {&__pyx_n_wald, "wald"}, @@ -9894,556 +9954,556 @@ if (PyObject_SetAttrString(__pyx_m, "RandomState", (PyObject *)&__pyx_type_6mtrand_RandomState) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 468; goto __pyx_L1;} __pyx_ptype_6mtrand_RandomState = &__pyx_type_6mtrand_RandomState; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":119 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":119 */ import_array(); - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":121 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":121 */ __pyx_1 = __Pyx_Import(__pyx_n_numpy, 0); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 121; goto __pyx_L1;} if (PyObject_SetAttr(__pyx_m, __pyx_n__sp, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 121; goto __pyx_L1;} Py_DECREF(__pyx_1); __pyx_1 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":488 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":488 */ Py_INCREF(Py_None); __pyx_k2 = Py_None; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":498 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":498 */ Py_INCREF(Py_None); __pyx_k3 = Py_None; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":559 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":564 */ Py_INCREF(Py_None); __pyx_k4 = Py_None; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":566 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":571 */ Py_INCREF(Py_None); __pyx_k5 = Py_None; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":573 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":578 */ Py_INCREF(Py_None); __pyx_k6 = Py_None; Py_INCREF(Py_None); __pyx_k7 = Py_None; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":618 */ - __pyx_1 = PyFloat_FromDouble(0.0); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 618; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":623 */ + __pyx_1 = PyFloat_FromDouble(0.0); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 623; goto __pyx_L1;} __pyx_k8 = __pyx_1; __pyx_1 = 0; - __pyx_2 = PyFloat_FromDouble(1.0); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 618; goto __pyx_L1;} + __pyx_2 = PyFloat_FromDouble(1.0); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 623; goto __pyx_L1;} __pyx_k9 = __pyx_2; __pyx_2 = 0; Py_INCREF(Py_None); __pyx_k10 = Py_None; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":671 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":676 */ Py_INCREF(Py_None); __pyx_k11 = Py_None; Py_INCREF(Py_None); __pyx_k12 = Py_None; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":684 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":689 */ Py_INCREF(Py_None); __pyx_k13 = Py_None; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":691 */ - __pyx_3 = PyFloat_FromDouble(0.0); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 691; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":696 */ + __pyx_3 = PyFloat_FromDouble(0.0); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 696; goto __pyx_L1;} __pyx_k14 = __pyx_3; __pyx_3 = 0; - __pyx_4 = PyFloat_FromDouble(1.0); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 691; goto __pyx_L1;} + __pyx_4 = PyFloat_FromDouble(1.0); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 696; goto __pyx_L1;} __pyx_k15 = __pyx_4; __pyx_4 = 0; Py_INCREF(Py_None); __pyx_k16 = Py_None; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":714 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":719 */ Py_INCREF(Py_None); __pyx_k17 = Py_None; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":741 */ - __pyx_5 = PyFloat_FromDouble(1.0); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 741; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":746 */ + __pyx_5 = PyFloat_FromDouble(1.0); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 746; goto __pyx_L1;} __pyx_k18 = __pyx_5; __pyx_5 = 0; Py_INCREF(Py_None); __pyx_k19 = Py_None; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":762 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":767 */ Py_INCREF(Py_None); __pyx_k20 = Py_None; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":769 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":774 */ Py_INCREF(Py_None); __pyx_k21 = Py_None; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":789 */ - __pyx_6 = PyFloat_FromDouble(1.0); if (!__pyx_6) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 789; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":794 */ + __pyx_6 = PyFloat_FromDouble(1.0); if (!__pyx_6) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 794; goto __pyx_L1;} __pyx_k22 = __pyx_6; __pyx_6 = 0; Py_INCREF(Py_None); __pyx_k23 = Py_None; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":815 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":820 */ Py_INCREF(Py_None); __pyx_k24 = Py_None; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":842 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":847 */ Py_INCREF(Py_None); __pyx_k25 = Py_None; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":878 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":883 */ Py_INCREF(Py_None); __pyx_k26 = Py_None; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":899 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":904 */ Py_INCREF(Py_None); __pyx_k27 = Py_None; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":927 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":932 */ Py_INCREF(Py_None); __pyx_k28 = Py_None; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":934 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":939 */ Py_INCREF(Py_None); __pyx_k29 = Py_None; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":955 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":960 */ Py_INCREF(Py_None); __pyx_k30 = Py_None; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":979 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":984 */ Py_INCREF(Py_None); __pyx_k31 = Py_None; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1000 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1005 */ Py_INCREF(Py_None); __pyx_k32 = Py_None; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1021 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1026 */ Py_INCREF(Py_None); __pyx_k33 = Py_None; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1042 */ - __pyx_7 = PyFloat_FromDouble(0.0); if (!__pyx_7) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1042; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1047 */ + __pyx_7 = PyFloat_FromDouble(0.0); if (!__pyx_7) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1047; goto __pyx_L1;} __pyx_k34 = __pyx_7; __pyx_7 = 0; - __pyx_8 = PyFloat_FromDouble(1.0); if (!__pyx_8) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1042; goto __pyx_L1;} + __pyx_8 = PyFloat_FromDouble(1.0); if (!__pyx_8) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1047; goto __pyx_L1;} __pyx_k35 = __pyx_8; __pyx_8 = 0; Py_INCREF(Py_None); __pyx_k36 = Py_None; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1064 */ - __pyx_9 = PyFloat_FromDouble(0.0); if (!__pyx_9) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1064; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1069 */ + __pyx_9 = PyFloat_FromDouble(0.0); if (!__pyx_9) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1069; goto __pyx_L1;} __pyx_k37 = __pyx_9; __pyx_9 = 0; - __pyx_10 = PyFloat_FromDouble(1.0); if (!__pyx_10) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1064; goto __pyx_L1;} + __pyx_10 = PyFloat_FromDouble(1.0); if (!__pyx_10) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1069; goto __pyx_L1;} __pyx_k38 = __pyx_10; __pyx_10 = 0; Py_INCREF(Py_None); __pyx_k39 = Py_None; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1086 */ - __pyx_11 = PyFloat_FromDouble(0.0); if (!__pyx_11) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1086; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1091 */ + __pyx_11 = PyFloat_FromDouble(0.0); if (!__pyx_11) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1091; goto __pyx_L1;} __pyx_k40 = __pyx_11; __pyx_11 = 0; - __pyx_12 = PyFloat_FromDouble(1.0); if (!__pyx_12) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1086; goto __pyx_L1;} + __pyx_12 = PyFloat_FromDouble(1.0); if (!__pyx_12) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1091; goto __pyx_L1;} __pyx_k41 = __pyx_12; __pyx_12 = 0; Py_INCREF(Py_None); __pyx_k42 = Py_None; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1108 */ - __pyx_13 = PyFloat_FromDouble(0.0); if (!__pyx_13) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1108; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1113 */ + __pyx_13 = PyFloat_FromDouble(0.0); if (!__pyx_13) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1113; goto __pyx_L1;} __pyx_k43 = __pyx_13; __pyx_13 = 0; - __pyx_14 = PyFloat_FromDouble(1.0); if (!__pyx_14) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1108; goto __pyx_L1;} + __pyx_14 = PyFloat_FromDouble(1.0); if (!__pyx_14) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1113; goto __pyx_L1;} __pyx_k44 = __pyx_14; __pyx_14 = 0; Py_INCREF(Py_None); __pyx_k45 = Py_None; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1137 */ - __pyx_15 = PyFloat_FromDouble(1.0); if (!__pyx_15) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1137; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1142 */ + __pyx_15 = PyFloat_FromDouble(1.0); if (!__pyx_15) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1142; goto __pyx_L1;} __pyx_k46 = __pyx_15; __pyx_15 = 0; Py_INCREF(Py_None); __pyx_k47 = Py_None; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1159 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1164 */ Py_INCREF(Py_None); __pyx_k48 = Py_None; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1187 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1192 */ Py_INCREF(Py_None); __pyx_k49 = Py_None; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1224 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1229 */ Py_INCREF(Py_None); __pyx_k50 = Py_None; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1256 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1261 */ Py_INCREF(Py_None); __pyx_k51 = Py_None; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1291 */ - __pyx_16 = PyFloat_FromDouble(1.0); if (!__pyx_16) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1291; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1296 */ + __pyx_16 = PyFloat_FromDouble(1.0); if (!__pyx_16) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1296; goto __pyx_L1;} __pyx_k52 = __pyx_16; __pyx_16 = 0; Py_INCREF(Py_None); __pyx_k53 = Py_None; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1311 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1316 */ Py_INCREF(Py_None); __pyx_k54 = Py_None; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1332 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1337 */ Py_INCREF(Py_None); __pyx_k55 = Py_None; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1359 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1364 */ Py_INCREF(Py_None); __pyx_k56 = Py_None; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1404 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1409 */ Py_INCREF(Py_None); __pyx_k57 = Py_None; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1430 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1435 */ Py_INCREF(Py_None); __pyx_k58 = Py_None; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1488 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1493 */ Py_INCREF(Py_None); __pyx_k59 = Py_None; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1538 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1543 */ Py_INCREF(Py_None); __pyx_k60 = Py_None; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1670 */ - __pyx_17 = PyObject_CallObject(((PyObject*)__pyx_ptype_6mtrand_RandomState), 0); if (!__pyx_17) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1670; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n__rand, __pyx_17) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1670; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1675 */ + __pyx_17 = PyObject_CallObject(((PyObject*)__pyx_ptype_6mtrand_RandomState), 0); if (!__pyx_17) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1675; goto __pyx_L1;} + if (PyObject_SetAttr(__pyx_m, __pyx_n__rand, __pyx_17) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1675; goto __pyx_L1;} Py_DECREF(__pyx_17); __pyx_17 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1671 */ - __pyx_17 = __Pyx_GetName(__pyx_m, __pyx_n__rand); if (!__pyx_17) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1671; goto __pyx_L1;} - __pyx_18 = PyObject_GetAttr(__pyx_17, __pyx_n_seed); if (!__pyx_18) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1671; goto __pyx_L1;} - Py_DECREF(__pyx_17); __pyx_17 = 0; - if (PyObject_SetAttr(__pyx_m, __pyx_n_seed, __pyx_18) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1671; goto __pyx_L1;} - Py_DECREF(__pyx_18); __pyx_18 = 0; - - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1672 */ - __pyx_17 = __Pyx_GetName(__pyx_m, __pyx_n__rand); if (!__pyx_17) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1672; goto __pyx_L1;} - __pyx_18 = PyObject_GetAttr(__pyx_17, __pyx_n_get_state); if (!__pyx_18) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1672; goto __pyx_L1;} - Py_DECREF(__pyx_17); __pyx_17 = 0; - if (PyObject_SetAttr(__pyx_m, __pyx_n_get_state, __pyx_18) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1672; goto __pyx_L1;} - Py_DECREF(__pyx_18); __pyx_18 = 0; - - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1673 */ - __pyx_17 = __Pyx_GetName(__pyx_m, __pyx_n__rand); if (!__pyx_17) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1673; goto __pyx_L1;} - __pyx_18 = PyObject_GetAttr(__pyx_17, __pyx_n_set_state); if (!__pyx_18) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1673; goto __pyx_L1;} - Py_DECREF(__pyx_17); __pyx_17 = 0; - if (PyObject_SetAttr(__pyx_m, __pyx_n_set_state, __pyx_18) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1673; goto __pyx_L1;} - Py_DECREF(__pyx_18); __pyx_18 = 0; - - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1674 */ - __pyx_17 = __Pyx_GetName(__pyx_m, __pyx_n__rand); if (!__pyx_17) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1674; goto __pyx_L1;} - __pyx_18 = PyObject_GetAttr(__pyx_17, __pyx_n_random_sample); if (!__pyx_18) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1674; goto __pyx_L1;} - Py_DECREF(__pyx_17); __pyx_17 = 0; - if (PyObject_SetAttr(__pyx_m, __pyx_n_random_sample, __pyx_18) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1674; goto __pyx_L1;} - Py_DECREF(__pyx_18); __pyx_18 = 0; - - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1675 */ - __pyx_17 = __Pyx_GetName(__pyx_m, __pyx_n__rand); if (!__pyx_17) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1675; goto __pyx_L1;} - __pyx_18 = PyObject_GetAttr(__pyx_17, __pyx_n_randint); if (!__pyx_18) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1675; goto __pyx_L1;} - Py_DECREF(__pyx_17); __pyx_17 = 0; - if (PyObject_SetAttr(__pyx_m, __pyx_n_randint, __pyx_18) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1675; goto __pyx_L1;} - Py_DECREF(__pyx_18); __pyx_18 = 0; - - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1676 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1676 */ __pyx_17 = __Pyx_GetName(__pyx_m, __pyx_n__rand); if (!__pyx_17) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1676; goto __pyx_L1;} - __pyx_18 = PyObject_GetAttr(__pyx_17, __pyx_n_bytes); if (!__pyx_18) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1676; goto __pyx_L1;} + __pyx_18 = PyObject_GetAttr(__pyx_17, __pyx_n_seed); if (!__pyx_18) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1676; goto __pyx_L1;} Py_DECREF(__pyx_17); __pyx_17 = 0; - if (PyObject_SetAttr(__pyx_m, __pyx_n_bytes, __pyx_18) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1676; goto __pyx_L1;} + if (PyObject_SetAttr(__pyx_m, __pyx_n_seed, __pyx_18) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1676; goto __pyx_L1;} Py_DECREF(__pyx_18); __pyx_18 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1677 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1677 */ __pyx_17 = __Pyx_GetName(__pyx_m, __pyx_n__rand); if (!__pyx_17) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1677; goto __pyx_L1;} - __pyx_18 = PyObject_GetAttr(__pyx_17, __pyx_n_uniform); if (!__pyx_18) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1677; goto __pyx_L1;} + __pyx_18 = PyObject_GetAttr(__pyx_17, __pyx_n_get_state); if (!__pyx_18) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1677; goto __pyx_L1;} Py_DECREF(__pyx_17); __pyx_17 = 0; - if (PyObject_SetAttr(__pyx_m, __pyx_n_uniform, __pyx_18) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1677; goto __pyx_L1;} + if (PyObject_SetAttr(__pyx_m, __pyx_n_get_state, __pyx_18) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1677; goto __pyx_L1;} Py_DECREF(__pyx_18); __pyx_18 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1678 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1678 */ __pyx_17 = __Pyx_GetName(__pyx_m, __pyx_n__rand); if (!__pyx_17) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1678; goto __pyx_L1;} - __pyx_18 = PyObject_GetAttr(__pyx_17, __pyx_n_rand); if (!__pyx_18) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1678; goto __pyx_L1;} + __pyx_18 = PyObject_GetAttr(__pyx_17, __pyx_n_set_state); if (!__pyx_18) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1678; goto __pyx_L1;} Py_DECREF(__pyx_17); __pyx_17 = 0; - if (PyObject_SetAttr(__pyx_m, __pyx_n_rand, __pyx_18) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1678; goto __pyx_L1;} + if (PyObject_SetAttr(__pyx_m, __pyx_n_set_state, __pyx_18) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1678; goto __pyx_L1;} Py_DECREF(__pyx_18); __pyx_18 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1679 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1679 */ __pyx_17 = __Pyx_GetName(__pyx_m, __pyx_n__rand); if (!__pyx_17) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1679; goto __pyx_L1;} - __pyx_18 = PyObject_GetAttr(__pyx_17, __pyx_n_randn); if (!__pyx_18) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1679; goto __pyx_L1;} + __pyx_18 = PyObject_GetAttr(__pyx_17, __pyx_n_random_sample); if (!__pyx_18) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1679; goto __pyx_L1;} Py_DECREF(__pyx_17); __pyx_17 = 0; - if (PyObject_SetAttr(__pyx_m, __pyx_n_randn, __pyx_18) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1679; goto __pyx_L1;} + if (PyObject_SetAttr(__pyx_m, __pyx_n_random_sample, __pyx_18) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1679; goto __pyx_L1;} Py_DECREF(__pyx_18); __pyx_18 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1680 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1680 */ __pyx_17 = __Pyx_GetName(__pyx_m, __pyx_n__rand); if (!__pyx_17) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1680; goto __pyx_L1;} - __pyx_18 = PyObject_GetAttr(__pyx_17, __pyx_n_random_integers); if (!__pyx_18) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1680; goto __pyx_L1;} + __pyx_18 = PyObject_GetAttr(__pyx_17, __pyx_n_randint); if (!__pyx_18) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1680; goto __pyx_L1;} Py_DECREF(__pyx_17); __pyx_17 = 0; - if (PyObject_SetAttr(__pyx_m, __pyx_n_random_integers, __pyx_18) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1680; goto __pyx_L1;} + if (PyObject_SetAttr(__pyx_m, __pyx_n_randint, __pyx_18) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1680; goto __pyx_L1;} Py_DECREF(__pyx_18); __pyx_18 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1681 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1681 */ __pyx_17 = __Pyx_GetName(__pyx_m, __pyx_n__rand); if (!__pyx_17) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1681; goto __pyx_L1;} - __pyx_18 = PyObject_GetAttr(__pyx_17, __pyx_n_standard_normal); if (!__pyx_18) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1681; goto __pyx_L1;} + __pyx_18 = PyObject_GetAttr(__pyx_17, __pyx_n_bytes); if (!__pyx_18) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1681; goto __pyx_L1;} Py_DECREF(__pyx_17); __pyx_17 = 0; - if (PyObject_SetAttr(__pyx_m, __pyx_n_standard_normal, __pyx_18) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1681; goto __pyx_L1;} + if (PyObject_SetAttr(__pyx_m, __pyx_n_bytes, __pyx_18) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1681; goto __pyx_L1;} Py_DECREF(__pyx_18); __pyx_18 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1682 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1682 */ __pyx_17 = __Pyx_GetName(__pyx_m, __pyx_n__rand); if (!__pyx_17) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1682; goto __pyx_L1;} - __pyx_18 = PyObject_GetAttr(__pyx_17, __pyx_n_normal); if (!__pyx_18) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1682; goto __pyx_L1;} + __pyx_18 = PyObject_GetAttr(__pyx_17, __pyx_n_uniform); if (!__pyx_18) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1682; goto __pyx_L1;} Py_DECREF(__pyx_17); __pyx_17 = 0; - if (PyObject_SetAttr(__pyx_m, __pyx_n_normal, __pyx_18) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1682; goto __pyx_L1;} + if (PyObject_SetAttr(__pyx_m, __pyx_n_uniform, __pyx_18) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1682; goto __pyx_L1;} Py_DECREF(__pyx_18); __pyx_18 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1683 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1683 */ __pyx_17 = __Pyx_GetName(__pyx_m, __pyx_n__rand); if (!__pyx_17) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1683; goto __pyx_L1;} - __pyx_18 = PyObject_GetAttr(__pyx_17, __pyx_n_beta); if (!__pyx_18) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1683; goto __pyx_L1;} + __pyx_18 = PyObject_GetAttr(__pyx_17, __pyx_n_rand); if (!__pyx_18) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1683; goto __pyx_L1;} Py_DECREF(__pyx_17); __pyx_17 = 0; - if (PyObject_SetAttr(__pyx_m, __pyx_n_beta, __pyx_18) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1683; goto __pyx_L1;} + if (PyObject_SetAttr(__pyx_m, __pyx_n_rand, __pyx_18) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1683; goto __pyx_L1;} Py_DECREF(__pyx_18); __pyx_18 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1684 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1684 */ __pyx_17 = __Pyx_GetName(__pyx_m, __pyx_n__rand); if (!__pyx_17) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1684; goto __pyx_L1;} - __pyx_18 = PyObject_GetAttr(__pyx_17, __pyx_n_exponential); if (!__pyx_18) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1684; goto __pyx_L1;} + __pyx_18 = PyObject_GetAttr(__pyx_17, __pyx_n_randn); if (!__pyx_18) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1684; goto __pyx_L1;} Py_DECREF(__pyx_17); __pyx_17 = 0; - if (PyObject_SetAttr(__pyx_m, __pyx_n_exponential, __pyx_18) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1684; goto __pyx_L1;} + if (PyObject_SetAttr(__pyx_m, __pyx_n_randn, __pyx_18) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1684; goto __pyx_L1;} Py_DECREF(__pyx_18); __pyx_18 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1685 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1685 */ __pyx_17 = __Pyx_GetName(__pyx_m, __pyx_n__rand); if (!__pyx_17) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1685; goto __pyx_L1;} - __pyx_18 = PyObject_GetAttr(__pyx_17, __pyx_n_standard_exponential); if (!__pyx_18) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1685; goto __pyx_L1;} + __pyx_18 = PyObject_GetAttr(__pyx_17, __pyx_n_random_integers); if (!__pyx_18) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1685; goto __pyx_L1;} Py_DECREF(__pyx_17); __pyx_17 = 0; - if (PyObject_SetAttr(__pyx_m, __pyx_n_standard_exponential, __pyx_18) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1685; goto __pyx_L1;} + if (PyObject_SetAttr(__pyx_m, __pyx_n_random_integers, __pyx_18) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1685; goto __pyx_L1;} Py_DECREF(__pyx_18); __pyx_18 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1686 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1686 */ __pyx_17 = __Pyx_GetName(__pyx_m, __pyx_n__rand); if (!__pyx_17) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1686; goto __pyx_L1;} - __pyx_18 = PyObject_GetAttr(__pyx_17, __pyx_n_standard_gamma); if (!__pyx_18) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1686; goto __pyx_L1;} + __pyx_18 = PyObject_GetAttr(__pyx_17, __pyx_n_standard_normal); if (!__pyx_18) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1686; goto __pyx_L1;} Py_DECREF(__pyx_17); __pyx_17 = 0; - if (PyObject_SetAttr(__pyx_m, __pyx_n_standard_gamma, __pyx_18) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1686; goto __pyx_L1;} + if (PyObject_SetAttr(__pyx_m, __pyx_n_standard_normal, __pyx_18) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1686; goto __pyx_L1;} Py_DECREF(__pyx_18); __pyx_18 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1687 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1687 */ __pyx_17 = __Pyx_GetName(__pyx_m, __pyx_n__rand); if (!__pyx_17) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1687; goto __pyx_L1;} - __pyx_18 = PyObject_GetAttr(__pyx_17, __pyx_n_gamma); if (!__pyx_18) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1687; goto __pyx_L1;} + __pyx_18 = PyObject_GetAttr(__pyx_17, __pyx_n_normal); if (!__pyx_18) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1687; goto __pyx_L1;} Py_DECREF(__pyx_17); __pyx_17 = 0; - if (PyObject_SetAttr(__pyx_m, __pyx_n_gamma, __pyx_18) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1687; goto __pyx_L1;} + if (PyObject_SetAttr(__pyx_m, __pyx_n_normal, __pyx_18) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1687; goto __pyx_L1;} Py_DECREF(__pyx_18); __pyx_18 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1688 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1688 */ __pyx_17 = __Pyx_GetName(__pyx_m, __pyx_n__rand); if (!__pyx_17) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1688; goto __pyx_L1;} - __pyx_18 = PyObject_GetAttr(__pyx_17, __pyx_n_f); if (!__pyx_18) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1688; goto __pyx_L1;} + __pyx_18 = PyObject_GetAttr(__pyx_17, __pyx_n_beta); if (!__pyx_18) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1688; goto __pyx_L1;} Py_DECREF(__pyx_17); __pyx_17 = 0; - if (PyObject_SetAttr(__pyx_m, __pyx_n_f, __pyx_18) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1688; goto __pyx_L1;} + if (PyObject_SetAttr(__pyx_m, __pyx_n_beta, __pyx_18) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1688; goto __pyx_L1;} Py_DECREF(__pyx_18); __pyx_18 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1689 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1689 */ __pyx_17 = __Pyx_GetName(__pyx_m, __pyx_n__rand); if (!__pyx_17) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1689; goto __pyx_L1;} - __pyx_18 = PyObject_GetAttr(__pyx_17, __pyx_n_noncentral_f); if (!__pyx_18) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1689; goto __pyx_L1;} + __pyx_18 = PyObject_GetAttr(__pyx_17, __pyx_n_exponential); if (!__pyx_18) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1689; goto __pyx_L1;} Py_DECREF(__pyx_17); __pyx_17 = 0; - if (PyObject_SetAttr(__pyx_m, __pyx_n_noncentral_f, __pyx_18) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1689; goto __pyx_L1;} + if (PyObject_SetAttr(__pyx_m, __pyx_n_exponential, __pyx_18) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1689; goto __pyx_L1;} Py_DECREF(__pyx_18); __pyx_18 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1690 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1690 */ __pyx_17 = __Pyx_GetName(__pyx_m, __pyx_n__rand); if (!__pyx_17) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1690; goto __pyx_L1;} - __pyx_18 = PyObject_GetAttr(__pyx_17, __pyx_n_chisquare); if (!__pyx_18) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1690; goto __pyx_L1;} + __pyx_18 = PyObject_GetAttr(__pyx_17, __pyx_n_standard_exponential); if (!__pyx_18) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1690; goto __pyx_L1;} Py_DECREF(__pyx_17); __pyx_17 = 0; - if (PyObject_SetAttr(__pyx_m, __pyx_n_chisquare, __pyx_18) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1690; goto __pyx_L1;} + if (PyObject_SetAttr(__pyx_m, __pyx_n_standard_exponential, __pyx_18) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1690; goto __pyx_L1;} Py_DECREF(__pyx_18); __pyx_18 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1691 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1691 */ __pyx_17 = __Pyx_GetName(__pyx_m, __pyx_n__rand); if (!__pyx_17) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1691; goto __pyx_L1;} - __pyx_18 = PyObject_GetAttr(__pyx_17, __pyx_n_noncentral_chisquare); if (!__pyx_18) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1691; goto __pyx_L1;} + __pyx_18 = PyObject_GetAttr(__pyx_17, __pyx_n_standard_gamma); if (!__pyx_18) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1691; goto __pyx_L1;} Py_DECREF(__pyx_17); __pyx_17 = 0; - if (PyObject_SetAttr(__pyx_m, __pyx_n_noncentral_chisquare, __pyx_18) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1691; goto __pyx_L1;} + if (PyObject_SetAttr(__pyx_m, __pyx_n_standard_gamma, __pyx_18) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1691; goto __pyx_L1;} Py_DECREF(__pyx_18); __pyx_18 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1692 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1692 */ __pyx_17 = __Pyx_GetName(__pyx_m, __pyx_n__rand); if (!__pyx_17) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1692; goto __pyx_L1;} - __pyx_18 = PyObject_GetAttr(__pyx_17, __pyx_n_standard_cauchy); if (!__pyx_18) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1692; goto __pyx_L1;} + __pyx_18 = PyObject_GetAttr(__pyx_17, __pyx_n_gamma); if (!__pyx_18) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1692; goto __pyx_L1;} Py_DECREF(__pyx_17); __pyx_17 = 0; - if (PyObject_SetAttr(__pyx_m, __pyx_n_standard_cauchy, __pyx_18) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1692; goto __pyx_L1;} + if (PyObject_SetAttr(__pyx_m, __pyx_n_gamma, __pyx_18) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1692; goto __pyx_L1;} Py_DECREF(__pyx_18); __pyx_18 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1693 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1693 */ __pyx_17 = __Pyx_GetName(__pyx_m, __pyx_n__rand); if (!__pyx_17) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1693; goto __pyx_L1;} - __pyx_18 = PyObject_GetAttr(__pyx_17, __pyx_n_standard_t); if (!__pyx_18) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1693; goto __pyx_L1;} + __pyx_18 = PyObject_GetAttr(__pyx_17, __pyx_n_f); if (!__pyx_18) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1693; goto __pyx_L1;} Py_DECREF(__pyx_17); __pyx_17 = 0; - if (PyObject_SetAttr(__pyx_m, __pyx_n_standard_t, __pyx_18) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1693; goto __pyx_L1;} + if (PyObject_SetAttr(__pyx_m, __pyx_n_f, __pyx_18) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1693; goto __pyx_L1;} Py_DECREF(__pyx_18); __pyx_18 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1694 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1694 */ __pyx_17 = __Pyx_GetName(__pyx_m, __pyx_n__rand); if (!__pyx_17) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1694; goto __pyx_L1;} - __pyx_18 = PyObject_GetAttr(__pyx_17, __pyx_n_vonmises); if (!__pyx_18) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1694; goto __pyx_L1;} + __pyx_18 = PyObject_GetAttr(__pyx_17, __pyx_n_noncentral_f); if (!__pyx_18) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1694; goto __pyx_L1;} Py_DECREF(__pyx_17); __pyx_17 = 0; - if (PyObject_SetAttr(__pyx_m, __pyx_n_vonmises, __pyx_18) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1694; goto __pyx_L1;} + if (PyObject_SetAttr(__pyx_m, __pyx_n_noncentral_f, __pyx_18) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1694; goto __pyx_L1;} Py_DECREF(__pyx_18); __pyx_18 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1695 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1695 */ __pyx_17 = __Pyx_GetName(__pyx_m, __pyx_n__rand); if (!__pyx_17) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1695; goto __pyx_L1;} - __pyx_18 = PyObject_GetAttr(__pyx_17, __pyx_n_pareto); if (!__pyx_18) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1695; goto __pyx_L1;} + __pyx_18 = PyObject_GetAttr(__pyx_17, __pyx_n_chisquare); if (!__pyx_18) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1695; goto __pyx_L1;} Py_DECREF(__pyx_17); __pyx_17 = 0; - if (PyObject_SetAttr(__pyx_m, __pyx_n_pareto, __pyx_18) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1695; goto __pyx_L1;} + if (PyObject_SetAttr(__pyx_m, __pyx_n_chisquare, __pyx_18) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1695; goto __pyx_L1;} Py_DECREF(__pyx_18); __pyx_18 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1696 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1696 */ __pyx_17 = __Pyx_GetName(__pyx_m, __pyx_n__rand); if (!__pyx_17) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1696; goto __pyx_L1;} - __pyx_18 = PyObject_GetAttr(__pyx_17, __pyx_n_weibull); if (!__pyx_18) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1696; goto __pyx_L1;} + __pyx_18 = PyObject_GetAttr(__pyx_17, __pyx_n_noncentral_chisquare); if (!__pyx_18) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1696; goto __pyx_L1;} Py_DECREF(__pyx_17); __pyx_17 = 0; - if (PyObject_SetAttr(__pyx_m, __pyx_n_weibull, __pyx_18) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1696; goto __pyx_L1;} + if (PyObject_SetAttr(__pyx_m, __pyx_n_noncentral_chisquare, __pyx_18) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1696; goto __pyx_L1;} Py_DECREF(__pyx_18); __pyx_18 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1697 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1697 */ __pyx_17 = __Pyx_GetName(__pyx_m, __pyx_n__rand); if (!__pyx_17) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1697; goto __pyx_L1;} - __pyx_18 = PyObject_GetAttr(__pyx_17, __pyx_n_power); if (!__pyx_18) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1697; goto __pyx_L1;} + __pyx_18 = PyObject_GetAttr(__pyx_17, __pyx_n_standard_cauchy); if (!__pyx_18) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1697; goto __pyx_L1;} Py_DECREF(__pyx_17); __pyx_17 = 0; - if (PyObject_SetAttr(__pyx_m, __pyx_n_power, __pyx_18) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1697; goto __pyx_L1;} + if (PyObject_SetAttr(__pyx_m, __pyx_n_standard_cauchy, __pyx_18) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1697; goto __pyx_L1;} Py_DECREF(__pyx_18); __pyx_18 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1698 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1698 */ __pyx_17 = __Pyx_GetName(__pyx_m, __pyx_n__rand); if (!__pyx_17) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1698; goto __pyx_L1;} - __pyx_18 = PyObject_GetAttr(__pyx_17, __pyx_n_laplace); if (!__pyx_18) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1698; goto __pyx_L1;} + __pyx_18 = PyObject_GetAttr(__pyx_17, __pyx_n_standard_t); if (!__pyx_18) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1698; goto __pyx_L1;} Py_DECREF(__pyx_17); __pyx_17 = 0; - if (PyObject_SetAttr(__pyx_m, __pyx_n_laplace, __pyx_18) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1698; goto __pyx_L1;} + if (PyObject_SetAttr(__pyx_m, __pyx_n_standard_t, __pyx_18) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1698; goto __pyx_L1;} Py_DECREF(__pyx_18); __pyx_18 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1699 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1699 */ __pyx_17 = __Pyx_GetName(__pyx_m, __pyx_n__rand); if (!__pyx_17) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1699; goto __pyx_L1;} - __pyx_18 = PyObject_GetAttr(__pyx_17, __pyx_n_gumbel); if (!__pyx_18) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1699; goto __pyx_L1;} + __pyx_18 = PyObject_GetAttr(__pyx_17, __pyx_n_vonmises); if (!__pyx_18) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1699; goto __pyx_L1;} Py_DECREF(__pyx_17); __pyx_17 = 0; - if (PyObject_SetAttr(__pyx_m, __pyx_n_gumbel, __pyx_18) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1699; goto __pyx_L1;} + if (PyObject_SetAttr(__pyx_m, __pyx_n_vonmises, __pyx_18) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1699; goto __pyx_L1;} Py_DECREF(__pyx_18); __pyx_18 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1700 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1700 */ __pyx_17 = __Pyx_GetName(__pyx_m, __pyx_n__rand); if (!__pyx_17) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1700; goto __pyx_L1;} - __pyx_18 = PyObject_GetAttr(__pyx_17, __pyx_n_logistic); if (!__pyx_18) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1700; goto __pyx_L1;} + __pyx_18 = PyObject_GetAttr(__pyx_17, __pyx_n_pareto); if (!__pyx_18) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1700; goto __pyx_L1;} Py_DECREF(__pyx_17); __pyx_17 = 0; - if (PyObject_SetAttr(__pyx_m, __pyx_n_logistic, __pyx_18) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1700; goto __pyx_L1;} + if (PyObject_SetAttr(__pyx_m, __pyx_n_pareto, __pyx_18) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1700; goto __pyx_L1;} Py_DECREF(__pyx_18); __pyx_18 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1701 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1701 */ __pyx_17 = __Pyx_GetName(__pyx_m, __pyx_n__rand); if (!__pyx_17) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1701; goto __pyx_L1;} - __pyx_18 = PyObject_GetAttr(__pyx_17, __pyx_n_lognormal); if (!__pyx_18) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1701; goto __pyx_L1;} + __pyx_18 = PyObject_GetAttr(__pyx_17, __pyx_n_weibull); if (!__pyx_18) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1701; goto __pyx_L1;} Py_DECREF(__pyx_17); __pyx_17 = 0; - if (PyObject_SetAttr(__pyx_m, __pyx_n_lognormal, __pyx_18) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1701; goto __pyx_L1;} + if (PyObject_SetAttr(__pyx_m, __pyx_n_weibull, __pyx_18) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1701; goto __pyx_L1;} Py_DECREF(__pyx_18); __pyx_18 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1702 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1702 */ __pyx_17 = __Pyx_GetName(__pyx_m, __pyx_n__rand); if (!__pyx_17) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1702; goto __pyx_L1;} - __pyx_18 = PyObject_GetAttr(__pyx_17, __pyx_n_rayleigh); if (!__pyx_18) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1702; goto __pyx_L1;} + __pyx_18 = PyObject_GetAttr(__pyx_17, __pyx_n_power); if (!__pyx_18) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1702; goto __pyx_L1;} Py_DECREF(__pyx_17); __pyx_17 = 0; - if (PyObject_SetAttr(__pyx_m, __pyx_n_rayleigh, __pyx_18) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1702; goto __pyx_L1;} + if (PyObject_SetAttr(__pyx_m, __pyx_n_power, __pyx_18) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1702; goto __pyx_L1;} Py_DECREF(__pyx_18); __pyx_18 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1703 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1703 */ __pyx_17 = __Pyx_GetName(__pyx_m, __pyx_n__rand); if (!__pyx_17) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1703; goto __pyx_L1;} - __pyx_18 = PyObject_GetAttr(__pyx_17, __pyx_n_wald); if (!__pyx_18) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1703; goto __pyx_L1;} + __pyx_18 = PyObject_GetAttr(__pyx_17, __pyx_n_laplace); if (!__pyx_18) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1703; goto __pyx_L1;} Py_DECREF(__pyx_17); __pyx_17 = 0; - if (PyObject_SetAttr(__pyx_m, __pyx_n_wald, __pyx_18) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1703; goto __pyx_L1;} + if (PyObject_SetAttr(__pyx_m, __pyx_n_laplace, __pyx_18) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1703; goto __pyx_L1;} Py_DECREF(__pyx_18); __pyx_18 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1704 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1704 */ __pyx_17 = __Pyx_GetName(__pyx_m, __pyx_n__rand); if (!__pyx_17) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1704; goto __pyx_L1;} - __pyx_18 = PyObject_GetAttr(__pyx_17, __pyx_n_triangular); if (!__pyx_18) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1704; goto __pyx_L1;} + __pyx_18 = PyObject_GetAttr(__pyx_17, __pyx_n_gumbel); if (!__pyx_18) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1704; goto __pyx_L1;} Py_DECREF(__pyx_17); __pyx_17 = 0; - if (PyObject_SetAttr(__pyx_m, __pyx_n_triangular, __pyx_18) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1704; goto __pyx_L1;} + if (PyObject_SetAttr(__pyx_m, __pyx_n_gumbel, __pyx_18) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1704; goto __pyx_L1;} Py_DECREF(__pyx_18); __pyx_18 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1706 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1705 */ + __pyx_17 = __Pyx_GetName(__pyx_m, __pyx_n__rand); if (!__pyx_17) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1705; goto __pyx_L1;} + __pyx_18 = PyObject_GetAttr(__pyx_17, __pyx_n_logistic); if (!__pyx_18) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1705; goto __pyx_L1;} + Py_DECREF(__pyx_17); __pyx_17 = 0; + if (PyObject_SetAttr(__pyx_m, __pyx_n_logistic, __pyx_18) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1705; goto __pyx_L1;} + Py_DECREF(__pyx_18); __pyx_18 = 0; + + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1706 */ __pyx_17 = __Pyx_GetName(__pyx_m, __pyx_n__rand); if (!__pyx_17) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1706; goto __pyx_L1;} - __pyx_18 = PyObject_GetAttr(__pyx_17, __pyx_n_binomial); if (!__pyx_18) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1706; goto __pyx_L1;} + __pyx_18 = PyObject_GetAttr(__pyx_17, __pyx_n_lognormal); if (!__pyx_18) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1706; goto __pyx_L1;} Py_DECREF(__pyx_17); __pyx_17 = 0; - if (PyObject_SetAttr(__pyx_m, __pyx_n_binomial, __pyx_18) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1706; goto __pyx_L1;} + if (PyObject_SetAttr(__pyx_m, __pyx_n_lognormal, __pyx_18) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1706; goto __pyx_L1;} Py_DECREF(__pyx_18); __pyx_18 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1707 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1707 */ __pyx_17 = __Pyx_GetName(__pyx_m, __pyx_n__rand); if (!__pyx_17) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1707; goto __pyx_L1;} - __pyx_18 = PyObject_GetAttr(__pyx_17, __pyx_n_negative_binomial); if (!__pyx_18) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1707; goto __pyx_L1;} + __pyx_18 = PyObject_GetAttr(__pyx_17, __pyx_n_rayleigh); if (!__pyx_18) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1707; goto __pyx_L1;} Py_DECREF(__pyx_17); __pyx_17 = 0; - if (PyObject_SetAttr(__pyx_m, __pyx_n_negative_binomial, __pyx_18) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1707; goto __pyx_L1;} + if (PyObject_SetAttr(__pyx_m, __pyx_n_rayleigh, __pyx_18) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1707; goto __pyx_L1;} Py_DECREF(__pyx_18); __pyx_18 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1708 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1708 */ __pyx_17 = __Pyx_GetName(__pyx_m, __pyx_n__rand); if (!__pyx_17) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1708; goto __pyx_L1;} - __pyx_18 = PyObject_GetAttr(__pyx_17, __pyx_n_poisson); if (!__pyx_18) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1708; goto __pyx_L1;} + __pyx_18 = PyObject_GetAttr(__pyx_17, __pyx_n_wald); if (!__pyx_18) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1708; goto __pyx_L1;} Py_DECREF(__pyx_17); __pyx_17 = 0; - if (PyObject_SetAttr(__pyx_m, __pyx_n_poisson, __pyx_18) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1708; goto __pyx_L1;} + if (PyObject_SetAttr(__pyx_m, __pyx_n_wald, __pyx_18) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1708; goto __pyx_L1;} Py_DECREF(__pyx_18); __pyx_18 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1709 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1709 */ __pyx_17 = __Pyx_GetName(__pyx_m, __pyx_n__rand); if (!__pyx_17) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1709; goto __pyx_L1;} - __pyx_18 = PyObject_GetAttr(__pyx_17, __pyx_n_zipf); if (!__pyx_18) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1709; goto __pyx_L1;} + __pyx_18 = PyObject_GetAttr(__pyx_17, __pyx_n_triangular); if (!__pyx_18) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1709; goto __pyx_L1;} Py_DECREF(__pyx_17); __pyx_17 = 0; - if (PyObject_SetAttr(__pyx_m, __pyx_n_zipf, __pyx_18) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1709; goto __pyx_L1;} + if (PyObject_SetAttr(__pyx_m, __pyx_n_triangular, __pyx_18) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1709; goto __pyx_L1;} Py_DECREF(__pyx_18); __pyx_18 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1710 */ - __pyx_17 = __Pyx_GetName(__pyx_m, __pyx_n__rand); if (!__pyx_17) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1710; goto __pyx_L1;} - __pyx_18 = PyObject_GetAttr(__pyx_17, __pyx_n_geometric); if (!__pyx_18) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1710; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1711 */ + __pyx_17 = __Pyx_GetName(__pyx_m, __pyx_n__rand); if (!__pyx_17) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1711; goto __pyx_L1;} + __pyx_18 = PyObject_GetAttr(__pyx_17, __pyx_n_binomial); if (!__pyx_18) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1711; goto __pyx_L1;} Py_DECREF(__pyx_17); __pyx_17 = 0; - if (PyObject_SetAttr(__pyx_m, __pyx_n_geometric, __pyx_18) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1710; goto __pyx_L1;} + if (PyObject_SetAttr(__pyx_m, __pyx_n_binomial, __pyx_18) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1711; goto __pyx_L1;} Py_DECREF(__pyx_18); __pyx_18 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1711 */ - __pyx_17 = __Pyx_GetName(__pyx_m, __pyx_n__rand); if (!__pyx_17) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1711; goto __pyx_L1;} - __pyx_18 = PyObject_GetAttr(__pyx_17, __pyx_n_hypergeometric); if (!__pyx_18) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1711; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1712 */ + __pyx_17 = __Pyx_GetName(__pyx_m, __pyx_n__rand); if (!__pyx_17) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1712; goto __pyx_L1;} + __pyx_18 = PyObject_GetAttr(__pyx_17, __pyx_n_negative_binomial); if (!__pyx_18) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1712; goto __pyx_L1;} Py_DECREF(__pyx_17); __pyx_17 = 0; - if (PyObject_SetAttr(__pyx_m, __pyx_n_hypergeometric, __pyx_18) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1711; goto __pyx_L1;} + if (PyObject_SetAttr(__pyx_m, __pyx_n_negative_binomial, __pyx_18) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1712; goto __pyx_L1;} Py_DECREF(__pyx_18); __pyx_18 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1712 */ - __pyx_17 = __Pyx_GetName(__pyx_m, __pyx_n__rand); if (!__pyx_17) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1712; goto __pyx_L1;} - __pyx_18 = PyObject_GetAttr(__pyx_17, __pyx_n_logseries); if (!__pyx_18) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1712; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1713 */ + __pyx_17 = __Pyx_GetName(__pyx_m, __pyx_n__rand); if (!__pyx_17) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1713; goto __pyx_L1;} + __pyx_18 = PyObject_GetAttr(__pyx_17, __pyx_n_poisson); if (!__pyx_18) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1713; goto __pyx_L1;} Py_DECREF(__pyx_17); __pyx_17 = 0; - if (PyObject_SetAttr(__pyx_m, __pyx_n_logseries, __pyx_18) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1712; goto __pyx_L1;} + if (PyObject_SetAttr(__pyx_m, __pyx_n_poisson, __pyx_18) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1713; goto __pyx_L1;} Py_DECREF(__pyx_18); __pyx_18 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1714 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1714 */ __pyx_17 = __Pyx_GetName(__pyx_m, __pyx_n__rand); if (!__pyx_17) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1714; goto __pyx_L1;} - __pyx_18 = PyObject_GetAttr(__pyx_17, __pyx_n_multivariate_normal); if (!__pyx_18) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1714; goto __pyx_L1;} + __pyx_18 = PyObject_GetAttr(__pyx_17, __pyx_n_zipf); if (!__pyx_18) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1714; goto __pyx_L1;} Py_DECREF(__pyx_17); __pyx_17 = 0; - if (PyObject_SetAttr(__pyx_m, __pyx_n_multivariate_normal, __pyx_18) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1714; goto __pyx_L1;} + if (PyObject_SetAttr(__pyx_m, __pyx_n_zipf, __pyx_18) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1714; goto __pyx_L1;} Py_DECREF(__pyx_18); __pyx_18 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1715 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1715 */ __pyx_17 = __Pyx_GetName(__pyx_m, __pyx_n__rand); if (!__pyx_17) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1715; goto __pyx_L1;} - __pyx_18 = PyObject_GetAttr(__pyx_17, __pyx_n_multinomial); if (!__pyx_18) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1715; goto __pyx_L1;} + __pyx_18 = PyObject_GetAttr(__pyx_17, __pyx_n_geometric); if (!__pyx_18) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1715; goto __pyx_L1;} Py_DECREF(__pyx_17); __pyx_17 = 0; - if (PyObject_SetAttr(__pyx_m, __pyx_n_multinomial, __pyx_18) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1715; goto __pyx_L1;} + if (PyObject_SetAttr(__pyx_m, __pyx_n_geometric, __pyx_18) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1715; goto __pyx_L1;} Py_DECREF(__pyx_18); __pyx_18 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1716 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1716 */ __pyx_17 = __Pyx_GetName(__pyx_m, __pyx_n__rand); if (!__pyx_17) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1716; goto __pyx_L1;} - __pyx_18 = PyObject_GetAttr(__pyx_17, __pyx_n_dirichlet); if (!__pyx_18) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1716; goto __pyx_L1;} + __pyx_18 = PyObject_GetAttr(__pyx_17, __pyx_n_hypergeometric); if (!__pyx_18) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1716; goto __pyx_L1;} Py_DECREF(__pyx_17); __pyx_17 = 0; - if (PyObject_SetAttr(__pyx_m, __pyx_n_dirichlet, __pyx_18) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1716; goto __pyx_L1;} + if (PyObject_SetAttr(__pyx_m, __pyx_n_hypergeometric, __pyx_18) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1716; goto __pyx_L1;} Py_DECREF(__pyx_18); __pyx_18 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1718 */ - __pyx_17 = __Pyx_GetName(__pyx_m, __pyx_n__rand); if (!__pyx_17) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1718; goto __pyx_L1;} - __pyx_18 = PyObject_GetAttr(__pyx_17, __pyx_n_shuffle); if (!__pyx_18) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1718; goto __pyx_L1;} + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1717 */ + __pyx_17 = __Pyx_GetName(__pyx_m, __pyx_n__rand); if (!__pyx_17) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1717; goto __pyx_L1;} + __pyx_18 = PyObject_GetAttr(__pyx_17, __pyx_n_logseries); if (!__pyx_18) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1717; goto __pyx_L1;} Py_DECREF(__pyx_17); __pyx_17 = 0; - if (PyObject_SetAttr(__pyx_m, __pyx_n_shuffle, __pyx_18) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1718; goto __pyx_L1;} + if (PyObject_SetAttr(__pyx_m, __pyx_n_logseries, __pyx_18) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1717; goto __pyx_L1;} Py_DECREF(__pyx_18); __pyx_18 = 0; - /* "/home/oliphant/numpy/numpy/random/mtrand/mtrand.pyx":1719 */ + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1719 */ __pyx_17 = __Pyx_GetName(__pyx_m, __pyx_n__rand); if (!__pyx_17) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1719; goto __pyx_L1;} - __pyx_18 = PyObject_GetAttr(__pyx_17, __pyx_n_permutation); if (!__pyx_18) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1719; goto __pyx_L1;} + __pyx_18 = PyObject_GetAttr(__pyx_17, __pyx_n_multivariate_normal); if (!__pyx_18) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1719; goto __pyx_L1;} Py_DECREF(__pyx_17); __pyx_17 = 0; - if (PyObject_SetAttr(__pyx_m, __pyx_n_permutation, __pyx_18) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1719; goto __pyx_L1;} + if (PyObject_SetAttr(__pyx_m, __pyx_n_multivariate_normal, __pyx_18) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1719; goto __pyx_L1;} Py_DECREF(__pyx_18); __pyx_18 = 0; + + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1720 */ + __pyx_17 = __Pyx_GetName(__pyx_m, __pyx_n__rand); if (!__pyx_17) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1720; goto __pyx_L1;} + __pyx_18 = PyObject_GetAttr(__pyx_17, __pyx_n_multinomial); if (!__pyx_18) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1720; goto __pyx_L1;} + Py_DECREF(__pyx_17); __pyx_17 = 0; + if (PyObject_SetAttr(__pyx_m, __pyx_n_multinomial, __pyx_18) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1720; goto __pyx_L1;} + Py_DECREF(__pyx_18); __pyx_18 = 0; + + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1721 */ + __pyx_17 = __Pyx_GetName(__pyx_m, __pyx_n__rand); if (!__pyx_17) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1721; goto __pyx_L1;} + __pyx_18 = PyObject_GetAttr(__pyx_17, __pyx_n_dirichlet); if (!__pyx_18) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1721; goto __pyx_L1;} + Py_DECREF(__pyx_17); __pyx_17 = 0; + if (PyObject_SetAttr(__pyx_m, __pyx_n_dirichlet, __pyx_18) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1721; goto __pyx_L1;} + Py_DECREF(__pyx_18); __pyx_18 = 0; + + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1723 */ + __pyx_17 = __Pyx_GetName(__pyx_m, __pyx_n__rand); if (!__pyx_17) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1723; goto __pyx_L1;} + __pyx_18 = PyObject_GetAttr(__pyx_17, __pyx_n_shuffle); if (!__pyx_18) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1723; goto __pyx_L1;} + Py_DECREF(__pyx_17); __pyx_17 = 0; + if (PyObject_SetAttr(__pyx_m, __pyx_n_shuffle, __pyx_18) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1723; goto __pyx_L1;} + Py_DECREF(__pyx_18); __pyx_18 = 0; + + /* "/Users/dave/Stuff/Projects/numpy/trunk/numpy/random/mtrand/mtrand.pyx":1724 */ + __pyx_17 = __Pyx_GetName(__pyx_m, __pyx_n__rand); if (!__pyx_17) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1724; goto __pyx_L1;} + __pyx_18 = PyObject_GetAttr(__pyx_17, __pyx_n_permutation); if (!__pyx_18) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1724; goto __pyx_L1;} + Py_DECREF(__pyx_17); __pyx_17 = 0; + if (PyObject_SetAttr(__pyx_m, __pyx_n_permutation, __pyx_18) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1724; goto __pyx_L1;} + Py_DECREF(__pyx_18); __pyx_18 = 0; return; __pyx_L1:; Py_XDECREF(__pyx_1); @@ -10676,18 +10736,6 @@ return -1; } -static int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type) { - if (!type) { - PyErr_Format(PyExc_SystemError, "Missing type object"); - return 0; - } - if (obj == Py_None || PyObject_TypeCheck(obj, type)) - return 1; - PyErr_Format(PyExc_TypeError, "Cannot convert %s to %s", - obj->ob_type->tp_name, type->tp_name); - return 0; -} - static PyObject *__Pyx_GetExcValue(void) { PyObject *type = 0, *value = 0, *tb = 0; PyObject *result = 0; @@ -10718,6 +10766,18 @@ return result; } +static int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type) { + if (!type) { + PyErr_Format(PyExc_SystemError, "Missing type object"); + return 0; + } + if (obj == Py_None || PyObject_TypeCheck(obj, type)) + return 1; + PyErr_Format(PyExc_TypeError, "Cannot convert %s to %s", + obj->ob_type->tp_name, type->tp_name); + return 0; +} + static int __Pyx_InternStrings(__Pyx_InternTabEntry *t) { while (t->p) { *t->p = PyString_InternFromString(t->s); Modified: trunk/numpy/random/mtrand/mtrand.pyx =================================================================== --- trunk/numpy/random/mtrand/mtrand.pyx 2007-04-02 12:08:34 UTC (rev 3642) +++ trunk/numpy/random/mtrand/mtrand.pyx 2007-04-02 13:27:42 UTC (rev 3643) @@ -522,15 +522,16 @@ get_state() -> ('MT19937', int key[624], int pos) """ cdef ndarray state "arrayObject_state" - state = _sp.empty(624, int) + state = _sp.empty(624, _sp.uint) memcpy((state.data), (self.internal_state.key), 624*sizeof(long)) + state = _sp.asarray(state, _sp.uint32) return ('MT19937', state, self.internal_state.pos) - + def set_state(self, state): """Set the state from a tuple. - + state = ('MT19937', int key[624], int pos) - + set_state(state) """ cdef ndarray obj "arrayObject_obj" @@ -539,7 +540,11 @@ if algorithm_name != 'MT19937': raise ValueError("algorithm must be 'MT19937'") key, pos = state[1:] - obj = PyArray_ContiguousFromObject(key, NPY_LONG, 1, 1) + try: + obj = PyArray_ContiguousFromObject(key, NPY_ULONG, 1, 1) + except TypeError: + # compatibility -- could be an older pickle + obj = PyArray_ContiguousFromObject(key, NPY_LONG, 1, 1) if obj.dimensions[0] != 624: raise ValueError("state must be 624 longs") memcpy((self.internal_state.key), (obj.data), 624*sizeof(long)) From numpy-svn at scipy.org Mon Apr 2 14:25:55 2007 From: numpy-svn at scipy.org (numpy-svn at scipy.org) Date: Mon, 2 Apr 2007 13:25:55 -0500 (CDT) Subject: [Numpy-svn] r3644 - in trunk/numpy/lib: . tests Message-ID: <20070402182555.8EF9F39C1DF@new.scipy.org> Author: oliphant Date: 2007-04-02 13:25:50 -0500 (Mon, 02 Apr 2007) New Revision: 3644 Modified: trunk/numpy/lib/function_base.py trunk/numpy/lib/tests/test_function_base.py trunk/numpy/lib/tests/test_twodim_base.py trunk/numpy/lib/twodim_base.py Log: Add patch in Ticket #189 for histogramdd. Fixes bug reported by Ben Granett Modified: trunk/numpy/lib/function_base.py =================================================================== --- trunk/numpy/lib/function_base.py 2007-04-02 13:27:42 UTC (rev 3643) +++ trunk/numpy/lib/function_base.py 2007-04-02 18:25:50 UTC (rev 3644) @@ -1,3 +1,4 @@ +__docformat__ = "restructuredtext en" __all__ = ['logspace', 'linspace', 'select', 'piecewise', 'trim_zeros', 'copy', 'iterable', #'base_repr', 'binary_repr', @@ -117,46 +118,49 @@ else: return n, bins -def histogramdd(sample, bins=10, range=None, normed=False): - """histogramdd(sample, bins = 10, range = None, normed = False) -> H, edges +def histogramdd(sample, bins=10, range=None, normed=False, weights=None): + """histogramdd(sample, bins=10, range=None, normed=False, weights=None) - Return the D-dimensional histogram computed from sample. + Return the D-dimensional histogram of the sample. - Parameters - ---------- - sample: A sequence of D arrays, or an NxD array. - bins: A sequence of edge arrays, or a sequence of the number of bins. - If a scalar is given, it is assumed to be the number of bins - for all dimensions. - range: A sequence of lower and upper bin edges (default: [min, max]). - normed: If False, returns the number of samples in each bin. - If True, returns the frequency distribution. + :Parameters: + - `sample` : A sequence of D arrays, or an NxD array. + - `bins` : A sequence of edge arrays, a sequence of bin number, + or a scalar (the number of bins for all dimensions.) + - `range` : A sequence of lower and upper bin edges (default: [min, max]). + - `normed` : Boolean, if False, return the number of samples in each bin, + if True, returns the density. + - `weights` : An array of weights. The weights are normed only if normed is True. + Should weights.sum() not equal N, the total bin count will + not be equal to the number of samples. + :Return: + - `hist` : Histogram array. + - `edges` : List of arrays defining the bin edges. + - Output - ------ - H: Histogram array. - edges: List of arrays defining the bin edges. - Example: - x = random.randn(100,3) - H, edges = histogramdd(x, bins = (5, 6, 7)) + >>> x = random.randn(100,3) + >>> hist3d, edges = histogramdd(x, bins = (5, 6, 7)) - See also: histogram + :SeeAlso: histogram """ - try: + try: + # Sample is an ND-array. N, D = sample.shape - except (AttributeError, ValueError): - ss = atleast_2d(sample) - sample = ss.transpose() + except (AttributeError, ValueError): + # Sample is a sequence of 1D arrays. + sample = atleast_2d(sample).T N, D = sample.shape nbin = empty(D, int) edges = D*[None] dedges = D*[None] - + if weights is not None: + weights = asarray(weights) + try: M = len(bins) if M != D: @@ -164,6 +168,8 @@ except TypeError: bins = D*[bins] + # Select range for each dimension + # Used only if number of bins is given. if range is None: smin = atleast_1d(sample.min(0)) smax = atleast_1d(sample.max(0)) @@ -173,39 +179,37 @@ for i in arange(D): smin[i], smax[i] = range[i] + # Create edge arrays for i in arange(D): if isscalar(bins[i]): - nbin[i] = bins[i] - edges[i] = linspace(smin[i], smax[i], nbin[i]+1) + nbin[i] = bins[i] + 2 # +2 for outlier bins + edges[i] = linspace(smin[i], smax[i], nbin[i]-1) else: edges[i] = asarray(bins[i], float) - nbin[i] = len(edges[i])-1 - - - + nbin[i] = len(edges[i])+1 # +1 for outlier bins + dedges[i] = diff(edges[i]) + + nbin = asarray(nbin) + + # Compute the bin number each sample falls into. Ncount = {} - nbin = asarray(nbin) - for i in arange(D): Ncount[i] = digitize(sample[:,i], edges[i]) - dedges[i] = diff(edges[i]) - # Remove values falling outside of bins - # Values that fall on an edge are put in the right bin. + + # Using digitize, values that fall on an edge are put in the right bin. # For the rightmost bin, we want values equal to the right # edge to be counted in the last bin, and not as an outlier. outliers = zeros(N, int) for i in arange(D): + # Rounding precision decimal = int(-log10(dedges[i].min())) +6 + # Find which points are on the rightmost edge. on_edge = where(around(sample[:,i], decimal) == around(edges[i][-1], decimal))[0] + # Shift these points one bin to the left. Ncount[i][on_edge] -= 1 - outliers += (Ncount[i] == 0) | (Ncount[i] == nbin[i]+1) - indices = where(outliers == 0)[0] - for i in arange(D): - Ncount[i] = Ncount[i][indices] - 1 - N = len(indices) # Flattened histogram matrix (1D) - hist = zeros(nbin.prod(), int) + hist = zeros(nbin.prod(), float) # Compute the sample indices in the flattened histogram matrix. ni = nbin.argsort() @@ -213,29 +217,33 @@ xy = zeros(N, int) for i in arange(0, D-1): xy += Ncount[ni[i]] * nbin[ni[i+1:]].prod() - xy += Ncount[ni[-1]] # Compute the number of repetitions in xy and assign it to the flattened histmat. if len(xy) == 0: - return zeros(nbin, int) + return zeros(nbin-2, int), edges - flatcount = bincount(xy) + flatcount = bincount(xy, weights) a = arange(len(flatcount)) hist[a] = flatcount # Shape into a proper matrix hist = hist.reshape(sort(nbin)) - for i,j in enumerate(ni): + for i in arange(nbin.size): + j = ni[i] hist = hist.swapaxes(i,j) - if (hist.shape == nbin).all(): - break + ni[i],ni[j] = ni[j],ni[i] + # Remove outliers (indices 0 and -1 for each dimension). + core = D*[slice(1,-1)] + hist = hist[core] + + # Normalize if normed is True if normed: s = hist.sum() for i in arange(D): shape = ones(D, int) - shape[i] = nbin[i] + shape[i] = nbin[i]-2 hist = hist / dedges[i].reshape(shape) hist /= s Modified: trunk/numpy/lib/tests/test_function_base.py =================================================================== --- trunk/numpy/lib/tests/test_function_base.py 2007-04-02 13:27:42 UTC (rev 3643) +++ trunk/numpy/lib/tests/test_function_base.py 2007-04-02 18:25:50 UTC (rev 3644) @@ -365,7 +365,7 @@ [.5, .5, 1.5], [.5, 1.5, 2.5], [.5, 2.5, 2.5]]) H, edges = histogramdd(x, (2,3,3), range = [[-1,1], [0,3], [0,3]]) answer = asarray([[[0,1,0], [0,0,1], [1,0,0]], [[0,1,0], [0,0,1], [0,0,1]]]) - assert(all(H == answer)) + assert_array_equal(H,answer) # Check normalization ed = [[-2,0,2], [0,1,2,3], [0,1,2,3]] H, edges = histogramdd(x, bins = ed, normed = True) @@ -383,6 +383,27 @@ [[0,0],[0,0],[0,0]]]) assert_array_equal(H, answer) + Z = zeros((5,5,5)) + Z[range(5), range(5), range(5)] = 1. + H,edges = histogramdd([arange(5), arange(5), arange(5)], 5) + assert_array_equal(H, Z) + + def check_shape(self): + x = rand(100,3) + hist3d, edges = histogramdd(x, bins = (5, 7, 6)) + assert_array_equal(hist3d.shape, (5,7,6)) + + def check_weights(self): + v = rand(100,2) + hist, edges = histogramdd(v) + n_hist, edges = histogramdd(v, normed=True) + w_hist, edges = histogramdd(v, weights=ones(100)) + assert_array_equal(w_hist, hist) + w_hist, edges = histogramdd(v, weights=ones(100)*2, normed=True) + assert_array_equal(w_hist, n_hist) + w_hist, edges = histogramdd(v, weights=ones(100, int)*2) + assert_array_equal(w_hist, 2*hist) + class test_unique(NumpyTestCase): def check_simple(self): Modified: trunk/numpy/lib/tests/test_twodim_base.py =================================================================== --- trunk/numpy/lib/tests/test_twodim_base.py 2007-04-02 13:27:42 UTC (rev 3643) +++ trunk/numpy/lib/tests/test_twodim_base.py 2007-04-02 18:25:50 UTC (rev 3644) @@ -149,6 +149,13 @@ [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0]]) assert_array_equal(H.T, answer) + H = histogram2d(x, y, xedges)[0] + assert_array_equal(H.T, answer) + H,xedges,yedges = histogram2d(range(10),range(10)) + assert_array_equal(H, eye(10,10)) + assert_array_equal(xedges, np.linspace(0,9,11)) + assert_array_equal(yedges, np.linspace(0,9,11)) + def check_asym(self): x = array([1, 1, 2, 3, 4, 4, 4, 5]) y = array([1, 3, 2, 0, 1, 2, 3, 4]) @@ -160,6 +167,8 @@ [0,1,1,1,0], [0,0,0,0,1]]) assert_array_almost_equal(H, answer/8., 3) + assert_array_equal(xed, np.linspace(0,6,7)) + assert_array_equal(yed, np.linspace(0,5,6)) def check_norm(self): x = array([1,2,3,1,2,3,1,2,3]) y = array([1,1,1,2,2,2,3,3,3]) @@ -169,5 +178,10 @@ [.5,.5,.25]])/9. assert_array_almost_equal(H, answer, 3) + def check_all_outliers(self): + r = rand(100)+1. + H, xed, yed = histogram2d(r, r, (4, 5), range=([0,1], [0,1])) + assert_array_equal(H, 0) + if __name__ == "__main__": NumpyTest().run() Modified: trunk/numpy/lib/twodim_base.py =================================================================== --- trunk/numpy/lib/twodim_base.py 2007-04-02 13:27:42 UTC (rev 3643) +++ trunk/numpy/lib/twodim_base.py 2007-04-02 18:25:50 UTC (rev 3644) @@ -143,105 +143,42 @@ X[:,i] = x**(N-i-1) return X -def histogram2d(x,y, bins=10, range=None, normed=False): + +def histogram2d(x,y, bins=10, range=None, normed=False, weights=None): """histogram2d(x,y, bins=10, range=None, normed=False) -> H, xedges, yedges Compute the 2D histogram from samples x,y. - Parameters - ---------- - x,y: 1D data series. Both arrays must have the same length. - bins: Number of bins -or- [nbin x, nbin y] -or- - [bin edges] -or- [x bin edges, y bin edges]. - range: A sequence of lower and upper bin edges (default: [min, max]). - normed: True or False. - - The histogram array is a count of the number of samples in each - two dimensional bin. - Setting normed to True returns a density rather than a bin count. + :Parameters: + - `x,y` : Sample arrays (1D). + - `bins` : Number of bins -or- [nbin x, nbin y] -or- + [bin edges] -or- [x bin edges, y bin edges]. + - `range` : A sequence of lower and upper bin edges (default: [min, max]). + - `normed` : Boolean, if False, return the number of samples in each bin, + if True, returns the density. + - `weights` : An array of weights. The weights are normed only if normed + is True. Should weights.sum() not equal N, the total bin count \ + will not be equal to the number of samples. + + :Return: + - `hist` : Histogram array. + - `xedges, yedges` : Arrays defining the bin edges. + + Example: + >>> x = random.randn(100,2) + >>> hist2d, xedges, yedges = histogram2d(x, bins = (6, 7)) + + :SeeAlso: histogramdd """ - import numpy as np + from numpy import histogramdd + try: N = len(bins) except TypeError: N = 1 - bins = [bins] - x = asarray(x) - y = asarray(y) - if range is None: - xmin, xmax = x.min(), x.max() - ymin, ymax = y.min(), y.max() - else: - xmin, xmax = range[0] - ymin, ymax = range[1] - if N == 2: - if np.isscalar(bins[0]): - xnbin = bins[0] - xedges = np.linspace(xmin, xmax, xnbin+1) - else: - xedges = asarray(bins[0], float) - xnbin = len(xedges)-1 - if np.isscalar(bins[1]): - ynbin = bins[1] - yedges = np.linspace(ymin, ymax, ynbin+1) - else: - yedges = asarray(bins[1], float) - ynbin = len(yedges)-1 - elif N == 1: - ynbin = xnbin = bins[0] - xedges = np.linspace(xmin, xmax, xnbin+1) - yedges = np.linspace(ymin, ymax, ynbin+1) - else: - yedges = asarray(bins, float) - xedges = yedges.copy() - ynbin = len(yedges)-1 - xnbin = len(xedges)-1 - dxedges = np.diff(xedges) - dyedges = np.diff(yedges) - - # Flattened histogram matrix (1D) - hist = np.zeros((xnbin)*(ynbin), int) - - # Count the number of sample in each bin (1D) - xbin = np.digitize(x,xedges) - ybin = np.digitize(y,yedges) - - # Values that fall on an edge are put in the right bin. - # For the rightmost bin, we want values equal to the right - # edge to be counted in the last bin, and not as an outlier. - xdecimal = int(-np.log10(dxedges.min()))+6 - ydecimal = int(-np.log10(dyedges.min()))+6 - on_edge_x = np.where(np.around(x,xdecimal) == np.around(xedges[-1], xdecimal))[0] - on_edge_y = np.where(np.around(y,ydecimal) == np.around(yedges[-1], ydecimal))[0] - xbin[on_edge_x] -= 1 - ybin[on_edge_y] -= 1 - # Remove the true outliers - outliers = (xbin==0) | (xbin==xnbin+1) | (ybin==0) | (ybin == ynbin+1) - xbin = xbin[outliers==False] - 1 - ybin = ybin[outliers==False] - 1 - - # Compute the sample indices in the flattened histogram matrix. - if xnbin >= ynbin: - xy = ybin*(xnbin) + xbin - - else: - xy = xbin*(ynbin) + ybin - - - # Compute the number of repetitions in xy and assign it to the flattened - # histogram matrix. - - flatcount = np.bincount(xy) - indices = np.arange(len(flatcount)) - hist[indices] = flatcount - - shape = np.sort([xnbin, ynbin]) - # Shape into a proper matrix - histmat = hist.reshape(shape) - if (shape == (ynbin, xnbin)).all(): - histmat = histmat.T - if normed: - diff2 = np.outer(dxedges, dyedges) - histmat = histmat / diff2 / histmat.sum() - return histmat, xedges, yedges + if N != 1 and N != 2: + xedges = yedges = asarray(bins, float) + bins = [xedges, yedges] + hist, edges = histogramdd([x,y], bins, range, normed, weights) + return hist, edges[0], edges[1] From numpy-svn at scipy.org Mon Apr 2 16:22:11 2007 From: numpy-svn at scipy.org (numpy-svn at scipy.org) Date: Mon, 2 Apr 2007 15:22:11 -0500 (CDT) Subject: [Numpy-svn] r3645 - in trunk/numpy: . core/src lib lib/src Message-ID: <20070402202211.CE41039C1FD@new.scipy.org> Author: oliphant Date: 2007-04-02 15:21:57 -0500 (Mon, 02 Apr 2007) New Revision: 3645 Modified: trunk/numpy/add_newdocs.py trunk/numpy/core/src/arraymethods.c trunk/numpy/lib/function_base.py trunk/numpy/lib/src/_compiled_base.c Log: Add interp to numpy.lib adapted from arrayfns. Add an unfinished arrayfns compatibility module to old_numeric. Modified: trunk/numpy/add_newdocs.py =================================================================== --- trunk/numpy/add_newdocs.py 2007-04-02 18:25:50 UTC (rev 3644) +++ trunk/numpy/add_newdocs.py 2007-04-02 20:21:57 UTC (rev 3645) @@ -1235,3 +1235,4 @@ Type can be either a new sub-type object or a data-descriptor object """)) + Modified: trunk/numpy/core/src/arraymethods.c =================================================================== --- trunk/numpy/core/src/arraymethods.c 2007-04-02 18:25:50 UTC (rev 3644) +++ trunk/numpy/core/src/arraymethods.c 2007-04-02 20:21:57 UTC (rev 3645) @@ -479,7 +479,9 @@ PyErr_SetString(PyExc_ValueError, "invalid integer"); return NULL; } - if (value >= PyArray_SIZE(self)) { + factor = PyArray_SIZE(self); + if (value < 0) value += factor; + if ((value >= factor) || (value < 0)) { PyErr_SetString(PyExc_ValueError, "index out of bounds"); return NULL; Modified: trunk/numpy/lib/function_base.py =================================================================== --- trunk/numpy/lib/function_base.py 2007-04-02 18:25:50 UTC (rev 3644) +++ trunk/numpy/lib/function_base.py 2007-04-02 20:21:57 UTC (rev 3645) @@ -8,7 +8,8 @@ 'histogram', 'histogramdd', 'bincount', 'digitize', 'cov', 'corrcoef', 'msort', 'median', 'sinc', 'hamming', 'hanning', 'bartlett', 'blackman', 'kaiser', 'trapz', 'i0', 'add_newdoc', - 'add_docstring', 'meshgrid', 'delete', 'insert', 'append' + 'add_docstring', 'meshgrid', 'delete', 'insert', 'append', + 'interp' ] import types @@ -24,7 +25,7 @@ from numpy.lib.shape_base import atleast_1d, atleast_2d from numpy.lib.twodim_base import diag from _compiled_base import _insert, add_docstring -from _compiled_base import digitize, bincount +from _compiled_base import digitize, bincount, interp from arraysetops import setdiff1d #end Fernando's utilities @@ -592,6 +593,25 @@ except RuntimeError: pass +try: + add_docstring(interp, +r"""interp(x, xp, fp, left=None, right=None) + +Return the value of a piecewise-linear function at each value in x. + +The piecewise-linear function, f, is defined by the known data-points fp=f(xp). +The xp points must be sorted in increasing order but this is not checked. + +For values of x < xp[0] return the value given by left. If left is None, then +return fp[0]. +For values of x > xp[-1] return the value given by right. If right is None, then +return fp[-1]. +""" + ) +except RuntimeError: + pass + + def angle(z, deg=0): """Return the angle of the complex argument z. """ Modified: trunk/numpy/lib/src/_compiled_base.c =================================================================== --- trunk/numpy/lib/src/_compiled_base.c 2007-04-02 18:25:50 UTC (rev 3644) +++ trunk/numpy/lib/src/_compiled_base.c 2007-04-02 20:21:57 UTC (rev 3645) @@ -337,7 +337,129 @@ return NULL; } +static npy_intp +binary_search(double dval, double dlist [], npy_intp len) +{ + /* binary_search accepts three arguments: a numeric value and + * a numeric array and its length. It assumes that the array is sorted in + * increasing order. It returns the index of the array's + * largest element which is <= the value. It will return -1 if + * the value is less than the least element of the array. */ + /* self is not used */ + npy_intp bottom , top , middle, result; + if (dval < dlist [0]) + result = -1 ; + else { + bottom = 0; + top = len - 1; + while (bottom < top) { + middle = (top + bottom) / 2 ; + if (dlist [middle] < dval) + bottom = middle + 1 ; + else if (dlist [middle] > dval) + top = middle - 1 ; + else + return middle ; + } + if (dlist [bottom] > dval) + result = bottom - 1 ; + else + result = bottom ; + } + + return result ; +} + +static PyObject * +arr_interp(PyObject *self, PyObject *args, PyObject *kwdict) +{ + + PyObject *fp, *xp, *x; + PyObject *left=NULL, *right=NULL; + PyArrayObject *afp=NULL, *axp=NULL, *ax=NULL, *af=NULL; + npy_intp i, lenx, lenxp, indx; + double lval, rval; + double *dy, *dx, *dz, *dres, *slopes; + + static char *kwlist[] = {"x", "xp", "fp", "left", "right", NULL}; + + if (!PyArg_ParseTupleAndKeywords(args, kwdict, "OOO|OO", kwlist, + &x, &xp, &fp, &left, &right)) + return NULL; + + + afp = (NPY_AO*)PyArray_ContiguousFromAny(fp, NPY_DOUBLE, 1, 1); + if (afp == NULL) return NULL; + axp = (NPY_AO*)PyArray_ContiguousFromAny(xp, NPY_DOUBLE, 1, 1); + if (axp == NULL) goto fail; + ax = (NPY_AO*)PyArray_ContiguousFromAny(x, NPY_DOUBLE, 1, 0); + if (ax == NULL) goto fail; + + lenxp = axp->dimensions[0]; + if (afp->dimensions[0] != lenxp) { + PyErr_SetString(PyExc_ValueError, "interp: fp and xp are not the same length."); + goto fail; + } + + af = (NPY_AO*)PyArray_SimpleNew(ax->nd, ax->dimensions, NPY_DOUBLE); + if (af == NULL) goto fail; + + lenx = PyArray_SIZE(ax); + + dy = (double *)PyArray_DATA(afp); + dx = (double *)PyArray_DATA(axp); + dz = (double *)PyArray_DATA(ax); + dres = (double *)PyArray_DATA(af); + + /* Get left and right fill values. */ + if ((left == NULL) || (left == Py_None)) { + lval = dy[0]; + } + else { + lval = PyFloat_AsDouble(left); + if ((lval==-1) && PyErr_Occurred()) + goto fail; + } + if ((right == NULL) || (right == Py_None)) { + rval = dy[lenxp-1]; + } + else { + rval = PyFloat_AsDouble(right); + if ((rval==-1) && PyErr_Occurred()) + goto fail; + } + + slopes = (double *) PyDataMem_NEW((lenxp-1)*sizeof(double)); + for (i=0; i < lenxp-1; i++) { + slopes[i] = (dy[i+1] - dy[i])/(dx[i+1]-dx[i]); + } + for (i=0; i= lenxp - 1) + dres[i] = rval; + else + dres[i] = slopes[indx]*(dz[i]-dx[indx]) + dy[indx]; + } + + PyDataMem_FREE(slopes); + Py_DECREF(afp); + Py_DECREF(axp); + Py_DECREF(ax); + return (PyObject *)af; + + fail: + Py_XDECREF(afp); + Py_XDECREF(axp); + Py_XDECREF(ax); + Py_XDECREF(af); + return NULL; +} + + + static PyTypeObject *PyMemberDescr_TypePtr=NULL; static PyTypeObject *PyGetSetDescr_TypePtr=NULL; static PyTypeObject *PyMethodDescr_TypePtr=NULL; @@ -408,8 +530,10 @@ arr_insert__doc__}, {"bincount", (PyCFunction)arr_bincount, METH_VARARGS | METH_KEYWORDS, NULL}, - {"digitize", (PyCFunction)arr_digitize, METH_VARARGS | METH_KEYWORDS, + {"digitize", (PyCFunction)arr_digitize, METH_VARARGS | METH_KEYWORDS, NULL}, + {"interp", (PyCFunction)arr_interp, METH_VARARGS | METH_KEYWORDS, + NULL}, {"add_docstring", (PyCFunction)arr_add_docstring, METH_VARARGS, NULL}, {NULL, NULL} /* sentinel */ @@ -435,7 +559,7 @@ return; } -/* Initialization function for the module (*must* be called initArray) */ +/* Initialization function for the module (*must* be called init) */ PyMODINIT_FUNC init_compiled_base(void) { PyObject *m, *d, *s; From numpy-svn at scipy.org Mon Apr 2 16:26:50 2007 From: numpy-svn at scipy.org (numpy-svn at scipy.org) Date: Mon, 2 Apr 2007 15:26:50 -0500 (CDT) Subject: [Numpy-svn] r3646 - trunk/numpy/oldnumeric Message-ID: <20070402202650.CCE0F39C1CD@new.scipy.org> Author: oliphant Date: 2007-04-02 15:26:47 -0500 (Mon, 02 Apr 2007) New Revision: 3646 Added: trunk/numpy/oldnumeric/arrayfns.py Log: Add the arrayfns compatibility library -- not finished. Added: trunk/numpy/oldnumeric/arrayfns.py =================================================================== --- trunk/numpy/oldnumeric/arrayfns.py 2007-04-02 20:21:57 UTC (rev 3645) +++ trunk/numpy/oldnumeric/arrayfns.py 2007-04-02 20:26:47 UTC (rev 3646) @@ -0,0 +1,82 @@ +"""Backward compatible with arrayfns from Numeric +""" + +__all__ = ['array_set', 'construct3', 'digitize', 'error', 'find_mask', 'histogram', 'index_sort', + 'interp', 'nz', 'reverse', 'span', 'to_corners', 'zmin_zmax'] + +import numpy as nx +from numpy import asarray + +class error(Exception): + pass + +def array_set(vals1, indices, vals2): + indices = asarray(indices) + if indices.ndim != 1: + raise ValueError, "index array must be 1-d" + if not isinstance(vals1, ndarray): + raise TypeError, "vals1 must be an ndarray" + vals1 = asarray(vals1) + vals2 = asarray(vals2) + if vals1.ndim != vals2.ndim or vals1.ndim < 1: + raise error, "vals1 and vals2 must have same number of dimensions (>=1)" + vals1[indices] = vals2 + +def construct3(mask, itype): + raise NotImplementedError + +from numpy import digitize + +def find_mask(fs, node_edges): + raise NotImplementedError + +def histogram(lst, weight=None): + raise NotImplementedError + +def index_sort(arr): + return asarray(arr).argsort(kind='heap') + +def interp(y, x, z, typ=None): + """y(z) interpolated by treating y(x) as piecewise function + """ + res = numpy.interp(z, x, y) + if typ is None or typ == 'd': + return res + if typ == 'f': + return res.astype('f') + + raise error, "incompatible typecode" + +def nz(x): + x = asarray(x,dtype=nx.ubyte) + if x.ndim != 1: + raise TypeError, "intput must have 1 dimension." + indxs = nx.flatnonzero(x != 0) + return indxs[-1].item()+1 + +def reverse(x, n): + x = asarray(x,dtype='d') + if x.ndim != 2: + raise ValueError, "input must be 2-d" + y = nx.empty_like(x) + if n == 0: + y[...] = x[::-1,:] + elif n == 1: + y[...] = x[:,::-1] + return y + +def span(lo, hi, num, d2=0): + x = linspace(lo, hi, num) + if d2 <= 0 + return x + else: + ret = empty((d2,num),x.dtype) + ret[...] = x + return ret + +def to_corners(arr, nv, nvsum): + raise NotImplementedError + +def zmin_zmax(z, ireg): + raise NotImplementedError + From numpy-svn at scipy.org Mon Apr 2 17:24:56 2007 From: numpy-svn at scipy.org (numpy-svn at scipy.org) Date: Mon, 2 Apr 2007 16:24:56 -0500 (CDT) Subject: [Numpy-svn] r3647 - in trunk/numpy: core/tests oldnumeric Message-ID: <20070402212456.44B1639C238@new.scipy.org> Author: oliphant Date: 2007-04-02 16:24:52 -0500 (Mon, 02 Apr 2007) New Revision: 3647 Modified: trunk/numpy/core/tests/test_multiarray.py trunk/numpy/oldnumeric/arrayfns.py Log: Add a few more functions to arrayfns compatibility file and fix typo. Modified: trunk/numpy/core/tests/test_multiarray.py =================================================================== --- trunk/numpy/core/tests/test_multiarray.py 2007-04-02 20:26:47 UTC (rev 3646) +++ trunk/numpy/core/tests/test_multiarray.py 2007-04-02 21:24:52 UTC (rev 3647) @@ -377,11 +377,12 @@ x.clip(clip_min,clip_max,x) else: x = x.clip(clip_min,clip_max) + byteorder = '=' if x.dtype.byteorder == '|': byteorder = '|' assert_equal(byteorder,x.dtype.byteorder) self._check_range(x,expected_min,expected_max) - return x + return x def check_basic(self): for inplace in [False, True]: Modified: trunk/numpy/oldnumeric/arrayfns.py =================================================================== --- trunk/numpy/oldnumeric/arrayfns.py 2007-04-02 20:26:47 UTC (rev 3646) +++ trunk/numpy/oldnumeric/arrayfns.py 2007-04-02 21:24:52 UTC (rev 3647) @@ -22,17 +22,9 @@ raise error, "vals1 and vals2 must have same number of dimensions (>=1)" vals1[indices] = vals2 -def construct3(mask, itype): - raise NotImplementedError - from numpy import digitize +from numpy import bincount as histogram -def find_mask(fs, node_edges): - raise NotImplementedError - -def histogram(lst, weight=None): - raise NotImplementedError - def index_sort(arr): return asarray(arr).argsort(kind='heap') @@ -67,16 +59,40 @@ def span(lo, hi, num, d2=0): x = linspace(lo, hi, num) - if d2 <= 0 + if d2 <= 0: return x else: ret = empty((d2,num),x.dtype) ret[...] = x return ret +def zmin_zmax(z, ireg): + z = asarray(z, dtype=float) + ireg = asarray(ireg, dtype=int) + if z.shape != ireg.shape or z.ndim != 2: + raise ValueError, "z and ireg must be the same shape and 2-d" + ix, iy = nx.nonzero(ireg) + # Now, add more indices + x1m = ix - 1 + y1m = iy-1 + i1 = x1m>=0 + i2 = y1m>=0 + i3 = i1 & i2 + nix = nx.r_[ix, x1m[i1], x1m[i1], ix[i2] ] + niy = nx.r_[iy, iy[i1], y1m[i3], y1m[i2]] + # remove any negative indices + zres = z[nix,niy] + return zres.min().item(), zres.max().item() + + +def find_mask(fs, node_edges): + raise NotImplementedError + def to_corners(arr, nv, nvsum): raise NotImplementedError -def zmin_zmax(z, ireg): + +def construct3(mask, itype): raise NotImplementedError - + + From numpy-svn at scipy.org Mon Apr 2 17:31:35 2007 From: numpy-svn at scipy.org (numpy-svn at scipy.org) Date: Mon, 2 Apr 2007 16:31:35 -0500 (CDT) Subject: [Numpy-svn] r3648 - tags Message-ID: <20070402213135.DCFAF39C240@new.scipy.org> Author: oliphant Date: 2007-04-02 16:31:26 -0500 (Mon, 02 Apr 2007) New Revision: 3648 Added: tags/1.0.2/ Log: Tag tree for 1.0.2 release. Copied: tags/1.0.2 (from rev 3647, trunk) From numpy-svn at scipy.org Mon Apr 2 17:32:35 2007 From: numpy-svn at scipy.org (numpy-svn at scipy.org) Date: Mon, 2 Apr 2007 16:32:35 -0500 (CDT) Subject: [Numpy-svn] r3649 - tags/1.0.2/numpy Message-ID: <20070402213235.0BDFD39C240@new.scipy.org> Author: oliphant Date: 2007-04-02 16:32:32 -0500 (Mon, 02 Apr 2007) New Revision: 3649 Modified: tags/1.0.2/numpy/version.py Log: Make 1.0.2. tag a release. Modified: tags/1.0.2/numpy/version.py =================================================================== --- tags/1.0.2/numpy/version.py 2007-04-02 21:31:26 UTC (rev 3648) +++ tags/1.0.2/numpy/version.py 2007-04-02 21:32:32 UTC (rev 3649) @@ -1,5 +1,5 @@ version='1.0.2' -release=False +release=True if not release: import os From numpy-svn at scipy.org Mon Apr 2 17:39:35 2007 From: numpy-svn at scipy.org (numpy-svn at scipy.org) Date: Mon, 2 Apr 2007 16:39:35 -0500 (CDT) Subject: [Numpy-svn] r3650 - trunk/numpy Message-ID: <20070402213935.7734639C010@new.scipy.org> Author: oliphant Date: 2007-04-02 16:39:29 -0500 (Mon, 02 Apr 2007) New Revision: 3650 Modified: trunk/numpy/version.py Log: Update version of this trunk. Modified: trunk/numpy/version.py =================================================================== --- trunk/numpy/version.py 2007-04-02 21:32:32 UTC (rev 3649) +++ trunk/numpy/version.py 2007-04-02 21:39:29 UTC (rev 3650) @@ -1,4 +1,4 @@ -version='1.0.2' +version='1.0.3' release=False if not release: From numpy-svn at scipy.org Tue Apr 3 17:31:52 2007 From: numpy-svn at scipy.org (numpy-svn at scipy.org) Date: Tue, 3 Apr 2007 16:31:52 -0500 (CDT) Subject: [Numpy-svn] r3651 - trunk/numpy/doc/swig Message-ID: <20070403213152.3D1F539C240@new.scipy.org> Author: wfspotz at sandia.gov Date: 2007-04-03 16:31:01 -0500 (Tue, 03 Apr 2007) New Revision: 3651 Modified: trunk/numpy/doc/swig/numpy.i Log: Modified INPLACE typemaps to check for native byte order, and for 2D case, require that the python argument be 2D as well Modified: trunk/numpy/doc/swig/numpy.i =================================================================== --- trunk/numpy/doc/swig/numpy.i 2007-04-02 21:39:29 UTC (rev 3650) +++ trunk/numpy/doc/swig/numpy.i 2007-04-03 21:31:01 UTC (rev 3651) @@ -19,9 +19,11 @@ */ #define is_array(a) ((a) && PyArray_Check((PyArrayObject *)a)) #define array_type(a) (int)(PyArray_TYPE(a)) -#define array_dimensions(a) (((PyArrayObject *)a)->nd) +#define array_numdims(a) (((PyArrayObject *)a)->nd) +#define array_dimensions(a) (((PyArrayObject *)a)->dimensions) #define array_size(a,i) (((PyArrayObject *)a)->dimensions[i]) #define array_is_contiguous(a) (PyArray_ISCONTIGUOUS(a)) +#define array_is_native(a) (PyArray_ISNOTSWAPPED(a)) /* Support older NumPy data type names */ @@ -207,16 +209,30 @@ return contiguous; } +/* Require that a numpy array is not byte-swapped. If the array is + * byte-swapped, return 1. Otherwise, set the python error string and + * return 0. + */ +int require_native(PyArrayObject* ary) { + int native = 1; + if (!array_is_native(ary)) { + PyErr_SetString(PyExc_TypeError, + "Array must have native byteorder. A byte-swapped array was given"); + native = 0; + } + return native; +} + /* Require the given PyArrayObject to have a specified number of * dimensions. If the array has the specified number of dimensions, * return 1. Otherwise, set the python error string and return 0. */ int require_dimensions(PyArrayObject* ary, int exact_dimensions) { int success = 1; - if (array_dimensions(ary) != exact_dimensions) { + if (array_numdims(ary) != exact_dimensions) { PyErr_Format(PyExc_TypeError, "Array must have %d dimensions. Given array has %d dimensions", - exact_dimensions, array_dimensions(ary)); + exact_dimensions, array_numdims(ary)); success = 0; } return success; @@ -233,7 +249,7 @@ char dims_str[255] = ""; char s[255]; for (i = 0; i < n && !success; i++) { - if (array_dimensions(ary) == exact_dimensions[i]) { + if (array_numdims(ary) == exact_dimensions[i]) { success = 1; } } @@ -246,7 +262,7 @@ strcat(dims_str,s); PyErr_Format(PyExc_TypeError, "Array must be have %s dimensions. Given array has %d dimensions", - dims_str, array_dimensions(ary)); + dims_str, array_numdims(ary)); } return success; } @@ -539,7 +555,8 @@ { temp = obj_to_array_no_conversion($input, DATA_TYPECODE); npy_intp size[1] = { $1_dim0 }; - if (!temp || !require_dimensions(temp,1) || !require_size(temp, size, 1)) SWIG_fail; + if (!temp || !require_dimensions(temp,1) || !require_size(temp, size, 1) + || !require_contiguous(temp) || !require_native(temp)) SWIG_fail; $1 = ($1_ltype) temp->data; } @@ -555,7 +572,7 @@ (PyArrayObject* temp=NULL) { temp = obj_to_array_no_conversion($input, DATA_TYPECODE); - if (!temp || !require_contiguous(temp)) SWIG_fail; + if (!temp || !require_contiguous(temp) || !require_native(temp)) SWIG_fail; $1 = (DATA_TYPE*) temp->data; $2 = 1; for (int i=0; ind; ++i) $2 *= temp->dimensions[i]; @@ -573,7 +590,7 @@ (PyArrayObject* temp=NULL) { temp = obj_to_array_no_conversion($input, DATA_TYPECODE); - if (!temp || !require_contiguous(temp)) SWIG_fail; + if (!temp || !require_contiguous(temp) || !require_native(temp)) SWIG_fail; $1 = 1; for (int i=0; ind; ++i) $1 *= temp->dimensions[i]; $2 = (DATA_TYPE*) temp->data; @@ -592,7 +609,8 @@ { temp = obj_to_array_no_conversion($input, DATA_TYPECODE); npy_intp size[2] = { $1_dim0, $1_dim1 }; - if (!temp || !require_dimensions(temp,2) || !require_size(temp, size, 2)) SWIG_fail; + if (!temp || !require_dimensions(temp,2) || !require_size(temp, size, 2) + || !require_contiguous(temp) || !require_native(temp)) SWIG_fail; $1 = ($1_ltype) temp->data; } @@ -608,7 +626,8 @@ (PyArrayObject* temp=NULL) { temp = obj_to_array_no_conversion($input, DATA_TYPECODE); - if (!temp || !require_contiguous(temp)) SWIG_fail; + if (!temp || !require_dimensions(temp,2) || !require_contiguous(temp) + || !require_native(temp)) SWIG_fail; $1 = (DATA_TYPE*) temp->data; $2 = (DIM_TYPE) temp->dimensions[0]; $3 = (DIM_TYPE) temp->dimensions[1]; @@ -626,7 +645,8 @@ (PyArrayObject* temp=NULL) { temp = obj_to_array_no_conversion($input, DATA_TYPECODE); - if (!temp || !require_contiguous(temp)) SWIG_fail; + if (!temp || !require_dimensions(temp,2) || !require_contiguous(temp) + || !require_native(temp)) SWIG_fail; $1 = (DIM_TYPE) temp->dimensions[0]; $2 = (DIM_TYPE) temp->dimensions[1]; $3 = (DATA_TYPE*) temp->data; From numpy-svn at scipy.org Tue Apr 3 17:57:48 2007 From: numpy-svn at scipy.org (numpy-svn at scipy.org) Date: Tue, 3 Apr 2007 16:57:48 -0500 (CDT) Subject: [Numpy-svn] r3652 - trunk/numpy/doc/swig Message-ID: <20070403215748.5D9AB39C09E@new.scipy.org> Author: wfspotz at sandia.gov Date: 2007-04-03 16:57:43 -0500 (Tue, 03 Apr 2007) New Revision: 3652 Modified: trunk/numpy/doc/swig/numpy.i trunk/numpy/doc/swig/numpy_swig.html trunk/numpy/doc/swig/numpy_swig.pdf trunk/numpy/doc/swig/numpy_swig.txt Log: Updated documentation to reflect changes to internal macros and routines, the new error-checking in the INPLACE typemaps, and an updated Acknowledgement section Modified: trunk/numpy/doc/swig/numpy.i =================================================================== --- trunk/numpy/doc/swig/numpy.i 2007-04-03 21:31:01 UTC (rev 3651) +++ trunk/numpy/doc/swig/numpy.i 2007-04-03 21:57:43 UTC (rev 3652) @@ -210,8 +210,8 @@ } /* Require that a numpy array is not byte-swapped. If the array is - * byte-swapped, return 1. Otherwise, set the python error string and - * return 0. + * not byte-swapped, return 1. Otherwise, set the python error string + * and return 0. */ int require_native(PyArrayObject* ary) { int native = 1; Modified: trunk/numpy/doc/swig/numpy_swig.html =================================================================== --- trunk/numpy/doc/swig/numpy_swig.html 2007-04-03 21:31:01 UTC (rev 3651) +++ trunk/numpy/doc/swig/numpy_swig.html 2007-04-03 21:57:43 UTC (rev 3652) @@ -5,7 +5,7 @@ numpy.i: a SWIG Interface File for NumPy - + + + +
+

Testing the numpy.i Typemaps

+ +++ + + + + + + + +
Author:Bill Spotz
Institution:Sandia National Laboratories
Date:6 April, 2007
+ +
+

Introduction

+

Writing tests for the numpy.i SWIG +interface file is a combinatorial headache. At present, 12 different +data types are supported, each with 23 different argument signatures, +for a total of 276 typemaps supported "out of the box". Each of these +typemaps, in turn, might require several unit tests in order to verify +expected behavior for both proper and improper inputs. Currently, +this results in 1,020 individual unit tests that are performed when +make test is run in the numpy/docs/swig subdirectory.

+

To facilitate this many similar unit tests, some high-level +programming techniques are employed, including C and SWIG macros, +as well as python inheritance. The +purpose of this document is to describe the testing infrastructure +employed to verify that the numpy.i typemaps are working as +expected.

+
+
+

Testing Organization

+

There are three indepedent testing frameworks supported, for one-, +two-, and three-dimensional arrays respectively. For one-dimensional +arrays, there are two C++ files, a header and a source, named:

+
+Vector.h
+Vector.cxx
+
+

that contain prototypes and code for a variety of functions that have +one-dimensional arrays as function arguments. The file:

+
+Vector.i
+
+

is a SWIG interface file that defines a python module Vector +that wraps the functions in Vector.h while utilizing the typemaps +in numpy.i to correctly handle the C arrays.

+

The Makefile calls swig to generate Vector.py and +Vector_wrap.cxx, and also executes the setup.py script that +compiles Vector_wrap.cxx and links together the extension module +_Vector.so or _Vector.dylib, depending on the platform. This +extension module and the proxy file Vector.py are both placed in a +subdirectory under the build directory.

+

The actual testing takes place with a python script named:

+
+testVector.py
+
+

that uses the standard python library module unittest, which +performs several tests of each function defined in Vector.h for +each data type supported.

+

Two-dimensional arrays are tested in exactly the same manner. The +above description applies, but with Matrix substituted for +Vector. For three-dimensional tests, substitute Tensor for +Vector. For the descriptions that follow, we will reference the +Vector tests, but the same information applies to Matrix and +Tensor tests.

+

The command make test will ensure that all of the test software is +built and then run all three test scripts.

+
+
+

Testing Header Files

+

Vector.h is a C++ header file that defines a C macro called +TEST_FUNC_PROTOS that takes two arguments: TYPE, which is a +data type name such as unsigned int; and SNAME, which is a +short name for the same data type with no spaces, e.g. uint. This +macro defines several function prototypes that have the prefix +SNAME and have at least one argument that is an array of type +TYPE. Those functions that have return arguments return a +TYPE value.

+

TEST_FUNC_PROTOS is then implemented for all of the data types +supported by numpy.i:

+
+
    +
  • signed char
  • +
  • unsigned char
  • +
  • short
  • +
  • unsigned short
  • +
  • int
  • +
  • unsigned int
  • +
  • long
  • +
  • unsigned long
  • +
  • long long
  • +
  • unsigned long long
  • +
  • float
  • +
  • double
  • +
+
+
+
+

Testing Source Files

+

Vector.cxx is a C++ source file that implements compilable code +for each of the function prototypes specified in Vector.h. It +defines a C macro TEST_FUNCS that has the same arguments and works +in the same way as TEST_FUNC_PROTOS does in Vector.h. +TEST_FUNCS is implemented for each of the 12 data types as above.

+
+
+

Testing SWIG Interface Files

+

Vector.i is a SWIG interface file that defines python module +Vector. It follows the conventions for using numpy.i as +described in the numpy.i documentation. It +defines a SWIG macro %apply_numpy_typemaps that has a single +argument TYPE. It uses the SWIG directive %apply as +described in the numpy.i documentation to apply the provided +typemaps to the argument signatures found in Vector.h. This macro +is then implemented for all of the data types supported by +numpy.i. It then does a %include "Vector.h" to wrap all of +the function prototypes in Vector.h using the typemaps in +numpy.i.

+
+
+

Testing Python Scripts

+

After make is used to build the testing extension modules, +testVector.py can be run to execute the tests. As with other +scripts that use unittest to facilitate unit testing, +testVector.py defines a class that inherits from +unittest.TestCase:

+
+class VectorTestCase(unittest.TestCase):
+
+

However, this class is not run directly. Rather, it serves as a base +class to several other python classes, each one specific to a +particular data type. The VectorTestCase class stores two strings +for typing information:

+
+
+
self.typeStr
+
A string that matches one of the SNAME prefixes used in +Vector.h and Vector.cxx. For example, "double".
+
self.typeCode
+
A short (typically single-character) string that represents a +data type in numpy and corresponds to self.typeStr. For +example, if self.typeStr is "double", then +self.typeCode should be "d".
+
+
+

Each test defined by the VectorTestCase class extracts the python +function it is trying to test by accessing the Vector module's +dictionary:

+
+length = Vector.__dict__[self.typeStr + "Length"]
+
+

In the case of double precision tests, this will return the python +function Vector.doubleLength.

+

We then define a new test case class for each supported data type with +a short definition such as:

+
+class doubleTestCase(VectorTestCase):
+    def __init__(self, methodName="runTest"):
+        VectorTestCase.__init__(self, methodName)
+        self.typeStr  = "double"
+        self.typeCode = "d"
+
+

Each of these 12 classes is collected into a unittest.TestSuite, +which is then executed. Errors and failures are summed together and +returned as the exit argument. Any non-zero result indicates that at +least one test did not pass.

+
+
+ + + Added: trunk/numpy/doc/swig/testing.pdf =================================================================== --- trunk/numpy/doc/swig/testing.pdf 2007-04-06 20:19:47 UTC (rev 3678) +++ trunk/numpy/doc/swig/testing.pdf 2007-04-06 21:24:54 UTC (rev 3679) @@ -0,0 +1,1008 @@ +%PDF-1.4 +5 0 obj +<< /S /GoTo /D (contents.0) >> +endobj +8 0 obj +(Contents) +endobj +9 0 obj +<< /S /GoTo /D (introduction.0) >> +endobj +12 0 obj +(Introduction) +endobj +13 0 obj +<< /S /GoTo /D (testing-organization.0) >> +endobj +16 0 obj +(Testing Organization) +endobj +17 0 obj +<< /S /GoTo /D (testing-header-files.0) >> +endobj +20 0 obj +(Testing Header Files) +endobj +21 0 obj +<< /S /GoTo /D (testing-source-files.0) >> +endobj +24 0 obj +(Testing Source Files) +endobj +25 0 obj +<< /S /GoTo /D (testing-swig-interface-files.0) >> +endobj +28 0 obj +(Testing SWIG Interface Files) +endobj +29 0 obj +<< /S /GoTo /D (testing-python-scripts.0) >> +endobj +32 0 obj +(Testing Python Scripts) +endobj +33 0 obj +<< /S /GoTo /D [34 0 R /Fit ] >> +endobj +36 0 obj << +/Length 2238 +/Filter /FlateDecode +>> +stream +x??Y[??~???4?X??>???????-?yh?0?f?B,i+im?}???p4??.???(??^?m?]? e?????[`gp?2???Z?=??@?? ??;?#>????!AP???#6?2|A~t???'???F6lc&O8?$4B???P?m??? ???????R^????8?4cI?4?0??GL?d?????"U? k??8?I'l-?WDD?????G$?#???E??N?/o ?F?/?F4MX? L???C"??????E???#???1???d???s?8_N-J>&`Q??zfb???.?,,??yX~??w????!?C?n1hZJ??@?Y?????JH????=??m(??c?b?KwXr_?u ???9 ?Q???D4b +=??????det-?????8???>7k? &??z?TrB??iLN???+??pf?h??k????]c]?/\??!??CLU?b?u??)?? e??!.????3????zt(?T??5s?3C?????o?NCT^?O???k-M?4??%? Uk0?>??2?????8??M)?e?v?;???:???k??0]*??s?Y{?WJ???`?4q?(=?^'Ah???umc??q?a?c.}!??t{baq|~?&r????Y2???0??Tw?1???????d????-??`??[??? L?;??????\?#?8?e??w?r?????C2d\????W?Jm(?? +???U?"M??a????????a???h???3?b????????hzyg????RAU{?.??|????;8??x6??????+?~????j?p_?????D|????j=?{L_u?z=?????vwd???Td?x?6?]??Z%?&;???????x?}?$]r??????M?&!_9G?G ?? ?k7?e?h????/$HA???????}L ?^?6????1s???I RP????L(??n????=?A?E??$?'???w>?????????8???????? ?????h??? +????"????#_?????v?g#?S???I?l?IM??:?2 ??[CQ7???B?f?:??T??h?^????i??}{?? G?}:?=???s7?YP ???????t?KJ????yov?-E????ep????`?8???L%????{R?D?m??z?\?$??a???}?`3????7?aS??5?K?4h?)?2???$?C?K!??PNY?.\#????:?????j?#??7U{fX>"?]|-#??-???B/?e?$?Y??D?S?. +?kN<?A?Y?2?<?? u?,?.?????RN?? +?,Y-?w_$?XE??ez??aaj??????3]?v?-?9??1A?/??B?????RR???????(F{NO_??+Wf?? W?1??d?i??????8????%????p??SW?TYH?????"??c???a?p???{H??Z????>???U???{??k[L???????o+W?\c??-M=N?+?(?????K?6???r???P?????????U??-? +???MS?lK\??,S?G????'u??S*"?}#??Y?N.?8?????????"??l?I6^^Y~a??1p???o`??\v????C??????bOt.???+7~?????????????2?Wh?`C???.n??(S?????u4?cd]?M????D?#?Z?????e(??e????\???5??EQ?R? 8%E?x?????Lny???>?????OA?XZ?????%?? +rJ$ +????B#??=o????S??y?4{???A????[I?4?' ?????-?x?@3?s??{????8?_??? ?1??C??'!+??:?j??NM??_{???endstream +endobj +34 0 obj << +/Type /Page +/Contents 36 0 R +/Resources 35 0 R +/MediaBox [0 0 595.2757 841.8898] +/Parent 69 0 R +/Annots [ 50 0 R 51 0 R 52 0 R 53 0 R 54 0 R 55 0 R 64 0 R 65 0 R 66 0 R ] +>> endobj +50 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [98.3198 572.1561 154.7972 581.0627] +/Subtype /Link +/A << /S /GoTo /D (introduction) >> +>> endobj +51 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [98.3198 550.2982 191.9077 560.9481] +/Subtype /Link +/A << /S /GoTo /D (testing-organization) >> +>> endobj +52 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [98.3198 530.3729 189.8853 541.2121] +/Subtype /Link +/A << /S /GoTo /D (testing-header-files) >> +>> endobj +53 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [98.3198 510.4476 187.9425 521.2868] +/Subtype /Link +/A << /S /GoTo /D (testing-source-files) >> +>> endobj +54 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [98.3198 490.5223 227.5535 501.3616] +/Subtype /Link +/A << /S /GoTo /D (testing-swig-interface-files) >> +>> endobj +55 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [98.3198 470.597 200.6545 481.4363] +/Subtype /Link +/A << /S /GoTo /D (testing-python-scripts) >> +>> endobj +64 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[0 1 1] +/Rect [204.9922 405.6211 234.1526 416.7393] +/Subtype/Link/A<> +>> endobj +65 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[0 1 1] +/Rect [136.0988 334.1691 165.2593 345.0083] +/Subtype/Link/A<> +>> endobj +66 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[0 1 1] +/Rect [244.5817 334.1691 276.9898 345.0083] +/Subtype/Link/A<> +>> endobj +37 0 obj << +/D [34 0 R /XYZ 74.4095 789.6651 null] +>> endobj +38 0 obj << +/D [34 0 R /XYZ 74.4095 771.7323 null] +>> endobj +48 0 obj << +/D [34 0 R /XYZ 74.4095 613.3264 null] +>> endobj +6 0 obj << +/D [34 0 R /XYZ 74.4095 613.3264 null] +>> endobj +49 0 obj << +/D [34 0 R /XYZ 74.4095 585.1076 null] +>> endobj +56 0 obj << +/D [34 0 R /XYZ 74.4095 461.6307 null] +>> endobj +10 0 obj << +/D [34 0 R /XYZ 74.4095 461.6307 null] +>> endobj +60 0 obj << +/D [34 0 R /XYZ 74.4095 420.7842 null] +>> endobj +67 0 obj << +/D [34 0 R /XYZ 74.4095 322.9312 null] +>> endobj +14 0 obj << +/D [34 0 R /XYZ 74.4095 322.9312 null] +>> endobj +68 0 obj << +/D [34 0 R /XYZ 74.4095 279.5807 null] +>> endobj +35 0 obj << +/Font << /F39 41 0 R /F44 44 0 R /F8 47 0 R /F51 59 0 R /F56 63 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +76 0 obj << +/Length 3176 +/Filter /FlateDecode +>> +stream +x??[m?????_??:$???.?Om?)????-??(h??|?%$9???wf???\?:??!?"?;3??;ylE?[I$?????h??j?EWp??W,?H??T????????X??j?/???W_????t????? +? %??hF?????????>?lc???_?z??mZ?QC8Sv??q?K??@?s&G???7??/???A?????!$V?J? +?D??\"-Sc7??/p?;?????;???)???=^?g???\?7]???@v?????z???s3?w???l????;?{???9vR?Ya??8v#?7?J?;?}????n??wA?? B8?.?i???c????J??a#?w???pqR!a??????[????c?????l????x +0????:p??=Bw???&???>?????(g?rzZ ?#??? ??&L?s?t??? [?????&?'c? 7o??????#???9,?0^?+?Q?J?????!zj??H)???]a?~G?'????aO1B?]?????)@?x#?G??7??#?/As???l?9@????):F < ??????BDgK_;.????a??Pnm???)???[b#?.??~?=??r?j +?+%??V??2?Z#?(f "?`?\R????.9??Tj???y#c??k?n??1???'`????,?/@=?p???s?~?K??q?9 ???!@?bE50U0 A?????uDB?/"???!??uh??.k$???;?C?{????5?5?????!???]??4????]t?????w?? +?.???4? !?qj!?+QZ?m??m?W?????2??J?_???????O??(J?YF??"?i???_?mcL??{m????&????JL????I????Y?W?????????5?P????5????)?^?T??G?i?-????t?????vP}???z?? +???o0?yt2?9t"?2:sl3tj???|??????D?#?y?3?9?#???sl3?k?*?|_?"5Q?t%A?T2?9T"?2*sl3Tj???|??????jCm)-4??jgTsjG?e???fj?|'???^a ?!C%?/?, ?Q?!????c?!S??@&?[?}=?Z??T?H?T3H$?E$f?H????(???F^??Dk?P??Ts`E?e???f`?|'??????%q?????????y?3?9?#???sl3?k???|?????[????Lo$?\J??????P?9~8?7x>?hz?%B??\?#j??o2QC?t?}?? ??#jY?te???7?HU?D??-W?/Q?3????g??????|?.???y!???? B"L??@????U???2(F????Ny??? ??????0_??_?0?f???h????z???M??8??5????? W?G4??"NN?P?8????s?S??+?=Z?????"?W??w?[??I???:p|???~?^~!SC???????H????o?u +???i%??????I5??:`?endstream +endobj +75 0 obj << +/Type /Page +/Contents 76 0 R +/Resources 74 0 R +/MediaBox [0 0 595.2757 841.8898] +/Parent 69 0 R +/Annots [ 78 0 R 79 0 R 80 0 R ] +>> endobj +78 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[0 1 1] +/Rect [106.2195 758.8407 135.3799 769.68] +/Subtype/Link/A<> +>> endobj +79 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[0 1 1] +/Rect [253.2366 687.1097 285.6447 697.949] +/Subtype/Link/A<> +>> endobj +80 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[0 1 1] +/Rect [185.549 647.2592 217.9571 658.0984] +/Subtype/Link/A<> +>> endobj +77 0 obj << +/D [75 0 R /XYZ 74.4095 789.6651 null] +>> endobj +70 0 obj << +/D [75 0 R /XYZ 74.4095 564.5693 null] +>> endobj +18 0 obj << +/D [75 0 R /XYZ 74.4095 564.5693 null] +>> endobj +81 0 obj << +/D [75 0 R /XYZ 74.4095 520.9398 null] +>> endobj +71 0 obj << +/D [75 0 R /XYZ 74.4095 248.7539 null] +>> endobj +22 0 obj << +/D [75 0 R /XYZ 74.4095 248.7539 null] +>> endobj +85 0 obj << +/D [75 0 R /XYZ 74.4095 203.1918 null] +>> endobj +72 0 obj << +/D [75 0 R /XYZ 74.4095 156.2214 null] +>> endobj +26 0 obj << +/D [75 0 R /XYZ 74.4095 156.2214 null] +>> endobj +74 0 obj << +/Font << /F8 47 0 R /F56 63 0 R /F51 59 0 R /F14 84 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +88 0 obj << +/Length 3302 +/Filter /FlateDecode +>> +stream +x??ko???{~???5?e?u?}H?\??=.n???(?????k??????3???$Jv?+y%jH??EE?q?'?*?4??Y?jf?g??'?? +??z"Fk???<?????Y+???"?x????Vh?4???????U???.???.?k?j?s?:??W?kU???????Ux??????????6mx?????z?7????????N?l-s? ???`J??p?p?bp??t????? +???;?????I?@???H? e?t??p??????`~?8??????|?????@?-\?_M???i?FX???????V???;/???U?T?????cn??????6+?*;?? ?%e?H?9??a???-??????)??56????qn????????N? ?{=??1N???*????h2??P?3?hD??l?2????jqR-9c??W?5???cY?@q???SQ????'B=?wm???n~?x?;???Z8R?o????uC??9??wd??h???q?nj%k?kf?rC????*?wx?a5??%?%?p v5P??I??&"/??p???)?d?????m^Z???????Z?O+???????l?_??&;YvY?dm???#?JPl~???7?????M??U?9?[[/j???B??]??Ud??_E1?_????, I??Q??BJ??|?.??_E$G~?B?rT????r?>*i??t???6L ZS???b?sr1? i?u!??\?, zuqM t???O??:Q@?????????Z??6???4?3??>;?&$]??p~s???6????j"?. w??zq?p$??]-??V???L +?? ??? d???"????}??7??qS@?:fDJm?9)=?G????C ?VO?vY ??"_9?x??,I????j2? ?QL??? ?/ 7?k? ?j??e??c?F????x?Y??m?5??2?RZU5%,+?T ???v??D? @y??SfW?E?1???? ??bE?=+?????>??u??????3?J@?'?W?4???c??1K?R? ?d??A?~?Oa??&.!#?$???Z??t?????<%Z"_K=???? a??x??k"g?~#OLA_J?X{?d????y??U??S?????_\? ??#???#?M#=??1???E??{????y??????? ???????K +??8??@xXa?R*R-???\????"#mp? ??????*.?Y?A?4?Q}???@??????s???? ?m?S$:???(?J6?5???????????M???x2??A?'?????? Rl??? v??H????:G???"??????&??:x????+ ??????????m???????O???????-?)??xu?P?MJ?-??a????????????wY??>???&?@?? ?B?q?0?8@: 4???x?!a?????y$ "????5q?c?"?},??z/sq? ??i???b\?z?+ f-P7??S9Z] `G??es?\??4U??sa?P??G"?dZ wW?????(????VPendstream +endobj +87 0 obj << +/Type /Page +/Contents 88 0 R +/Resources 86 0 R +/MediaBox [0 0 595.2757 841.8898] +/Parent 69 0 R +/Annots [ 91 0 R 92 0 R 93 0 R 94 0 R 95 0 R 96 0 R 101 0 R 102 0 R ] +>> endobj +91 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[0 1 1] +/Rect [135.2839 737.0327 164.4443 747.8719] +/Subtype/Link/A<> +>> endobj +92 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[0 1 1] +/Rect [208.3454 724.7985 311.5372 735.9168] +/Subtype/Link/A<> +>> endobj +93 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[0 1 1] +/Rect [364.7967 724.7985 393.9571 735.9168] +/Subtype/Link/A<> +>> endobj +94 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[0 1 1] +/Rect [268.4471 712.8434 297.6075 723.9616] +/Subtype/Link/A<> +>> endobj +95 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[0 1 1] +/Rect [458.303 712.8434 521.8625 723.9616] +/Subtype/Link/A<> +>> endobj +96 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[0 1 1] +/Rect [73.4132 701.1672 119.3703 712.0064] +/Subtype/Link/A<> +>> endobj +101 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[0 1 1] +/Rect [324.6699 247.1243 360.0704 257.0788] +/Subtype/Link/A<> +>> endobj +102 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[0 1 1] +/Rect [382.9052 247.1243 454.0182 257.0788] +/Subtype/Link/A<> +>> endobj +89 0 obj << +/D [87 0 R /XYZ 74.4095 789.6651 null] +>> endobj +90 0 obj << +/D [87 0 R /XYZ 74.4095 749.1338 null] +>> endobj +73 0 obj << +/D [87 0 R /XYZ 74.4095 677.9741 null] +>> endobj +30 0 obj << +/D [87 0 R /XYZ 74.4095 677.9741 null] +>> endobj +97 0 obj << +/D [87 0 R /XYZ 74.4095 634.6237 null] +>> endobj +86 0 obj << +/Font << /F51 59 0 R /F56 63 0 R /F8 47 0 R /F44 44 0 R /F58 100 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +99 0 obj << +/Length1 1211 +/Length2 5695 +/Length3 532 +/Length 6468 +/Filter /FlateDecode +>> +stream +x???y@??=3!EB??G?CnB#~A2?y???-9O?b??? +z?}?!??3???[???t?K??~%V???m??L???8????\?? ?y/?l??????lIz??T???E"?"??=?????AH.?6?=?????K??)x}????|??j'o2b?=?s?R?T^?IV?3?i_?{S@??c????U23?+B???G??? +???fa?}??q +:?p?~???"UQ?-??):m??}EX?? +??*?^???_??Lm?t?;?.???A?*+|I?8_X?[$???I???K at MQ?V??)??$^???~????????L???????D$?uHv??^}?k?b??#?[P}"VZ845i??R?A????M???#??P3???*???.IPk??????4???P??k??Ra??(V?? ???-?!Uw?K???e???7z|o???{'j? }9Y??{7R????h?6P???,1????^tq?????4R?c?4?]i?x?? ???1?SU{????# +?a???]?J?S?R??????.G??f???Y?S?W???75????? sT7?c?4%????x??? ??A?rB?M*????pw?!?_????Y????Y????O?#??????9?w??^w?M@|5+Bi?v?'?x?????h?I}?.??,F?41^??????9 ??|c?? /I`???v>Q??_????G???j|:w??u?v?m? 9_?2?q??o Y+?5V???g?I?q7??G???Y?9??pR?(???Vk@????|v?????U?NiM?PGa#????P?%3cY?s??`?W???-???x????????e?|N?}/%V?z?O;?????~m*????$?)?Z; >0?Zo$2??|?`)N?j?"? +?a#???!?'?p\D??BV_?[?a????*?j??????????L?? ??Z?P??I?u?*?.K\6??CU?a??[?z??H?i?b6???????eM??|???R???$?????| ?^-IV?:/?{?~&???el????4????_?*S??Afn,"MdM?h?R?z?*?~/??'?:'????{??_??=g?wk at 0R??u +4?RtV??s??{ZZ?+?o\? ??]@?T?s?}r.?@?{D?b?8Ai????#??"_ij???7?g?yL?R??w?l W?|???2???;?????N???"]Q? rl?v:2?Y?; iC? 6?^?D??#???C????_??H?z??Z%z???"H?v???&Q??%?x???k???_??Cut????????????t_l@6i??_^??? ??+?nf?IR*???????/?u"??????????w?jjA??????a????????????.?J?Tz????,??_y?8??????????G7nd@???1?.Q??s??E??[MT8z??n???sm?7h?????w|>J{"????X?R??WW|??v?j?w*?d?@J??/l?5)????g?"?yS-Ek/??,>"6?URc???K??Z?E???Hw?? ?8?????1??1?Z?k?Q^?r?????Q_xF??\;???Q???UF;????tv??Gj_D)FW^???i?,??????Z??N.?Cdj(m?#l???g???{C?2 +\b}??? Z????.bo???<<';?y???X?}K?f r@9|??Y5x???*?J????Nb +??\h? C??k?*B???3?R??N??}?l? ?R,4?e?^J??X????}( (z??????m?Kmv ?h????1???_??????\?n?\8???A?????b????????/?^?S9 ?0"?e?jL?'?x????kS? +???hn?/?P?8???,?I)????i???d1 +?a???*^3B\??}?e^??????+???X??Y?y|? ????S?b???W??b{?l???-z????Ku????? +??NW?????st?H&?7?_5??w\??U???w??,??;yJ'xD??qxiu??qQiq|Fj?.B??W?n,??)???H?$???mC?'??(9?????F?\W??W????j ???},h?r@???? Y0,??5?k?>.?vm?fJ?aA??S???.???S????'??S???z?P??K?\UZ????*???87?b5$bS?????????z????$?"???EU??h?`???I ?>:f??CC?R+?or???|H8???Q???#???(???^^?Qfw??+F??+?T?8o?????'?rFv?L?????,! ????O?d at TC?? +?wW??A`?|}=?Cb?Pc?????aJW?????l??????wz?!?????p??U????N?y ??^|??????Kl$??/???????_??M?r?~x%J?????"6??;xFm???{q8???U????~?;??8??jK???????*???A????loR?Ui?O5??H??),[??9??|H?5?>:????3?uW7Q??]1???????z?Ww? +?+???b?r=? ?u|?Bk]R?????*?T>?n3B?6?U?)?Z????ZG??9????eO?An?+=6jM_x?5??^bl??????3??????F?|?Nuv|???C?????Lwp???JV???????Ado??EHm?????&?{?6?&???kT)?E???:??A?y1??????^?f?{?]???]?#?`?gf?t? ??'y5?OF????????????} 4????u??M????'T???????{????#8B?_rL?7??6?s???$ F?]?}??Sc????u(.???????J?T?/?B? ?bph?N?-?-endstream +endobj +100 0 obj << +/Type /Font +/Subtype /Type1 +/Encoding 103 0 R +/FirstChar 45 +/LastChar 121 +/Widths 104 0 R +/BaseFont /XUFCBG+CMR9 +/FontDescriptor 98 0 R +>> endobj +98 0 obj << +/Ascent 694 +/CapHeight 683 +/Descent -194 +/FontName /XUFCBG+CMR9 +/ItalicAngle 0 +/StemV 74 +/XHeight 431 +/FontBBox [-39 -250 1036 750] +/Flags 4 +/CharSet (/hyphen/period/zero/one/two/four/six/seven/colon/C/D/G/S/T/U/a/b/c/d/e/f/i/l/m/n/o/r/s/t/u/x/y) +/FontFile 99 0 R +>> endobj +104 0 obj +[343 285 0 514 514 514 0 514 0 514 514 0 0 285 0 0 0 0 0 0 0 0 742 785 0 0 806 0 0 0 0 0 0 0 0 0 0 0 571 742 771 0 0 0 0 0 0 0 0 0 0 0 514 571 457 571 457 314 0 0 285 0 0 285 856 571 514 0 0 402 405 400 571 0 0 542 542 ] +endobj +103 0 obj << +/Type /Encoding +/Differences [ 0 /.notdef 45/hyphen/period 47/.notdef 48/zero/one/two 51/.notdef 52/four 53/.notdef 54/six/seven 56/.notdef 58/colon 59/.notdef 67/C/D 69/.notdef 71/G 72/.notdef 83/S/T/U 86/.notdef 97/a/b/c/d/e/f 103/.notdef 105/i 106/.notdef 108/l/m/n/o 112/.notdef 114/r/s/t/u 118/.notdef 120/x/y 122/.notdef] +>> endobj +83 0 obj << +/Length1 750 +/Length2 576 +/Length3 532 +/Length 1110 +/Filter /FlateDecode +>> +stream +x?SU ?uL?OJu??+?5?3?Rp? ?44P0?3?RUu.JM,???sI,I?R0??4Tp,MW04U00?22?25?RUp?/?,?L?(Q?p?)2Wp?M-?LN?S?M,?H??????????ZR???????Q??Z?ZT????eh????\????????r?g^Z??9D8??&U?ZT t????? +@'????T*???q????J???B7??4'?/1d<8?0?s3s*?*?s JKR?|?SR??????B????Y??.?Y???????????kh?g`l +??,v??HM ?,I?PHK?)N?????;|`??G?{9??jC?,???WRY??`?P ?"??P*??P?6?300*B+?2???????t#S3?????J.` +?L? 2?RR+R+?.????/jQM?BZ~(Z??I? ??% q.L?89?WT?Y*?Z? 644S077?EQ?\ZT??WN+?????2?A??Z???u?Z~?uK??mm+?\_X????????7?D?????Rl:/P1?d????????(??l=U?h?d?_O??E?k?v-X1??t???`????i????_y. ?1?????????:?un~Q???3/??S??}??]?? +???$e~s?]F1????/??Q???m????|<?????/??q'}I???+6???E??g???xT.??G??gt???v??G??U|?????~??]?R????_k?9???:?{?p??G?? ??d}dN<6??-uB?o?H??=c?M?vH??z?q?a???RK?~,K???}????????m??????yo??~?????v? +?_????s>???.#????????{?/?????k????\m?|??r???X???????ad?j|?????R/?,2?p?0, H?IM,*??M,??Er?endstream +endobj +84 0 obj << +/Type /Font +/Subtype /Type1 +/Encoding 105 0 R +/FirstChar 15 +/LastChar 15 +/Widths 106 0 R +/BaseFont /YWJCEM+CMSY10 +/FontDescriptor 82 0 R +>> endobj +82 0 obj << +/Ascent 750 +/CapHeight 683 +/Descent -194 +/FontName /YWJCEM+CMSY10 +/ItalicAngle -14.035 +/StemV 85 +/XHeight 431 +/FontBBox [-29 -960 1116 775] +/Flags 4 +/CharSet (/bullet) +/FontFile 83 0 R +>> endobj +106 0 obj +[500 ] +endobj +105 0 obj << +/Type /Encoding +/Differences [ 0 /.notdef 15/bullet 16/.notdef] +>> endobj +62 0 obj << +/Length1 1548 +/Length2 8704 +/Length3 532 +/Length 9616 +/Filter /FlateDecode +>> +stream +x???eX?????"???R,???Cq/?5@?@???)????Hq+N???E{???g?g???~??M?!?w?9?;??>??P?d???e?PVA????;????]??F +4?????P? ?C@? ?p?8??9a4?????????????B@??eS?5????? 6?? ;;??_'?@g ?h??????Cf at +??_??,???.???? +?8?L???????;?y,??hl*`X6 ??? [?\???N?????w????????@X?? ? ?????a.??@? ??{n??@? ??????B?@X^???`????????FNX^?????o?????$??= 7????????=?{??m?.?3??????? ?????f??B?6I??%?2y?H???V?cT?????????):1????+K???F?&w{ vo??>*{???d(?F^v? JE?< +????$0?J?Y?qVX\??7???V??????hx@? +???r)?a?&?m ?j???Z[?z!?.?AP?%??9j?????DP??'??N?:?N??!????K???#E#??`WU?????,???+?=7??:LhEEYwg???k?\G?"-f'd +g??q???~!???z&???~'??o? +g&y?|i?|L;???-.??}?????o?E(?p}??I?F?}9Y? ?4h???yD3v?^h??%(?QW?A???!RhgYu??K[9?,C9n? .?UA?Xh2M?>+.?w^/6???4?\|h?L???k???v?M?]?vg? +7??????w&{5#? ??!???A?? F7]UP?%? Cc?????L"#?B-S&2_???9????????ZQ??qo-*??O\??M?-w?M?n??f:?Q?? N??%e?x9????>?BY??}n?J~???"Y????ON&Z???? r+?kw??f??mk????ub??:?)????/L??F?_?%??$????%g ??1y???'3bL]?H`C4I??*?\?2G???g;??N??lS?@fq-A?D??N ?????????M?O???? -???C? ??k???'%????v#?(c?(????C\?[`:??{7[8?s?~???h?W???k????K???1?r?'?E???^\ ??|???F at W"1??k?e^????X????W?Q?R&%???6X'q???l? ??o??~E? ??/??;O?E?Z\c?3?????????C???q? ???K?;?CG2?6W???)_?]???\T???5{?Wz@"?p?q&??]Gz-???_E?5?pz?)(?R?P?[?6?????N??0????a?????T??4??([?ih??t???????F?K?O?M????V? ?????E?]U>????*g?rp???k6b0??????H???????????*-Y??I?????j?+s?&C???????E?3?{x?TX?A??m%u0?L??Ex?l3?o?o??q?sD???? ??g~?s??z??Z>???%W? +E?????5j??B?z?????K?'??L?[?;:?BUQ??;?u\??MG??????V??????e?1?H?d?-?[??m??d??s ??_???????;{5%??eH"?k?W???7?(X)T?/J?Y??????????;s<4?|???oh???????EH?7???P? +?L)gd2???????? 7??w<@?@u?? ???I4????-:P??9??Y???D?5???mE`$=>c?D??k?8??(?G,??9?]??*?????f?K?x?G,?????2??l???????`}???????(????'??C?U^????f??????o?s??K??=H?z??????? w]V?h`e??+?????tz~??"zI?[[??13??1BWf??????a)???????U;??+N9 ????N??K?[?oU)|?m??0????S?x??-??z?i%?nU?????"u??&?#??.???nLK~"3???c?R%?NP???;hw,b?_??? +8l?????>?=?6 J??la?a???????EtM? 2???C???f?? 8|??8?J'??????E??g???i??p????X?}??d'K??h????|?2???J?l?cW????7W%y???~1????W???????w'???gw?~?!g?????u???T????`???2?e_?hGF??.????????%Z?6u|O?5?+?k_?/?+b|?_?5??H????\&9;????{V?~????0????{?g???o??EU?U?????B?:O~mGKB????d??53????g??h?U??Q???r??F??i??????9???????????k?mp?g??Kmfl?H??@v_7r??06a?S?r???)??x3mtLi?TN????9??*??V??Y???%??e??l????I HZ0 A??m??%????HAsQ*w at m?k?@?C??}????????:?i????7E??RW 7L?^U??\???8?@}???E???y?????m +????O??????'q:(?]EI?c'I??_?k?T????X??;~??o?????J????4?U??GYI]???-T???@r??+??m??3??N?a?????Sb??:????t?)q?????7?Q5?h??>Te???????@??0 +???????V?>-???LD??!?R?a?,?qV"f)?=??} c"????D??????Kp?N??bZ?????/?G????+4?,8`g?e?a?n,"???/?b?R_???N;???????O? ?????y6y???r?(?A??,g|?&z?? +?D(??%q/#b ??[[??+????}?>?-?+K??mhDI???Z??7????u???j????DL4i???S????z ??!?I?B?~Uu??????|?>?s?X?e???IUa?????V??2?????a.????RN???? +??m}?????I?HD3????(?>?????(????:??j?????????????9?? ? ???!?????s???????|0???M??i????%g?CN+?w{??#O/?X?g???BJ? n}?K??Dj?????n?????%?d'CY???u????4??D? ?F???????u?K+ ?? ???k?W[`)?)?^?QZ?k??@A?LK?Nxo??0? ??q??~?P????R?%"?H?i???j??_????x????,G]z,????v"I?;&2?r?~$???w}K?V.???4D ????W????R?:P??!5?S?,UYx???}^???a?3\??B?/??&?S?_?1j ?.0#g0x???\?-%??%?K?BO???~?'R?????L?????- ?F??N?????Bb??X?:?`q6?5??B?FaS?? >????='I????y?V&E?&???\#h?'??e???D??2<^P\(?9??l?v?1?tjN}??q??q??????E??V?\e?h7?z?K?X:I??"??? ??O??7??[ly??W???????rU????L?n??'? 5?z????k?'$>??y?"b^?iG????,?gRV#???GB?$??p????]??4U?.?V????????0??'=?4??(3???$W=?rHf??'?G???W???L???C??????a$^]= ?hi?_??FBBsv?^??????<\?J?V??? ?e-'?%Hl??*?<?[%u? +????2???X?????3u?Z????????d?M????uJI2"??F???Rd???L?j?e??????p]Y???[/?C???G?? 1?????+?[??????????????!d?.?{?0????????f?G?:??(?????#????&??u?\~qG????i??-9?????-?????j??$ ????????D?m??&p???n1??????c???????n sZ)??,?c??&???$? f?Gs?JJw#???u?S?xH?????kch??"?????>R[??k$?+????~??3fqP@??xA$??(????9?%B."?U?g?? ?F?F??*??????/??-???m????????Xjh?????%VD?+'?Z??|?Ne?H??~??7/???y????]? v???k ?????'??t!? ??????n5R?[????n?????=?~9?s?F???w?7~jM????_?TCC???? $JdG?:?m??4v???&?z???r?qc???B^?????E- ??K??J?)F???z??f?????>IjO??KP?v??"??I\??5'?UoB??M?X9!??R?3i?b???1q?????&Y???w? &?????l_?????????x_QK|l??8ti??rz???$????N??T`?ukD???t^???T?Ma?A at A??a? ?lI??/?[???,k?wYCq_g ?F ?{m? ??9&endstream +endobj +63 0 obj << +/Type /Font +/Subtype /Type1 +/Encoding 107 0 R +/FirstChar 34 +/LastChar 121 +/Widths 108 0 R +/BaseFont /FZNSNI+CMTT10 +/FontDescriptor 61 0 R +>> endobj +61 0 obj << +/Ascent 611 +/CapHeight 611 +/Descent -222 +/FontName /FZNSNI+CMTT10 +/ItalicAngle 0 +/StemV 69 +/XHeight 431 +/FontBBox [-4 -235 731 800] +/Flags 4 +/CharSet (/quotedbl/percent/parenleft/parenright/plus/comma/hyphen/period/slash/colon/equal/A/C/E/F/L/M/N/O/P/R/S/T/U/V/Y/bracketleft/bracketright/underscore/a/b/c/d/e/f/g/h/i/k/l/m/n/o/p/r/s/t/u/w/x/y) +/FontFile 62 0 R +>> endobj +108 0 obj +[525 0 0 525 0 0 525 525 0 525 525 525 525 525 0 0 0 0 0 0 0 0 0 0 525 0 0 525 0 0 0 525 0 525 0 525 525 0 0 0 0 0 525 525 525 525 525 0 525 525 525 525 525 0 0 525 0 525 0 525 0 525 0 525 525 525 525 525 525 525 525 525 0 525 525 525 525 525 525 0 525 525 525 525 0 525 525 525 ] +endobj +107 0 obj << +/Type /Encoding +/Differences [ 0 /.notdef 34/quotedbl 35/.notdef 37/percent 38/.notdef 40/parenleft/parenright 42/.notdef 43/plus/comma/hyphen/period/slash 48/.notdef 58/colon 59/.notdef 61/equal 62/.notdef 65/A 66/.notdef 67/C 68/.notdef 69/E/F 71/.notdef 76/L/M/N/O/P 81/.notdef 82/R/S/T/U/V 87/.notdef 89/Y 90/.notdef 91/bracketleft 92/.notdef 93/bracketright 94/.notdef 95/underscore 96/.notdef 97/a/b/c/d/e/f/g/h/i 106/.notdef 107/k/l/m/n/o/p 113/.notdef 114/r/s/t/u 118/.notdef 119/w/x/y 122/.notdef] +>> endobj +58 0 obj << +/Length1 1117 +/Length2 4847 +/Length3 532 +/Length 5565 +/Filter /FlateDecode +>> +stream +x???y0'#???C??`?a(?Z ??O??zF?"?:??????????d???_L??XK?IH? ????_??(??rD;!P????? ???0?????`>??b(4?? ??Gc??8N9 @\???_?u~?$ ????q?_???M??_D?4?E????_$???M????"????? ?:??o???`?j:????.?? ?? ?q?_&B???B???P??7$(c~C???o( ?cC???~?$A??7$(????9???hQ)@TRL?R?d$???DGCa????)?7?????|`?T?ch?ka?????ZJ??????!5?????b??}O??G?i???????{E? +0??? +??O=]??_??{?n??q?w???A?:]s???? ??????$????oo???5o?P?p?Y{??e???Yhg??? ?/?mB??Y%9{?>)???@h?k$e???6????????S;R?>3???)????{??m?G/???L??+?q????[???d??^???W?zLU??ZR^?.?ypC?"?????6Qu|%?@?l?+{+?>go??E_??.??????a????@ ??u??R0S?????~????p????A??^??????O+??x?+F??K?zsu??'?C;?d?] +?=5???)-???b?v???h=??n???:?????????????i??~???-?}????D??? +?Z?T????-??y??Q0??s\???Z`@??<4?T~b?m??? ?pN?P?G?A~k H??}Z??n[?7???3|/g?R???.w~?(~a?:sB???l?\#/?qwJ ??g?????????;,l?? [|#A:rNk?????!6;e?G???????Jk? ?????????W? X?nX? !???|?HZW??????w??? On???+td?Z??hN??5?n?na*?D3Rp? ?r??}-??tv[b??WbI/??_8??-?=,y??Z?%J?B??,?????]???_?o?'???K??z?J-?2 Y?[,??nW/?`z???????^??"???]??%???s9"T|??????i????uHD?W?Y?=?h??w?r????JdR????;????t?>?????i%g0???n???%?=!?"??~dQUe8z4K?B|c0???n??^?!?-9e??\??e??pc???b??-?V?m?d?l????i?????{??z?(JQL??(?a?nq??!n?>??lg5?Eo???????????c?o?6`??z?U??"R?g?? ??????????p? +???n????Gd_?z????c|rRE??L?^zH??B??Ln?n/k????D???w???JR????V??k?~?L??~??;s2qAx?KI? +??????xL?&Q 9b?s?"?:????~??????????????C?? ?q?r?Y?????????????p?g??r?????s1?_?#???????#0?LW?&D?`$?l??4ryJ?r?????m ??ZV?]iJ???z7?_?>\9s?'?0?3E?f???????i}???{?O?ZGy???l?H???zfv#?z??m?h?AN?w????.??g???(?????>W?O??_~???\:*?^?h +ad?????fB???,???,!z]?b???h ??????z????????Sd?a%??1???G?M?? +5W+??|'???/'. ?i??rx???%:??????W!?;r??pK??!??B?4&???N4k???0??v?????6?=?d1??????(Wvkz??J~?='?n?????J?|U???K??oz?Yk?5V?U?????Y??I ??????Y?c?=q)\Zxe?7?q??Bn?&??????? {}? ???)+??}j6?se?B?l?5?^Jie?J&?1??D|?Q?h???? ?$/?i0?$??S?k???.???'??<Z?h??r@???????(dVb???:,Mk?R?[>??ti??????&??y%L?????????3e?]?>[ +n????Y????????`)?~?F???-]W???{????7I??O???????$????Y?=??z?R???h?%??l?fn??????P? [\??m|??YU???????D#=1?-Z?????0??>??J?*?7?,???/#??c0?URf??W'???Y&l??^??  Q??$?n???????I?XE+?WY?e?}?,????Ql?5V??=>?Gb????&.N"7?8??/??d????W??K?2?#??4?n????Z?o]&????c??g?y???>???L97?s?> +???M9???rvl?*B2??y?JZ?r??M?)F??o?)|khL=i??fqa??q?p???B???ku?Z?=????q ???\?????P?????MTA`}q"W?????N??zj??Y |-a???O??W???4R???|[???????*s?W?r$??4?A?i?s??>x???'zZ?????E?????/c'????L??lcB ????+??!???????L?:?I?????AC??Xz??U?G?_n????b?^J???Q?f/J???3??????e??k?5???m??z???vM?p???????l?h2l[???9?7???I??H??\??A?JRV, ???+?y???z??U??MzE?L????/???i?pb?B)??zg8???? Px? +?4hz????d??@?????????????-jt'?2+'zR6 ??????N?p??? -??????I?i&H?n??} x?C???X?zO??[??(Mvz????W??y?@N??K?k??ga??xl@?J?UT??2?;1]?&sQG??;?aN??9????Y??8I???)?E??@YciK??X???'y??'? +/?? ???M?i??l?442 +aR???Uj-A^$r$\?VvDS95u??????????> +:????????&T??? +!?'?"?0y?9?O&v?O???kvrv?,??d_r???q?l?Eu???????~??*??-{?]??????????Z>0??][?^???2?6???j???????b??|?}??N??d??????{????i???-??no???????????jd?CM/?x??????[?%?_R??j?????"> endobj +57 0 obj << +/Ascent 694 +/CapHeight 686 +/Descent -194 +/FontName /DICPCW+CMBX12 +/ItalicAngle 0 +/StemV 109 +/XHeight 444 +/FontBBox [-53 -251 1139 750] +/Flags 4 +/CharSet (/F/G/H/I/O/P/S/T/W/a/c/d/e/f/g/h/i/l/n/o/p/r/s/t/u/y/z) +/FontFile 58 0 R +>> endobj +110 0 obj +[707 884 880 419 0 0 0 0 0 845 769 0 0 625 782 0 0 1162 0 0 0 0 0 0 0 0 0 547 0 500 625 513 344 562 625 312 0 0 312 0 625 562 625 0 459 444 437 625 0 0 0 594 500 ] +endobj +109 0 obj << +/Type /Encoding +/Differences [ 0 /.notdef 70/F/G/H/I 74/.notdef 79/O/P 81/.notdef 83/S/T 85/.notdef 87/W 88/.notdef 97/a 98/.notdef 99/c/d/e/f/g/h/i 106/.notdef 108/l 109/.notdef 110/n/o/p 113/.notdef 114/r/s/t/u 118/.notdef 121/y/z 123/.notdef] +>> endobj +46 0 obj << +/Length1 1686 +/Length2 11515 +/Length3 532 +/Length 12472 +/Filter /FlateDecode +>> +stream +x???eT???hq ?4????wo?-8 ww????w????????;9??|???f???jU??????? +J?????@1['zff???"3????I??\?h?dnk#b??0ss??????_v6vr??????????J???$N??5????? k?d??ad`P?52:?1????p(?. at cff?????hjn????????-??_acg??r:8??TkR@???6Vnc? ??-???C??s???3??k????? ?????;????? ???5:??g??_n?@csg???t2?27?1???2w3w+?;?L ????6??)??? +???R"r?????? ?m?????Y??????7???`? +?b???z??'???%jcdklnc +`a?88?!?N???sc?+? +fd??uM?z?0?u@?kCA{?h?w?_?B??? ?h?l?46???N?3???#?fc0?8m??&D??;?????????????????;????? h?;??*kk?;?`t:????lm??0;H????qv?????? PiGP??aPaG??u???????#??W????G9 at 3?V?7q?h???? r?M C????????oU??M K??? ?q?*(?&???? ???ouC?7????!? ?????]=???w?$b??@"F?O???}Y???!?Aj? ??????IX?? ???a?A?$?????Av H??i8??????)N ???Y??? ?/*i?u?E7?? _?2E?m???????~???\~ju?8N#?/???([?JDyv??K???+5??S],?J?[`5+?"j?}q0??__P?b?~??{[|?k?]??muF????}????D3j%bU???T???.????R??;X!? +0Ur?B/?)K?g`U?????M?c? ?u9?kjU'~!??Y-??c??3??Z?g:???- ?|?s=$?s??J??????y??:e??jSkB#5Y?bk???N`?3#_??? z#?????y8 ??z8"?o?>ZQ?{?"???T8????#???U?v`$????pc?X??T?SD?}??U??? G??f e?*?X?C?^0?????8????&??X??4A?< T????v?a???D??a\\v[jiR??Z?U{?????p?>Y+kU??f??O4?-M?S??9?#;SK5?_??@????r???r?3?Qi$??/?2??om???iy"L?hG???????]????b?J^?N??6???I??$??????@?u X?? ?!{?????_?????;???V??;??????,?J???????b??M3}?Em?H???^-??2?&??86???c`??d???}?%???pN??1?\@????? ?RA??b????]R?o?X??*??D??M?????????<\j?? ce !?????TV?P_@?}??.?LRzNEhM???y??p?"??f??{i~]??????"??b?n?(U???????7?Z??J,????/.?????T??2l???o?"?????>?????{???G{? .Ly?`?]L????ff +??>n?xe??{y????&V?y_? +M?=s??!???????0A,?"0??U?w??s?GWc????+???4?n`??!85>?P3*? +t?ys ??????pE??:??}/??Z~??r??4?fx {w?{&6x}???w??a?]>?? ???M?{BC ??????79???(???'Kd ???4???'H???v-???K +M$????y???[f{J|?+?g?????=?????F8nTW? ???P??nM?i_)q:a@???k??&Qu??4E3?qr?(????`)b??9\????iI?3?{?2???z?9??W?e?????0SO?z??w +??`!???}vf???K?t=?????! +????W?:v???>v?M? ????a???h??SR???d? ????BEbg??F????? f??YB8?b??L?I?-hM???/?e??N6BwQ?z]?????!2?~??????I?@M|HW?F??)g8?\??|???[G?PQ=;a= ?lA?L?0????-???T??]?z??]??Nd???.????h?@???}??~?d???"d ??QV?????Z??G??????P|?">'????1uk?????Gl| ?W??k?+? X?R????????^?z??7?n????K???V???????.?p?????(??cu+??-??b~?/?Q?X?F??m?,??G?????~????7.x???|? ;??j??D?????z??"c:?k??X?9????????9?1kK??7)?z??M?O???_???:~,?\.??.i?NhpP?"U ?`v?/???????DiC|e???????=?Z??,?????G??deP??L??{r?I????A??oGM7>????Kb? ??'?B;XYs???P%?_?gM??yte?!??e?T77?????_??M?*???8{?f???? ?m??q??5?4??????!?6?}??G?+|??z?^????~x1Vns%J?Wd???&3Ni? +?q?G?xWQl?&???)=??)??????o7?'??M???6L[r???nZ,^??SBm?????????>'??H?H?U*(??<{??]?k?????????v????{?ZJU):??%E??????Ft?#?9???O=?M<$???~m???l??????vM +?6?5??kr??xu?Y8???E????>?x ?????|{8|i????????c?????????\????>a?i??Y?Q?A7??????3??x?.?h? s7_?{Vt?%"n????{??&?b?m?yZD????.?XO?????Z??]L^y????}???=v?]??y???v?-?,???z t? +? ?K????22KvN6?>4??q?_?r?#L??????Hylw?n??????)??D?j/d?xN?'D?d?4?~????M???[?G?A??~.??2? ?$???L{Q???D???}W"???}?????SE1kah????a,v?0}??#~??X?kp?1O$??c??w??(?0? ?9???6|?f??J?H0gt_3?G-??)1???????;]??a?B>{??*???$%?i?c???hu_?m\6??$????v4?E?c??O*aJme??"??VZ?N?O2???.???????????+?qJJw%?hM V(??,4rM???????0?Y ?4D??E??X?P8?P?9????{fJX?ty?f#?>cm/a:?P?n?Zs????Cz ??6??`? ???Q?4.-????w??I?#e???]wiH????`WwZ??/kAp??n???1?zA????S??` +6???T%??8?&0R?W!? ????K??%{?T?o?????)5?}??%????f?p???1???Y>m??{?k?????????}???7&_?&#Ih?d+?(?3?R?????t5? ?- I?mo???Q???X????Y??cd?Y??%?????o?}3p9}?z?`|r?C???3?? +??C?d-??De???????wr?s9??X??&????o?L?9d?D???????F??#???7??????S?????T3?X?2Twii????!>?S????"?9?J^c???????m?????\?.U?c+?+?G??f\???-\?pR???p??????.?_?w/?a?\???D??-1????jC??e8vG ???N|^???? 5???8? ;??H??h?D%2-E}?R???^?q??W???????????"OP?J?L?m???S??)??:??k??K? ????/?H + ?v?d??q?:`?\??J???t?/" W???owi{?~R;?'?????&?h;?Lx??0?S?F!p?g?4?q?_???????[???#??????C#0j?X{@0?<4jR\q???w +?6?M?>g??(?wu?S?f?x?#6p+????3?W#?Nt???| ?A????f??????=.??3???W???????????EC:??E?Ne??P?~W??zm#? ?4I??&????(??W??@B ??C??f%?`TOtYD??A~z???B?B???Q??t@??0?u?????|?sx?^i??$dy ??p?\?U# ?K???? ?{C???P ?k??{?t??????????V9?JMYb@???}?&{?|?IV???64}??; ??{??????Hq??cN? +?S???????\ +??+??z?? so???s$?H??????v???*P?V?Ho>?p$0?????_?????~????/??b?c?( ??? ?X??Y2 ?xP?+? +??Y??m??S??N ?l??u+h?vC???+i???J+??|??e???x?bZ?C?'? +x????l.S??ZaQ@???49k???E??+??d0????1??.R???)???b?R2?uz?? ??N`???v?<[?$:?=\?N???w??J???(?K??t:?||r???M??}k???QU)?.?N?K"??\`q??? ?M??/?/???S4?ipM?:6?-???????xG????{??????8???I????s?????|??g?T?? +m?" 6"??`?a????t??"?O?. at V??9????y???})X,z<T??5??G???@i9?e??T??,xI?I^? [????\?O??iQ??gLe3HDy??V???Ode??mwPe?jn???H.%????j?Q?O?u??u;T?+????Z? +h.#?p?#?U?m???$[?=???\/?z????B?????0QLQ%????1?#?????????3??????????q??? ??}???c +M?o????X?'?>?DY???????]?[???x???\???????Y?Te?H?v ????fGL?s????Fzb????(_Mc)_??? ?z?X??T????`????????l{/??T N???6??:8?!@o???e+j???X?????????qtY}M?????<9Qd.I???/b?S???p??@I?? J?v???k??S????V?????????@0????S??????~?S?3?-fY???J??f/N????F????i?R?B?jDcR?? {?>jj?`?6\-z?? ???Fkr???#l?C at CB???p?}Y!?^?N??;?['5?Z?Wmt??6?X?_???????????@?????6.x?HN????%???Di?B?B?Jfv?9?? -? ?jP?\8?s???[_@???????H???(QQM=?????Qm?:o???`sh????_? f???????????3-{GVX.?p? ?%?i???8??????>.???W??D?? ?rJ?f-~???v??g??3?>> ???Y??Fx/t] C???:c ???J???B?~6?c???w[cz?NN3????????S??VeHau?|?? |?mq?TA;????#G?U??(?O??a????~? _?e?j~&????q?? +C????g??2??yR???y????)S???????FD??!??v???m? ???>'???e;Q???,?T?.}?-X?j?}???`:??Py~???q????i?? >;E?P?? +??????o??J?{?PFHQ?_$??b???J x???77???3?*?H?C#? ?3?5?='+v?e?+???? +????GL????{??[?l????{?N ?????=?5?????5???P2???!??? ???A9??+EZS?|?XxW?W?u?cLkk?]?????A?Bm?b?3U???g`l? +???*= ??#(U?6??E????i%3?78#?????? mG?,:V?e????-????I{G?hH3?{??q1GAV"LEo?3?????U?? qc? +?iH0???RM???)??????R???k?m???:??pU?g?y"8.??????12?{3shYTd7L??L?U?j~?'? ????dn?U??u??+???zCF0gL?~]M?????p??c??y ??????`o8#?}???u?l?}?3?s??D +?V???k?????:? .???j??Y+?0k?J?a?R?s>?+??)???_?B4R?\?Z?????5??LRS??5d????'???B????p?%???kg??A(0???[??!??a?B?^.pw?O???NJ?dhj??g?4?E?5????#c???J?}>?|??G?????3?;?lt???|????+}J ??D?????v?xQ?=????^??>3 ?*?d??R#D??u??? ??O????Z?g?fl?~yz???{?T?-?!D Z?0??u?? ?U`???m?s??}??U??B?G?^&t?+?"??*R?UB??u?&???+??||:>H?F??!?k?,mZO??[?"?.??$?????????????n ?? ??C?^j!?d?_????C x?C?t?q???'? +!1v`/':t???F?po.f?Y]???t)?pH???*??LP??Q?o/??E ?Gp??/?p?9b????F82?72??????J????N?-??@?H2???y7??fD?.?? o??c(?u??[n????p???\^W?k??????&<1H?????;J?B?`B??Kp??G???z?0??{ni{?]e?????>?%?*a???hhv????>??-=????(Mn?AMI?u?O?,?Q???G?lu???-?~B!5D?x7???78????D~???All.Ujf?G??K?????;S??'?V????.?w??????:sJ??{????!?XX?bQ??^ ?q??Y????v?????F??W?jz?X?^???W'E? +h`:Y????H?^????s}??+???.?wuc???2?&??x ???l???_d\?????|????????9???;v?????l?S??#!??r?<\?"=3??_3?"???5?5??=??????(??E? +???????????T?).OJ'?G???dd???&?*?T^??WL66?e????I??Tw??5v[pwA??R??w?*?B?H?Q#???3??rB?s??/??{S?j??8??C]?}?0??d??/Lm0F[L????kb???E?????C +u?f?X?z?S8!???? ['?????&??C4?`~?S??iU?2?%??^????90O%Nc5:?6F[?.MZ&\EX? ????@?M???P v=?%H?&??JJ??w?v?8??O91c???'j?4)\?? ???f????? Keq*?Mna??@?e?1??\.z?@J???'?j?D??Z?$???tN?& ????B'P??x????1?!??6{????$?5??W?X_X????=aV??fq?????>!_x???{?k???gt??A??%?D?W?w?& Y??a?^??}?S?P?$?? 0/$1)??????O?2o????"J8U9?I?Z#??????J??@?,m?+??Y?Ebb???a??z?>%a???-??O??? ^??p???8???#????)??}?p??? Be?l???<??9?+Q?tvj? ?W?R?l9?Rz?l? ?????1??H?h+ b??#? +??????%*| ???][T??Wm/2Y??B????R?????????= I?1 ?^?? ~?Q??,?Q?c??d)?+??M?q+?YB6??Jz?T??|Re??Yo??h???}??%~???G??'"deMCt??T^,a??>L??y?????I?r8e??????s???$???H??d)??i??|?Hc8?dS?V????`{Z????q?8?>n??M??????nV??=?M????MQ?4k???w??!E?????2???+?t?aR ?MRSS??$??FhwE??S?%? %?*db??????jN^?A? ????yNeI)???<}2?MM8?q????c??P???.??^HSx?;????qu?W?V?????.KZ??}#??qGy????y?qA??9N?; ?C8?h ????????*3???? J??g ??4?????n??? ++??+SM???[!?\??Kp`|a?$E?0?????!?O???????u?k?Xh^??G:?E?????????d?XpO?????Z???,??f??????X?2????J??$? ?y`*?V =?????C1Ei=W"??ym?B@ +??2? ?{?-5?*?"R?e??8?j/]?]5Y]:_?ME=?U??+??H~?&,&????qH???-?${t??????????F?8_??@?P??l?6OW?i??IEy??nOJ???(;?S??Kk??? #%??UO2}V #)? ???{lb?? 3????{?[l Nm?[??9o1 W??(?;???hN??;41???q???C?>?#???/?p?)?8:u??K??i?8??2?FI?~?,?I?ZK?tF]????X?08Q??F??[E!z??????bI? + ?????>?????bfg??P?jp)? ?O????k?;?d????_??*??[??????????&???!n?????c?;?{??~1#???1H??>ZFRn??hBT??Sa ????t?&?????'?b&l ?,XXE??? ????/???F?$?????Y-LY%??]=?????????Q]??lo??G_{???M$???(J]???3??Dd??&????V??8?????u?d?w ?~??)j?Q???H???=?Y?&?)?A +6???v??r-???????$Ny???}n??`?z???s???\$?[??p????}??L?( 'o*?@q/?>?$?s:?#??Dqn?o?n?A.?'T?@??-?0-8;?r:?;???4???S??s?/???]W?`?????2??[????db?|.?CXV???I 6py?l21????K2#m???d????????{"?"?$H? ? +5~???|oz???`?? Z????ol????Zf!o???I?o?Kb]?,?F??/?e??Vfb [??q?TC??>??"????????gC??????h?Pr|Z??T???T3??Sf2[?????^???p???H#?9??w?w??????vu?u??5??R!a??zw??2"=???^wV???6~ ?6?Kf"??B?????T??]??Oy????hk?J??|F:HJ7?????af? ??RF?7?????c??A?4 ??+?8???f?y?P'M-2?x???Z???QD????[(???PWs?????\fT?1???*jB8?"??F???{?'c???????????W??????5]?>^?G#a?t??y??_ ?EsS????8s?s6GPM??M???{k??????S?=?????6?.?h???s$M?,??F??d`?v??5i{?W?????????EZeP?=D???B?6???;jL?? is???f???A?? ??????????????????6endstream +endobj +47 0 obj << +/Type /Font +/Subtype /Type1 +/Encoding 111 0 R +/FirstChar 11 +/LastChar 122 +/Widths 112 0 R +/BaseFont /GXHJDN+CMR10 +/FontDescriptor 45 0 R +>> endobj +45 0 obj << +/Ascent 694 +/CapHeight 683 +/Descent -194 +/FontName /GXHJDN+CMR10 +/ItalicAngle 0 +/StemV 69 +/XHeight 431 +/FontBBox [-251 -250 1009 969] +/Flags 4 +/CharSet (/ff/fi/quotedblright/quoteright/parenleft/parenright/plus/comma/hyphen/period/zero/one/two/three/six/seven/colon/semicolon/A/B/C/E/F/G/H/I/L/N/O/P/R/S/T/W/quotedblleft/a/b/c/d/e/f/g/h/i/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z) +/FontFile 46 0 R +>> endobj +112 0 obj +[583 556 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 500 0 0 0 0 278 389 389 0 778 278 333 278 0 500 500 500 500 0 0 500 500 0 0 278 278 0 0 0 0 0 750 708 722 0 681 653 785 750 361 0 0 625 0 750 778 681 0 736 556 722 0 0 1028 0 0 0 0 500 0 0 0 0 500 556 444 556 444 306 500 556 278 0 528 278 833 556 500 556 528 392 394 389 556 528 722 528 528 444 ] +endobj +111 0 obj << +/Type /Encoding +/Differences [ 0 /.notdef 11/ff/fi 13/.notdef 34/quotedblright 35/.notdef 39/quoteright/parenleft/parenright 42/.notdef 43/plus/comma/hyphen/period 47/.notdef 48/zero/one/two/three 52/.notdef 54/six/seven 56/.notdef 58/colon/semicolon 60/.notdef 65/A/B/C 68/.notdef 69/E/F/G/H/I 74/.notdef 76/L 77/.notdef 78/N/O/P 81/.notdef 82/R/S/T 85/.notdef 87/W 88/.notdef 92/quotedblleft 93/.notdef 97/a/b/c/d/e/f/g/h/i 106/.notdef 107/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z 123/.notdef] +>> endobj +43 0 obj << +/Length1 1041 +/Length2 4846 +/Length3 532 +/Length 5539 +/Filter /FlateDecode +>> +stream +x???e\???? ?????????a?!f`??C??ni??.Aii%$?n?3??~_????t~?y???{]?Z??n?{FB*?;?????U?EE??""?$??jH?- +???lQP9????@j?`?9I 9)n????9:?|j????*nP$ b ?mQNP7???`????(?0@??`?k?'?? E>?? ????a????y??; ???{??k???5??m??5i?????P?>???????kx????????]????u??????ps?BA?0????{???T????6??Q?;?B"??<5`>P?{0? ?`?? ???????p? 5 ?-??n????'????(c??_????????????W??}?5???????= ????"??h????$?O??C}P?c?0??.`K???@??j????? ??W?wHJT???@??I?E????_$?%???l??_$*"???? ??@ ??????X?#??@??UF??Xe???????? ???{??Q ??????nUU????8?XBb?"??$?R??[&? ???Q?&???;??w +??BH?'?P????????2\U?7q???>5??L???}????5?+O?!_%Xe?>g??n?7??~??:~???f5????|/?^q?8?N??~?`S??????$???Y;=????????a?i?|T??*%m???jV?#?nH??Q)1?M????;?A?p??.??????(7???B?y+rEJ6??I)?q?|????dG?R?ZEN}??A0???m????s 5????Ko?X??@?}?L +?l????????\~d?^JK??#j????$???????? +?+?? u0H??k??o??? ??.???I? +Z?~]y?4?T?a?????V?Xnp|\????{?????????yY?C?y?=????/?G????????l??C? K?j???Iv{u?&?<,? +??xtT???!?"a?m|????s? +???w? ?(??GP?????N??8a????6?"|?f +??n?|???p?W?|o{? }fV[???'x?Vm;n??3Mj???-?e??Y??F?{??3M +?-*???%r??2j???o???*???a???????S?=>B??????$t!?:i???S?C??\1?4????a?mp+}??fQB9??????????r?Wt??-????)o%?~????:?@2E>rd?S?/>4? ?????Z?=??b h>??KuH?2r.{?m??RC??+??[??O???E??(hj?T??3??T?????uXA????KE.&?`p??6????C?W?'~??\X??????v}Z?)??2{???}|V`???9q??????Xp?x????:?4<~v???c?????N?UuU +???=??P???2???u?????tk??#A??/?? ??q?wN????%?w?M?3?5??????i????=s??l4?U?Ju???|?q?????0}."????m?k?&}E?0?CJ?-?Adl?????????=??3??O??)????????Jno?`???@???|?On???`s??"!????????-u ??/>?d?)<2?7????=%q?d????BKh??hYC(5?x{?'????v?JT3?? +?z?I&?*!???#?????Z6M?,M?\c)F?%j??'????.?]z+?^???????6(???????$?|<??}??G?5?f?????~??mv?|D,??????;"I?8 4?????v??R? ??cK?s???????mg9?$???K??????_???2P???$???Y???!R#D?O????o??=`|x?;JL?????????9???"???#8?+G???i??vY?????w?ST??T?~???????$0???|???R??W??:\?O4s?H?y7?,t +xC???)?G?a??e?Rm???H?????:S:???????d?.?Rt^??3^J?zvgws?6 +>l??6k????????Qk ??:w,???Lz??w???O?^??b??????? +?vL?????.5R???????{X?X?1z$????J??fq??S"?9??.??Q??+` +??x????t???|??h?q??9*??????9m?M;*??m?k??a9A e3[??F??6K??m?KG??r?I?U?>?<$_4 ( ???? Z? ?2??.?????????|?/:?U????2'aq??s????x?>@??? Q???5Q?D?x_???4?'???)???x?SPq????M84N?h??^7;???'?fu?A;?Gp???'a????a????D?R??H??3?@?????\?^??K??*n??C?}?'?~?]?+?o?v????8??;??M ?c??Z?{?]mfU???7+X???d(?.??-?0E?&J???g??- +???j? ?*? ?4??Y[?% ???2Ul;???&]P??! ???x?|t??E?/#e?n? ??2S???QW?N????????????Wk:[J "?`v\W??R????C.??6y@I&?????]S????M???????2]S?????i? +W?f??P??e????T? ??? +?Z?????V?['w_?D??N?M?V???Z?N?(+~)_????U?????5?D??e?k??1s????oX???~j??W???d?l?? ?z?^5:??|?2?5?^?Gi?d???0????????qm?9w??h???W?V?,F??B.???d???h at _?#??W????pO??j/7m?t?????AT`?+*??}?i=?D?MF????F???C1Wc?????????? ?k??{O?' $r_MW<0xw??9???h?????M??q?]+??????I? +m???S?1y????~???`e????9?X???????????????d=??2?4?f4???@J???????u??[???S ????????????h?W!?I??Z ??%}?#ud??W?wa*?????}??D??A*????l??VA?&??5???? Y?ip??Zay??j?dw?7?;?V!??K??@??]?s"??w??s?????F??;,???qb??{?!8???\?]???S?0?p??????8?????=U%??f?Bm????Y?Z?F??o)"??.?????h???bB??????/??( ???e?????o??I(??$f9_d?*?????\llr??u[&?*? ??1j????.???-l:3?j3r???5'F0Q?? +:????rv???^??I,*?A??;?k???MTiC_?????4?7T;|???#??VF?r?;?LS?y?c??8?A.???2???W?T??????>rGTF ?D????????)k?Q???j?oM.S9lF??????i??? +MY?????0E?C%????'??v?x??4?H?????=J?=y??"???e????V0?s?a?Q??????[??e?s?,?`???|??E>?? ??_?"??\*??N?m ?????????cZ????X?C????????WR?b' 0???????4??I7????1T??1!-?=???I7???h?AFJ*??Sww?2o?=?????($???_??x|b????;T]??7?-????e?x?l?j??)??,?&O??,5?uE????B\????KQ????s??^??q?? +=?T~??,??x?Q?A??S??????????f?????I???<6L?????,?ha?????iW;?%?a???3z3??5??S???:??=??;Q????????????Pe??w?{?f?^?|?\vJK?k????b???e)????$:??????{v??S?(?s?M?w??A3??i?p???j?e? oW?^?FS? ?N?????Z??5f?g???????F??????W???o!M???z??e???7?????????c??H???w?s[???o"M7P?i,?T?F??Q?p??`?>??`R? ?=-HJwZ?~r??\???)9??)r?Lt%D???l??o?J?M~S?KjC???z?'??????/???h?;??W ???3?:T????U??"V??<`????gz%V???[R??1????_I?????M??????z??????&?'??6[?O;????????@???g?|??2{??|+???i?y???=s???HO?@?>60Xc???c?>WQ8.Bho]{?Bl16c?v???3?w#?y5??nrO?kQtj=)"?Xq 2=?????_???\^????N?jo????y?j[???x???I???pN??>$?/?B? +?E?n?H???? ?endstream +endobj +44 0 obj << +/Type /Font +/Subtype /Type1 +/Encoding 113 0 R +/FirstChar 46 +/LastChar 121 +/Widths 114 0 R +/BaseFont /GRXYXL+CMBX10 +/FontDescriptor 42 0 R +>> endobj +42 0 obj << +/Ascent 694 +/CapHeight 686 +/Descent -194 +/FontName /GRXYXL+CMBX10 +/ItalicAngle 0 +/StemV 114 +/XHeight 444 +/FontBBox [-301 -250 1164 946] +/Flags 4 +/CharSet (/period/A/C/D/I/S/a/d/e/f/h/i/l/n/o/p/r/s/t/u/y) +/FontFile 43 0 R +>> endobj +114 0 obj +[319 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 869 0 831 882 0 0 0 0 436 0 0 0 0 0 0 0 0 0 639 0 0 0 0 0 0 0 0 0 0 0 0 0 559 0 0 639 527 351 0 639 319 0 0 319 0 639 575 639 0 474 454 447 639 0 0 0 607 ] +endobj +113 0 obj << +/Type /Encoding +/Differences [ 0 /.notdef 46/period 47/.notdef 65/A 66/.notdef 67/C/D 69/.notdef 73/I 74/.notdef 83/S 84/.notdef 97/a 98/.notdef 100/d/e/f 103/.notdef 104/h/i 106/.notdef 108/l 109/.notdef 110/n/o/p 113/.notdef 114/r/s/t/u 118/.notdef 121/y 122/.notdef] +>> endobj +40 0 obj << +/Length1 933 +/Length2 3180 +/Length3 532 +/Length 3819 +/Filter /FlateDecode +>> +stream +x???y????s6(}????O???[?:6x?????ii?)m??;?Z7?=lpS???y?<"0?$??d?uU??????sp?Sv?&?? ?f~???%???f?t??/????4? ? V?????Vk3~?c-??????C????|??+\??]?L??C?????/?mC_e??+?Y?u?P?Q? A_?CT????Bg?????=??FG??2h?f??x?Wl"??????)??????7?$I????(Gb??9 0?i??????Ce,V^EfV??C?v+??* ?ZO;?}??d?42uw?lw/??+;???=yZ?{? ??E???oP???c?iz?h?9|????P??b??kon??/??H-??v?g??:jE??????k?T??-_|??#?Iw_????????????????pt???e"??q5??_?5??????;5?P???q??>??U?m???P??"?w?K?7%?? \_?y-?t?????]?(??TqG??!y?c?^???\?? ?!?F?\.???9?zg?>?jIth??To?Y??O'??ix???0?&??-???o?-?,????g??? i??n?5/[,??5dW?z?????u|;R9??dM??????_n+~??6????????;??7 h?q%? ?h????U?9~??l????g???l?[lyJs + +??? ??g?]*?)V?$??2x?^?Ne?,?=????Ki???'?9??r?tLRG?????y q?-b?O42?y????? ?.?g__??&?i???Zp???;?7??%??.?xbjKg???]W???K???H????7&?8w?V??8?7??&??N.??_?OD?ER0?$??}? U?????G??Wb?s?5?;?qg??Ou:?tH?:?q/?? ?M???"???>?^??v/????z???%?XM? +?}???J?y?~?????^?7?????? G??k??????3?'????`?cbL???\???? +???u??? n?(??r??)?V?]???p??s?oNA?(?{=?3?]IU ?cCrO???S?%??ER??? ?????????A?'Of??????????!???qN?????2???s?c7??>N?644???G???>?????2]??%??1???|?_???APC????????????9d????3????g?Re?~??f? qs???l??[mC??: ??wY??*??????G+/?r%7?|?????a??FEBl? P?.Q????0?*?"?????}?#???\D?}???5???l??6~=??;c}?,8{Xd???f?\t?vV???????????[?g????e??J??? ???}}[?????j??%1?2>=??????? ??&M"???i???? ??/??;??W??*???6?8??+?2 ????????M???@y ?,.??=~?2 ?A?\??i?fY?n?`?Vr.?%? ??/BX??(?T? ?|?o?&???6?`>j;??Y]????#tWs???xL? hJ?>?|??????E? ?v??0At???D?R?`???5??????????9???;???o??Z?@4?%R?]e)?c3b???s??0x??NY?pY??C?a?4w>?|\?????E?????/?????????R?f?p|=??4J?9l???D???j????w??W?kgN???P???3???U??#?????}?v`Xv???? ????x??\????#1?????s?5?=????r???;?'Cq>5d??I{?9N??????Y??Y^???????? ??^????.?????T=?? />Y????>,N????D> endobj +39 0 obj << +/Ascent 694 +/CapHeight 683 +/Descent -195 +/FontName /XPHJUO+CMR17 +/ItalicAngle 0 +/StemV 53 +/XHeight 430 +/FontBBox [-33 -250 945 749] +/Flags 4 +/CharSet (/period/T/a/e/g/h/i/m/n/p/s/t/u/y) +/FontFile 40 0 R +>> endobj +116 0 obj +[250 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 668 0 0 0 0 0 0 0 0 0 0 0 0 459 0 0 0 406 0 459 511 250 0 0 0 772 511 0 511 0 0 359 354 511 0 0 0 485 ] +endobj +115 0 obj << +/Type /Encoding +/Differences [ 0 /.notdef 46/period 47/.notdef 84/T 85/.notdef 97/a 98/.notdef 101/e 102/.notdef 103/g/h/i 106/.notdef 109/m/n 111/.notdef 112/p 113/.notdef 115/s/t/u 118/.notdef 121/y 122/.notdef] +>> endobj +69 0 obj << +/Type /Pages +/Count 3 +/Kids [34 0 R 75 0 R 87 0 R] +>> endobj +117 0 obj << +/Type /Outlines +/First 7 0 R +/Last 31 0 R +/Count 7 +>> endobj +31 0 obj << +/Title 32 0 R +/A 29 0 R +/Parent 117 0 R +/Prev 27 0 R +>> endobj +27 0 obj << +/Title 28 0 R +/A 25 0 R +/Parent 117 0 R +/Prev 23 0 R +/Next 31 0 R +>> endobj +23 0 obj << +/Title 24 0 R +/A 21 0 R +/Parent 117 0 R +/Prev 19 0 R +/Next 27 0 R +>> endobj +19 0 obj << +/Title 20 0 R +/A 17 0 R +/Parent 117 0 R +/Prev 15 0 R +/Next 23 0 R +>> endobj +15 0 obj << +/Title 16 0 R +/A 13 0 R +/Parent 117 0 R +/Prev 11 0 R +/Next 19 0 R +>> endobj +11 0 obj << +/Title 12 0 R +/A 9 0 R +/Parent 117 0 R +/Prev 7 0 R +/Next 15 0 R +>> endobj +7 0 obj << +/Title 8 0 R +/A 5 0 R +/Parent 117 0 R +/Next 11 0 R +>> endobj +118 0 obj << +/Names [(Doc-Start) 38 0 R (contents) 48 0 R (contents.0) 6 0 R (introduction) 56 0 R (introduction.0) 10 0 R (page.1) 37 0 R (page.2) 77 0 R (page.3) 89 0 R (section*.1) 49 0 R (section*.2) 60 0 R (section*.3) 68 0 R (section*.4) 81 0 R (section*.5) 85 0 R (section*.6) 90 0 R (section*.7) 97 0 R (testing-header-files) 70 0 R (testing-header-files.0) 18 0 R (testing-organization) 67 0 R (testing-organization.0) 14 0 R (testing-python-scripts) 73 0 R (testing-python-scripts.0) 30 0 R (testing-source-files) 71 0 R (testing-source-files.0) 22 0 R (testing-swig-interface-files) 72 0 R (testing-swig-interface-files.0) 26 0 R] +/Limits [(Doc-Start) (testing-swig-interface-files.0)] +>> endobj +119 0 obj << +/Kids [118 0 R] +>> endobj +120 0 obj << +/Dests 119 0 R +>> endobj +121 0 obj << +/Type /Catalog +/Pages 69 0 R +/Outlines 117 0 R +/Names 120 0 R +/PageMode /UseOutlines +/OpenAction 33 0 R +>> endobj +122 0 obj << +/Author(Bill Spotz)/Title(Testing the numpy.i Typemaps)/Subject()/Creator(LaTeX with hyperref package)/Producer(pdfeTeX-1.21a)/Keywords() +/CreationDate (D:20070406152148-06'00') +/PTEX.Fullbanner (This is pdfeTeX, Version 3.141592-1.21a-2.2 (Web2C 7.5.4) kpathsea version 3.5.4) +>> endobj +xref +0 123 +0000000001 65535 f +0000000002 00000 f +0000000003 00000 f +0000000004 00000 f +0000000000 00000 f +0000000009 00000 n +0000004918 00000 n +0000068485 00000 n +0000000055 00000 n +0000000081 00000 n +0000005100 00000 n +0000068399 00000 n +0000000131 00000 n +0000000162 00000 n +0000005283 00000 n +0000068311 00000 n +0000000221 00000 n +0000000260 00000 n +0000009560 00000 n +0000068223 00000 n +0000000319 00000 n +0000000358 00000 n +0000009743 00000 n +0000068135 00000 n +0000000417 00000 n +0000000456 00000 n +0000009926 00000 n +0000068047 00000 n +0000000523 00000 n +0000000570 00000 n +0000015241 00000 n +0000067972 00000 n +0000000631 00000 n +0000000672 00000 n +0000003039 00000 n +0000005405 00000 n +0000000722 00000 n +0000004735 00000 n +0000004796 00000 n +0000067163 00000 n +0000063066 00000 n +0000067004 00000 n +0000062316 00000 n +0000056497 00000 n +0000062156 00000 n +0000055211 00000 n +0000042459 00000 n +0000055052 00000 n +0000004857 00000 n +0000004978 00000 n +0000003232 00000 n +0000003389 00000 n +0000003554 00000 n +0000003719 00000 n +0000003884 00000 n +0000004057 00000 n +0000005039 00000 n +0000041760 00000 n +0000035915 00000 n +0000041600 00000 n +0000005161 00000 n +0000034704 00000 n +0000024808 00000 n +0000034544 00000 n +0000004223 00000 n +0000004393 00000 n +0000004563 00000 n +0000005222 00000 n +0000005344 00000 n +0000067825 00000 n +0000009499 00000 n +0000009682 00000 n +0000009865 00000 n +0000015180 00000 n +0000009987 00000 n +0000008777 00000 n +0000005522 00000 n +0000009438 00000 n +0000008928 00000 n +0000009096 00000 n +0000009267 00000 n +0000009621 00000 n +0000024490 00000 n +0000023103 00000 n +0000024331 00000 n +0000009804 00000 n +0000015363 00000 n +0000013473 00000 n +0000010092 00000 n +0000015058 00000 n +0000015119 00000 n +0000013661 00000 n +0000013831 00000 n +0000014002 00000 n +0000014172 00000 n +0000014342 00000 n +0000014512 00000 n +0000015302 00000 n +0000022228 00000 n +0000015481 00000 n +0000022069 00000 n +0000014682 00000 n +0000014866 00000 n +0000022752 00000 n +0000022514 00000 n +0000024721 00000 n +0000024697 00000 n +0000035385 00000 n +0000035087 00000 n +0000042190 00000 n +0000042009 00000 n +0000055987 00000 n +0000055622 00000 n +0000062773 00000 n +0000062559 00000 n +0000067588 00000 n +0000067388 00000 n +0000067898 00000 n +0000068557 00000 n +0000069264 00000 n +0000069303 00000 n +0000069341 00000 n +0000069469 00000 n +trailer +<< +/Size 123 +/Root 121 0 R +/Info 122 0 R +/ID [ ] +>> +startxref +69770 +%%EOF Added: trunk/numpy/doc/swig/testing.txt =================================================================== --- trunk/numpy/doc/swig/testing.txt 2007-04-06 20:19:47 UTC (rev 3678) +++ trunk/numpy/doc/swig/testing.txt 2007-04-06 21:24:54 UTC (rev 3679) @@ -0,0 +1,173 @@ +============================ +Testing the numpy.i Typemaps +============================ + +:Author: Bill Spotz +:Institution: Sandia National Laboratories +:Date: 6 April, 2007 + +.. contents:: + +Introduction +============ + +Writing tests for the ``numpy.i`` `SWIG `_ +interface file is a combinatorial headache. At present, 12 different +data types are supported, each with 23 different argument signatures, +for a total of 276 typemaps supported "out of the box". Each of these +typemaps, in turn, might require several unit tests in order to verify +expected behavior for both proper and improper inputs. Currently, +this results in 1,020 individual unit tests that are performed when +``make test`` is run in the ``numpy/docs/swig`` subdirectory. + +To facilitate this many similar unit tests, some high-level +programming techniques are employed, including C and `SWIG`_ macros, +as well as `python `_ inheritance. The +purpose of this document is to describe the testing infrastructure +employed to verify that the ``numpy.i`` typemaps are working as +expected. + +Testing Organization +==================== + +There are three indepedent testing frameworks supported, for one-, +two-, and three-dimensional arrays respectively. For one-dimensional +arrays, there are two C++ files, a header and a source, named:: + + Vector.h + Vector.cxx + +that contain prototypes and code for a variety of functions that have +one-dimensional arrays as function arguments. The file:: + + Vector.i + +is a `SWIG`_ interface file that defines a python module ``Vector`` +that wraps the functions in ``Vector.h`` while utilizing the typemaps +in ``numpy.i`` to correctly handle the C arrays. + +The ``Makefile`` calls ``swig`` to generate ``Vector.py`` and +``Vector_wrap.cxx``, and also executes the ``setup.py`` script that +compiles ``Vector_wrap.cxx`` and links together the extension module +``_Vector.so`` or ``_Vector.dylib``, depending on the platform. This +extension module and the proxy file ``Vector.py`` are both placed in a +subdirectory under the ``build`` directory. + +The actual testing takes place with a `python`_ script named:: + + testVector.py + +that uses the standard `python`_ library module ``unittest``, which +performs several tests of each function defined in ``Vector.h`` for +each data type supported. + +Two-dimensional arrays are tested in exactly the same manner. The +above description applies, but with ``Matrix`` substituted for +``Vector``. For three-dimensional tests, substitute ``Tensor`` for +``Vector``. For the descriptions that follow, we will reference the +``Vector`` tests, but the same information applies to ``Matrix`` and +``Tensor`` tests. + +The command ``make test`` will ensure that all of the test software is +built and then run all three test scripts. + +Testing Header Files +==================== + +``Vector.h`` is a C++ header file that defines a C macro called +``TEST_FUNC_PROTOS`` that takes two arguments: ``TYPE``, which is a +data type name such as ``unsigned int``; and ``SNAME``, which is a +short name for the same data type with no spaces, e.g. ``uint``. This +macro defines several function prototypes that have the prefix +``SNAME`` and have at least one argument that is an array of type +``TYPE``. Those functions that have return arguments return a +``TYPE`` value. + +``TEST_FUNC_PROTOS`` is then implemented for all of the data types +supported by ``numpy.i``: + + * ``signed char`` + * ``unsigned char`` + * ``short`` + * ``unsigned short`` + * ``int`` + * ``unsigned int`` + * ``long`` + * ``unsigned long`` + * ``long long`` + * ``unsigned long long`` + * ``float`` + * ``double`` + +Testing Source Files +==================== + +``Vector.cxx`` is a C++ source file that implements compilable code +for each of the function prototypes specified in ``Vector.h``. It +defines a C macro ``TEST_FUNCS`` that has the same arguments and works +in the same way as ``TEST_FUNC_PROTOS`` does in ``Vector.h``. +``TEST_FUNCS`` is implemented for each of the 12 data types as above. + +Testing SWIG Interface Files +============================ + +``Vector.i`` is a `SWIG`_ interface file that defines python module +``Vector``. It follows the conventions for using ``numpy.i`` as +described in the `numpy.i documentation `_. It +defines a `SWIG`_ macro ``%apply_numpy_typemaps`` that has a single +argument ``TYPE``. It uses the `SWIG`_ directive ``%apply`` as +described in the `numpy.i documentation`_ to apply the provided +typemaps to the argument signatures found in ``Vector.h``. This macro +is then implemented for all of the data types supported by +``numpy.i``. It then does a ``%include "Vector.h"`` to wrap all of +the function prototypes in ``Vector.h`` using the typemaps in +``numpy.i``. + +Testing Python Scripts +====================== + +After ``make`` is used to build the testing extension modules, +``testVector.py`` can be run to execute the tests. As with other +scripts that use ``unittest`` to facilitate unit testing, +``testVector.py`` defines a class that inherits from +``unittest.TestCase``:: + + class VectorTestCase(unittest.TestCase): + +However, this class is not run directly. Rather, it serves as a base +class to several other python classes, each one specific to a +particular data type. The ``VectorTestCase`` class stores two strings +for typing information: + + **self.typeStr** + A string that matches one of the ``SNAME`` prefixes used in + ``Vector.h`` and ``Vector.cxx``. For example, ``"double"``. + + **self.typeCode** + A short (typically single-character) string that represents a + data type in numpy and corresponds to ``self.typeStr``. For + example, if ``self.typeStr`` is ``"double"``, then + ``self.typeCode`` should be ``"d"``. + +Each test defined by the ``VectorTestCase`` class extracts the python +function it is trying to test by accessing the ``Vector`` module's +dictionary:: + + length = Vector.__dict__[self.typeStr + "Length"] + +In the case of double precision tests, this will return the python +function ``Vector.doubleLength``. + +We then define a new test case class for each supported data type with +a short definition such as:: + + class doubleTestCase(VectorTestCase): + def __init__(self, methodName="runTest"): + VectorTestCase.__init__(self, methodName) + self.typeStr = "double" + self.typeCode = "d" + +Each of these 12 classes is collected into a ``unittest.TestSuite``, +which is then executed. Errors and failures are summed together and +returned as the exit argument. Any non-zero result indicates that at +least one test did not pass. From numpy-svn at scipy.org Sat Apr 7 16:19:19 2007 From: numpy-svn at scipy.org (numpy-svn at scipy.org) Date: Sat, 7 Apr 2007 15:19:19 -0500 (CDT) Subject: [Numpy-svn] r3680 - trunk/benchmarks Message-ID: <20070407201919.1777739C1A3@new.scipy.org> Author: charris Date: 2007-04-07 15:19:17 -0500 (Sat, 07 Apr 2007) New Revision: 3680 Modified: trunk/benchmarks/sorting.py Log: Make sorting benchmarks all sort integers Modified: trunk/benchmarks/sorting.py =================================================================== --- trunk/benchmarks/sorting.py 2007-04-06 21:24:54 UTC (rev 3679) +++ trunk/benchmarks/sorting.py 2007-04-07 20:19:17 UTC (rev 3680) @@ -5,21 +5,21 @@ N = 10000 b.title = 'Sorting %d elements' % N -b['numarray'] = ('a=N.array(None,shape=%d);a.sort()'%N,'') -b['numpy'] = ('a=N.empty(shape=%d);a.sort()'%N,'') -b['Numeric'] = ('a=N.empty(shape=%d);N.sort(a)'%N,'') +b['numarray'] = ('a=N.array(None,shape=%d,typecode="i");a.sort()'%N,'') +b['numpy'] = ('a=N.empty(shape=%d, dtype="i");a.sort()'%N,'') +b['Numeric'] = ('a=N.empty(shape=%d, typecode="i");N.sort(a)'%N,'') b.run() N1,N2 = 100,100 b.title = 'Sorting (%d,%d) elements, last axis' % (N1,N2) -b['numarray'] = ('a=N.array(None,shape=(%d,%d));a.sort()'%(N1,N2),'') -b['numpy'] = ('a=N.empty(shape=(%d,%d));a.sort()'%(N1,N2),'') -b['Numeric'] = ('a=N.empty(shape=(%d,%d));N.sort(a)'%(N1,N2),'') +b['numarray'] = ('a=N.array(None,shape=(%d,%d),typecode="i");a.sort()'%(N1,N2),'') +b['numpy'] = ('a=N.empty(shape=(%d,%d), dtype="i");a.sort()'%(N1,N2),'') +b['Numeric'] = ('a=N.empty(shape=(%d,%d),typecode="i");N.sort(a)'%(N1,N2),'') b.run() N1,N2 = 100,100 b.title = 'Sorting (%d,%d) elements, first axis' % (N1,N2) -b['numarray'] = ('a=N.array(None,shape=(%d,%d));a.sort(0)'%(N1,N2),'') -b['Numeric'] = ('a=N.empty(shape=(%d,%d));N.sort(a,0)'%(N1,N2),'') -b['numpy'] = ('a=N.empty(shape=(%d,%d));N.sort(a,0)'%(N1,N2),'') +b['numarray'] = ('a=N.array(None,shape=(%d,%d), typecode="i");a.sort(0)'%(N1,N2),'') +b['numpy'] = ('a=N.empty(shape=(%d,%d),dtype="i");N.sort(a,0)'%(N1,N2),'') +b['Numeric'] = ('a=N.empty(shape=(%d,%d),typecode="i");N.sort(a,0)'%(N1,N2),'') b.run() From numpy-svn at scipy.org Sat Apr 7 22:29:41 2007 From: numpy-svn at scipy.org (numpy-svn at scipy.org) Date: Sat, 7 Apr 2007 21:29:41 -0500 (CDT) Subject: [Numpy-svn] r3681 - trunk/numpy/doc/swig Message-ID: <20070408022941.80C9039C15C@new.scipy.org> Author: wfspotz at sandia.gov Date: 2007-04-07 21:29:39 -0500 (Sat, 07 Apr 2007) New Revision: 3681 Modified: trunk/numpy/doc/swig/numpy.i Log: Standardized PyArrayObject naming Modified: trunk/numpy/doc/swig/numpy.i =================================================================== --- trunk/numpy/doc/swig/numpy.i 2007-04-07 20:19:17 UTC (rev 3680) +++ trunk/numpy/doc/swig/numpy.i 2007-04-08 02:29:39 UTC (rev 3681) @@ -619,13 +619,13 @@ } %typemap(in) (DATA_TYPE INPLACE_ARRAY1[ANY]) - (PyArrayObject* temp=NULL) + (PyArrayObject* array=NULL) { - temp = obj_to_array_no_conversion($input, DATA_TYPECODE); + array = obj_to_array_no_conversion($input, DATA_TYPECODE); npy_intp size[1] = { $1_dim0 }; - if (!temp || !require_dimensions(temp,1) || !require_size(temp, size, 1) - || !require_contiguous(temp) || !require_native(temp)) SWIG_fail; - $1 = ($1_ltype) temp->data; + if (!array || !require_dimensions(array,1) || !require_size(array, size, 1) + || !require_contiguous(array) || !require_native(array)) SWIG_fail; + $1 = ($1_ltype) array->data; } /* Typemap suite for (DATA_TYPE* INPLACE_ARRAY1, DIM_TYPE DIM1) @@ -637,14 +637,14 @@ } %typemap(in) (DATA_TYPE* INPLACE_ARRAY1, DIM_TYPE DIM1) - (PyArrayObject* temp=NULL) + (PyArrayObject* array=NULL) { - temp = obj_to_array_no_conversion($input, DATA_TYPECODE); - if (!temp || !require_dimensions(temp,1) || !require_contiguous(temp) - || !require_native(temp)) SWIG_fail; - $1 = (DATA_TYPE*) temp->data; + array = obj_to_array_no_conversion($input, DATA_TYPECODE); + if (!array || !require_dimensions(array,1) || !require_contiguous(array) + || !require_native(array)) SWIG_fail; + $1 = (DATA_TYPE*) array->data; $2 = 1; - for (int i=0; ind; ++i) $2 *= array_size(temp,i); + for (int i=0; ind; ++i) $2 *= array_size(array,i); } /* Typemap suite for (DIM_TYPE DIM1, DATA_TYPE* INPLACE_ARRAY1) @@ -656,14 +656,14 @@ } %typemap(in) (DIM_TYPE DIM1, DATA_TYPE* INPLACE_ARRAY1) - (PyArrayObject* temp=NULL) + (PyArrayObject* array=NULL) { - temp = obj_to_array_no_conversion($input, DATA_TYPECODE); - if (!temp || !require_dimensions(temp,1) || !require_contiguous(temp) - || !require_native(temp)) SWIG_fail; + array = obj_to_array_no_conversion($input, DATA_TYPECODE); + if (!array || !require_dimensions(array,1) || !require_contiguous(array) + || !require_native(array)) SWIG_fail; $1 = 1; - for (int i=0; ind; ++i) $1 *= array_size(temp,i); - $2 = (DATA_TYPE*) temp->data; + for (int i=0; ind; ++i) $1 *= array_size(array,i); + $2 = (DATA_TYPE*) array->data; } /* Typemap suite for (DATA_TYPE INPLACE_ARRAY2[ANY][ANY]) @@ -675,13 +675,13 @@ } %typemap(in) (DATA_TYPE INPLACE_ARRAY2[ANY][ANY]) - (PyArrayObject* temp=NULL) + (PyArrayObject* array=NULL) { - temp = obj_to_array_no_conversion($input, DATA_TYPECODE); + array = obj_to_array_no_conversion($input, DATA_TYPECODE); npy_intp size[2] = { $1_dim0, $1_dim1 }; - if (!temp || !require_dimensions(temp,2) || !require_size(temp, size, 2) - || !require_contiguous(temp) || !require_native(temp)) SWIG_fail; - $1 = ($1_ltype) temp->data; + if (!array || !require_dimensions(array,2) || !require_size(array, size, 2) + || !require_contiguous(array) || !require_native(array)) SWIG_fail; + $1 = ($1_ltype) array->data; } /* Typemap suite for (DATA_TYPE* INPLACE_ARRAY2, DIM_TYPE DIM1, DIM_TYPE DIM2) @@ -693,14 +693,14 @@ } %typemap(in) (DATA_TYPE* INPLACE_ARRAY2, DIM_TYPE DIM1, DIM_TYPE DIM2) - (PyArrayObject* temp=NULL) + (PyArrayObject* array=NULL) { - temp = obj_to_array_no_conversion($input, DATA_TYPECODE); - if (!temp || !require_dimensions(temp,2) || !require_contiguous(temp) - || !require_native(temp)) SWIG_fail; - $1 = (DATA_TYPE*) temp->data; - $2 = (DIM_TYPE) array_size(temp,0); - $3 = (DIM_TYPE) array_size(temp,1); + array = obj_to_array_no_conversion($input, DATA_TYPECODE); + if (!array || !require_dimensions(array,2) || !require_contiguous(array) + || !require_native(array)) SWIG_fail; + $1 = (DATA_TYPE*) array->data; + $2 = (DIM_TYPE) array_size(array,0); + $3 = (DIM_TYPE) array_size(array,1); } /* Typemap suite for (DIM_TYPE DIM1, DIM_TYPE DIM2, DATA_TYPE* INPLACE_ARRAY2) @@ -712,14 +712,14 @@ } %typemap(in) (DIM_TYPE DIM1, DIM_TYPE DIM2, DATA_TYPE* INPLACE_ARRAY2) - (PyArrayObject* temp=NULL) + (PyArrayObject* array=NULL) { - temp = obj_to_array_no_conversion($input, DATA_TYPECODE); - if (!temp || !require_dimensions(temp,2) || !require_contiguous(temp) - || !require_native(temp)) SWIG_fail; - $1 = (DIM_TYPE) array_size(temp,0); - $2 = (DIM_TYPE) array_size(temp,1); - $3 = (DATA_TYPE*) temp->data; + array = obj_to_array_no_conversion($input, DATA_TYPECODE); + if (!array || !require_dimensions(array,2) || !require_contiguous(array) + || !require_native(array)) SWIG_fail; + $1 = (DIM_TYPE) array_size(array,0); + $2 = (DIM_TYPE) array_size(array,1); + $3 = (DATA_TYPE*) array->data; } /* Typemap suite for (DATA_TYPE INPLACE_ARRAY3[ANY][ANY][ANY]) @@ -731,13 +731,13 @@ } %typemap(in) (DATA_TYPE INPLACE_ARRAY3[ANY][ANY][ANY]) - (PyArrayObject* temp=NULL) + (PyArrayObject* array=NULL) { - temp = obj_to_array_no_conversion($input, DATA_TYPECODE); + array = obj_to_array_no_conversion($input, DATA_TYPECODE); npy_intp size[3] = { $1_dim0, $1_dim1, $1_dim2 }; - if (!temp || !require_dimensions(temp,3) || !require_size(temp, size, 3) - || !require_contiguous(temp) || !require_native(temp)) SWIG_fail; - $1 = ($1_ltype) temp->data; + if (!array || !require_dimensions(array,3) || !require_size(array, size, 3) + || !require_contiguous(array) || !require_native(array)) SWIG_fail; + $1 = ($1_ltype) array->data; } /* Typemap suite for (DATA_TYPE* INPLACE_ARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, @@ -750,15 +750,15 @@ } %typemap(in) (DATA_TYPE* INPLACE_ARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3) - (PyArrayObject* temp=NULL) + (PyArrayObject* array=NULL) { - temp = obj_to_array_no_conversion($input, DATA_TYPECODE); - if (!temp || !require_dimensions(temp,3) || !require_contiguous(temp) - || !require_native(temp)) SWIG_fail; - $1 = (DATA_TYPE*) temp->data; - $2 = (DIM_TYPE) array_size(temp,0); - $3 = (DIM_TYPE) array_size(temp,1); - $4 = (DIM_TYPE) array_size(temp,2); + array = obj_to_array_no_conversion($input, DATA_TYPECODE); + if (!array || !require_dimensions(array,3) || !require_contiguous(array) + || !require_native(array)) SWIG_fail; + $1 = (DATA_TYPE*) array->data; + $2 = (DIM_TYPE) array_size(array,0); + $3 = (DIM_TYPE) array_size(array,1); + $4 = (DIM_TYPE) array_size(array,2); } /* Typemap suite for (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, @@ -771,15 +771,15 @@ } %typemap(in) (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DATA_TYPE* INPLACE_ARRAY3) - (PyArrayObject* temp=NULL) + (PyArrayObject* array=NULL) { - temp = obj_to_array_no_conversion($input, DATA_TYPECODE); - if (!temp || !require_dimensions(temp,3) || !require_contiguous(temp) - || !require_native(temp)) SWIG_fail; - $1 = (DIM_TYPE) array_size(temp,0); - $2 = (DIM_TYPE) array_size(temp,1); - $3 = (DIM_TYPE) array_size(temp,2); - $4 = (DATA_TYPE*) temp->data; + array = obj_to_array_no_conversion($input, DATA_TYPECODE); + if (!array || !require_dimensions(array,3) || !require_contiguous(array) + || !require_native(array)) SWIG_fail; + $1 = (DIM_TYPE) array_size(array,0); + $2 = (DIM_TYPE) array_size(array,1); + $3 = (DIM_TYPE) array_size(array,2); + $4 = (DATA_TYPE*) array->data; } /*************************/ From numpy-svn at scipy.org Sun Apr 8 17:28:44 2007 From: numpy-svn at scipy.org (numpy-svn at scipy.org) Date: Sun, 8 Apr 2007 16:28:44 -0500 (CDT) Subject: [Numpy-svn] r3682 - trunk/numpy/core/include/numpy Message-ID: <20070408212844.AD1FD39C050@new.scipy.org> Author: charris Date: 2007-04-08 16:28:42 -0500 (Sun, 08 Apr 2007) New Revision: 3682 Modified: trunk/numpy/core/include/numpy/ndarrayobject.h Log: Parenthesize some defined expressions just to be clean. Modified: trunk/numpy/core/include/numpy/ndarrayobject.h =================================================================== --- trunk/numpy/core/include/numpy/ndarrayobject.h 2007-04-08 02:29:39 UTC (rev 3681) +++ trunk/numpy/core/include/numpy/ndarrayobject.h 2007-04-08 21:28:42 UTC (rev 3682) @@ -190,14 +190,14 @@ NPY_HEAPSORT=1, NPY_MERGESORT=2, } NPY_SORTKIND; -#define NPY_NSORTS NPY_MERGESORT + 1 +#define NPY_NSORTS (NPY_MERGESORT + 1) typedef enum { NPY_SEARCHLEFT=0, NPY_SEARCHRIGHT=1, } NPY_SEARCHSIDE; -#define NPY_NSEARCHSIDES NPY_SEARCHRIGHT + 1 +#define NPY_NSEARCHSIDES (NPY_SEARCHRIGHT + 1) typedef enum { @@ -209,7 +209,7 @@ NPY_COMPLEX_SCALAR, NPY_OBJECT_SCALAR, } NPY_SCALARKIND; -#define NPY_NSCALARKINDS (NPY_OBJECT_SCALAR+1) +#define NPY_NSCALARKINDS (NPY_OBJECT_SCALAR + 1) typedef enum { NPY_ANYORDER=-1, From numpy-svn at scipy.org Sun Apr 8 18:37:23 2007 From: numpy-svn at scipy.org (numpy-svn at scipy.org) Date: Sun, 8 Apr 2007 17:37:23 -0500 (CDT) Subject: [Numpy-svn] r3683 - trunk/numpy/doc/swig Message-ID: <20070408223723.E43E039C1FD@new.scipy.org> Author: wfspotz at sandia.gov Date: 2007-04-08 17:37:21 -0500 (Sun, 08 Apr 2007) New Revision: 3683 Modified: trunk/numpy/doc/swig/numpy.i Log: Added %typecheck directive for IN_ARRAY typemaps Modified: trunk/numpy/doc/swig/numpy.i =================================================================== --- trunk/numpy/doc/swig/numpy.i 2007-04-08 21:28:42 UTC (rev 3682) +++ trunk/numpy/doc/swig/numpy.i 2007-04-08 22:37:21 UTC (rev 3683) @@ -441,6 +441,11 @@ /* Typemap suite for (DATA_TYPE IN_ARRAY1[ANY]) */ +%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY) + (DATA_TYPE IN_ARRAY1[ANY]) +{ + $1 = ($input != NULL); +} %typemap(in) (DATA_TYPE IN_ARRAY1[ANY]) (PyArrayObject* array=NULL, int is_new_object=0) @@ -458,6 +463,11 @@ /* Typemap suite for (DATA_TYPE* IN_ARRAY1, DIM_TYPE DIM1) */ +%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY) + (DATA_TYPE* IN_ARRAY1, DIM_TYPE DIM1) +{ + $1 = ($input != NULL); +} %typemap(in) (DATA_TYPE* IN_ARRAY1, DIM_TYPE DIM1) (PyArrayObject* array=NULL, int is_new_object=0) @@ -476,6 +486,11 @@ /* Typemap suite for (DIM_TYPE DIM1, DATA_TYPE* IN_ARRAY1) */ +%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY) + (DIM_TYPE DIM1, DATA_TYPE* IN_ARRAY1) +{ + $1 = ($input != NULL); +} %typemap(in) (DIM_TYPE DIM1, DATA_TYPE* IN_ARRAY1) (PyArrayObject* array=NULL, int is_new_object=0) @@ -494,6 +509,11 @@ /* Typemap suite for (DATA_TYPE IN_ARRAY2[ANY][ANY]) */ +%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY) + (DATA_TYPE IN_ARRAY2[ANY][ANY]) +{ + $1 = ($input != NULL); +} %typemap(in) (DATA_TYPE IN_ARRAY2[ANY][ANY]) (PyArrayObject* array=NULL, int is_new_object=0) @@ -511,6 +531,11 @@ /* Typemap suite for (DATA_TYPE* IN_ARRAY2, DIM_TYPE DIM1, DIM_TYPE DIM2) */ +%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY) + (DATA_TYPE* IN_ARRAY2, DIM_TYPE DIM1, DIM_TYPE DIM2) +{ + $1 = ($input != NULL); +} %typemap(in) (DATA_TYPE* IN_ARRAY2, DIM_TYPE DIM1, DIM_TYPE DIM2) (PyArrayObject* array=NULL, int is_new_object=0) @@ -530,6 +555,11 @@ /* Typemap suite for (DIM_TYPE DIM1, DIM_TYPE DIM2, DATA_TYPE* IN_ARRAY2) */ +%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY) + (DIM_TYPE DIM1, DIM_TYPE DIM2, DATA_TYPE* IN_ARRAY2) +{ + $1 = ($input != NULL); +} %typemap(in) (DIM_TYPE DIM1, DIM_TYPE DIM2, DATA_TYPE* IN_ARRAY2) (PyArrayObject* array=NULL, int is_new_object=0) @@ -549,6 +579,11 @@ /* Typemap suite for (DATA_TYPE IN_ARRAY3[ANY][ANY][ANY]) */ +%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY) + (DATA_TYPE IN_ARRAY3[ANY][ANY][ANY]) +{ + $1 = ($input != NULL); +} %typemap(in) (DATA_TYPE IN_ARRAY3[ANY][ANY][ANY]) (PyArrayObject* array=NULL, int is_new_object=0) @@ -567,6 +602,11 @@ /* Typemap suite for (DATA_TYPE* IN_ARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, * DIM_TYPE DIM3) */ +%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY) + (DATA_TYPE* IN_ARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3) +{ + $1 = ($input != NULL); +} %typemap(in) (DATA_TYPE* IN_ARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3) (PyArrayObject* array=NULL, int is_new_object=0) @@ -588,6 +628,11 @@ /* Typemap suite for (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, * DATA_TYPE* IN_ARRAY3) */ +%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY) + (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DATA_TYPE* IN_ARRAY3) +{ + $1 = ($input != NULL); +} %typemap(in) (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DATA_TYPE* IN_ARRAY3) (PyArrayObject* array=NULL, int is_new_object=0) From numpy-svn at scipy.org Mon Apr 9 18:53:22 2007 From: numpy-svn at scipy.org (numpy-svn at scipy.org) Date: Mon, 9 Apr 2007 17:53:22 -0500 (CDT) Subject: [Numpy-svn] r3684 - trunk/numpy/doc Message-ID: <20070409225322.9D19C39C080@new.scipy.org> Author: oliphant Date: 2007-04-09 17:53:12 -0500 (Mon, 09 Apr 2007) New Revision: 3684 Modified: trunk/numpy/doc/pep_buffer.txt Log: Buffer PEP has a number. Modified: trunk/numpy/doc/pep_buffer.txt =================================================================== --- trunk/numpy/doc/pep_buffer.txt 2007-04-08 22:37:21 UTC (rev 3683) +++ trunk/numpy/doc/pep_buffer.txt 2007-04-09 22:53:12 UTC (rev 3684) @@ -1,13 +1,13 @@ -:PEP: XXX -:Title: Revising the buffer protocol -:Version: $Revision: $ -:Last-Modified: $Date: $ -:Authors: Travis Oliphant , Carl Banks -:Status: Draft -:Type: Standards Track -:Content-Type: text/x-rst -:Created: 28-Aug-2006 -:Python-Version: 3000 +PEP: 3118 +Title: Revising the buffer protocol +Version: $Revision$ +Last-Modified: $Date$ +Authors: Travis Oliphant , Carl Banks +Status: Draft +Type: Standards Track +Content-Type: text/x-rst +Created: 28-Aug-2006 +Python-Version: 3000 Abstract ======== @@ -135,8 +135,8 @@ doing this even if the original object is not represented as a contiguous chunk of memory. -The easiest way is to use the provided C-API to obtain a contiguous -chunk of memory like the old buffer protocol allowed. +The easiest way to obtain a simple contiguous chunk of memory is +to use the provided C-API to obtain a chunk of memory. Change the PyBufferProcs structure to @@ -151,17 +151,68 @@ :: - typedef int (*getbufferproc)(PyObject *obj, struct bufferinfo *view) + typedef int (*getbufferproc)(PyObject *obj, struct bufferinfo *view, int flags) This function returns 0 on success and -1 on failure (and raises an error). The first variable is the "exporting" object. The second argument is the address to a bufferinfo structure. If view is NULL, then no information is returned but a lock on the memory is still -obtained. In this case, releasebuffer should also be called with NULL. +obtained. In this case, the corresponding releasebuffer should also +be called with NULL. -The bufferinfo structure is: +The third argument indicates what kind of buffer the exporter is allowed to return. It tells the +exporter what elements the bufferinfo structure the consumer is going to make use of. This +allows the exporter to simplify and/or raise an error if it can't support the operation. -struct bufferinfo { +It also allows the caller to make a request for a simple "view" and +receive it or have an error raised if it's not possible. + +All of the following assume that at least buf, len, and readonly will be +utilized by the caller. + +Py_BUF_SIMPLE + The returned buffer will only be assumed to be readable (the object + may or may not have writeable memory). Only the buf, len, and + readonly variables may be accessed. The format will be + assumed to be unsigned bytes. This is a "stand-alone" flag constant. + It never needs to be |'d to the others. + +Py_BUF_WRITEABLE + The returned buffer must be writeable. If it cannot be, then raise an error. + +Py_BUF_READONLY + The returned buffer must be readonly and the underlying object should make + its memory readonly if that is possible. + +Py_BUF_FORMAT + The consumer will be using the format string information so make sure that + member is filled correctly. + +Py_BUF_SHAPE + The consumer can (and might) make use of using the ndims and shape members of the structure + so make sure they are filled in correctly. + +Py_BUF_STRIDES (implies SHAPE) + The consumer can (and might) make use of the strides member of the structure (as well + as ndims and shape) + +Py_BUF_OFFSETS (implies STRIDES) + The consumer can (and might) make use of the suboffsets member (as well as + ndims, shape, and strides) + +Thus, the consumer simply wanting an contiguous chunk of bytes from +the object would use Py_BUF_SIMPLE, while a consumer that understands +how to make use of the most complicated cases would use +Py_BUF_OFFSETS. + +There is a C-API that simple exporting objects can use to fill-in the +buffer info structure correctly according to the provided flags if a +contiguous chunk of memory is all that can be exported. + + +The bufferinfo structure is:: + + struct bufferinfo { void *buf; Py_ssize_t len; int readonly; @@ -170,18 +221,19 @@ Py_ssize_t *shape; Py_ssize_t *strides; Py_ssize_t *suboffsets; -}; + void *internal; + }; -Upon return from getbufferproc, the bufferinfo structure is filled in +Before calling this function, the bufferinfo structure can be filled with +whatever. Upon return from getbufferproc, the bufferinfo structure is filled in with relevant information about the buffer. This same bufferinfo structure must be passed to bf_releasebuffer (if available) when the consumer is done with the memory. The caller is responsible for -keeping a reference to obj until releasebuffer is called. +keeping a reference to obj until releasebuffer is called (i.e. this +call does not alter the reference count of obj). - The members of the bufferinfo structure are: - buf a pointer to the start of the memory for the object @@ -195,29 +247,28 @@ readonly. 1 means the memory is readonly, zero means the memory is writeable. +format + a NULL-terminated format-string (following the struct-style syntax + including extensions) indicating what is in each element of + memory. The number of elements is len / itemsize, where itemsize + is the number of bytes implied by the format. For standard + unsigned bytes use a format string of "B". -format - a format-string (following extended struct syntax) indicating what - is in each element of of memory. The number of elements is len / - itemsize, where itemsize is the number of bytes implied by the - format. For standard unsigned bytes use a format string of "B". - ndims a variable storing the number of dimensions the memory represents. - Should be >=0. + Must be >=0. shape an array of ``Py_ssize_t`` of length ``ndims`` indicating the shape of the memory as an N-D array. Note that ``((*shape)[0] * - ... * (*shape)[ndims-1])*itemsize = len``. This can be NULL - to indicate 1-d arrays. + ... * (*shape)[ndims-1])*itemsize = len``. strides address of a ``Py_ssize_t*`` variable that will be filled with a pointer to an array of ``Py_ssize_t`` of length ``*ndims`` indicating the number of bytes to skip to get to the next element - in each dimension. If this is NULL, then the memory is assumed to - be C-style contigous with the last dimension varying the fastest. + in each dimension. For C-style contiguous arrays (where the + last-dimension varies the fastest) this must be filled in. suboffsets address of a ``Py_ssize_t *`` variable that will be filled with a @@ -232,39 +283,47 @@ For clarity, here is a function that returns a pointer to the element in an N-D array pointed to by an N-dimesional index when - there are both strides and suboffsets. + there are both strides and suboffsets.:: - void* get_item_pointer(int ndim, void* buf, Py_ssize_t* strides, + void* get_item_pointer(int ndim, void* buf, Py_ssize_t* strides, Py_ssize_t* suboffsets, Py_ssize_t *indices) { - char* pointer = (char*)buf; - int i; - for (i = 0; i < ndim; i++) { - pointer += strides[i]*indices[i]; - if (suboffsets[i] >=0 ) { - pointer = *((char**)pointer) + suboffsets[i]; - } - } - return (void*)pointer; - } + char* pointer = (char*)buf; + int i; + for (i = 0; i < ndim; i++) { + pointer += strides[i]*indices[i]; + if (suboffsets[i] >=0 ) { + pointer = *((char**)pointer) + suboffsets[i]; + } + } + return (void*)pointer; + } Notice the suboffset is added "after" the dereferencing occurs. Thus slicing in the ith dimension would add to the suboffsets in - the i-1st dimension. Slicing in the first dimension would change + the (i-1)st dimension. Slicing in the first dimension would change the location of the starting pointer directly (i.e. buf would be modified). + +internal + This is for use internally by the exporting object. For example, + this might be re-cast as an integer by the exporter and used to + store flags about whether or not the shape, strides, and suboffsets + arrays must be freed when the buffer is released. The consumer + should never touch this value. The exporter is responsible for making sure the memory pointed to by buf, format, shape, strides, and suboffsets is valid until releasebuffer is called. If the exporter wants to be able to change shape, strides, and/or suboffsets before releasebuffer is called then -it should allocate those arrays when getbuffer is called and free them -when releasebuffer is called. +it should allocate those arrays when getbuffer is called (pointing to +them in the buffer-info structure provided) and free them when +releasebuffer is called. -The same bufferinfo struct should be used in the other buffer +The same bufferinfo struct should be used in the release-buffer interface call. The caller is responsible for the memory of the -bufferinfo object itself. +bufferinfo structure itself. ``typedef int (*releasebufferproc)(PyObject *obj, struct bufferinfo *view)`` Callers of getbufferproc must make sure that this function is @@ -285,11 +344,13 @@ calls have been made and shared. Either a single variable could be used to keep track of how many "views" have been exported, or a linked-list of bufferinfo structures filled in could be maintained in -each objet. All that is needed is to ensure that any memory shared -through the bufferinfo structure remains valid until releasebuffer is -called on that memory. +each object. +All that is specifically required by the exporter, however, is to +ensure that any memory shared through the bufferinfo structure remains +valid until releasebuffer is called on the bufferinfo structure. + New C-API calls are proposed ============================ @@ -301,28 +362,45 @@ :: - PyObject *PyObject_GetBuffer(PyObject *obj) + int PyObject_GetBuffer(PyObject *obj, struct bufferinfo *view, int flags) +This is a C-API version of the getbuffer function call. It checks to +make sure object has the required function pointer and issues the +call. Returns -1 and raises an error on failure and returns 0 on +success. + +:: + int PyObject_ReleaseBuffer(PyObject *obj, struct bufferinfo *view) + +This is a C-API version of the releasebuffer function call. It checks to +make sure the object has the required function pointer and issues the call. Returns 0 +on success and -1 (with an error raised) on failure. This function always +succeeds if there is no releasebuffer function for the object. + +:: + + PyObject *PyObject_GetMemoryView(PyObject *obj) + Return a memory-view object from an object that defines the buffer interface. If make_ro is non-zero then request that the memory is made read-only until release buffer is called. A memory-view object is an extended buffer object that should replace -the buffer object in Python 3K. It's C-structure is +the buffer object in Python 3K. It's C-structure is:: -typedef struct { - PyObject_HEAD - PyObject *base; - struct bufferinfo view; - int itemsize; - int flags; -} PyMemoryViewObject; + typedef struct { + PyObject_HEAD + PyObject *base; + struct bufferinfo view; + int itemsize; + int flags; + } PyMemoryViewObject; This is very similar to the current buffer object except offset has been removed because ptr can just be modified by offset and a single -offset is not sufficient. Also the hash has been removed because -using the buffer object as a hash even if it is read-only is rarely -useful. +offset is not sufficient for the sub-offsets. Also the hash has been +removed because using the buffer object as a hash even if it is +read-only is rarely useful. Also, the format, ndims, shape, strides, and suboffsets have been added. These additions will allow multi-dimensional slicing of the @@ -338,10 +416,10 @@ format and therefore does not need to keep track of how many views it has exported. -It exports a view using the base object. It releases a view by releasing -the view on the base object. Because, it will never re-allocate memory, -it does not need to keep track of how many it has exported but simple -reference counting will suffice. +It exports a view using the base object. It releases a view by +releasing the view on the base object. Because, it will never +re-allocate memory, it does not need to keep track of how many it has +exported but simple reference counting will suffice. :: @@ -363,7 +441,8 @@ fortran is 1, the first dimension of the underlying array will vary the fastest in the buffer. If fortran is 0, then the last dimension will vary the fastest (C-style contiguous). If fortran is -1, then it -does not matter and you will get whatever the object decides is easiest. +does not matter and you will get whatever the object decides is more +efficient. :: @@ -378,8 +457,8 @@ will be copied into the array in Fortran-style (first dimension varies the fastest). If fortran is 0, then the data will be copied into the array in C-style (last dimension varies the fastest). If fortran is -1, then -it does not matter and the copy will be made in whatever way is -easiest. +it does not matter and the copy will be made in whatever way is more +efficient. The last two C-API calls allow a standard way of getting data in and out of Python objects into contiguous memory areas no matter how it is @@ -387,21 +466,31 @@ their work. :: - int PyObject_IsContiguous(struct bufferinfo *view); -Return 1 if the memory defined by the view object is C-style -contiguous. Return 0 otherwise. + int PyObject_IsContiguous(struct bufferinfo *view, int fortran); +Return 1 if the memory defined by the view object is C-style (fortran = 0) +or Fortran-style (fortran = 1) contiguous. Return 0 otherwise. + :: + void PyObject_FillContiguousStrides(int *ndims, Py_ssize_t *shape, int itemsize, - Py_ssize_t *strides) + Py_ssize_t *strides, int fortran) -Fill the strides array with byte-strides of a contiguous array of the -given shape with the given number of bytes per element. +Fill the strides array with byte-strides of a contiguous (C-style if +fortran is 0 or Fortran-style if fortran is 1) array of the given +shape with the given number of bytes per element. +:: + int PyObject_FillBufferInfo(struct bufferinfo *view, void *buf, Py_ssize_t len, + int readonly, int infoflags) +Fills in a buffer-info structure correctly for an exporter that can only share +a contiguous chunk of memory of "unsigned bytes" of the given length. Returns 0 on success +and -1 (with raising an error) on error + Additions to the struct string-syntax ===================================== @@ -430,22 +519,27 @@ ':name:' optional name of the preceeding element 'X{}' pointer to a function (optional function signature inside {}) -' ' ignored (allow better readability) +' \n\t' ignored (allow better readability) + -- this may already be true ================ =========== The struct module will be changed to understand these as well and -return appropriate Python objects on unpacking. Un-packing a -long-double will return a decimal object. Unpacking 'u' or -'w' will return Python unicode. Unpacking a multi-dimensional -array will return a list of lists. Un-packing a pointer will -return a ctypes pointer object. Un-packing a bit will return a -Python Bool. Spaces in the struct-string syntax will be ignored. -Unpacking a named-object will return a Python class with attributes -having those names. +return appropriate Python objects on unpacking. Unpacking a +long-double will return a decimal object or a ctypes long-double. +Unpacking 'u' or 'w' will return Python unicode. Unpacking a +multi-dimensional array will return a list (of lists if >1d). +Unpacking a pointer will return a ctypes pointer object. Unpacking a +function pointer will return a ctypes call-object (perhaps). Unpacking +a bit will return a Python Bool. White-space in the struct-string +syntax will be ignored if it isn't already. Unpacking a named-object +will return some kind of named-tuple-like object that acts like a +tuple but whose entries can also be accessed by name. Unpacking a +nested structure will return a nested tuple. -Endian-specification ('=','>','<') is also allowed inside the +Endian-specification ('!', '@','=','>','<') is also allowed inside the string so that it can change if needed. The previously-specified -endian string is in force until changed. The default endian is '='. +endian string is in force until changed. The default endian is '@' +which means native data-types. According to the struct-module, a number can preceed a character code to specify how many of that type there are. The @@ -460,16 +554,21 @@ ==================================== Here are some examples of C-structures and how they would be -represented using the struct-style syntax: +represented using the struct-style syntax. + is the constructor for a named-tuple (not-specified yet). + float - 'f' + 'f' <--> Python float complex double - 'Zd' + 'Zd' <--> Python complex RGB Pixel data - 'BBB' or 'B:r: B:g: B:b:' + 'BBB' <--> (int, int, int) + 'B:r: B:g: B:b:' <--> ((int, int, int), ('r','g','b')) + Mixed endian (weird but possible) - '>i:big: i:big: ((int, int), ('big', 'little')) + Nested structure :: @@ -481,7 +580,13 @@ unsigned char cval; } sub; } - 'i:ival: T{H:sval: B:bval: B:cval:}:sub:' + """i:ival: + T{ + H:sval: + B:bval: + B:cval: + }:sub: + """ Nested array :: @@ -489,8 +594,11 @@ int ival; double data[16*4]; } - 'i:ival: (16,4)d:data:' + """i:ival: + (16,4)d:data: + """ + Code to be affected =================== @@ -511,6 +619,10 @@ Issues and Details ================== +It is intended that this PEP will be back-ported to Python 2.6 by +adding the C-API and the two functions to the existing buffer +protocol. + The proposed locking mechanism relies entirely on the exporter object to not invalidate any of the memory pointed to by the buffer structure until a corresponding releasebuffer is called. If it wants to be able @@ -525,7 +637,7 @@ because strided memory is very common when interfacing with compute libraries. -Also with this approach it should be possible to write generic code +Also, with this approach it should be possible to write generic code that works with both kinds of memory. Memory management of the format string, the shape array, the strides @@ -533,6 +645,20 @@ the responsibility of the exporting object. The consumer should not set these pointers to any other memory or try to free them. +Several ideas were discussed and rejected: + + Having a "releaser" object whose release-buffer was called. This + was deemed unacceptable because it caused the protocol to be + asymmetric (you called release on something different than you + "got" the buffer from). It also complicated the protocol without + providing a real benefit. + + Passing all the struct variables separately into the function. + This had the advantage that it allowed one to set NULL to + variables that were not of interest, but it also made the function + call more difficult. The flags variable allows the same + ability of consumers to be "simple" in how they call the protocol. + Code ======== @@ -540,65 +666,119 @@ this proposal but will welcome any help. + + Examples ========= Ex. 1 ---------- -This example shows how an image object that uses contiguous lines might expose its buffer. +This example shows how an image object that uses contiguous lines might expose its buffer.:: -struct rgba { - unsigned char r, g, b, a; -}; + struct rgba { + unsigned char r, g, b, a; + }; -struct ImageObject { - PyObject_HEAD; - ... - struct rgba** lines; - Py_ssize_t height; - Py_ssize_t width; - Py_ssize_t shape_array[2]; - Py_ssize_t stride_array[2]; - Py_ssize_t view_count; -}; + struct ImageObject { + PyObject_HEAD; + ... + struct rgba** lines; + Py_ssize_t height; + Py_ssize_t width; + Py_ssize_t shape_array[2]; + Py_ssize_t stride_array[2]; + Py_ssize_t view_count; + }; "lines" points to malloced 1-D array of (struct rgba*). Each pointer in THAT block points to a seperately malloced array of (struct rgba). In order to access, say, the red value of the pixel at x=30, y=50, you'd use "lines[50][30].r". -So what does ImageObject's getbuffer do? Leaving error checking out: +So what does ImageObject's getbuffer do? Leaving error checking out:: -int Image_getbuffer(PyObject *self, struct bufferinfo *view) { + int Image_getbuffer(PyObject *self, struct bufferinfo *view, int flags) { - static Py_ssize_t suboffsets[2] = { -1, 0 }; + static Py_ssize_t suboffsets[2] = { -1, 0 }; - view->buf = self->lines; - view->len = self->height*self->width; - view->readonly = 0; - view->ndims = 2; - self->shape_array[0] = height; - self->shape_array[1] = width; - view->shape = &self->shape_array; - self->stride_array[0] = sizeof(struct rgba*); - self->stride_array[1] = sizeof(struct rgba); - view->strides = &self->stride_array; - view->suboffsets = suboffsets; + view->buf = self->lines; + view->len = self->height*self->width; + view->readonly = 0; + view->ndims = 2; + self->shape_array[0] = height; + self->shape_array[1] = width; + view->shape = &self->shape_array; + self->stride_array[0] = sizeof(struct rgba*); + self->stride_array[1] = sizeof(struct rgba); + view->strides = &self->stride_array; + view->suboffsets = suboffsets; - self->view_count ++; + self->view_count ++; - return 0; -} + return 0; + } -int Image_releasebuffer(PyObject *self, struct bufferinfo *view) { - self->view_count--; - return 0; + int Image_releasebuffer(PyObject *self, struct bufferinfo *view) { + self->view_count--; + return 0; + } + + +Ex. 2 +----------- + +This example shows how an object that wants to expose a contiguous +chunk of memory (which will never be re-allocated while the object is +alive) would do that. + +int myobject_getbuffer(PyObject *self, struct bufferinfo *view, int flags) { + + void *buf; + Py_ssize_t len; + int readonly=0; + + buf = /* Point to buffer */ + len = /* Set to size of buffer */ + readonly = /* Set to 1 if readonly */ + + return PyObject_FillBufferInfo(view, buf, len, readonly, flags); } +/* No releasebuffer is necessary because the memory will never +be re-allocated so the locking mechanism is not needed +*/ +Ex. 3 +----------- +A consumer that wants to only get a simple contiguous chunk of bytes +from a Python object, obj would do the following: + + + struct bufferinfo view; + int ret; + + if (PyObject_GetBuffer(obj, &view, Py_BUF_SIMPLE) < 0) { + /* error return */ + } + + /* Now, view.buf is the pointer to memory + view.len is the length + view.readonly is whether or not the memory is read-only. + */ + + + /* After using the information and you don't need it anymore */ + + if (PyObject_ReleaseBuffer(obj, &view) < 0) { + /* error return */ + } + + + + Copyright ========= From numpy-svn at scipy.org Mon Apr 9 19:17:52 2007 From: numpy-svn at scipy.org (numpy-svn at scipy.org) Date: Mon, 9 Apr 2007 18:17:52 -0500 (CDT) Subject: [Numpy-svn] r3685 - trunk/numpy/doc Message-ID: <20070409231752.DF90539C0C8@new.scipy.org> Author: oliphant Date: 2007-04-09 18:17:50 -0500 (Mon, 09 Apr 2007) New Revision: 3685 Modified: trunk/numpy/doc/pep_buffer.txt Log: Cleaned-up Modified: trunk/numpy/doc/pep_buffer.txt =================================================================== --- trunk/numpy/doc/pep_buffer.txt 2007-04-09 22:53:12 UTC (rev 3684) +++ trunk/numpy/doc/pep_buffer.txt 2007-04-09 23:17:50 UTC (rev 3685) @@ -366,24 +366,23 @@ This is a C-API version of the getbuffer function call. It checks to make sure object has the required function pointer and issues the -call. Returns -1 and raises an error on failure and returns 0 on -success. +call. Returns -1 and raises an error on failure and returns 0 on +success. :: int PyObject_ReleaseBuffer(PyObject *obj, struct bufferinfo *view) -This is a C-API version of the releasebuffer function call. It checks to -make sure the object has the required function pointer and issues the call. Returns 0 -on success and -1 (with an error raised) on failure. This function always -succeeds if there is no releasebuffer function for the object. +This is a C-API version of the releasebuffer function call. It checks +to make sure the object has the required function pointer and issues +the call. Returns 0 on success and -1 (with an error raised) on +failure. This function always succeeds if there is no releasebuffer +function for the object. :: PyObject *PyObject_GetMemoryView(PyObject *obj) -Return a memory-view object from an object that defines the buffer interface. -If make_ro is non-zero then request that the memory is made read-only until -release buffer is called. +Return a memory-view object from an object that defines the buffer interface. A memory-view object is an extended buffer object that should replace the buffer object in Python 3K. It's C-structure is:: From numpy-svn at scipy.org Mon Apr 9 20:55:18 2007 From: numpy-svn at scipy.org (numpy-svn at scipy.org) Date: Mon, 9 Apr 2007 19:55:18 -0500 (CDT) Subject: [Numpy-svn] r3686 - trunk/numpy/doc Message-ID: <20070410005518.E71AE39C0D7@new.scipy.org> Author: oliphant Date: 2007-04-09 19:55:16 -0500 (Mon, 09 Apr 2007) New Revision: 3686 Modified: trunk/numpy/doc/pep_buffer.txt Log: More fixes to buffer. Modified: trunk/numpy/doc/pep_buffer.txt =================================================================== --- trunk/numpy/doc/pep_buffer.txt 2007-04-09 23:17:50 UTC (rev 3685) +++ trunk/numpy/doc/pep_buffer.txt 2007-04-10 00:55:16 UTC (rev 3686) @@ -160,50 +160,56 @@ obtained. In this case, the corresponding releasebuffer should also be called with NULL. -The third argument indicates what kind of buffer the exporter is allowed to return. It tells the -exporter what elements the bufferinfo structure the consumer is going to make use of. This -allows the exporter to simplify and/or raise an error if it can't support the operation. +The third argument indicates what kind of buffer the exporter is +allowed to return. It tells the exporter what elements the bufferinfo +structure the consumer is going to make use of. This allows the +exporter to simplify and/or raise an error if it can't support the +operation. It also allows the caller to make a request for a simple "view" and receive it or have an error raised if it's not possible. -All of the following assume that at least buf, len, and readonly will be -utilized by the caller. +All of the following assume that at least buf, len, and readonly will +be utilized by the caller. -Py_BUF_SIMPLE +BUF_SIMPLE The returned buffer will only be assumed to be readable (the object may or may not have writeable memory). Only the buf, len, and - readonly variables may be accessed. The format will be - assumed to be unsigned bytes. This is a "stand-alone" flag constant. - It never needs to be |'d to the others. + readonly variables may be accessed. The format will be assumed to + be unsigned bytes. This is a "stand-alone" flag constant. It + never needs to be |'d to the others. -Py_BUF_WRITEABLE - The returned buffer must be writeable. If it cannot be, then raise an error. +BUF_WRITEABLE + The returned buffer must be writeable. If it cannot be, then raise + an error. -Py_BUF_READONLY - The returned buffer must be readonly and the underlying object should make - its memory readonly if that is possible. +BUF_READONLY + The returned buffer must be readonly and the underlying object + should make its memory readonly. If it cannot do that, then an + error should be raised if this flag is requested. -Py_BUF_FORMAT - The consumer will be using the format string information so make sure that - member is filled correctly. +BUF_FORMAT + The consumer will be using the format string information so make + sure that member is filled correctly. -Py_BUF_SHAPE - The consumer can (and might) make use of using the ndims and shape members of the structure - so make sure they are filled in correctly. +BUF_SHAPE + The consumer can (and might) make use of using the ndims and shape + members of the structure so make sure they are filled in correctly. -Py_BUF_STRIDES (implies SHAPE) - The consumer can (and might) make use of the strides member of the structure (as well - as ndims and shape) +BUF_STRIDES (implies BUF_SHAPE) + The consumer can (and might) make use of the strides member of the + structure (as well as ndims and shape) -Py_BUF_OFFSETS (implies STRIDES) - The consumer can (and might) make use of the suboffsets member (as well as - ndims, shape, and strides) +BUF_OFFSETS (implies BUF_STRIDES) + The consumer can (and might) make use of the suboffsets member (as + well as ndims, shape, and strides) +BUF_FULL + This is the same as BUF_OFFSETS | BUF_FORMAT + Thus, the consumer simply wanting an contiguous chunk of bytes from -the object would use Py_BUF_SIMPLE, while a consumer that understands -how to make use of the most complicated cases would use -Py_BUF_OFFSETS. +the object would use BUF_SIMPLE, while a consumer that understands +how to make use of the most complicated cases would use BUF_FULL. There is a C-API that simple exporting objects can use to fill-in the buffer info structure correctly according to the provided flags if a @@ -267,9 +273,14 @@ address of a ``Py_ssize_t*`` variable that will be filled with a pointer to an array of ``Py_ssize_t`` of length ``*ndims`` indicating the number of bytes to skip to get to the next element - in each dimension. For C-style contiguous arrays (where the - last-dimension varies the fastest) this must be filled in. + in each dimension. If this is not requested by the caller + (BUF_STRIDES is not set), then this member of the structure will + not be used and the consumer is assuming the array is C-style + contiguous. If this is not the case, then an error should be + raised. If this member is requested by the caller (BUF_STRIDES is + set), then it must be filled in. + suboffsets address of a ``Py_ssize_t *`` variable that will be filled with a pointer to an array of ``Py_ssize_t`` of length ``*ndims``. If @@ -482,12 +493,13 @@ shape with the given number of bytes per element. :: - int PyObject_FillBufferInfo(struct bufferinfo *view, void *buf, Py_ssize_t len, - int readonly, int infoflags) + int PyObject_FillBufferInfo(struct bufferinfo *view, void *buf, + Py_ssize_t len, int readonly, int infoflags) -Fills in a buffer-info structure correctly for an exporter that can only share -a contiguous chunk of memory of "unsigned bytes" of the given length. Returns 0 on success -and -1 (with raising an error) on error +Fills in a buffer-info structure correctly for an exporter that can +only share a contiguous chunk of memory of "unsigned bytes" of the +given length. Returns 0 on success and -1 (with raising an error) on +error. Additions to the struct string-syntax @@ -535,10 +547,12 @@ tuple but whose entries can also be accessed by name. Unpacking a nested structure will return a nested tuple. -Endian-specification ('!', '@','=','>','<') is also allowed inside the -string so that it can change if needed. The previously-specified -endian string is in force until changed. The default endian is '@' -which means native data-types. +Endian-specification ('!', '@','=','>','<', '^') is also allowed +inside the string so that it can change if needed. The +previously-specified endian string is in force until changed. The +default endian is '@' which means native data-types and alignment. If +un-aligned, native data-types are requested, then the endian +specification is '^'. According to the struct-module, a number can preceed a character code to specify how many of that type there are. The From numpy-svn at scipy.org Mon Apr 9 21:52:01 2007 From: numpy-svn at scipy.org (numpy-svn at scipy.org) Date: Mon, 9 Apr 2007 20:52:01 -0500 (CDT) Subject: [Numpy-svn] r3687 - trunk Message-ID: <20070410015201.0A35739C020@new.scipy.org> Author: eric Date: 2007-04-09 20:51:17 -0500 (Mon, 09 Apr 2007) New Revision: 3687 Modified: trunk/TEST_COMMIT Log: test commit Modified: trunk/TEST_COMMIT =================================================================== --- trunk/TEST_COMMIT 2007-04-10 00:55:16 UTC (rev 3686) +++ trunk/TEST_COMMIT 2007-04-10 01:51:17 UTC (rev 3687) @@ -5,10 +5,10 @@ chanley: yes - still cookedm: yes swalton: yes -eric: no +eric: yes charris: no fonnesbeck: no afayolle: no dubois: no -sasha: yes +sasha: yes tim_hochberg: yes From numpy-svn at scipy.org Mon Apr 9 22:01:13 2007 From: numpy-svn at scipy.org (numpy-svn at scipy.org) Date: Mon, 9 Apr 2007 21:01:13 -0500 (CDT) Subject: [Numpy-svn] r3688 - branches Message-ID: <20070410020113.A0A7039C020@new.scipy.org> Author: eric Date: 2007-04-09 21:01:10 -0500 (Mon, 09 Apr 2007) New Revision: 3688 Added: branches/multicore/ Log: branch for experimental support of vector operations on multicore chips Copied: branches/multicore (from rev 3687, trunk) From numpy-svn at scipy.org Mon Apr 9 22:40:44 2007 From: numpy-svn at scipy.org (numpy-svn at scipy.org) Date: Mon, 9 Apr 2007 21:40:44 -0500 (CDT) Subject: [Numpy-svn] r3689 - branches/multicore Message-ID: <20070410024044.8FEBF39C018@new.scipy.org> Author: eric Date: 2007-04-09 21:40:06 -0500 (Mon, 09 Apr 2007) New Revision: 3689 Modified: branches/multicore/TEST_COMMIT Log: another test while working out svk merge process... Modified: branches/multicore/TEST_COMMIT =================================================================== --- branches/multicore/TEST_COMMIT 2007-04-10 02:01:10 UTC (rev 3688) +++ branches/multicore/TEST_COMMIT 2007-04-10 02:40:06 UTC (rev 3689) @@ -5,7 +5,7 @@ chanley: yes - still cookedm: yes swalton: yes -eric: yes +eric: yes -branch` charris: no fonnesbeck: no afayolle: no From numpy-svn at scipy.org Tue Apr 10 11:21:34 2007 From: numpy-svn at scipy.org (numpy-svn at scipy.org) Date: Tue, 10 Apr 2007 10:21:34 -0500 (CDT) Subject: [Numpy-svn] r3690 - trunk/numpy/doc/swig Message-ID: <20070410152134.2B25739C0CF@new.scipy.org> Author: wfspotz at sandia.gov Date: 2007-04-10 10:21:28 -0500 (Tue, 10 Apr 2007) New Revision: 3690 Modified: trunk/numpy/doc/swig/numpy.i trunk/numpy/doc/swig/numpy_swig.html trunk/numpy/doc/swig/numpy_swig.pdf trunk/numpy/doc/swig/numpy_swig.txt Log: Added 'array_data()' macros and used it in the typemaps; added new macro to the documentation Modified: trunk/numpy/doc/swig/numpy.i =================================================================== --- trunk/numpy/doc/swig/numpy.i 2007-04-10 02:40:06 UTC (rev 3689) +++ trunk/numpy/doc/swig/numpy.i 2007-04-10 15:21:28 UTC (rev 3690) @@ -22,6 +22,7 @@ #define array_numdims(a) (((PyArrayObject *)a)->nd) #define array_dimensions(a) (((PyArrayObject *)a)->dimensions) #define array_size(a,i) (((PyArrayObject *)a)->dimensions[i]) +#define array_data(a) (((PyArrayObject *)a)->data) #define array_is_contiguous(a) (PyArray_ISCONTIGUOUS(a)) #define array_is_native(a) (PyArray_ISNOTSWAPPED(a)) @@ -453,7 +454,7 @@ array = obj_to_array_contiguous_allow_conversion($input, DATA_TYPECODE, &is_new_object); npy_intp size[1] = { $1_dim0 }; if (!array || !require_dimensions(array, 1) || !require_size(array, size, 1)) SWIG_fail; - $1 = ($1_ltype) array->data; + $1 = ($1_ltype) array_data(array); } %typemap(freearg) (DATA_TYPE IN_ARRAY1[ANY]) @@ -475,7 +476,7 @@ array = obj_to_array_contiguous_allow_conversion($input, DATA_TYPECODE, &is_new_object); npy_intp size[1] = { -1 }; if (!array || !require_dimensions(array, 1) || !require_size(array, size, 1)) SWIG_fail; - $1 = (DATA_TYPE*) array->data; + $1 = (DATA_TYPE*) array_data(array); $2 = (DIM_TYPE) array_size(array,0); } %typemap(freearg) @@ -499,7 +500,7 @@ npy_intp size[1] = {-1}; if (!array || !require_dimensions(array, 1) || !require_size(array, size, 1)) SWIG_fail; $1 = (DIM_TYPE) array_size(array,0); - $2 = (DATA_TYPE*) array->data; + $2 = (DATA_TYPE*) array_data(array); } %typemap(freearg) (DIM_TYPE DIM1, DATA_TYPE* IN_ARRAY1) @@ -521,7 +522,7 @@ array = obj_to_array_contiguous_allow_conversion($input, DATA_TYPECODE, &is_new_object); npy_intp size[2] = { $1_dim0, $1_dim1 }; if (!array || !require_dimensions(array, 2) || !require_size(array, size, 2)) SWIG_fail; - $1 = ($1_ltype) array->data; + $1 = ($1_ltype) array_data(array); } %typemap(freearg) (DATA_TYPE IN_ARRAY2[ANY][ANY]) @@ -543,7 +544,7 @@ array = obj_to_array_contiguous_allow_conversion($input, DATA_TYPECODE, &is_new_object); npy_intp size[2] = { -1, -1 }; if (!array || !require_dimensions(array, 2) || !require_size(array, size, 2)) SWIG_fail; - $1 = (DATA_TYPE*) array->data; + $1 = (DATA_TYPE*) array_data(array); $2 = (DIM_TYPE) array_size(array,0); $3 = (DIM_TYPE) array_size(array,1); } @@ -569,7 +570,7 @@ if (!array || !require_dimensions(array, 2) || !require_size(array, size, 2)) SWIG_fail; $1 = (DIM_TYPE) array_size(array,0); $2 = (DIM_TYPE) array_size(array,1); - $3 = (DATA_TYPE*) array->data; + $3 = (DATA_TYPE*) array_data(array); } %typemap(freearg) (DIM_TYPE DIM1, DIM_TYPE DIM2, DATA_TYPE* IN_ARRAY2) @@ -591,7 +592,7 @@ array = obj_to_array_contiguous_allow_conversion($input, DATA_TYPECODE, &is_new_object); npy_intp size[3] = { $1_dim0, $1_dim1, $1_dim2 }; if (!array || !require_dimensions(array, 3) || !require_size(array, size, 3)) SWIG_fail; - $1 = ($1_ltype) array->data; + $1 = ($1_ltype) array_data(array); } %typemap(freearg) (DATA_TYPE IN_ARRAY3[ANY][ANY][ANY]) @@ -614,7 +615,7 @@ array = obj_to_array_contiguous_allow_conversion($input, DATA_TYPECODE, &is_new_object); npy_intp size[3] = { -1, -1, -1 }; if (!array || !require_dimensions(array, 3) || !require_size(array, size, 3)) SWIG_fail; - $1 = (DATA_TYPE*) array->data; + $1 = (DATA_TYPE*) array_data(array); $2 = (DIM_TYPE) array_size(array,0); $3 = (DIM_TYPE) array_size(array,1); $4 = (DIM_TYPE) array_size(array,2); @@ -643,7 +644,7 @@ $1 = (DIM_TYPE) array_size(array,0); $2 = (DIM_TYPE) array_size(array,1); $3 = (DIM_TYPE) array_size(array,2); - $4 = (DATA_TYPE*) array->data; + $4 = (DATA_TYPE*) array_data(array); } %typemap(freearg) (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DATA_TYPE* IN_ARRAY3) @@ -670,7 +671,7 @@ npy_intp size[1] = { $1_dim0 }; if (!array || !require_dimensions(array,1) || !require_size(array, size, 1) || !require_contiguous(array) || !require_native(array)) SWIG_fail; - $1 = ($1_ltype) array->data; + $1 = ($1_ltype) array_data(array); } /* Typemap suite for (DATA_TYPE* INPLACE_ARRAY1, DIM_TYPE DIM1) @@ -687,7 +688,7 @@ array = obj_to_array_no_conversion($input, DATA_TYPECODE); if (!array || !require_dimensions(array,1) || !require_contiguous(array) || !require_native(array)) SWIG_fail; - $1 = (DATA_TYPE*) array->data; + $1 = (DATA_TYPE*) array_data(array); $2 = 1; for (int i=0; ind; ++i) $2 *= array_size(array,i); } @@ -708,7 +709,7 @@ || !require_native(array)) SWIG_fail; $1 = 1; for (int i=0; ind; ++i) $1 *= array_size(array,i); - $2 = (DATA_TYPE*) array->data; + $2 = (DATA_TYPE*) array_data(array); } /* Typemap suite for (DATA_TYPE INPLACE_ARRAY2[ANY][ANY]) @@ -726,7 +727,7 @@ npy_intp size[2] = { $1_dim0, $1_dim1 }; if (!array || !require_dimensions(array,2) || !require_size(array, size, 2) || !require_contiguous(array) || !require_native(array)) SWIG_fail; - $1 = ($1_ltype) array->data; + $1 = ($1_ltype) array_data(array); } /* Typemap suite for (DATA_TYPE* INPLACE_ARRAY2, DIM_TYPE DIM1, DIM_TYPE DIM2) @@ -743,7 +744,7 @@ array = obj_to_array_no_conversion($input, DATA_TYPECODE); if (!array || !require_dimensions(array,2) || !require_contiguous(array) || !require_native(array)) SWIG_fail; - $1 = (DATA_TYPE*) array->data; + $1 = (DATA_TYPE*) array_data(array); $2 = (DIM_TYPE) array_size(array,0); $3 = (DIM_TYPE) array_size(array,1); } @@ -764,7 +765,7 @@ || !require_native(array)) SWIG_fail; $1 = (DIM_TYPE) array_size(array,0); $2 = (DIM_TYPE) array_size(array,1); - $3 = (DATA_TYPE*) array->data; + $3 = (DATA_TYPE*) array_data(array); } /* Typemap suite for (DATA_TYPE INPLACE_ARRAY3[ANY][ANY][ANY]) @@ -782,7 +783,7 @@ npy_intp size[3] = { $1_dim0, $1_dim1, $1_dim2 }; if (!array || !require_dimensions(array,3) || !require_size(array, size, 3) || !require_contiguous(array) || !require_native(array)) SWIG_fail; - $1 = ($1_ltype) array->data; + $1 = ($1_ltype) array_data(array); } /* Typemap suite for (DATA_TYPE* INPLACE_ARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, @@ -800,7 +801,7 @@ array = obj_to_array_no_conversion($input, DATA_TYPECODE); if (!array || !require_dimensions(array,3) || !require_contiguous(array) || !require_native(array)) SWIG_fail; - $1 = (DATA_TYPE*) array->data; + $1 = (DATA_TYPE*) array_data(array); $2 = (DIM_TYPE) array_size(array,0); $3 = (DIM_TYPE) array_size(array,1); $4 = (DIM_TYPE) array_size(array,2); @@ -824,7 +825,7 @@ $1 = (DIM_TYPE) array_size(array,0); $2 = (DIM_TYPE) array_size(array,1); $3 = (DIM_TYPE) array_size(array,2); - $4 = (DATA_TYPE*) array->data; + $4 = (DATA_TYPE*) array_data(array); } /*************************/ @@ -839,7 +840,7 @@ { npy_intp dims[1] = { $1_dim0 }; array = PyArray_SimpleNew(1, dims, DATA_TYPECODE); - $1 = ($1_ltype)((PyArrayObject*)array)->data; + $1 = ($1_ltype) array_data(array); } %typemap(argout) (DATA_TYPE ARGOUT_ARRAY1[ANY]) @@ -863,7 +864,7 @@ $2 = (DIM_TYPE) PyInt_AsLong($input); npy_intp dims[1] = { (npy_intp) $2 }; array = PyArray_SimpleNew(1, dims, DATA_TYPECODE); - $1 = (DATA_TYPE*)((PyArrayObject*)array)->data; + $1 = (DATA_TYPE*) array_data(array); } %typemap(argout) (DATA_TYPE* ARGOUT_ARRAY1, DIM_TYPE DIM1) @@ -887,7 +888,7 @@ $1 = (DIM_TYPE) PyInt_AsLong($input); npy_intp dims[1] = { (npy_intp) $1 }; array = PyArray_SimpleNew(1, dims, DATA_TYPECODE); - $2 = (DATA_TYPE*)((PyArrayObject*)array)->data; + $2 = (DATA_TYPE*) array_data(array); } %typemap(argout) (DIM_TYPE DIM1, DATA_TYPE* ARGOUT_ARRAY1) @@ -903,7 +904,7 @@ { npy_intp dims[2] = { $1_dim0, $1_dim1 }; array = PyArray_SimpleNew(2, dims, DATA_TYPECODE); - $1 = ($1_ltype)((PyArrayObject*)array)->data; + $1 = ($1_ltype) array_data(array); } %typemap(argout) (DATA_TYPE ARGOUT_ARRAY2[ANY][ANY]) @@ -919,7 +920,7 @@ { npy_intp dims[3] = { $1_dim0, $1_dim1, $1_dim2 }; array = PyArray_SimpleNew(3, dims, DATA_TYPECODE); - $1 = ($1_ltype)((PyArrayObject*)array)->data; + $1 = ($1_ltype) array_data(array); } %typemap(argout) (DATA_TYPE ARGOUT_ARRAY3[ANY][ANY][ANY]) Modified: trunk/numpy/doc/swig/numpy_swig.html =================================================================== --- trunk/numpy/doc/swig/numpy_swig.html 2007-04-10 02:40:06 UTC (rev 3689) +++ trunk/numpy/doc/swig/numpy_swig.html 2007-04-10 15:21:28 UTC (rev 3690) @@ -730,6 +730,9 @@
array_size(a,i)
Evaluates to the i-th dimension size of a, assuming a can be cast to a PyArrayObject*.
+
array_data(a)
+
Evaluates to a pointer of type void* that points to the data +buffer of a, assuming a can be cast to a PyArrayObject*.
array_is_contiguous(a)
Evaluates as true if a is a contiguous array. Equivalent to (PyArray_ISCONTIGUOUS(a)).
@@ -945,7 +948,7 @@ Modified: trunk/numpy/doc/swig/numpy_swig.pdf =================================================================== --- trunk/numpy/doc/swig/numpy_swig.pdf 2007-04-10 02:40:06 UTC (rev 3689) +++ trunk/numpy/doc/swig/numpy_swig.pdf 2007-04-10 15:21:28 UTC (rev 3690) @@ -783,29 +783,31 @@ /ProcSet [ /PDF /Text ] >> endobj 218 0 obj << -/Length 3503 +/Length 3653 /Filter /FlateDecode >> stream -x??[?s????B_:????~r\;?I??V'?I2??e????R?????xp?r?t????.4^?2??|? ????8;?l?]??C?? ?_ -7?tl??=?(87??]?L?????????is5 ???"{\??4V6?? ????3i[ ?|^??0=d?????I?7?D?? Xj]=:ZPg3?U??B??*+$??w[??????=U????/?d?p=??'?????t??:#v/?K??&L0 ?DY??Rv????6=>K?.??N???j?? !?????A??? ??7?y?I???i??Rb4??;??D??$B?[,Y???? 4?fX7N?)??\??A? -??>????V?}???a?{cA{p? ?????????)k(4?"?E|???????e?q?{?????E?F??hp????)rA????Wqd?x???y???IA?? T?????? ???????????6???\j??????4y[??A?~??cv? -??l?X??7RE??vI?i?Jva?x?H????t?h??_?w??1??? >?Z???`?????(???;?hDr2??????9b -?=?r??O? ?aD2'?.N?KV??J9R>?T??g ???a?`??|?=????0e??Yw@?3?????V.U]^???W???eX5Z?#??kq=4{???m???,.d?>?,*g7???>???q?^F????-?v}2(D(??40?f???j?%Q????r???FV?O?I ?`????????@?b5? ??????T??0??\ ? ??c?(u{?u???!?S??l ??, ????%r??? eX?T???T?e??q`?6???6?1?#?n???? ?`m&??Xu <4?E?T pr?? -oq??X?a???;>R??? ?9??????#e ?cT/d???7\?\???+?%??C???W??>?>_LXc??k]??-?!j_?????^bU?v?? & ?6???XW?z/?t??p'u]=???!N???6^??&+????o??????8u????A*?8.^??????OId R?;?qH?u?????cz?8?s?"`h?(U???Ax,X???vx,??? C??(`bxH@???'?2?L??/#Z??@?(?S?u?d???TC??8? b???v ?Z?TQ??W?: u??F?w?Y]??c?????:?l? -?^~?$??si%c=T?H??8?W??[T?z>??????u?t!???? ??s??#??TP??5P,??i'??{7~?pWR5?@?z?(X??h -?9?R??x,;'?0;?R??{????eE? ??????j(I]?@AhO?VY?? :????x?eU?N{?E??N???L?e??E??Xs???3;?'~??G/?S??3??t@???##??26??}?Y9??~1????? ??????U????????x???)??/I'k?qe??mL4??h??8E?4]??t????b???c??@u????????I?-.sD+;???d????? ?|^?7?7L??27?:&GR?U9Q?g??ZW??4??j????>????YP?Z?a?Gp??vu?w?9I?7V?????????F?ul?+?7??"??Kx????2???=????~?"?#i?4?~?]?? ?Q1^?qd?x????:J????&F?i?????_E?5h??/???m??l????0??[???s?A???~1?D??,n??eL???PP$|???Y\??? ^1?"???zAK?z??7)?5D;??g&???B%?y??M????P???????P??/E?,?2?D +???,?.??)l?E- +??7???Y?_? ?@PfL?J??2?;??:?yh??m}?tF?g?= k2Z?w?,?u??[ ?? ??Qr??t|?~a???X?2?xH?s??G????2W'$k??L??F?$l(mC{??I_7??Ef????>j@??C??????<?Dn?q?#?*????J|?p??????oR?Q?/???Q?U??L + u???0#B?8?1 +???@??y(IN?!'?! ???|{ST8o??1?[V8 ?? ???????????J???A??J??6?Y0?La?DH??y$xb?u???Q???<3y>?qbv{uvs???N?hB*?\???!?\B??EN3?????Z+?J?5?L6g2????&k???m??8f???Z?V?3??F?h|?&-c???]?%?'R???Aa"]?\?k????;?*??oa????ke[y??%A?5????J=???UJ?]5????M?W1a??_?*????? >?Z???`?????(??v8??Dr2?? +=???:b ?5Z???z??l( #?9yp?pw??d??????L?{?H ???????9???%`!???#?????#A?U????????11?#c?@???E?&~??fu?jU???@???<??T?Zib$?,??????"D?\??eU(?? ?d-,?I5?Ek|,`?$?s9?????vZ?Tuy?_?????k? G????jh????8? )$X\?Q}?I\?Mt??c}-????>?f?? -?>i? +B)" ??[n/?:xITS??T???J?_??p?? ?\9.kio??(&P???5az??e?V? +??,?v?2S??%???e_? ?J????x????'p????0?b?%???Ru??yV+?E??><:??/w|??;?? ?9?????e ?c?(d???7\?\??+?$?????8??dR?/vXc??k]??-?!j_?????^`U?6??5??uO?MJ??w#=K?wXB? UH~S?3?pl??B?u#?$???6/?t???p'u]=??!N???>^??&+??O??~Y??'q? I???TqX??oM'%?????(?p? ????bw$?3:???CK?/@)?:xLT??c?????v?c)m?k?T?2%????Zj4b?M?Z?iN??v???? ?{Iy8????D ?ER?w?4}6e?a?I ????!??j?P?RQ??s*?O?(?4!??Bpv?%????k?j???8?\9?W;????~?# ????;b?? ?-tx?Y> endobj 138 0 obj << -/D [217 0 R /XYZ 74.4095 191.8727 null] +/D [217 0 R /XYZ 74.4095 163.9773 null] >> endobj 54 0 obj << -/D [217 0 R /XYZ 74.4095 191.8727 null] +/D [217 0 R /XYZ 74.4095 163.9773 null] >> endobj 216 0 obj << /Font << /F51 119 0 R /F8 95 0 R /F56 126 0 R /F44 92 0 R >> @@ -1057,24 +1059,28 @@ /ProcSet [ /PDF /Text ] >> endobj 254 0 obj << -/Length 3929 +/Length 3928 /Filter /FlateDecode >> stream -x??ko???{~?Q ?\?6?7?~J/Mr?@?EP4E??i?!?u??\????3;;?].E:??(rvfvv????? o?i:{??N8g??v?Asq ?>?@Fc?0?y?1?tm??6p??h;k&??Nh???;)??????S????BJ)???"?]]?{?}#????????F)?PV?+? ????daJ??$??ekV?K?z???}?????:????#?~{?Vn??7o?? ?????.^?CZ???W )????.?H?aD?'|???ug??? -}???"??6??GP?u??mH?????7R?OL#pw?!????*:kU???i???a;?A?:?Jc?????6?|??????Uh?????w?y?y?F?'??R?1??Z ?!u?J?g?A?nu??=??RF ??T?$?y?j???Wx??o????oE?];/??@?B?????G!=?I,?xI??C E??n???>?.#?6B5?[??.??>?^?3A'???7??N5&.D?"?OxO'w}?&nG3?-x??\??]?v8???^?`?k?W`??Q??%??i??N?h?ckp`=????i?M[C?s????>{s????]}??{??j?????1?E-?????????H2t]?{mr??m??C?!s{?^ednF??????o???A7v?9?wCB??? ???%B???????6G?I???-?????p?=????..??8? ?{????O:?(????X?Q -???;N?????j7??H????Li?A??z?"??B?\?'??~m?I~????????UvN!?p?????>??^? >>????=???|??P at O??_???O??s??T?,W???~???,??+???SL+?^g?|??1??g*??3? ????????%?!?@z?\?@^???c?? :???ls`?"] -???*?r??FmG?Ap??w?u?????i??%?x7?K????K[r??[??O?????O"???? -? ???? ??i?n ~??0?9????O`????)?9jr?|???J=NVJ???,??(?{J?7??%=?36?P>?????<86?????M|.A??c=P#??? ,ef?s???????M?! j??U?m0r??????Nj??-`?u???Th???M????N?VH??V0??ld4? ?a?o??(6y6jr?:G???N`???9~?VuEw?U]??TY???RY?~?L&?]????q?J?#9*rm??D?=.???8?k?????? ?????6`???!N?w? ??2? w?????z???rV/4??^gQ????@??A?&X?s?4?'?? ??????????^C:Pa?V??????? 1p/?????E??wt???????/$%2???S??aG?I???d?+M?{?|9(?2???w??c????Y(6??)??Yv??= -E???8?????I?? H\?j?1=?P????K?b^2?o??Tt'????'?'????????w? ?@?B?????wp???P ??RvmI|???j??3?????u?T5|5kl??D??????????"[>??85???????L??s/G????p?b?????cu?x???!??????^?O??F??????&??-??n??"??8???!?m?.??6??bSf?????.%?}??$ `:?x]3???&_@?W????~?u????&?\??[????]}???????`?%?!??m????L.??_?&??????k?????????a#??. at T???!?????i?1??E???O22?m(???$>=??\'?o??w?? ,Th"?n?????????X???&??I-, P?R?????@xNCR??'??? -,?/0]??W#[aZ??????cGJ?NM*L?C?QZ????s?????3??7?*??? I??????;z??C? #?z??o? ??`?c '2?C??y?/Y~i* ??8$??B ?????}uU?5??:?=;???|??}:?j????K??????A`!E=?Q?ip????"F?\?k???{?M????6 ????+????C???\????b?>??????~O???|EG??^l?]?V??BB"????:'V?^????@???d????(????x????k?e?7?c ?M???Ltm?kG+?c???????sA??(2?Q?Db?pnr?R??-?_G?%?)u???n???9??D???? ~?? +-{?w(??uF_??j?Z??!A?3???C????o???%??Z??tP?N"j6F??Vo?z??j?????@????7w?????Wx??}????[?[Y?bI +?~ +xC???B?k?k?o??|B ????P?*#s3B7 ???M??~[?5p???? ?6$$? ??6?D(p{??????)r??S[??N???p?????????wo"?;???????.{????~?#??!#WJhU??p|???xAajM' ???+a[?.??????Uh/HMC?2bc?jj?8????? ?j??'???x?:??????;?$?? `8=???(?*?*G)???`?AK?tJ??@`?U7Q???v?a??e?????Q`?T2?[+?>???uH?6l?E625?y??jTe???????H??f??P??!?????@??N???T??l$??!3#?~??????Q?4F??j[A~?x???[??J???'???c:?M?M?????q????[8)?{??P??5???0'?&?K@??4???p^s??8S???L@?x?y`w??:aTx? o???j[xz?4&????n??` ;^???2??????B?J????.????U??]?L???"?5Nf!f%??p3u?V4?=%?D.n???Gbe8??y????/?x???T??IjBS?w}?A???>??;?? ?|?_[p??7??d}%?~???_?\b~??>???????????3eouO??b??? +?Iz?+?=???8Gq?KE?r??????????>???????1??u?????? |?????1??p??(?Z?:\b???G?? ???n?;v;???? ??60??a!???\??#??v^?{{?^??????O?f?\"?w?????t?%w???X??? x?$??]?P? ????????F??`??3 +????? ???X@????&????>???d??h???????T?pC??oc???s8????cs????4????m??.? ???h???w?|? )?y???B?8?? ;2O?Ol&+\i??????A??????I?!????t?????U??k??TL?? ?1v? ??Bu?]?\?`??p1G6 c???"'????g2|???RN???|??1B?\??lJ??????????\?????p????:???3Hg??yd`s??` ?1Kt8?1????I????? ?u? ???Y??w??????:?;?V????.????"u? Yw???!?`3BN`?B?'??\?rA?? ???v??cV????;??????_??J?m???pwRRgZ E?7??C??o=?h????|?2C?"?m???+?6W???Ae????? O/e???K?? ?>9???nhf?u:??l????(Pl?S?Z?:?b?{??)q!?s? +?????Fczj??26G???$???d??,/??N?%?OjO?!Ck????0~?z?v???? ??o???;+?????~?%?^g??[[!~?p?j?0j????????=??OE"?|?'qj???7??L??sG????p?b?????cu???????R??B?F???RO??\?i?j[???K??A?H?cr +??6?R?r^F?)?zNykB??c?iy? +??;(?=D? ?J????L?_? ??]?v?sh:?@?S?1?F??VC%????$??Lmp???Q??S(e??>Q?????>?IG?lL?^??s?P?!???=[L???R N;??s? ?????fN{Lw?i?d_????.???????(C??"???E??? M??D??n'^?n'#3??R?7??j?-r? ??eX=???T?>??s?6?<;??P]ry???Q??.???????c?w1???le?9?'???x?= C?D???>?|?0?O??~RF?????VA]y??:??mh?Z?~???????? ?n?O3??(|Ir??hf??6?K+??|H51n?????????-gu}=E??? ?pfy?7??s?z?p?t>EQ?0+&??? ?@???-?OOt*? ?[???3? ????????@??uc?,?? ?iR ???{25?y???T?h'?????K? LWh???V???y?%?y???R?S? +??{?V&??_???g??-?|O?J +?q???0??s??? +????? ??q1? 5O?F?#j?E&zV[z:$'???U??bJ?3?VqM?< ?^???c?INq$5X("?i_????(?S???>?={ ]jB?x??#???v????j{V?Gg?Tm???k????bR? ??P???s?4O]?g???????7??Q??X?h???5G?kNML;??#??#a?g?? ??re:??o???|2t??>????????????x????_?????????J(u N??y?|?????uv???? ?J{?w!)y???~Go?x??aa?\?>???????r,?$C?r?????O`?O?ZM??_???a?????oXH?F????48?w?? #y??5?Q???!????6 ????+????C???\????b?>??????~O????DG??'}??????l???D??????Xz???v?? ??N;?D????}.{?i????!|0\6????`?k?e?+???J5?b?q?xQ"?Rwy????]??N4???8a?%N???????xauL???k?}?8~?? +/2q?_F)???? ???%XI??}=??E?d7/???(?h?V???xD???4#??]+???$)7???b?S?Y7`B????8??5A??Z??Lendstream endobj 253 0 obj << /Type /Page @@ -1215,36 +1221,42 @@ /ProcSet [ /PDF /Text ] >> endobj 274 0 obj << -/Length1 1211 -/Length2 5695 +/Length1 1212 +/Length2 5717 /Length3 532 -/Length 6468 +/Length 6490 /Filter /FlateDecode >> stream -x???yv???mBvcLf 3cKv?E???%$KHv!b?K)?C${ew??w~O???y?_?u??g????????^????p?QsF;????8 Q @?"H??S]????Aq??&S$??%5/8 )H?(??????h? ???j?Z$ ??`??0??\a(?? ?B;!`8?Q@ ? ??????9?RIH?'??#???~??uwA?? -;{y?;? ?` ???????3??8?\?? ??Z0??? S???B" ??_??=?oY( -????<????a?3 ?????a??fsFx?????A?'5w8??+??j#|a????+?Eba?a???4A???,??i?PW???4?JC?8S???E???%~3ao0_?Z\T\\???p?????Ji?;????? -@1??\H????0_?K?+&???n[??1T??)% ???y???????<CB;??bwa???< ?v????????w^ZsA{a~?1,????P ????4???????4~!??7?Jb:?????L????D8?b??D?t?M????& qBO? ?"????H??? ????????e?????? ?1???? ?????~?~#?? ???????~>?????"`y at D?0= q? +-?_:ya00w?_?>????]?g??9Q}x?vR ???2?4P?`??L?X^?hX?>?B6??Y???)4????Y?E?e???>?????{&??!???&N???3?6?[?d?-y?? ?J??r|o]??ht_?bY?&g??k??UM??????^[{??? -?????D?E???????,??????OI"? - ?I????6??????"/???'S?S?e0dAYQY/)????>?z[???oa?e???>?????9w???G?X?? ?7??-?O?????_?w-??,?J*@??7d?x2??y2j`s0cz/?t]!;1????#c j'iF?A?xb??/??\1??P?s?LH???+???8'?-??g?F]]?Z???e?(U??}3?HJE)j???H?U????[sH>????FN?-?_we??S?S2? =????i'?L ?}Ia?zTV?S^?*??^)??h???p?M?l????L?&,?(G&K4O??3/?G?|oH??9?v?l??UJ}?(?????kO??/? ???:?? \???)???re??G/????2??5mY??'_???!??B?????u???X??[??S?????Fh9????K?C????%uS??I??w?X?oh$&?????&??m?UQ??????Mh`?/Hd?O?????$T}????X??&??jG?h??r?hH?M??7tnG???????#?G?^???D_?Wy???Ta{c8??U=+ K >?????`?a?z U?X??x?,?s??H??EL?T???3?nI%?w8?78Zq?_??:!????M?7n?46??x???/?\?n?K?:?@??OT+??$N????c?*??]b-???~IH??? ?w@??0?H?Rl??9???Yqf???m?????????????;?????u$o??s???i?SZ?@?Q???`? ?jI??H???K2X?=r?h??m6???!?+|<3hY(??x?S?UY??????^?i?Z,?IgF???O??yO?eD????$?????????u_?~???3J???q???????2???.?~???????.??9?[+?x???ih)?"???????s2????0????c???????*??{??TYWj?X?MwSH>?B+????f_gV -(???????p?????@t????????}'!NJ?x??M+?&?Q?M???U??b??x?[,??h 8>?Q??"?9??? ?????????9_>U*F??w5//?G???O???Q??6??Q -??????tU???/??;D??>A?*?w?????r??-????e1???SG?r???>4q?Nr?? -????g!??/?|??/???E^lc?????????.?????????='???!?<$k???,?o????ym\1?? ??f r??$Y#?B?J??Bg??(?????}-?Y???? =Fz)p?r ]1I??|???????!??5I@\?j??Vt??????HC? ??_N?T? ->?~V??j) -?????#Yq???;Y~??3 at g#????Px???}?? z!?)QyQ?R*?F?????C???z??N??\???[@_~#cX??8???n??????E(?|??c?????&Z>`gd2??v???L????~??szNW???]?A?)J6???/?Y???P2???????? P?N??n????? ?? ???[Tq?`s`?I??~??j/???)5?e??n?=?`???25D??Iv?P$%(??????73?J?]????QNF?9???1? ????NEj?? -?>W?????Y06??`?xo???Ov}? ??vQa'??*T?~??4\5??Y?a?T9j?s~?F|+k???~???5?\???r???)?B??????4?)?)?I???"??TS?B7?m?5?fMkv Xc?????{*cS????Q??u|4?}?U?TL?.??WL???Pxl????n??^g9tE?&9??(x?????= "????]:JDw?Co???E??^??????^???xJCX?F[??9>?zO+1-?Y???'?$ -??w(?3??A????? ???v?????N{nM}?&??W?3R???A?s??T??|]@u?v?x????9??#?^Z?l?'g1???u?Y???3?A???g?? &????B[+?v?Y?l??.sGI???O??q????????tb??|X??????TH^?h.wO]???Xp??{R??b?p???f????YWm??????DK????L???t?!j}???L????@?:(???????){??rM_???Vm?????I??c[???z?Q??^4??ku????????eD???????'W?r???`?8?"zc?.Bj???^?41???~4???\?J~?(?Ov??q= ??H???R(?H -'?}Z??8??a"???????@?(->e#?@?????i???)n??? -?!FL3?/~??h?c7??1?|~???e\-???\?L??'? ?qf????U???4wl??ixajB???ml>??N?j??L???a?????h?o`?D?`????n???r?D5???r7?[Kz?DK?f??Eb???-p?????B U????????B2???E?Q??c?.yb3JW?e:?y??rFL?[???.???V??u??^??+?8?,?"^?7?"?w??A???'?kb???HJdp\?^?????F ?w?????O?h9 ????,??/Yh(?".?fXO??1???y?" .}???V?c?b?????=????2???????????????????&??bm?4{Xa*??=????x3????T?W9?????n?' -z5???)v???w?L????y?.???T?>ujp?V?????j???%??\?#??-??g ?X????8???\?GD????D?????c?yD?Y??&7?&Y80?????S\?K?U??Caq??~?}UF??????NH?C??7??1?#endstream +x???g\S[??A)JG!?* B??I?????@?Ho??WA??^??R?R?*]D????{u?|??4?9?r?k???g??O??????[?? ???*w ??`!arnn,?Cb??PB??????"?@??4DJZL????q??"?p@^?_E@%g ???w?8?3^E?00$?-TB????V? n?.D?Hh??G??A??h??0@????.?Ny ?nxS@^?I> ?"?Fy?;r?.? ?w??a???j?(?.???q??a????r?l/???? ?Q?U[???1B????????}9;?[?????kWf? ^????*.a???2?????R???F?F?yR''^?{?A?|{f??N???4/????!???1\??7\S?RRAMUs???J1 ho??$5? yB^???|?zt???????-?f?g??V?E??!?? +??? ?$`?7z?3k==?oa?1a??? ??M|?K*&?#~??Q????Gt?u6FAn?a?a????"D?1U?5???Y????s ???;?X?f?*?Q? '\&'2?uf???jb??[,n?$?K???P???7p?+??Nh?t??8??h2U\~? ~???.?Td8?*%_w?????(}w-??S??,??p? ?????t????G?MP??%?????f?d?d?@??j/]?%????????&???13 +E$?j4Oj? *?3??U???O5??I"_C?????;??2wd?g??xo????a$?r\*;????K<2.i?9L ???????JB?T?Z?}?G?m? +2?Z,??O?[h???s??I?r?Y at h???????O???$Q???????????4?7!C2RL ??w7??????:mK$??a?9?c?`????-1???>???B4???o8???w?.M!C??-??V??Q-E)????S??????B??????h???+0'?pS???A=??4?%@O??t?3?M??????????K??$??3??x ? KrRC???#?t^???%W??mqor?b??S?f?????????=?!??3.r??~E?(???-z??I1??u??g ???????%r"F????y?g??0??U??ihW7?????????E???.?8oI??xpi?X??x?yr`??2?+??R)UD?]I?'????????x????<]???????:?e +??"?,????/?????Sp??????ld?O?????}:?{???-??c? ????j?7?,???????+4???_.???!?Zue???v?Y???#D?????3?????1'??#?wA?DU???+5??K?,iG? +???Yl?0???!Z+_?? +?????-Ea????d??????i?????C:??{???mC?????0Vd???H??//6,??-pEg????]?6??&N ?0e?4p> =??} ?X?2??v?. "?L??#?!?Z???{??d???p???U??? ??H?7???}?p?k?.y?H6[?|2???nCC.?~?IW`?i????J?"?i7??V?Mu????OK?? ??x~L????mm????x?yb????h?e???Zx?&??o?^?ct:?B??U ?d=???F+?p? {??+?"?f?7??<O?????,9????e??Z!? ??B???GK3?mF +???DN???????m??i???Oh???W?v?!? ??h?$#? +???*????(?R$??5:???H'f?)?w????c?M??SH? ?fC?_?a?!~????~????0? '????????|?JG?3QT?X}??????m?J[o??6?i!z?E?H?Gf???S? 4?|"Qs%q?o????Uy?\??O?"?\???????R2?"?@n??Gd??(p*5?o??LgM7}???]?!???+??$Y?1sU,???$????L(?L??????VK|??}?n??????I?btu?3?Q???G?a?$$??I?#?3??,K??Q7?*z????????8?,?????XE|??W?|??B???;'???q?4?R???`>?$???????]??h?^=???_?;?E '?u?r???l+??3?+ MAx~h?>L?hJ?D}j????W?'?????VSy?]??]g=?????[g? ???e????9????fY.,[????C??3#?]`_Y????e]?d?N?o??g?Yo?cCN?M????i??????v?L??? ?6/?: uH?G???$????L?R??U?? +P?!K ?O???(???>?bK?,???&6??@?7??T?V????}1?]? ]??=??5y?4+??T??qL??(+e ????JU)Hf9??i ?lD?&S~?p?`?b`???Se53??VC?{??D??s?|7;???)!G#(??}u??m?f3izg??h?r?/#???#? ???M?cS?U??q????e???L??"K?l???8??|J?;qt?>????,?????????7????IX?%?J&????#/@???r???t????~??+v????H?>_4?U???9??Q9?x??n?+???+/}?5??f?[?f??????u???F??????s???Ke ??A??fM??%?k????I?????X e??_E??H?????m?|????z?\4Msg?#tbp??JI?K? ??{????>y???G??!?,??H???[???k(R/?o??????????p;??\?1??:????I?????w?H +??J)m,??????j???????????i?w??7??#?)?)?]?^7??W ??|q?7???P???m!;Z/????j????I???)YXOOE? 5?}?{?????????+??Er ??????G?????E*?????I@?C7????^?.????????, q?9 +7.R???F?z?fj???KwQo?L??? +?,???] +?{9A???^?M????*?'n?f???}??:??| ?2?w9???X?p??d?.?????ny}??)xh ;????????9?3F +???????\???? +?F?Q! s???????8????M?W??4H?? x??$?U????> endobj 273 0 obj << /Ascent 694 /CapHeight 683 /Descent -194 -/FontName /PUEHBA+CMR9 +/FontName /OAPZRV+CMR9 /ItalicAngle 0 /StemV 74 /XHeight 431 /FontBBox [-39 -250 1036 750] /Flags 4 -/CharSet (/hyphen/period/zero/one/two/four/six/seven/colon/C/D/G/S/T/U/a/b/c/d/e/f/i/l/m/n/o/r/s/t/u/x/y) +/CharSet (/hyphen/period/zero/one/two/four/five/seven/colon/C/D/G/S/T/U/a/b/c/d/e/f/i/l/m/n/o/r/s/t/u/x/y) /FontFile 274 0 R >> endobj 279 0 obj -[343 285 0 514 514 514 0 514 0 514 514 0 0 285 0 0 0 0 0 0 0 0 742 785 0 0 806 0 0 0 0 0 0 0 0 0 0 0 571 742 771 0 0 0 0 0 0 0 0 0 0 0 514 571 457 571 457 314 0 0 285 0 0 285 856 571 514 0 0 402 405 400 571 0 0 542 542 ] +[343 285 0 514 514 514 0 514 514 0 514 0 0 285 0 0 0 0 0 0 0 0 742 785 0 0 806 0 0 0 0 0 0 0 0 0 0 0 571 742 771 0 0 0 0 0 0 0 0 0 0 0 514 571 457 571 457 314 0 0 285 0 0 285 856 571 514 0 0 402 405 400 571 0 0 542 542 ] endobj 278 0 obj << /Type /Encoding -/Differences [ 0 /.notdef 45/hyphen/period 47/.notdef 48/zero/one/two 51/.notdef 52/four 53/.notdef 54/six/seven 56/.notdef 58/colon 59/.notdef 67/C/D 69/.notdef 71/G 72/.notdef 83/S/T/U 86/.notdef 97/a/b/c/d/e/f 103/.notdef 105/i 106/.notdef 108/l/m/n/o 112/.notdef 114/r/s/t/u 118/.notdef 120/x/y 122/.notdef] +/Differences [ 0 /.notdef 45/hyphen/period 47/.notdef 48/zero/one/two 51/.notdef 52/four/five 54/.notdef 55/seven 56/.notdef 58/colon 59/.notdef 67/C/D 69/.notdef 71/G 72/.notdef 83/S/T/U 86/.notdef 97/a/b/c/d/e/f 103/.notdef 105/i 106/.notdef 108/l/m/n/o 112/.notdef 114/r/s/t/u 118/.notdef 120/x/y 122/.notdef] >> endobj 190 0 obj << /Length1 750 @@ -1286,11 +1298,11 @@ stream x?SU ?uL?OJu??+?5?3?Rp? ?44P0?3?RUu.JM,???sI,I?R0??4Tp,MW04U00?22?25?RUp?/?,?L?(Q?p?)2Wp?M-?LN?S?M,?H??????????ZR???????Q??Z?ZT????eh????\????????r?g^Z??9D8??&U?ZT t????? @'????T*???q????J???B7??4'?/1d<8?0?s3s*?*?s JKR?|?SR??????B????Y??.?Y???????????kh?g`l -??,v??HM ?,I?PHK?)N?????;|`???9?GziC?,???WRY??`?P ?"??P*??P?6?300*B+?2???????t#S3?????J.` +??,v??HM ?,I?PHK?)N?????;|`??G?E?8iC?,???WRY??`?P ?"??P*??P?6?300*B+?2???????t#S3?????J.` ?L? 2?RR+R+?.????/jQM?BZ~(Z??I? ??% q.L?89?WT?Y*?Z? 644S077?EQ?\ZT??WN+?????2?A??Z???u?Z~?uK??mm+?\_X????????7?D?????Rl:/P1?d????????(??l=U?h?d?_O??E?k?v-X1??t???`????i????_y. ?1?????????:?un~Q???3/??S??}??]?? ???$e~s?]F1????/??Q???m????|<?????/??q'}I???+6???E??g???xT.??G??gt???v??G??U|?????~??]?R????_k?9???:?{?p??G?? ??d}dN<6??-uB?o?H??=c?M?vH??z?q?a???RK?~,K???}????????m??????yo??~?????v? ?_????s>???.#????????{?/?????k????\m?|??r???X???????ad?j|?????R/?,2?p?0, H?IM,*??M,??A/r?endstream +??-??????W???d?????_?~?+ ????i?s?s?`??C???u?I^>??\m?|??r???X???????ad?j|?????R/?,2?p?0, H?IM,*??M,??\Jr?endstream endobj 191 0 obj << /Type /Font @@ -1299,14 +1311,14 @@ /FirstChar 15 /LastChar 15 /Widths 281 0 R -/BaseFont /NBUSYJ+CMSY10 +/BaseFont /YSNXLB+CMSY10 /FontDescriptor 189 0 R >> endobj 189 0 obj << /Ascent 750 /CapHeight 683 /Descent -194 -/FontName /NBUSYJ+CMSY10 +/FontName /YSNXLB+CMSY10 /ItalicAngle -14.035 /StemV 85 /XHeight 431 @@ -1333,15 +1345,15 @@ x???WXS???)?E)K??iH??J??7?!Y?P?[?"E?wDP?^E? ?$?? H? nt??m??????????????c???aJ56?????Am?E??j??\??0B"-?&? ?D?K?????. E*??? ?gL?`?Cw ?I??^???D???+?5p???OB"? "8? ??? +???'$?$H&?.????!?#x??>?K?????. E*??? ?gL?`?Cw ?I??^???D???+?5p???OB"? "8? ??? ??A?????"'??t??/??)? ???O??Rjj?|??H??T???X PUR????XO2$R~?WzG?f??,?p??>B?H?IN$@?2k ?A?????M?R6?????m?*?.U???.?A?d?;?????????}???d??8?*CUg??l??(????8???K97???W?????_9?(M ??Ai~j^? ?k ??y??/?????Z?H+m?6??U?N?af???)?l??fG>o????aQ????H???j=s?U????|????]??????jy?D?-a??<^?????kj?>m?$?w]?o?o????Y|?W?? ;=v??Z????y]u? m?f^?@H??T?E????D(?O??`?_G??Z????K?d`?\bI???a??????G??-?( B????}?O??}?:???,'~???:???f???in?1????P?Ki????w?r?A?V?21?+?"58???^????1??>>?y4d????T?Y??j?????-_j?6?????nO H???}?g(????5?gE?3 ?K???G$p}???Q???z???????\????P?4?????????????*W?I???????O??$?B?5gV???(?[L|????c??c?;??&A=;?}6??j??0????L??? @??:?s?{vu????up?C?2l???"M@?*?'~???O{`?}-??Bd???IX*m?@ ????N??S??&??nv??R??&????6 o?j??p(??`?r??H????o? ??~14?Z???_??:t?*{????7??Dk*???hE??O?6???6t[,??-????T?^(*?????x???LN???/?wt??????z??J/??7?[-Z3,B??O???JK?6?3??$?{?DW??j???{??m??N??F?,d?.??D??]6???????T??c????2Y????A?*Q?{?|????e-??Z???*?????????-;? _]???v?F????u?R?"?1???iI???;?????)?%(??8J???m??????????2??????????/??Tj M??x????2[????L??????uJZv~40?Jp? ?-???e???9??H[?7?3????PW-???g???!??%K??????????l???<?o????\???=yN??^Qe?|????A?4cv?T?????????l?-???~???????#P?b?w? ?? d??|4?/??I?`M????r??+o]???t?/???9R?t}?}e?"?T?b???9???}??b_?}5y??????V?????%w?H at F?????????K????e???7"?~??pFZ?[/??CG U?"?2e?\g??????>Z?????&{??J ?{??h?I?????^??hh9Iv?"V??p?{????:Q7?q?n#?XLmcR? ???[?????_P!?v??? ?????8(??Z???`?e??&g???R#[3??71?k6?0?2n????3??R??? %?J???" ?5??F?v?k!?Nz???m j?????r ????E??E???5V???????9$?[??9-j??n??j ????!??"?????????_??&?p???C)?(Q?6?V?6?????3?X??n?G?5????,A????? P??N?k??s??;?y_?iJ???L?;?_???Q$?_???? ??eb0?0aEl$? -???2Cy??a?>?%lyZi??C?W?`I'_?&?u???4TIK??sb??????B??i}? ?'?N??4???x?vw ?;??p?S??i??}????p|sL?=?+?^?-?|????P[?X???????;?_?V?,?pF?)h?????p??wgj1???x4??w?&??j????????@??w3?D??Z`??,F?U?m?ckz???quq?zw??rH?;?m!??!?uz???] u?UbhC???1[??????f?0F?U? J?R.u?_)?sP?4?v?&?U+0?^?O%?????, ?%??z????ze,???????@?7%:*U?j??p??R???x??ik?:??$Y????Re??^?"?F??WN?k?)?9b?_? ??W?????n???u?91Q~?>K?T?wx+????P~?q?{Y????m?????0???"?7|????? 4z?????7?!?=??i?????\B??a?/?|aK:?T??c,g?J?K@?/pwG?T,r??T|-5???qe????)???h7#?????#??%lyZi??C?W?`I'_?&?u???4TIK??sb??????B??i}? ?'?N??4???x?vw ?;??p?S??i??}????p|sL?=?+?^?-?|????P[?X???????;?_?V?,?pF?)h?????p??wgj1???x4??w?&??j????????@??w3?D??Z`??,F?U?m?ckz???quq?zw??rH?;?m!??!?uz???] u?UbhC???1[??????f?0F?U? J?R.u?_)?sP?4?v?&?U+0?^?O%?????, ?%??z????ze,???????@?7%:*U?j??p??R???x??ik?:??$Y????Re??^?"?F??WN?k?)?9b?_? ??W?????n???u?91Q~?>K?T?wx+????P~?q?{Y????m?????0???"?7|????? 4z?????7?!?=??i?????\B??a?/?|aK:?T??c,g?J?K@?/pwG?T,r??T|-5???qe????)???h7#?????#?> endobj 152 0 obj << /Ascent 694 /CapHeight 683 /Descent -194 -/FontName /XCHJEO+CMTI10 +/FontName /FNUPCO+CMTI10 /ItalicAngle -14.04 /StemV 68 /XHeight 431 @@ -1384,7 +1396,7 @@ x???UX???p?w'H?????????[pww ,??[pw???!k??????s??s? ????U????)H??D??L-$??XYxb ??,?FffQx -1??????????/???? ? ?rX?y?YA?1'go?????Z???$.????????`?fm???????dfc?????????+@????aa???0?1s?ZX?8?3??$?h????????? yX]AR?i?@??N???s Kx&E'P5 ???Z?{rIw{{E????N?_?&6?????????f(8?[?w????)X???;??Q7{3G+{ ??l\%m?,??m???n at w??-???h??e?$*/?+?L??M????????????g?'?_???A????1???????? ?W1 G3'sG++'?4??q|Y6??^ /?0????hO??N@?:??` ??8???;??????????O?????`?O?????L?@3 G??1n??(?j?????3?2M????r?Y?;?_??aV???????? ????L?D at R??????9?%d??We?????????????'?`rr??7s?d??,?;???/i8?? ??????4?????/i?????q? AV!????????B???_??? ??I??:V????_~????????%.*?????``]\l,?????if?@?????$?E??lizkXXxY???-;??}??h ? ?(?????jMTl??????n_>!?B????R???| }L????5??OeZ?{?Kb??????q?O?G??l?#g??? ?????Kp?????T???????"ejq??M?~=????O?\????a??l$???.???[????P[????mt?N]??/%??)?F`?fbBXE?W[gm"?????????b ?`M??L?9u?Yu1??k????s{j ??`?o?p???x'???0s??|6????3?Q???Xm?N?X?%;?'??_cnU??*x????7????`?t0?B?w?X?T?:O??&s ? a?7?????f?H{?jL??|???%$???4???@??1xL?u??????????-;?v????)?\?????sD??RH?8V???KX5????^j?T??z!_q?]?s?b?AjH?????????%????~Z?d(L?6??????By???t[Z???(j?7???7^m?)Ot???s)?I????????j?9?3 ???????<~^??,I?yp8?W???].??Q????F?edL???l?}/?? ?l ?????bF??WLoNI?D?H?  ???9???r ?&Q?"????????v?/ ??i??#?+D????=C?v?u4cU???&??3????Wt?z(???I?6??T?????z_??b4???g?/r?Q????N?NK?_n???\?y???A??????=?????FZ0??a?*? ?nE:???E:?gm8=qw?}?????l?????pl???`?????\?? m_?wU??????????t?????????*?? @@ -1431,7 +1443,7 @@ ?l?????;&???????&~?{?^`?Cr9u\?????5?{??0s+{D(??2?3???N$?J?"?? {???l?&}?r???S??*TA?6?????\????Hb??m??1B??9???3?X?by????,45?S?l3?* ?&?.ba??@f??:???|0?`???_5C?'???l?????Q/?2+?}D??;???^?u3#t?X?F?w?VuO????e?$????O"h{?B?u}?D7?Q??D????0?U???>F?+?????7????,)uS??????{???fb???? ????+X??I5??l/A?s? ????[Sw????z???5?^?9???????:;2?XUi=?? lgLug?[embZF ?g??M??{?tv?>2?`& h???J??Uz??? ?V?^????>???y.X!#[H??0???L?y?F?????x???(???:J! ?0\??t??b??=aK???}?K/?????n^m???:"?????"?^?a????4?!l??B?*??FF??? ???????'Z??????WQ??????(n?Q?S??z??67($???+%????c]?_;?d?????'?????W?{z??,w??T?????F????x??+??z????bP?e??1?5??????????Lv~?[?????????????d$?)??Kg??V@??????`???L??(:t'm?m.?N9HY??#C?Ia??M??P?!?=Y7????P?#??tC_/6?? E.?q????}?&???L?H1r?>X?i??G7??{\&?W????V?/?c????s? ?_yx.nl????,?U7?FlI?????Z@=???$?_????G????9L ^??DB| y G`w??'?s?c??~?3?????.??+WhO????8???|?? ?????-?M??5U ??? <9X'^??????PK??J?mm~?D 8?{?j??Q?y?]5!??Mi?2^??4??3???nya???+???????+??B_{?YT&?-? kR?B_D ?{e???X??????T???RK2q??????ZEyIMT?w0??]?^&??e?1??????e|??h?B??G?f??"-K??????"?^?o$??g?R?P-?P{????c?N????A??P???!pM8??jg?)?p? ?O????????N? ?@2???,??sh?>8j?*ia{xGI?Q?k???????q??]B E+<????C?T?????>U??+#? ?T????4?g?5j0?y$? *D^???o???(???2+?? Mrfk|?)?u?>??v?}Y|C?9?i3? ?c?* o?%??I???? ?r`?I??l>a????P??{? ?y3??G??LTX?|??1??_E???????:?$fn?_10?@}4}???`Op ?.???????? ??????j?[D?-???[)p???N?Q???jkzP??2?????A?P??I???j8?? e?Y???-??????bv??j?$y$?^?x1a?_??????HD? ?}]Zb`?.??O UH????? 0},?????????Y? ?h?4??E ???i??u3?k-?d?????A *???????OL`foatsr0???? ??endstream + [p3??>x1a?_??????HD? ?}]Zb`?.??O UH????? 0},?????????Y? ?h?4??E ???i??u3?k-?d?????A *???????OL`foatsr0???.??endstream endobj 126 0 obj << /Type /Font @@ -1440,14 +1452,14 @@ /FirstChar 33 /LastChar 125 /Widths 285 0 R -/BaseFont /BLCZKP+CMTT10 +/BaseFont /BOOWHV+CMTT10 /FontDescriptor 124 0 R >> endobj 124 0 obj << /Ascent 611 /CapHeight 611 /Descent -222 -/FontName /BLCZKP+CMTT10 +/FontName /BOOWHV+CMTT10 /ItalicAngle 0 /StemV 69 /XHeight 431 @@ -1471,39 +1483,36 @@ /Filter /FlateDecode >> stream -x???e\????A???????;?{???CR:?%%?C iAP?????3????????s^???y3?{?????Z????N?%????T???????[ ?*???????db??A????N2`w?0?[H? ?a ??p? ????@?Lig????;?E???&??#f ;T??6PG??x? ????p$Z?phA??0O?%'&77?????Z?:a?J??d? ?W?????C?P?<???h??????Za???^Px????S\???A ???????_?`G[???pvt?p?????P????A?N????l???I'k(??_%[79[o????;?`vp??]?:Y?g???????????????????]???????f?? _??7??????????????:A?-m??/? ??}0?o??~?['K?7? O ?trv?O????????v??@??_???@?69[?S?!???????$|??o??(? p?r??T?M???o????&x???T????? ??????/??M?g????o'???~? ???????? 7???? ????????pW??n???}#7?????:???w?????????w???????1v??a?N?At(Pve[?????$??@?????r?n???!w???1???i????L??????B????0v????>?0X?bP??s?u7_?EF{m??????+?5???\??NDX3/?~?kY$(b? ?% y~(4?.??}????????]????]?K??4?U???????A&????T??W?Y??fs9??f?=;}?n????e?z,???Z?T.?$?c????N?6??9p?q?????P???{??Se??O??"?K?????;? ?????5,Y???J??a? a??U??oi?kq?????DZu??k0???s(.|??L?? -????)Jt????]5??%????X.????L??*?_aL????_4?V*???S]/???<;_??????ZY???Y???X??Q_/:j?????w?????gCR????zb?T?f?J???8?9L????Q??A?T???^])?jU??ag????O?????p???& Jao[?s?&????uWQ??????(?\??????&fL{M?(G? ???,???k????O*?n? [\a&????? f!y??zG~????WqGwq??z??J?o@ - ?????\?\??L?w?????? ?????K??????'???CXuGf??S_Wn{N???|7v?g??Er?C??A?X?????n?{?)TZ8??K??V43?3??SA@??c?1?????TC????????>?5?????O?@T??M??^?w?G??#?>9t??u???????x?sCV%'?k~?o?R/\??uJ?W?i ???1????<[? (?O??c?:?]{??l?P!?? ?????????,??|mms?I?X?ZZ??|???????@?????>K???Q????7"?' ?=???@?W.I3ou??? ?a.???????JH???Ac^V??D??O?H?A?v1 -???5?#?]-?b`?k???R!l?2?}????????>?&,M???T????E.???>??X =??????g??B??BZ@??Zi?C??S!??p?&W???h?-%S???ewy~???"}>?lA?E??K+V?p#rl???gy? ?z??rQng~?_?_?$?????W9W@??p?'@?=?>& 1?+?>%?B??`I???6??H)?Y???@?H????????u?&`???(k???o?????gy?=?rJ}???`??jl[6?l??[? ???iU??G?7??!???5?G??>?I?$ ?>Ke?W???Uaf?@ m~vl\??BV&#?qG?3?? ???'!nO |?>"u1???????"'pfR??e??=c?E]??Ld???fD???? -???}y?kd?D?K'?O??.???V??????)??n=/????{u??E??2????J)??7Fz??????p????~1sv?AW,?????h??0CV>}-?L?? ?x|s?o1??r\[pi?:\???ma???9?????ma??O???? -?????|!??~|?#?z^pr?????2?To?I$I=Ib??]_n=vH?V2??=K?}?#??????8FCq0?????V\?`?????I?[j???{???????Z?l??@????\?p?\???n'= -HeznF???D???1?bm~?UW%z???*A?2.?Z}c ????J??!^??z?jkJ???)???? ?8?ON???F??{?4??t?`}=7|h?8?cv9#?$$6? L?9??W???5?Y??KP>???0e???!?t???u8:??\= ?????."? ?q?_h?)$????*???V!?I?????? ?W?????{?GC???J}2xJ(?Q???????m?g?|??????1??t?-N?9??B?G?5??GP9??X???._?;?|.??????TQ?s6f??6??S??:?Q??v???? -??s??vo??T_?2745?&??v??????e???WL??+??????cb$F???s1??0? z?^????a????XhS????W?RY????0C?_?t?{q???.$?} -??F\? -X?/?fs??M??'P#??g?????? ?`???I?e9%??!K?4x'?d???} iF ??l*%A??#?h??W???x????W*??????? -e???t?K?-??A?!5?u!???????Y?K0??n????7???? ??ry&;?7???-??????g '??!n?:???kq???2?]?lw??z?\?S????8I?l???9??$/ -E/?Y?-BvY? ?????\?n??;?kT??~??3???c?????D\?>???????9?<3????3??}?4??u? -??o}?????[??I? Q??>???????z????????6????e?????P??-?  2RT??}7?C?I ?????6??? dR????7?Rx*???u??j????4?t?;??Dh?h? ???,??q?h.?+???~Hd9???>AdU?@?|$????v[??Q|???[Q ????x?? ???w{?? ?????~X 0???/_x? ?8?? ????>F$L?r C[?:?? .>9???m?? A??u??\36????t^i??--????rR)?/x?<9?s??-?z??\??? ???x?TN???3X?.????G?6??????????? ???0?-e??r??i??]??U??zVrU5???U~?9UK???n??="T????-?[????v2????ZD?v at q ??B?G?i?X*??7?A3>?Y?6T??????l??O* -s?\fr<:??q?? b??i -\&?/z?+?8.???Me????&eD?;?V?q8[?'???????g???7?G????b???'???BJQ???????? m?3?>`X?? -?,)????? v??? Y??*??/?Dey??'s&? -?Q????F??l??9?C??Ry7'r`??]M??F_???$?,?9?i?????T???????&?V -|o??G??????0s?K??-??>??????C?:??%C=;3:???P?+aY???dg?ff!r???poU;???????6???B ?3dvb?#?bL l??6??AQ?W?8_!_??? p?vX?????~ ?X??6O???h??8?&O???????nI?(`F-??$????????? ?}R?v`|1C?z ?????wa?-d3f?D??v!dYC??????~?T9???&?oH+~?????c?????i??E;???V0??2??1GJH?B???%??0?57?{??QY?r???Fo?????6J?S?????T?o??T??GH?-?X~|??#?/_????h,Q?!W??A???QVH??y?XF????? -?u?[&R? * ?1???Y?????/BH.h??\?I?????uO??df?B5#??????K??N?h??s]?????-Im???????0???}??d????D?????rE??l?H??jQ??a-??3 |?????^???g??A?M? ?? ? `??T?%?i{?DW?xb?+?H??e?O?????? -?????S2?<??n?Ny???{?r"'?*???X??P?A??? ???dN4?????*?cb?5???|lF?n????i?7????G"(??l?:??y6v?;???? ?MN?'a? -? ???L?S??????zN????/?0???rT?????-?NR??l?(:(??0d??-G??????k?????O?'?????=?G?B? -`V? ~bU5\~?%9 ?????a9?|?C9w????=?Ty#??9ks????U?d?w8i??H?????G?V??;AO\?p1? 7??zF???^??2???Wv??G??;???????A_? ?l????x?DG-?Z?1?@ydI?[??MK?q??? ?7*A???\? >????"???/C?[7??b.????????x????3@.????}-?t??~?9???i???/o?8??DA???"??????k?8=\w?59C? Z9?G???>??GB??wT?~?? ????k???g?k??Xoh??;f?y????????"??G[Y_??]???= ?^??????S{???R??M? y??o????z;\??w4?)????7?) -"?{???~???g??B???m?X??4???E>????b3?2?\L4K?,?{???BT?C??????`{5M???4> -?PN??k????? r??!?X??y?;??R?U 6S???`?z???/??-#??q -;??$> $??????i?^q?u???????@RT??Qde???z?N?m??sDPA?,??l??I???,Fbq??{??6? H????????X?p???d???n`b???e???}??9;?>>,?3??????3?Z~[UT?Mu??7?:??????B?????0{????m?endstream +x???e\????A???????A???s?.?????A$?AE?????g??|?u???~k??&:?W?N?P9'G7nNna????7??? ??I??89?????n!!n????? ??/? ?a2????a6V?ni????P? ?P?YC??=?????? ???h?5?? u??_?? ?????????P????*????mr????'B???~7???I?&???$J?&!P???~???x@??WQ?M??? ??? ?5?\S?7?5_?&?????????N ?7?????qs? -?@n??-??@???7????v ?????:?Fn????u?????}a ???????????cx?????~???@x ??????????//????.?+?????!?0????~????6???zA!??N???? ?e????Q???U?v??a?N?A?/Pra[?????$??@?????r?n???!w???1???a????L?w?????L????0v????6?0X??_??s?u7_?EFkm??????+?5???\??vDX3/?&~?KY$(b??% y~(4?6??}????????]??)???K??4o?U???????A??????T???W????fs???f?=;}?f????y?z,???Z ?T.?R?&?s[?6Bmb s?P?|A???????????J???"}D???Gq??w2????wqkX?X_?*?M'L???W???qM?????{_i??O??8?????ijo0uZ*??_??(?EF?Ht? C? ???c?l2?*?2??R? +c2@????????R1^???z??F????wo??VJ???N?HV?>???v???{?|4?T??V????a??%??5???g??J?P??? ;?=F?~x???8?g????5YP +{???k9?O????*?????@???????gy41c?kBF?8??vX?4(/`???_?ltRYuc/?? +3???nL0 ? ,`??=??W?[?m?????%?+??)???KW?r??s?2 ?i~C7-?Pgo?/??s?KZ???a?]?i??O}\??8??V?]?????? ????l??8????5????0???o?:?$??wB??USa?{?d?????I2p]_K|?,??? ;P??s??5'?7??j??guy?Z?@v??\$?i?2^???#?????????B???? f?b1V???Ek???Pi?D%Q??7?.z???B? ?w;]?X_? ?9?|?????> ??3S?F???D6?.D n?F??????-2H??x&E?36D?v>WK?4?!???Hc d???k +??p???????A?t'???Y?I!l????t,WO??.??Gm"!5??DiPE??n??E?Y?????U?????N7??I`f?????tCF????V}??JI??????C?:??%C=;3:?K???&??C?????B???????v???Q?'?m???Hg?l???G???@??Wm?a?????8_!_????q?vX?^????*x?0?y??%W?U)enX?7?y?A?6??wd[?d;??a.]?G? +y??]c?'?4a?W???v[hJB?)??8!e^?a?0 +???H<&?"?8?tK?Y2????`??%?d????%?F???/se???T{>?a}#h???? B?(S?I??]?F4????h?f??0v=9k?E ?q{???\O???1uG??B?{j??am?a? ????_m?ou2K?f?++????f?b]-????[?M?A9???-?????c,??V;-?=#?}?????>??;?(< +#2W?;?#:?u????Ba ?9_X&ij?r????0? +?|m?h????{?g???w g^??????e?8|?-?L|s????,?y??????`?XlxU?????\?????;????? +? ????v? ?;k?0??"S?F6?L??????4??Fu?a??#?Zm6XG?<;???gzn??t'???0`??]\]??)d????|y=?XD????YwM9*?r?z??r'?lq?e??I?????#??????%T?l??'??B??????#Z?o0??_??._?????N???^??????tVV??????C???klD?*p2??;??Av?hY???Z??????+.N???`f5?mP?d'??c?????m??????"?7!???sP??M7????????B?8?(??, ~ 6?qci=n?"!??F%H?r?+???z??S$`R"Z?U?|?F?Z?sx?!????????Q z??9Z??????v6?O6??'8?31z???0?(S??Y[???7?????? +P??_????U?Om???f5kd????xj?w{????-?o????? wj???????U%En??{x_??yM?P?????V??D??O-???????q@9|7?Rr????R?"??p??????E(????KMA?:?H?JBl?d???2?b???vY??P8Sz5/?n"??????@???????J????hW???_??b1C??7??6???????1x#??5~??v??#?,]m?wa.???L???????>@|=? ???n G?g??????'?8{???m????Bq+?UV?qa????JtY??F?jn????5~b{?W?j?7??H?'k??K?> endobj 117 0 obj << /Ascent 694 /CapHeight 686 /Descent -194 -/FontName /JUXUWI+CMBX12 +/FontName /UXRLUO+CMBX12 /ItalicAngle 0 /StemV 109 /XHeight 444 @@ -1545,7 +1554,7 @@ stream x???eT\????[?{???]????qw??????? ??$Xpr???|;9??????f0??5W????UtS?*?1????%?A.??L?|1UV+ ?(%??????$n??????$?&?7?_>N>N6$J????????? ?F???$n??????P0v????05????Z]):?=????????????F??????N?SA?Q%%? 1??????K]?kd???I?Yd???DH?Z~GB{?n#u:????P??YU????(wf??D?M??n?72G&????\?r &??F*6?+.????t?9<>???????BM????-???_???{i?#??2l??g7?iD?????:;-?K[?????V5?????? ???????4??TR?-?t??? ? ???`B;????Wn\?T?)O9 =!????????wOc??????t? ???K7??????=??E???'?f???l????????jQ4?!N?S??Mx??y_ %?Q??%?>???g????????u3?0A?w???????/\)C?h??@*Y????????U???k?ap?p??]???l} ?\\P?D??????K?~&?C?4=??????Ox:}k? ?????^???R'p???????V[??3~?????pop |??]??5&Ti?2?A???z??C??Y?w?|?T}>h*??`Q??2T??A??hFi&???\V??|Nu?o&a??H? ?S`/?{ }?oh??E???_???vZ??#}e?HSp?|\i??E?K?~ -??SxtA?9???h???2;rR??????? ?:G9/??+?k??~^????'=?|\5?????? ?Qd?????????{?UZ?'???&l?KU;m?\o?????p???`????@%+&???????OL`j 4vr??3v?A?_?i??endstream +??SxtA?9???h???2;rR??????? ?:G9/??+?k??~^????'=?|\5?????? ?Qd?????????{?UZ?'???&l?KU;m?\o?????p???`????@%+&???????OL`j 4vr??3v?A?_M???endstream endobj 95 0 obj << /Type /Font @@ -1598,14 +1607,14 @@ /FirstChar 11 /LastChar 122 /Widths 289 0 R -/BaseFont /FILEFM+CMR10 +/BaseFont /LIXKSM+CMR10 /FontDescriptor 93 0 R >> endobj 93 0 obj << /Ascent 694 /CapHeight 683 /Descent -194 -/FontName /FILEFM+CMR10 +/FontName /LIXKSM+CMR10 /ItalicAngle 0 /StemV 69 /XHeight 431 @@ -1629,43 +1638,31 @@ /Filter /FlateDecode >> stream -x???UT???qw?P?????S?C?`A??(-??x?bE???-V????????{?y?????|s?5???V2F?i4u???!V y?3????[ ?&m???????????qYB?gYK(H?-,??Y???^"?|"\?????? -`?a?#I ?r-?j?P;??????AP???#@???m?;??d???? ??+?-???'%g@????????$???C}?=??(???rZ??qU???U?/(`:??eB?k ?:?V????q??hf???K u????M???????N?????)?????4?&j?Fl{tU?Q+'r -?~B?%n?? -?Z.??-?A"o??9?/??-???Wgj??e_???? ?&{?'pHw]?#?/`Z?????3???Fly??????(P???%W??/??+???\FB????d:?>?Y ?????H? ?) -?D????0q??r????y??_t?????)B ?&??j??$?c%??8?WHx?dm:?????;W?>|U?F=??>M?C/????0?q?.?j?y'??BM{eo??-??B???????U?/?f?"?ov'????A?'l ??G?x?o{N?e????B??,??z>?V|??@N9??s????????LV???W?+?U???C????w???9?.???6t????-o???-???j?+??`?e??8\?5????????19??vv?a??e?J?G%?-????Y??V*???1?Yyr#??4g??d?4??CfMU?hov|?F??B???]?&?@?k?'H?\#X???H???G?7d???0ktV??VMR???r?Sp?\K?3?tAgNlt?'t????(?B?\?????^?????{1U??r??+???-?|tt??????Ar?BKp???L?f?+Q?d???6????$_?q?8Pl*????&??z5Z?Pe?,??_ LX?Rk?d??3?\?UQ@????(=??????j-??u?F?Q??}?????U?{&??,??????????|[?}????4eH?MZ???;?????/~?z?M?x=????Q?????J??:?}ZS9?????4K?f??|??9? o??????b??j??? -?7??}??????6Q?E??=?h??e?8???tx?C^* G??%? ?|?+8}kU>;u???????"???9?????c??\rG'EN????X??_Hf@????????J??????2jb9?????w?FA??;??HY?=?(s??j?U?NC?VGL??i???>??~????(?7?U?H??']?A?;6??|F'?I2&?1??????*?? +.?U???d?#Y?^?Y????????eC?g?=?????\???:?? ;????c????+?????E?\????E???-???????l~^?I%?y???2D??f????O?5?????????BU??]???`5?;????????)?EA?k?4?????? r??????J~?!???I?%?m?????I?-????F??FQ??H??|?Z???\M"8? -?kM ?m%5??????????}z?h???,?,j????y????y?l?????ro???_AzvW??y??? ???c?]f?????????{.n?fd -????>??????u?C?%????RRh?"x8???0????????%?Mt????"????2|K?i2??Ks?Ndlf?????@?p??A`_E?h?t?|???>=gnL? 9??T-???h???%??l??u)y??:???c&?f? ?S;????????????w????&l?? ???6?5????? -[m??:???? ?9?w?K#3?P?}???Ic????^???x???>??V g?d?F??V?Y?'?? ?gP 7?/?????;???w???Z??-??w?To??`c?????9e????????$? -t???????? ??????R??vrx????????c?}?d???b??l??F???N??????I?R|q?i????M??? ???6?????? ????C??Q?g5???????d?3I|N8???R? -?6Ux????|H?y? ??Z??K??(a?W????O?H%?????UN???G???????5)[?>X$n???dD???? dRg??#\?q??*??9z?d?????Jo+????Lp??)?0??x??+>?????o/??B???VB?@?}o`[? /`?W+????nU??Pb2?Y?x???wV? a??K????\????????H??L?R?3??M???y?4???J???;&;?~?7_??)q |?: ? -VYwd-VQ??(I@?????TI=???C?#0"???Z?@?b&KL?????x????g?????? ?????????e?????5? 5'?Z[V:?{?F?#??;?C?t????05?X??uIt????O????X?$g:??/N6??????!?'??[?#\??v?n?\1?Z?"?????q?,??R?&??E?J?YW?1)?'?;???_S?~?C?? -???'W,m??9X\n?]^????z?B????O? -?b????+?g??????4?OWs?? ?Q????????#,2???????}??OM?U??b?I?*?&l?S??m?`?\??f???#???|??d?HD?Bn???J???????6_??S?_?G?j,E???y??V???????>?g>??????l????Q+h?h??7?[ -???ub??]?R?nsA??D????fF??\|????4???1?s<*"q??`r_?+?????t?i??a?X?G??no?@Q??B???.??|f?G???FP6TJ???l@?`????]???,SQf%ke??e -V? ????>??F?4Q?k]n?&&?S???} ??d????N?w????????????[??^?p?T,??'??F?_???U?z-b9Q???&.????%??h?X|?+??n^???qm??Ku?h??????%!z??o??;y ???`???B&z6???v??tJ??????*]?Y???I??],?P??&?t"?????A]b?????y?D?o?h? 4????}?=h6?7~g?;?6l???^?o???r?c ???????7(^?d?0????%??a|?#>R0??wV??R?MC?????u$?uQI?3}N?Yz3zlZ????A????`U?Ip6?/?*???{??????25R????\ ??U??Z?kk???|9?W3pi?w?_Hky?T????????o>??m???u?>???v?Ep????&?i?? l{?ae{???/???t??,??~?;?????????HL??;?x????C )yC?3?? ?????|???-???????w?jF????{????K??????#??k??\?$?@"? ?????A~h]??1?[??y?no?B?~????XV7?_?+?>?????ZqFL??z?? -??404.????b?ePy??d??A?I????,;?6?E?????3??c????d?l?x?"'?n?????|???p??dB???f???'???t????JU.R?6m?R??sJ?????VZQ??hMf??KX?!?c]z???7"???????"%n???)?????7.? -??????s?k?h???O???)??&S]-?9\r?mol???6b&m)?????HxF?F?gk???????6c?h?p/y-dw??xD????_c?/??t?,1?g -?4?~5?U?2A???3?*?f??E5e?LI???n%?lK?L?V?????k?u?R?ye?*Wx?`???? yGT????3??_????D??????tys?.%7/? =?6?PHe??.?4??>?+???0???o?t|?K???%?????#d#?@x?6X??1?@;? -????%?n??1?????}???o?x??JG??v?HJ???fZp?????~?n???????v,?????1WI???k??F?/?e??{wpDN?5?5?????????????9??+D??\%??/i???D?k=I???4??u ?->????5??;?#????x??Y??m??OG?????'ob???Gl? Y???6?$??&???X??Y;??i??Gk???+?>HI^??m?.XI????T?:S??/??b??????bjaj???????'??'?4????e???U?i#?p??V??x??????1????????????/!?????????D??g?J*?h?W?$?]???e??m????w?Z%AF?????????M??W?????x?b?>H??!?????`JcHv?!J??2?Z0?]?A? ?Y?i??D???.pk?Z??????2?(???x? SQ?s????Y?r[?E?????`b?(F?D???d?=?F???9?brb+_???7#'>f}??),a??0??D??{??e????+0LVy??o????]y? ???????e9????E W]?zH?|?_\?!? f?m??????????7F."???M??nj;O?VH?JCd<9YL??I?t?8??!?l???7 )? ?d?V|x?????w??&?t!F???ce??:??!l????Q>X?e?,????W?6H???????7??Q?b??D?6? -???????]?{\?3?rRsI??v??D??.r?%N??G???V-V?)E?w??p??~e?6?{d???????? -/??9???_??h?5!??q}b?????=???:?|??Q?7?S??pr??r?_?f8(e?pi]?[?I}?YQ?L??b?yA?$??L?g?o?Pz??[f|??]Z??]q????}U ???"?=Q????2|??|???Y?+?y??S?WQ?_?zk??k?$M??pM????}????/{| ?????==??? y?_?JA ?|??1?Taiz??Ur?&??r??Moo"qJ? ?????C?)?*e???}qmw?G1i??????D?_A??>N??????w>:~~??????`8??>Z[ #?gLc:?c? A?Yi??\???26S}??8~?G?????'Q))R*??Rj???p??????oR????_?\?.?'?I9b0#?????$?????afZ??p??AV?????M[.?Wa??m?3????+?e?F??9??Z?rz;??i?zL<z??? 2_FE?1??????????Z??KMFZ? ??Bkf[:??{???????Q???V9-m??j?d?*?0?q?2#??K?lkL?????8gz43?q???:?_??%D?????D'??xN??p??BrJz?R#?=?????????~B?%a?? +?Z.??-?A"???9??(??-????`n??X?????&{?'p?t_u ,`Z?????7???Fl??JG?~Y?aT??+???W??U{q.+??k?\*?{?<??hSi,?????u2oD__?8?_%?@?????/N?X?B???F?S`6?.j??????>???+$<|?v]?S&??+W?*W?^13A???? +????8_.?k5?&??B???n??-M?C????;?GT?/?f?"Env??M$@?'??C?G,x?o{Ox?????C??,??{??U|??@N9?w?????????LV??WP?+?U???C???p???9?.???6r????-o???-???j?+??d?e??8\?5????????15??vv?a??e?J?O%?-???? Y??Q.?????Yyr#???`??d? 4??CfMU?ho~|?N??B???]?&?P?{? 'H?\#X???H???G?7d????hvU?VOQ*??rIPp?^K??tCgNl??'?????>??B?\????Q?????{??????]w???[>?????{-?????????l}???3W? +???;m??II>S??q??TB??cM_??i????[? ?@?????,~??]g?????????gQz?}s?[=?^?O?????????/2Ho?????L?_Ev??7??;FaCLs??nf???5U?????^?w`7??;g_??????z?;??A?%???5?u???&?J(??Y?Y?&n?V??(6?s"?!??UI?Y??:W'??x??????bt??uV???]9)?o?b ??~!?-?f;??"?*??3R?????9?[bB???l??\2"????,???EW????Zi0???n?{???^?97???FT["???r?9???4???&??????Z??9?V;????W?;?????pf????????,?>?? 8??[?7???5_8??D-K??? ^9n??????(????u?.(rB?m ?,??5?f???M*a??U?a2v?l????|?QT???dU?^???????e- W?y? +? KR?;L???*?awM?F???y?t?\???m.?R?u?iT?qJqTYx?&?8?~J?r ???????6?q]4?J???m9w?(???ZKg[Y?"?a.sdq?~e?4Vo?=?!??I$~??p??`?h W6??3????z??_?????-B?z??.?????k??syFV??#???????????d24??qbf???DB???:?????{??x))?k<?Ma????Z?a????&??TqL ? +qTI?%??4?????h26??????@C?p??!`E?X?L?B??>?gn?? 92T-?r?h\:?%??? +?u)y?????cf?f? ?S;?????r??*??cwJ"????r ?/7??????? [m ???????d??w?K#3?Q?}???Ic$???^????^H?Jq???T6d'???o????5??v??3)F????D???e+8???????H?;?n??|???mh????fQ?p?T?n +???i!???dC?'???????IO?_y?)|??j_? ?!??Xq>???Q?u?-??9u7i????GGv?5zz??8y??y???CM(??????T?;x?:?J +l?????M?h%??I??p??,???V?????v?V?C?-?O????_p]F?? ???~??D*?????rrV?s8??q??Ol?I????"ph??????"0???U?????'?7w???Hf[???4e?+d\?)/???8 ]?Yo???@Gy?4?????0???{C?ZLxA??Z???tt?R~????:??=v????a???_:F]??????<>d??8F??l????]l??z?????D*?@??f?:`????????}??&D?T??rD(???k ??m'??9?nX?P??`???8?0???????K???a ?~?Zae?$?^??Q?v?A?E??OS?:,\X?????H#S??????D?Y? ??)O????0W??G?H7??I}?|5qL??????4?S???#WYk?d?????p?8j?P?-??j2(F???@t?b?R?U`???a?Gi?ZR?7???????|0?????8j})Zl? ??4?j??cy????\?(Y?+???`/_%b8??K???u\???HBc1???J??j?K:???-mXg#V??k??[*PTj_??@?? ?0???w? ??? ?V??? h??y????E?c.??d??L:?L?j???N???oME????nb";u ???oHh?)??x'?~<8A_?+*?~??%??Si?J???z ql ?e?q?????3????Q?x?F??#???????9??:???EN1?d?ID:b?]?+???0s??o?t~?K???%?????'b'?@x?6T??1??p;?????%?n??1????6}1??o?t??JO??v?HJ???nVp?????~??K???m?Y?Xx????c???7y??'??t ^\?H'?4??8???{k4 ?'?/c?%?Os??W???-??>??q??vk?2<"??z &? +??il???Z|X"??k??w?G?+?*?????(R?.-??2?u?CO??< ???V????'DmHIT?K??o?t'?v c?>[????u?W?c??????]?D?#f??s????"?[:_}?: ?g???u???? +?|#?:?9n??????????n/??Q?k?Q?????SB?bj? E;& ???\?p? ??Pr?p???I,?,?5???F?r???/??+D?h.? ??}?&?j ???????????????p?Y??s#??<)???E?8k?WC?aK??oK?V?>?- at +?Fj>P5g^?????)}?m???`K???4?_(?? ;:???U??cz???????Fk3?[??Gc??-'h???C?0OW????J?]?? ???CB??n???4M=?? ?d?D???????i???>`?C]?bSJU???*s?7?6R? ???n?+?x?s???????7Z?O?X?^????D>Irq$?{?F???m?????i?i^?+???e oM?Q???*??k???>??????M4M?w?~_8y a?mn? ??38?9M?Q>???'??>#8G$b%tE????J8?2? ??q?F'[(F?D???T?=?F???9????V$?d?oF^b??~95 RX?^+i???>??4\9?b?[9Wd???? ?V0?a?????s????qF!??Gy???? A/?21??r?s25??????e?[D???n}??????n???^?#*e?m?????????0A."???M??ij?O?QL?JC?:9YL??I?t??wS???]F? &????%I3?l.?W?5)????)???o?7??\?]??1??Q??y'1??-???d??b?!?( ???[???(>?l?3|-N???s?w????5' ????2??"?RL(]???/?~? ?=j?X??D???????EK??/?zw;% ??@?]???Q?p??7i?????i.???????1X?@u????1????? ????c?flo#??Bu ZDq,??tG?~?FY2????2\??z???WUMX[?????vG???$???c??$??????S?? +?(?????>?Y???P??????JB.N?`?cn?.?? qh?N?i??#$|]5???4??>?(h???&sO?????+q8?a[???> endobj 90 0 obj << /Ascent 694 /CapHeight 686 /Descent -194 -/FontName /JFGVEE+CMBX10 +/FontName /NRMOAC+CMBX10 /ItalicAngle 0 /StemV 114 /XHeight 444 @@ -1705,20 +1702,19 @@ /Filter /FlateDecode >> stream -x???e\T{??I?A?8(?0? !?)?? ?#0?P????? %?C????H?t?????;z?^??/w_?g?ys?O???aa?OHT?D?}?K???#1?~3?B??6????phl? z?P??????K??/g[?Y????\?6?R7FG??@?o??@=??#N`?d?H? ?|???????H2???4 ??HMV???????JK????'?????0}?????????{????19???????NjF??k???YW&_ivs?v?/????????*????????x??c?i??????????U? ?(?9JO???,N8 ?:?1?:0ff??I?` ????o?%,??(??????8Y?)l?Z??7?!??????q?;/v????v???i?????{??"?q(^?9?y??Zv???_b?dT?l5??SN????k??????er???=]??f gL??/???A???x?:w??9)??U?Ryt?,??x???0?b?$???Q???-?3^?J??P??Z"s?[???4??Xz?y??K??&_?7Eb'??????Do?G???3?? Ny??????~?Q$-g;??M?M:%?V{???qI??zqy?X?D????)?~??+??FC??cF??*7CJl?n?+??M?R*?????&Yd?X6$J]"?J??S?v? ?~?u???(??k?"r"????e??????9??(?]?Sp??^?zt8?#??YW???Hk?m?k?q?W.Go????s?N????Pi[??\?! ????????3?? -?`??w??S ?FO%?r??lD??????B?2?????O$?l>a? ??,=\??yA?F?G???h?P?????y???0}?M? ??????S???. b:?4k[8r??pU? }???4(?:???t v? -??Z???N??#????9??EsY???,|?n?aM2K??oe??t??+$?iMc???U???? @??o>?T??0=???HZ?Tl?3???\????\????????% 4?? ???m????:,?k?Gc$^e??|O"???>_/?1??bO????@??g??Fk?Kx???????x???T??????iEK8?y??6?&??VO?c? -??~?????K ????q????H?X??7??B??Fc?_??gw???]]2$??????s???l??K?v???-[A??A/??????u???9?G??Z .?6f???NQg??F?>??r?ix?#?????????W?e????? ??6{??ko??G}?W?????????NKdt?s?????bO|E????6??H?XM?;>???????Y??U??~x[? -?51??UNs;y?lK ??G%????^??????m??\?.a??;??q?)?j??? I???,,j? Suz?d?J?E??T -???9?&?? - O??\?n???2?FTl?<$3?N?HF?q,???$7?q?h!Ho???q~!fGA]W?8?D??x?? ???W1sz?)??G??#h?????Pv?x?z?????7?~K?n -E???a.@????H?2p?+?8????.?':?9.O??~I??W ???_?? ?@|???m?L??>???????7??U? ?????J??3??)$4?1????~?????,jx +???\1?????{j?*?!%????|??????5IX[???4 ???????L???t???B?????9?????}We??:??????o??Mi??VV?-?0???s3?r?_ej74'?D`??q:?7 f??3?7???{#?9;???\7h???Amy???i??O?????R?>|.?d?>??R?MsCJ?5????{??F???] ??cls? ??Z????I,T)h.U?zI?+N??????xvRE?O?/^?????~???%D@|?s?????]+?3K????{k_??&???DS"???r???R?E?Q?/???w?h@Z??k??]X b(m%&?bK?H?m?????e?JP6)??U???Q??3lb??a^???_5?????x|yLM?]m`??????#f?????/|??I??Y??!D?5??e??e\???Fy??+????5If|?T/$8?`=e5??xZ?~`?? ?1S????????U q?[n=*t?6X_???????????? $?k?33??-+}????Eg???BR??`[??i????[W/?:F???^??Z?~??T2+Ld????),F???? ???4L? -?????*???+D_%v?~x???Q8?h??lNQ????/??????????3C^9?5i/???r"e1?o??%? =A>?4?????;?????|^????H? ??cKYg?R?J?A'b?9??=q?R[z??? T???????q??Ws8;??j???h??????????????Mq?? .???????<`??p?????????x?k?|,=??q??????j???G$?M??X???q??K??)?<]O?(?:^??__??p7>???Yn}???q.?:??????????? ??+yz??k1??????7?kG]JC?7'I8?3??&?m>????lR??1/???m p???N??.Z%?F\?x#[??[??f?C??s#???????O?U ????cl|nW? ?y=~|???7-?k???2&S??????G??H???*/?????6??u?;?=?l3:??D}"???!q?U7e?(g????x????S?Q? ?;??W(?????|???W?x8{??t8?M???I?!?????(?mD?b???D?Ye??P?w?3?:??(?[???x=??h?B??d???],???8S?".~3C1[e?k???X???u?+1?!????zI?????9??z??????7??????U??I??Q??d???x>?R??w9?9??!?Lx? ?N?a????N?Z??VE??X?I\??y4UN??)????W?????Al?A?#I?T???7?r?7|j????/z???b? ???vcD???j?^?sp????A?9?Lf??? ?Z????p???P?9?????? ?*F?? ? L?"???={z?'????3>&????&???]?Ih???? I?,!E??;V???T?/????????????+d?Z&???>?4M?v??H|?~?[?Wi??|??c??-,?q??E?-3i?.'??,l??'x u{?D???0???tRYo+??dv>_;_t?3nHI???L?????????`?x7?LP?wU??T(?u ?????6?Z?xu~-kF??^]????`???T>}K?dC&?F???`?JW????J*?O?r'?YhJ?y??< -?Q?mf??L!??K??+????.$L??|4|? ?7>?N??P?J???W>3??*Y\??Q ???????B?.P?`??| -9???*?{??B?????lk{?m? ?I??H3????G?Xr:???????G???%??Z?????M8?g???$?F?Ddu/ ?/?? ???9??h ??????5?endstream +x???e\T{??I?A?8(?0? !?)?? ?#0?P????? %?C????H?t?????;z?^??/w_?g?ys?O???????F???_?n??fn??p8 46??I=L?x??U???%???????,k?\G8??!?C??g???8/??r?x???)???Zo?n?????C??n??I????&ix.9?8 \????????????d??l\???R??B2???????????b?JI!?????????P??)w?????@??!?U?;?ZW??L????$??3@??7??S?X?J?/2{????? +<??B?\?Q?@v????}_?#??b??dR????? f????\Z?R0??j???????!W;?:I???~??]??P???7??=2?S??jU???????X?^Rn????$VuEVG?)??zc???? )?"o???{h????"??a??*??^I????!???*???????9Hez r??????!?.J?f at O??M?:????????????c???r&??U?????M???U?#?? .#????_???XR??*?BY??F?|3}?#DF?????5C?7?????????2P?[??????? M?????>S??|#$?VK?-?L[sW????????a(f????>l?????.?@????????>?ZO]??0???J8????#?SQ????\????0J??f???m??!O?u ?P???Uhv???a?F??????uP?????,u????yLU?F?t??????0/.`~??#?z ??VV ?{?'?H?`$?e >?|L?w?P|$?? _l???a?&+f?dGH?U?%?????????????????aj?c?]????F????b?W???Y'5#???rK??+??4??[;??S?fJ???G`? K??AM?A??????w`?~??LK?_?*m?v??'\?b'?_??q33@???r??S?g?7??k?sw|?x]???? ?V?S??????`?}????;EX??M??e?4H??y???_??8/?????Eg-??R?/?i2?h????)?? +~???`??????2???????.?y??3?y???v??^Sy?N????????????a)?)?v?"a???????k?????qHR????6)]???}?=?j?>]??S?{?W?"S????E?<: M?{UJ??????????2|??]?????1????g?d??Y?7W*n?? ?? E ?l$?e*???ksK?q??l.?^\?r??Z???????K????eks?????1?2?f?'j?d?????w?????Zs???3dw???%???s???? +?????v*?iD?[???%??_\?r?c????1YAW??k?s??R???8]C_g$s?r?_V??b?1?/????????.sTXX??9?qs6??%M??[??-??|???RkAC ?:?e?????D-I3?Aq??3JX?n?l9?4???AO??$??cHQXq?????a???e:????x???????(W???d9!? ???M??=?S?Q??O???# +?^?[XI???????{????q]ZdZ4? ???Xx?????[??'T~l?A?????m??(?Z??????j?Q?!}~??)W?.X?Q?"??/???KS? ??=????k??d?_X????? O~???2?c??J?????7^????G???J??r ???c???2???T"0M?8????????OV??????~???f???<^N ?4F????{X??t?>?G2D {?[????!%????Y?@??kj#???.??1?9??? V-Qq??$?4?*K?$????{?ui<;????????P?k??g?" ??9?R???????????????XUH?G?)b@@9T?^)?"???????? ?;?4 ?M??Q?.?1???g1??O??6??^??????d%(??w??????U?61???0?mO??J?}KK???y?,C?"?????p?2?xl`? +H* ??t????^/?tocp$|??????3v) %??1?????C?-?d???????l??????9??^y5]?q4??a????FG? [????8???Duc????g?i_?l?Y??g??R????AajJTk5[??#??&?N,`@?8???% ??w???]R?E??/}??????,?>?{?8Rf?W?\i?E???[??<=l???v??w??????.??????$???O?6?nQ?d6?????? ??68?LJ'?J-??q#.G??????-g}3?????????????'?*??R??16>????i?Hg??>??$???s?O'???????z? ??????]?P???I????4??m??? ?n???o???????1??? ??eI?dF? ???S? ??9P,t??m??Ei?u??gi??!5{Az_???=?U?9???????????5~?d?)??_?????E$?x? ?????n?????????k??}????h??8?*??2T?3??CF??|t?)???????+{???aL ?AK??G? ?=k[:?Z??&?????[IL H~??6??f?C?p???~}(?;????FF??? T?B?nL?Nn?=??Z1?^E??1??]_5?`/??98??J?? ??Y&?d?l?L-?]?Z???HF? ??????????E?????&v?m??=???V?????goe??_???$??????$r??"g???F?u?????????R@?k???2`-??s? ??b;PG? ?f??????dd>??1s????a?????????????w????I??N'nq(W?^???+??i\?,????oxM[YLG?i?X0~G>??DHq???e~!R??EQ??=?6m??$c?D???}??},9?t??\Oa???V?W???_-??v??&???Lgt??t#f"????????O??P4?E?????5?endstream endobj 89 0 obj << /Type /Font @@ -1727,14 +1723,14 @@ /FirstChar 46 /LastChar 121 /Widths 293 0 R -/BaseFont /JDQMXL+CMR17 +/BaseFont /ZCYARN+CMR17 /FontDescriptor 87 0 R >> endobj 87 0 obj << /Ascent 694 /CapHeight 683 /Descent -195 -/FontName /JDQMXL+CMR17 +/FontName /ZCYARN+CMR17 /ItalicAngle 0 /StemV 53 /XHeight 430 @@ -1927,7 +1923,7 @@ >> endobj 300 0 obj << /Author(Bill Spotz)/Title(numpy.i: a SWIG Interface File for NumPy)/Subject()/Creator(LaTeX with hyperref package)/Producer(pdfeTeX-1.21a)/Keywords() -/CreationDate (D:20070406141204-06'00') +/CreationDate (D:20070410092024-06'00') /PTEX.Fullbanner (This is pdfeTeX, Version 3.141592-1.21a-2.2 (Web2C 7.5.4) kpathsea version 3.5.4) >> endobj xref @@ -1939,79 +1935,79 @@ 0000000000 00000 f 0000000009 00000 n 0000007627 00000 n -0000129806 00000 n +0000129979 00000 n 0000000055 00000 n 0000000081 00000 n 0000007810 00000 n -0000129720 00000 n +0000129893 00000 n 0000000131 00000 n 0000000162 00000 n 0000024122 00000 n -0000129632 00000 n +0000129805 00000 n 0000000214 00000 n 0000000246 00000 n 0000024309 00000 n -0000129507 00000 n +0000129680 00000 n 0000000303 00000 n 0000000340 00000 n 0000028031 00000 n -0000129433 00000 n +0000129606 00000 n 0000000391 00000 n 0000000422 00000 n 0000028219 00000 n -0000129346 00000 n +0000129519 00000 n 0000000476 00000 n 0000000510 00000 n 0000028407 00000 n -0000129259 00000 n +0000129432 00000 n 0000000562 00000 n 0000000594 00000 n 0000033800 00000 n -0000129172 00000 n +0000129345 00000 n 0000000646 00000 n 0000000678 00000 n 0000033988 00000 n -0000129085 00000 n +0000129258 00000 n 0000000740 00000 n 0000000783 00000 n 0000034176 00000 n -0000129011 00000 n +0000129184 00000 n 0000000848 00000 n 0000000894 00000 n -0000039880 00000 n -0000128886 00000 n +0000040030 00000 n +0000129059 00000 n 0000000949 00000 n 0000000984 00000 n -0000040068 00000 n -0000128812 00000 n +0000040218 00000 n +0000128985 00000 n 0000001029 00000 n 0000001054 00000 n -0000040256 00000 n -0000128738 00000 n +0000040406 00000 n +0000128911 00000 n 0000001101 00000 n 0000001128 00000 n -0000045530 00000 n -0000128613 00000 n +0000045680 00000 n +0000128786 00000 n 0000001195 00000 n 0000001242 00000 n -0000045718 00000 n -0000128539 00000 n +0000045868 00000 n +0000128712 00000 n 0000001297 00000 n 0000001332 00000 n -0000049892 00000 n -0000128452 00000 n +0000050042 00000 n +0000128625 00000 n 0000001387 00000 n 0000001422 00000 n -0000057346 00000 n -0000128378 00000 n +0000057495 00000 n +0000128551 00000 n 0000001473 00000 n 0000001504 00000 n -0000057534 00000 n -0000128290 00000 n +0000057683 00000 n +0000128463 00000 n 0000001550 00000 n 0000001576 00000 n -0000057722 00000 n -0000128215 00000 n +0000057871 00000 n +0000128388 00000 n 0000001631 00000 n 0000001666 00000 n 0000003729 00000 n @@ -2019,15 +2015,15 @@ 0000001716 00000 n 0000007444 00000 n 0000007505 00000 n -0000127031 00000 n -0000121725 00000 n -0000126872 00000 n -0000120878 00000 n -0000112468 00000 n -0000120718 00000 n -0000111216 00000 n -0000096466 00000 n -0000111057 00000 n +0000127204 00000 n +0000121898 00000 n +0000127045 00000 n +0000121051 00000 n +0000112641 00000 n +0000120891 00000 n +0000111389 00000 n +0000096639 00000 n +0000111230 00000 n 0000007566 00000 n 0000007687 00000 n 0000004026 00000 n @@ -2049,17 +2045,17 @@ 0000006618 00000 n 0000006771 00000 n 0000007748 00000 n -0000095599 00000 n -0000087649 00000 n -0000095437 00000 n +0000095772 00000 n +0000087822 00000 n +0000095610 00000 n 0000007871 00000 n 0000006933 00000 n 0000007103 00000 n 0000007273 00000 n -0000086160 00000 n -0000071828 00000 n -0000085998 00000 n -0000127854 00000 n +0000086333 00000 n +0000072001 00000 n +0000086171 00000 n +0000128027 00000 n 0000024060 00000 n 0000024246 00000 n 0000027968 00000 n @@ -2068,15 +2064,15 @@ 0000033737 00000 n 0000033925 00000 n 0000034113 00000 n -0000039817 00000 n -0000040005 00000 n -0000040193 00000 n -0000045467 00000 n -0000045655 00000 n -0000049829 00000 n -0000057283 00000 n -0000057471 00000 n -0000057659 00000 n +0000039967 00000 n +0000040155 00000 n +0000040343 00000 n +0000045617 00000 n +0000045805 00000 n +0000049979 00000 n +0000057432 00000 n +0000057620 00000 n +0000057808 00000 n 0000015161 00000 n 0000012268 00000 n 0000008052 00000 n @@ -2084,9 +2080,9 @@ 0000012522 00000 n 0000012693 00000 n 0000012863 00000 n -0000071344 00000 n -0000067317 00000 n -0000071182 00000 n +0000071517 00000 n +0000067490 00000 n +0000071355 00000 n 0000013036 00000 n 0000013210 00000 n 0000013383 00000 n @@ -2121,9 +2117,9 @@ 0000023653 00000 n 0000024371 00000 n 0000023824 00000 n -0000066997 00000 n -0000065607 00000 n -0000066836 00000 n +0000067170 00000 n +0000065780 00000 n +0000067009 00000 n 0000028469 00000 n 0000027050 00000 n 0000024543 00000 n @@ -2148,98 +2144,98 @@ 0000033126 00000 n 0000033291 00000 n 0000033450 00000 n -0000040318 00000 n -0000037930 00000 n +0000040468 00000 n +0000038080 00000 n 0000034347 00000 n -0000039691 00000 n -0000039754 00000 n -0000038136 00000 n -0000038309 00000 n -0000038483 00000 n -0000038656 00000 n -0000038828 00000 n -0000039000 00000 n -0000039173 00000 n -0000039344 00000 n -0000039517 00000 n -0000039942 00000 n -0000040130 00000 n -0000127970 00000 n -0000045780 00000 n -0000044481 00000 n -0000040426 00000 n -0000045341 00000 n -0000045404 00000 n -0000044647 00000 n -0000044821 00000 n -0000044993 00000 n -0000045592 00000 n -0000045167 00000 n -0000050017 00000 n -0000049032 00000 n -0000045888 00000 n -0000049703 00000 n -0000049766 00000 n -0000049190 00000 n -0000049954 00000 n -0000049361 00000 n -0000049530 00000 n -0000057847 00000 n -0000054135 00000 n -0000050126 00000 n -0000057220 00000 n -0000054397 00000 n -0000054568 00000 n -0000054742 00000 n -0000054927 00000 n -0000055112 00000 n -0000057408 00000 n -0000055302 00000 n -0000057596 00000 n -0000055473 00000 n -0000055646 00000 n -0000055817 00000 n -0000057784 00000 n -0000055990 00000 n -0000056161 00000 n -0000056335 00000 n -0000056506 00000 n -0000056679 00000 n -0000064730 00000 n -0000057981 00000 n -0000064570 00000 n -0000056846 00000 n -0000057029 00000 n -0000065256 00000 n -0000065018 00000 n -0000067230 00000 n -0000067206 00000 n -0000071648 00000 n -0000071566 00000 n -0000087050 00000 n -0000086688 00000 n -0000096145 00000 n -0000095890 00000 n -0000112028 00000 n -0000111643 00000 n -0000121439 00000 n -0000121179 00000 n -0000127496 00000 n -0000127278 00000 n -0000128071 00000 n -0000128141 00000 n -0000129878 00000 n -0000131538 00000 n -0000131577 00000 n -0000131615 00000 n -0000131744 00000 n +0000039841 00000 n +0000039904 00000 n +0000038286 00000 n +0000038459 00000 n +0000038633 00000 n +0000038806 00000 n +0000038978 00000 n +0000039150 00000 n +0000039323 00000 n +0000039494 00000 n +0000039667 00000 n +0000040092 00000 n +0000040280 00000 n +0000128143 00000 n +0000045930 00000 n +0000044631 00000 n +0000040576 00000 n +0000045491 00000 n +0000045554 00000 n +0000044797 00000 n +0000044971 00000 n +0000045143 00000 n +0000045742 00000 n +0000045317 00000 n +0000050167 00000 n +0000049182 00000 n +0000046038 00000 n +0000049853 00000 n +0000049916 00000 n +0000049340 00000 n +0000050104 00000 n +0000049511 00000 n +0000049680 00000 n +0000057996 00000 n +0000054284 00000 n +0000050276 00000 n +0000057369 00000 n +0000054546 00000 n +0000054717 00000 n +0000054891 00000 n +0000055076 00000 n +0000055261 00000 n +0000057557 00000 n +0000055451 00000 n +0000057745 00000 n +0000055622 00000 n +0000055795 00000 n +0000055966 00000 n +0000057933 00000 n +0000056139 00000 n +0000056310 00000 n +0000056484 00000 n +0000056655 00000 n +0000056828 00000 n +0000064901 00000 n +0000058130 00000 n +0000064741 00000 n +0000056995 00000 n +0000057178 00000 n +0000065428 00000 n +0000065190 00000 n +0000067403 00000 n +0000067379 00000 n +0000071821 00000 n +0000071739 00000 n +0000087223 00000 n +0000086861 00000 n +0000096318 00000 n +0000096063 00000 n +0000112201 00000 n +0000111816 00000 n +0000121612 00000 n +0000121352 00000 n +0000127669 00000 n +0000127451 00000 n +0000128244 00000 n +0000128314 00000 n +0000130051 00000 n +0000131711 00000 n +0000131750 00000 n +0000131788 00000 n +0000131917 00000 n trailer << /Size 301 /Root 299 0 R /Info 300 0 R -/ID [ ] +/ID [<8AEBC1FCCADD8D71CBEF5E0E60CFF503> <8AEBC1FCCADD8D71CBEF5E0E60CFF503>] >> startxref -132057 +132230 %%EOF Modified: trunk/numpy/doc/swig/numpy_swig.txt =================================================================== --- trunk/numpy/doc/swig/numpy_swig.txt 2007-04-10 02:40:06 UTC (rev 3689) +++ trunk/numpy/doc/swig/numpy_swig.txt 2007-04-10 15:21:28 UTC (rev 3690) @@ -421,6 +421,10 @@ Evaluates to the ``i``-th dimension size of ``a``, assuming ``a`` can be cast to a ``PyArrayObject*``. + **array_data(a)** + Evaluates to a pointer of type ``void*`` that points to the data + buffer of ``a``, assuming ``a`` can be cast to a ``PyArrayObject*``. + **array_is_contiguous(a)** Evaluates as true if ``a`` is a contiguous array. Equivalent to ``(PyArray_ISCONTIGUOUS(a))``. From numpy-svn at scipy.org Tue Apr 10 11:44:20 2007 From: numpy-svn at scipy.org (numpy-svn at scipy.org) Date: Tue, 10 Apr 2007 10:44:20 -0500 (CDT) Subject: [Numpy-svn] r3691 - trunk/numpy/doc/swig Message-ID: <20070410154420.4543839C0CF@new.scipy.org> Author: wfspotz at sandia.gov Date: 2007-04-10 10:44:17 -0500 (Tue, 10 Apr 2007) New Revision: 3691 Modified: trunk/numpy/doc/swig/numpy.i Log: Changed remaining ->nd struct accesses to use array_numdims() macro Modified: trunk/numpy/doc/swig/numpy.i =================================================================== --- trunk/numpy/doc/swig/numpy.i 2007-04-10 15:21:28 UTC (rev 3690) +++ trunk/numpy/doc/swig/numpy.i 2007-04-10 15:44:17 UTC (rev 3691) @@ -690,7 +690,7 @@ || !require_native(array)) SWIG_fail; $1 = (DATA_TYPE*) array_data(array); $2 = 1; - for (int i=0; ind; ++i) $2 *= array_size(array,i); + for (int i=0; i < array_numdims(array); ++i) $2 *= array_size(array,i); } /* Typemap suite for (DIM_TYPE DIM1, DATA_TYPE* INPLACE_ARRAY1) @@ -708,7 +708,7 @@ if (!array || !require_dimensions(array,1) || !require_contiguous(array) || !require_native(array)) SWIG_fail; $1 = 1; - for (int i=0; ind; ++i) $1 *= array_size(array,i); + for (int i=0; i < array_numdims(array); ++i) $1 *= array_size(array,i); $2 = (DATA_TYPE*) array_data(array); } From numpy-svn at scipy.org Tue Apr 10 12:56:10 2007 From: numpy-svn at scipy.org (Canadian Doctor Katina) Date: Tue, 10 Apr 2007 11:56:10 -0500 (CDT) Subject: [Numpy-svn] MedHelp 50276 Message-ID: <20070410055604.4437.qmail@TonyCatt> An HTML attachment was scrubbed... URL: From numpy-svn at scipy.org Tue Apr 10 13:55:03 2007 From: numpy-svn at scipy.org (numpy-svn at scipy.org) Date: Tue, 10 Apr 2007 12:55:03 -0500 (CDT) Subject: [Numpy-svn] r3692 - in branches/multicore: benchmarks numpy/core numpy/core/cprops_thread numpy/core/cprops_thread/tests numpy/core/include/numpy numpy/core/src numpy/core/tests Message-ID: <20070410175503.29E3239C00A@new.scipy.org> Author: eric Date: 2007-04-10 12:54:59 -0500 (Tue, 10 Apr 2007) New Revision: 3692 Added: branches/multicore/benchmarks/time_thread.py branches/multicore/numpy/core/cprops_thread/ branches/multicore/numpy/core/cprops_thread/README_ERIC.txt branches/multicore/numpy/core/cprops_thread/ThreadMakefile branches/multicore/numpy/core/cprops_thread/ThreadMakefile.unix branches/multicore/numpy/core/cprops_thread/ThreadMakefile.windows branches/multicore/numpy/core/cprops_thread/VERSION branches/multicore/numpy/core/cprops_thread/collection.c branches/multicore/numpy/core/cprops_thread/collection.h branches/multicore/numpy/core/cprops_thread/common.h branches/multicore/numpy/core/cprops_thread/configure.bat branches/multicore/numpy/core/cprops_thread/configure.in branches/multicore/numpy/core/cprops_thread/cp_config.h branches/multicore/numpy/core/cprops_thread/hashlist.c branches/multicore/numpy/core/cprops_thread/hashlist.h branches/multicore/numpy/core/cprops_thread/hashtable.c branches/multicore/numpy/core/cprops_thread/hashtable.h branches/multicore/numpy/core/cprops_thread/linked_list.c branches/multicore/numpy/core/cprops_thread/linked_list.h branches/multicore/numpy/core/cprops_thread/log.c branches/multicore/numpy/core/cprops_thread/log.h branches/multicore/numpy/core/cprops_thread/mempool.c branches/multicore/numpy/core/cprops_thread/mempool.h branches/multicore/numpy/core/cprops_thread/rb.c branches/multicore/numpy/core/cprops_thread/rb.h branches/multicore/numpy/core/cprops_thread/tests/ branches/multicore/numpy/core/cprops_thread/tests/main.c branches/multicore/numpy/core/cprops_thread/thread.c branches/multicore/numpy/core/cprops_thread/thread.h branches/multicore/numpy/core/cprops_thread/vector.c branches/multicore/numpy/core/cprops_thread/vector.h branches/multicore/numpy/core/include/numpy/ufuncthreadapi.h branches/multicore/numpy/core/src/ufuncthreadapi.c branches/multicore/numpy/core/tests/test_threadapi.py branches/multicore/numpy/core/threadapi.py Modified: branches/multicore/numpy/core/__init__.py branches/multicore/numpy/core/include/numpy/ndarrayobject.h branches/multicore/numpy/core/setup.py branches/multicore/numpy/core/src/ufuncobject.c branches/multicore/numpy/core/src/umathmodule.c.src Log: Multiple svk updates that added threading support for contiguous vector math operations in numpy r2039 at monster: eric | 2007-04-05 12:14:02 -0500 made local version of numpy r2040 at monster: eric | 2007-04-05 12:37:10 -0500 added first cut of vector threading api to umath module. These methods mainly manage the state of how vector threading is done. r2041 at monster: eric | 2007-04-05 13:54:47 -0500 added cprops_thread library that is used for a pre-release version of the vecto r thread support r2042 at monster: eric | 2007-04-05 14:10:41 -0500 changed file names so tests for thread api are detected automatically. r2046 at monster: eric | 2007-04-05 17:39:22 -0500 slightly better benchmarking code r2047 at monster: eric | 2007-04-05 17:54:11 -0500 various threading cleanups r2048 at monster: eric | 2007-04-05 18:05:23 -0500 util methods not really needed. commented out unused methods the accessed them. r2049 at monster: eric | 2007-04-05 18:06:01 -0500 moved util files for the time being r2050 at monster: eric | 2007-04-05 18:12:39 -0500 removing unneeded dependency on util.h in cprops_thread r2051 at monster: eric | 2007-04-06 12:57:26 -0500 further removal of 'extra cruft' from cprops. We now have a very minimal set o f dependencies that should make it easy to build on most platforms. r2052 at monster: eric | 2007-04-06 12:58:12 -0500 Added a couple of platform specific makefiles. r2053 at monster: eric | 2007-04-06 12:59:05 -0500 added a tests directory r2054 at monster: eric | 2007-04-06 13:00:07 -0500 moved main example to the tests directory r2055 at monster: eric | 2007-04-06 13:00:38 -0500 updated main.c so that sleep (sorta) works on windows. r2056 at monster: eric | 2007-04-06 13:03:27 -0500 deleted a number of files not used in minimal set of cprops. r2057 at monster: eric | 2007-04-06 15:04:18 -0500 This vresion compiles on Linux, shows threading speed-up in benchmarks, and pas ses the regression tests r2058 at monster: eric | 2007-04-06 18:56:29 -0500 working with gcc on windows. r2072 at monster: eric | 2007-04-09 17:57:30 -0500 update to work on linux r2078 at monster: eric | 2007-04-09 20:42:52 -0500 removed _WINDOWS macro in favor of _WIN32 that is automatically defined on the windows platform (what about win64??? Is it defined there?) Added: branches/multicore/benchmarks/time_thread.py =================================================================== --- branches/multicore/benchmarks/time_thread.py 2007-04-10 15:44:17 UTC (rev 3691) +++ branches/multicore/benchmarks/time_thread.py 2007-04-10 17:54:59 UTC (rev 3692) @@ -0,0 +1,48 @@ +import numpy +import timeit + + +def run_trial(array_sizes, code, init_template, repeats=1): + results = [] + for size in array_sizes: + timer = timeit.Timer(code,init_template%(size,size)) + # limit the number of iterations that are run to 10000. + iters = int(min(array_sizes[-1]/size,1e3)) + results.append(min(timer.repeat(repeats,iters))) + + return numpy.array(results) + +def compare_threads(code, init_template, thread_counts, array_sizes=None): + + if array_sizes is None: + array_sizes = [1e3, 1e4, 1e5, 1e6, 1e7, 1e8] + + use_threads = [0] + [1]*len(thread_counts) + thread_counts = [1] + thread_counts + element_threshold = [1] * len(thread_counts) + thread_settings = zip(use_threads, thread_counts, element_threshold) + + results = [] + numpy.set_printoptions(precision=2) + for i, settings in enumerate(thread_settings): + numpy.setthreading(*settings) + times = run_trial(array_sizes, code, init_template, repeats=3) + results.append(times) + speed_up = results[0]/times + if i == 0: + print 'times:', times + # print out the speed up along with the thread settings. + print code, settings[0], settings[1], speed_up + + return results + +init_template = "from numpy import ones, sin, cos, sqrt, arctanh;a=ones(%f);b=ones(%f)" +mult = "a*b" +dist = "sqrt(a*a+b*b)" +finite_difference = "b[:1] * a[1:] - a[:-1]" +trig = "sin(a);" +trig_expr = "sin(a)+cos(b);" + +for code in [mult, dist, finite_difference, trig, trig_expr]: + compare_threads(code, init_template, [1,2,4,8], [1e4, 2e4, 5e4, 1e5, 2e5, 5e5, 1e6, 1e7]) + #compare_threads([1,2,4,8], [1e7]) Property changes on: branches/multicore/benchmarks/time_thread.py ___________________________________________________________________ Name: svn:executable + * Modified: branches/multicore/numpy/core/__init__.py =================================================================== --- branches/multicore/numpy/core/__init__.py 2007-04-10 15:44:17 UTC (rev 3691) +++ branches/multicore/numpy/core/__init__.py 2007-04-10 17:54:59 UTC (rev 3692) @@ -17,6 +17,8 @@ from memmap import * from defchararray import * import scalarmath +import threadapi +from threadapi import * del nt from fromnumeric import amax as max, amin as min, \ @@ -29,6 +31,7 @@ __all__ += defmatrix.__all__ __all__ += rec.__all__ __all__ += char.__all__ +__all__ += threadapi.__all__ Added: branches/multicore/numpy/core/cprops_thread/README_ERIC.txt =================================================================== --- branches/multicore/numpy/core/cprops_thread/README_ERIC.txt 2007-04-10 15:44:17 UTC (rev 3691) +++ branches/multicore/numpy/core/cprops_thread/README_ERIC.txt 2007-04-10 17:54:59 UTC (rev 3692) @@ -0,0 +1,21 @@ +This is a stripped down version of libcprops. It only has the files in it necessary for building the thread pool library. + +./configure doesn't work because it is expecting some other files that aren't around. + +To build use: + +make -f ThreadMakefile + +I've edited the Makefile to only build the needed library files as well as a simple main file that tests it. + +To test, run: + +time ./main + +Todo: + + * How much of the config.h file is really needed? + * If we can get rid of log.c, we also get rid of str.c. These guys use a lot of the unix specific stuff. + How much of log.c do we use? + * Is it possible to get setup.py to do all the configuration we need? + Added: branches/multicore/numpy/core/cprops_thread/ThreadMakefile =================================================================== --- branches/multicore/numpy/core/cprops_thread/ThreadMakefile 2007-04-10 15:44:17 UTC (rev 3691) +++ branches/multicore/numpy/core/cprops_thread/ThreadMakefile 2007-04-10 17:54:59 UTC (rev 3692) @@ -0,0 +1,333 @@ +# libcprops - c prototyping tools Makefile +# +# This is the Makefile for libcprops - c prototyping tools. If it has the name +# "Makefile.in" then it is a template for a Makefile; to generate the actual +# Makefile, run "./configure", which is a configuration script generated by the +# "autoconf" program (constructs like "@foo@" will get replaced in the actual +# Makefile. +# +# Copyright (c) 2005, 2006 by Ilan Aelion +# iaelion at users.sourceforge.net +# +# 2006-02-21 V 0.1.6 +# +############################################### + +srcdir = . +prefix = /usr/local +exec_prefix = ${prefix} + +subdirs = svc svc/cpsp + +CPROPSVERSION = 0.1.6 +CPROPSLIBVERSION = 10:0:0 + +# top_builddir is needed for the $(LIBTOOL) definition + +top_builddir := /home/eric/thread_software/libcprops-0.1.6 + +bindir = $(DESTDIR)${exec_prefix}/bin +libdir = $(DESTDIR)${exec_prefix}/lib +incdir = $(DESTDIR)${prefix}/include/cprops +mandir = $(DESTDIR)${prefix}/man +datadir = $(DESTDIR)${prefix}/share + +man3dir = $(mandir)/man3 + +# OPT_OBJS = db.o +OPT_OBJS = +OPT_TARGETS = +OPT_INSTALL= + +OBJS = log.o collection.o mempool.o vector.o str.o \ + linked_list.o hashtable.o \ + hashlist.o rb.o \ + thread.o $(OPT_OBJS) +LOBJS = $(OBJS:.o=.lo) +HEADER = cp_config.h common.h collection.h mempool.h log.h \ + vector.h str.h linked_list.h \ + hashtable.h hashlist.h rb.h \ + thread.h $(OPT_OBJS:.o=.h) + +TEST_SRC = testhttpsrv.c +TEST_OBJ = $(TEST_SRC:.c=.o) +TEST_BIN = $(TEST_SRC:.c=) + +CC = gcc +CFLAGS = -fPIC -D_REENTRANT -D_REENTRANT -D_GNU_SOURCE -O2 +SED = /bin/sed +DEFS = -DHAVE_CONFIG_H +LDFLAGS = -L/usr/lib +LIBS = -ldl -lpthread +LIBTOOL = $(SHELL) $(top_builddir)/libtool +SHELL = /bin/sh + +MAKEDEPEND = /home/eric/thread_software/libcprops-0.1.6/makedepend.sh + +INSTALL = /usr/bin/install -c +INSTALL_PROGRAM = ${INSTALL} +INSTALL_DATA = ${INSTALL} -m 644 + +PGSQL_SRC= +PGSQL_OBJ= +PGSQL_HDR= +PGSQL_CFLAGS= +PGSQL_LDFLAGS= +PGSQL_LIBS= +CP_DBMS_PGSQL_LIBVERSION= + +MYSQL_SRC= +MYSQL_OBJ= +MYSQL_HDR= +MYSQL_CFLAGS= +MYSQL_LDFLAGS= +MYSQL_LIBS= +CP_DBMS_MYSQL_LIBVERSION= + +DEPEND=$(MAKEDEPEND) $(CFLAGS) + + +main: libcprops.a main.c + $(CC) $(CFLAGS) main.c $(LIBS) $(LDFLAGS) -L. -lcprops -o main + +all_old: libcprops.la $(OPT_TARGETS) $(subdirs) + +.PHONY: all $(subdirs) clean clean-recursive distclean distclean-recursive \ + install install-libcprops install-recursive \ + uninstall uninstall-recursive \ + install-libcp-dbms-postgres install-libcp-dbms-mysql + +libcprops.a: $(OBJS) + ar cru libcprops.a $(OBJS) + +$(subdirs): + (cd $@ && $(MAKE) || fail=yes; cd $(top_builddir); test -z "$$fail") + + +libcprops.la: $(OBJS) + $(LIBTOOL) --mode=link $(CC) $(CFLAGS) -rpath $(libdir) \ + -version-info '$(CPROPSLIBVERSION)' -export-dynamic \ + -o libcprops.la $(LOBJS) + +$(PGSQL_OBJ): $(PGSQL_SRC) $(PGSQL_HDR) + $(LIBTOOL) --mode=compile $(CC) $(PGSQL_CFLAGS) $(DEFS) -c $(PGSQL_SRC) + +libcp_dbms_postgres.la: libcprops.la $(PGSQL_OBJ) + $(LIBTOOL) --mode=link $(CC) $(PGSQL_CFLAGS) -rpath $(libdir) \ + -version-info '$(CP_DBMS_PGSQL_LIBVERSION)' -export-dynamic \ + $(PGSQL_LDFLAGS) -o libcp_dbms_postgres.la $(PGSQL_OBJ:.o=.lo) \ + $(PGSQL_LIBS) + +db_mysql.o: db_mysql.c db_mysql.h + $(LIBTOOL) --mode=compile $(CC) $(MYSQL_CFLAGS) $(DEFS) -c $< + +libcp_dbms_mysql.la: libcprops.la db_mysql.o + $(LIBTOOL) --mode=link $(CC) $(MYSQL_CFLAGS) -rpath $(libdir) \ + -version-info '$(CP_DBMS_MYSQL_LIBVERSION)' -export-dynamic \ + $(MYSQL_LDFLAGS) -o libcp_dbms_mysql.la $(MYSQL_OBJ:.o=.lo) \ + $(MYSQL_LIBS) + +test: $(TEST_BIN) + +$(TEST_BIN): $(TEST_OBJ) all + $(CC) $(CFLAGS) -L .libs $(LDFLAGS) -o $@ $(@:=).o -lcprops $(LIBS) + +$(TEST_OBJ): $(TEST_SRC) + $(CC) $(CFLAGS) -c $(LDFLAGS) -o $@ $(@:.o=.c) + +.c.o: + #$(LIBTOOL) --mode compile $(CC) $(CFLAGS) $(DEFS) -c $< + $(CC) $(CFLAGS) $(DEFS) -c $< + +install: install-libcprops $(OPT_INSTALL) install-recursive + +install-libcp-dbms-postgres: all installdirs + @echo "installing postgres dbms driver libcp_dbms_postgres.so" + $(LIBTOOL) --mode=install $(INSTALL) libcp_dbms_postgres.la \ + $(libdir)/libcp_dbms_postgres.la + @$(INSTALL_DATA) $(PGSQL_HDR) $(incdir) + $(LIBTOOL) --finish $(libdir) + +install-libcp-dbms-mysql: all installdirs + @echo "installing mysql dbms driver libcp_dbms_mysql.so" + $(LIBTOOL) --mode=install $(INSTALL) libcp_dbms_mysql.la \ + $(libdir)/libcp_dbms_mysql.la + @$(INSTALL_DATA) $(MYSQL_HDR) $(incdir) + $(LIBTOOL) --finish $(libdir) + +install-libcprops: all installdirs + @echo "Installing libcprops" + $(LIBTOOL) --mode=install $(INSTALL) libcprops.la $(libdir)/libcprops.la + @$(INSTALL_DATA) $(HEADER) $(incdir) + @ls man3/ | grep -v CVS | sed 's/^/man3\//' > .manpages + @$(INSTALL_DATA) `cat .manpages` $(man3dir) + rm -f .manpages + $(LIBTOOL) --finish $(libdir) + +installdirs: + $(SHELL) ${srcdir}/mkinstalldirs $(libdir) $(man3dir) $(incdir) + +install-recursive: + @list='$(subdirs)'; \ + for subdir in $$list; do \ + (cd $$subdir && $(MAKE) install) || fail=yes; \ + done; \ + test -z "$$fail" + +uninstall: uninstall-recursive + @echo "Uninstalling libcprops" + $(LIBTOOL) --mode=uninstall $(libdir) + @echo removing header files + if [ -d $(incdir) ]; then \ + pushd $(incdir) ; \ + rm -f $(HEADER) ; \ + popd; \ + fi + @echo removing man pages + ls man3/ | grep -v CVS | sed "s|^|$(man3dir)/|" > .manpages + rm -f `cat .manpages` + rm -f .manpages + +uninstall-recursive: + @list='$(subdirs)'; \ + for subdir in $$list; do \ + (cd $$subdir && $(MAKE) uninstall) || fail=yes; \ + done; \ + test -z "$$fail" + +clean: clean-recursive + rm -rf core* *.o *.lo *.loT *.la *.so *.a .libs/* $(TEST_BIN) test*.log + +clean-recursive: + @list='$(subdirs)'; \ + for subdir in $$list; do \ + (cd $$subdir && $(MAKE) clean) || fail=yes; \ + done; \ + test -z "$$fail" + +distclean: clean + rm -rf Makefile config.cache cp_config.h config.log config.status autom4te.cache aclocal.m4 libtool + +$(OBJS): Makefile + +depend: $(OBJS:.o=.c) + @$(DEPEND) $(OBJS:.o=.c) > /dev/null 2>&1 +# DO NOT DELETE + +util.o: cp_config.h +util.o: common.h +util.o: log.h +util.o: str.h +log.o: log.h +log.o: common.h +log.o: str.h +log.o: cp_config.h +log.o: hashtable.h +log.o: collection.h +collection.o: collection.h +collection.o: common.h +collection.o: log.h +collection.o: str.h +collection.o: cp_config.h +mempool.o: mempool.h +mempool.o: common.h +mempool.o: collection.h +mempool.o: log.h +mempool.o: str.h +mempool.o: cp_config.h +mempool.o: rb.h +mempool.o: vector.h +mempool.o: hashtable.h +vector.o: log.h +vector.o: common.h +vector.o: str.h +vector.o: cp_config.h +str.o: str.h +str.o: common.h +str.o: cp_config.h +str.o: log.h +linked_list.o: linked_list.h +linked_list.o: common.h +linked_list.o: cp_config.h +linked_list.o: collection.h +linked_list.o: log.h +linked_list.o: str.h +linked_list.o: mempool.h +linked_list.o: rb.h +linked_list.o: vector.h +linked_list.o: hashtable.h +heap.o: heap.h +heap.o: cp_config.h +heap.o: common.h +heap.o: collection.h +heap.o: log.h +heap.o: str.h +priority_list.o: collection.h +priority_list.o: common.h +priority_list.o: log.h +priority_list.o: str.h +priority_list.o: cp_config.h +priority_list.o: priority_list.h +priority_list.o: linked_list.h +priority_list.o: mempool.h +priority_list.o: rb.h +priority_list.o: vector.h +priority_list.o: hashtable.h +hashtable.o: hashtable.h +hashtable.o: common.h +hashtable.o: collection.h +hashtable.o: log.h +hashtable.o: str.h +hashtable.o: cp_config.h +hashtable.o: linked_list.h +hashtable.o: mempool.h +hashtable.o: rb.h +hashtable.o: vector.h +hashtable.o: thread.h +hashtable.o: hashlist.h +hashlist.o: collection.h +hashlist.o: common.h +hashlist.o: log.h +hashlist.o: str.h +hashlist.o: cp_config.h +hashlist.o: hashlist.h +hashlist.o: hashtable.h +hashlist.o: linked_list.h +hashlist.o: mempool.h +hashlist.o: rb.h +hashlist.o: vector.h +mtab.o: mtab.h +mtab.o: common.h +mtab.o: cp_config.h +rb.o: collection.h +rb.o: common.h +rb.o: log.h +rb.o: str.h +rb.o: cp_config.h +rb.o: vector.h +rb.o: rb.h +rb.o: mempool.h +rb.o: hashtable.h +sorted_hash.o: collection.h +sorted_hash.o: common.h +sorted_hash.o: log.h +sorted_hash.o: str.h +sorted_hash.o: cp_config.h +sorted_hash.o: vector.h +sorted_hash.o: sorted_hash.h +sorted_hash.o: mempool.h +sorted_hash.o: rb.h +sorted_hash.o: hashtable.h +nary.o: vector.h +thread.o: thread.h +thread.o: common.h +thread.o: cp_config.h +thread.o: collection.h +thread.o: log.h +thread.o: str.h +thread.o: linked_list.h +thread.o: mempool.h +thread.o: rb.h +thread.o: vector.h +thread.o: hashtable.h +thread.o: hashlist.h Property changes on: branches/multicore/numpy/core/cprops_thread/ThreadMakefile ___________________________________________________________________ Name: svn:executable + * Added: branches/multicore/numpy/core/cprops_thread/ThreadMakefile.unix =================================================================== --- branches/multicore/numpy/core/cprops_thread/ThreadMakefile.unix 2007-04-10 15:44:17 UTC (rev 3691) +++ branches/multicore/numpy/core/cprops_thread/ThreadMakefile.unix 2007-04-10 17:54:59 UTC (rev 3692) @@ -0,0 +1,203 @@ +# libcprops - c prototyping tools Makefile +# +# This is the Makefile for libcprops - c prototyping tools. If it has the name +# "Makefile.in" then it is a template for a Makefile; to generate the actual +# Makefile, run "./configure", which is a configuration script generated by the +# "autoconf" program (constructs like "@foo@" will get replaced in the actual +# Makefile. +# +# Copyright (c) 2005, 2006 by Ilan Aelion +# iaelion at users.sourceforge.net +# +# 2006-02-21 V 0.1.6 +# +############################################### + +srcdir = . +prefix = /usr/local +exec_prefix = ${prefix} + +subdirs = + +CPROPSVERSION = 0.1.6 +CPROPSLIBVERSION = 10:0:0 + +# top_builddir is needed for the $(LIBTOOL) definition + +top_builddir := /home/eric/thread_software/libcprops-0.1.6 + +bindir = $(DESTDIR)${exec_prefix}/bin +libdir = $(DESTDIR)${exec_prefix}/lib +incdir = $(DESTDIR)${prefix}/include/cprops +mandir = $(DESTDIR)${prefix}/man +datadir = $(DESTDIR)${prefix}/share + +man3dir = $(mandir)/man3 + +# OPT_OBJS = db.o +OPT_OBJS = +OPT_TARGETS = +OPT_INSTALL= + +OBJS = log.o collection.o mempool.o vector.o linked_list.o hashtable.o \ + hashlist.o rb.o thread.o $(OPT_OBJS) +LOBJS = $(OBJS:.o=.lo) +HEADER = cp_config.h common.h collection.h mempool.h log.h \ + vector.h linked_list.h hashtable.h hashlist.h rb.h \ + thread.h $(OPT_OBJS:.o=.h) + +TEST_SRC = testhttpsrv.c +TEST_OBJ = $(TEST_SRC:.c=.o) +TEST_BIN = $(TEST_SRC:.c=) + +CC = gcc +CFLAGS = -fPIC -D_REENTRANT -D_GNU_SOURCE -O2 +SED = /bin/sed +DEFS = -DHAVE_CONFIG_H +LDFLAGS = +LIBS = -lpthread +SHELL = /bin/sh + +MAKEDEPEND = /home/eric/thread_software/libcprops-0.1.6/makedepend.sh + +INSTALL = /usr/bin/install -c +INSTALL_PROGRAM = ${INSTALL} +INSTALL_DATA = ${INSTALL} -m 644 + +PGSQL_SRC= +PGSQL_OBJ= +PGSQL_HDR= +PGSQL_CFLAGS= +PGSQL_LDFLAGS= +PGSQL_LIBS= +CP_DBMS_PGSQL_LIBVERSION= + +MYSQL_SRC= +MYSQL_OBJ= +MYSQL_HDR= +MYSQL_CFLAGS= +MYSQL_LDFLAGS= +MYSQL_LIBS= +CP_DBMS_MYSQL_LIBVERSION= + +DEPEND=$(MAKEDEPEND) $(CFLAGS) + + +main: libcprops.a main.c + $(CC) $(CFLAGS) $(DEFS) main.c -lcprops $(LIBS) $(LDFLAGS) -L. -o main + +all_old: libcprops.la $(OPT_TARGETS) $(subdirs) + +.PHONY: all $(subdirs) clean clean-recursive distclean distclean-recursive \ + install install-libcprops install-recursive \ + uninstall uninstall-recursive \ + install-libcp-dbms-postgres install-libcp-dbms-mysql + +libcprops.a: $(OBJS) + ar cru libcprops.a $(OBJS) + +$(subdirs): + (cd $@ && $(MAKE) || fail=yes; cd $(top_builddir); test -z "$$fail") + + + +test: $(TEST_BIN) + +$(TEST_BIN): $(TEST_OBJ) all + $(CC) $(CFLAGS) -L .libs $(LDFLAGS) -o $@ $(@:=).o -lcprops $(LIBS) + +$(TEST_OBJ): $(TEST_SRC) + $(CC) $(CFLAGS) -c $(LDFLAGS) -o $@ $(@:.o=.c) + +.c.o: + $(CC) $(CFLAGS) $(DEFS) -c $< + + +clean: clean-recursive + rm -rf core* *.o *.lo *.loT *.la *.so *.a .libs/* $(TEST_BIN) test*.log + +clean-recursive: + @list='$(subdirs)'; \ + for subdir in $$list; do \ + (cd $$subdir && $(MAKE) clean) || fail=yes; \ + done; \ + test -z "$$fail" + +distclean: clean + rm -rf Makefile config.cache cp_config.h config.log config.status autom4te.cache aclocal.m4 libtool + +#$(OBJS): Makefile + +depend: $(OBJS:.o=.c) + @$(DEPEND) $(OBJS:.o=.c) > /dev/null 2>&1 +# DO NOT DELETE + +log.o: log.h +log.o: common.h +log.o: cp_config.h +log.o: hashtable.h +log.o: collection.h +collection.o: collection.h +collection.o: common.h +collection.o: log.h +collection.o: cp_config.h +mempool.o: mempool.h +mempool.o: common.h +mempool.o: collection.h +mempool.o: log.h +mempool.o: cp_config.h +mempool.o: rb.h +mempool.o: vector.h +mempool.o: hashtable.h +vector.o: log.h +vector.o: common.h +vector.o: cp_config.h +linked_list.o: linked_list.h +linked_list.o: common.h +linked_list.o: cp_config.h +linked_list.o: collection.h +linked_list.o: log.h +linked_list.o: mempool.h +linked_list.o: rb.h +linked_list.o: vector.h +linked_list.o: hashtable.h +hashtable.o: hashtable.h +hashtable.o: common.h +hashtable.o: collection.h +hashtable.o: log.h +hashtable.o: cp_config.h +hashtable.o: linked_list.h +hashtable.o: mempool.h +hashtable.o: rb.h +hashtable.o: vector.h +hashtable.o: thread.h +hashtable.o: hashlist.h +hashlist.o: collection.h +hashlist.o: common.h +hashlist.o: log.h +hashlist.o: cp_config.h +hashlist.o: hashlist.h +hashlist.o: hashtable.h +hashlist.o: linked_list.h +hashlist.o: mempool.h +hashlist.o: rb.h +hashlist.o: vector.h +rb.o: collection.h +rb.o: common.h +rb.o: log.h +rb.o: cp_config.h +rb.o: vector.h +rb.o: rb.h +rb.o: mempool.h +rb.o: hashtable.h +thread.o: thread.h +thread.o: common.h +thread.o: cp_config.h +thread.o: collection.h +thread.o: log.h +thread.o: linked_list.h +thread.o: mempool.h +thread.o: rb.h +thread.o: vector.h +thread.o: hashtable.h +thread.o: hashlist.h Added: branches/multicore/numpy/core/cprops_thread/ThreadMakefile.windows =================================================================== --- branches/multicore/numpy/core/cprops_thread/ThreadMakefile.windows 2007-04-10 15:44:17 UTC (rev 3691) +++ branches/multicore/numpy/core/cprops_thread/ThreadMakefile.windows 2007-04-10 17:54:59 UTC (rev 3692) @@ -0,0 +1,208 @@ +# libcprops - c prototyping tools Makefile +# +# This is the Makefile for libcprops - c prototyping tools. If it has the name +# "Makefile.in" then it is a template for a Makefile; to generate the actual +# Makefile, run "./configure", which is a configuration script generated by the +# "autoconf" program (constructs like "@foo@" will get replaced in the actual +# Makefile. +# +# Copyright (c) 2005, 2006 by Ilan Aelion +# iaelion at users.sourceforge.net +# +# 2006-02-21 V 0.1.6 +# +############################################### + +srcdir = . +prefix = /usr/local +exec_prefix = ${prefix} + +subdirs = + +CPROPSVERSION = 0.1.6 +CPROPSLIBVERSION = 10:0:0 + +# top_builddir is needed for the $(LIBTOOL) definition + +top_builddir := /home/eric/thread_software/libcprops-0.1.6 + +bindir = $(DESTDIR)${exec_prefix}/bin +libdir = $(DESTDIR)${exec_prefix}/lib +incdir = $(DESTDIR)${prefix}/include/cprops +mandir = $(DESTDIR)${prefix}/man +datadir = $(DESTDIR)${prefix}/share + +man3dir = $(mandir)/man3 + +# OPT_OBJS = db.o +OPT_OBJS = +OPT_TARGETS = +OPT_INSTALL= + +OBJS = log.o collection.o mempool.o vector.o linked_list.o hashtable.o \ + hashlist.o rb.o thread.o $(OPT_OBJS) +LOBJS = $(OBJS:.o=.lo) +HEADER = cp_config.h common.h collection.h mempool.h log.h \ + vector.h linked_list.h hashtable.h hashlist.h rb.h \ + thread.h $(OPT_OBJS:.o=.h) + +TEST_SRC = testhttpsrv.c +TEST_OBJ = $(TEST_SRC:.c=.o) +TEST_BIN = $(TEST_SRC:.c=) + +CC = gcc +#CFLAGS = -D_REENTRANT -D_GNU_SOURCE -O2 +CFLAGS = -O2 +DEFS = -D_WINDOWS + +# msvcr71 -- provides sleep, but it is only used in main, not the library. +# wsock32 -- provides select +# iberty -- provides random, srandom, and a few others... +LDFLAGS = -lwsock32 -liberty -lmsvcr71 +LIBS = +LIBTOOL = $(SHELL) $(top_builddir)/libtool +SHELL = /bin/sh + +MAKEDEPEND = /home/eric/thread_software/libcprops-0.1.6/makedepend.sh + +INSTALL = /usr/bin/install -c +INSTALL_PROGRAM = ${INSTALL} +INSTALL_DATA = ${INSTALL} -m 644 + +PGSQL_SRC= +PGSQL_OBJ= +PGSQL_HDR= +PGSQL_CFLAGS= +PGSQL_LDFLAGS= +PGSQL_LIBS= +CP_DBMS_PGSQL_LIBVERSION= + +MYSQL_SRC= +MYSQL_OBJ= +MYSQL_HDR= +MYSQL_CFLAGS= +MYSQL_LDFLAGS= +MYSQL_LIBS= +CP_DBMS_MYSQL_LIBVERSION= + +DEPEND=$(MAKEDEPEND) $(CFLAGS) + + +main: libcprops.a main.c + $(CC) $(CFLAGS) $(DEFS) main.c -lcprops $(LIBS) $(LDFLAGS) -L. -o main + +all_old: libcprops.la $(OPT_TARGETS) $(subdirs) + +.PHONY: all $(subdirs) clean clean-recursive distclean distclean-recursive \ + install install-libcprops install-recursive \ + uninstall uninstall-recursive \ + install-libcp-dbms-postgres install-libcp-dbms-mysql + +libcprops.a: $(OBJS) + ar cru libcprops.a $(OBJS) + +$(subdirs): + (cd $@ && $(MAKE) || fail=yes; cd $(top_builddir); test -z "$$fail") + + + +test: $(TEST_BIN) + +$(TEST_BIN): $(TEST_OBJ) all + $(CC) $(CFLAGS) -L .libs $(LDFLAGS) -o $@ $(@:=).o -lcprops $(LIBS) + +$(TEST_OBJ): $(TEST_SRC) + $(CC) $(CFLAGS) -c $(LDFLAGS) -o $@ $(@:.o=.c) + +.c.o: + $(CC) $(CFLAGS) $(DEFS) -c $< + + +clean: clean-recursive + rm -rf core* *.o *.lo *.loT *.la *.so *.a .libs/* $(TEST_BIN) test*.log + +clean-recursive: + @list='$(subdirs)'; \ + for subdir in $$list; do \ + (cd $$subdir && $(MAKE) clean) || fail=yes; \ + done; \ + test -z "$$fail" + +distclean: clean + rm -rf Makefile config.cache cp_config.h config.log config.status autom4te.cache aclocal.m4 libtool + +#$(OBJS): Makefile + +depend: $(OBJS:.o=.c) + @$(DEPEND) $(OBJS:.o=.c) > /dev/null 2>&1 +# DO NOT DELETE + +log.o: log.h +log.o: common.h +log.o: cp_config.h +log.o: hashtable.h +log.o: collection.h +collection.o: collection.h +collection.o: common.h +collection.o: log.h +collection.o: cp_config.h +mempool.o: mempool.h +mempool.o: common.h +mempool.o: collection.h +mempool.o: log.h +mempool.o: cp_config.h +mempool.o: rb.h +mempool.o: vector.h +mempool.o: hashtable.h +vector.o: log.h +vector.o: common.h +vector.o: cp_config.h +linked_list.o: linked_list.h +linked_list.o: common.h +linked_list.o: cp_config.h +linked_list.o: collection.h +linked_list.o: log.h +linked_list.o: mempool.h +linked_list.o: rb.h +linked_list.o: vector.h +linked_list.o: hashtable.h +hashtable.o: hashtable.h +hashtable.o: common.h +hashtable.o: collection.h +hashtable.o: log.h +hashtable.o: cp_config.h +hashtable.o: linked_list.h +hashtable.o: mempool.h +hashtable.o: rb.h +hashtable.o: vector.h +hashtable.o: thread.h +hashtable.o: hashlist.h +hashlist.o: collection.h +hashlist.o: common.h +hashlist.o: log.h +hashlist.o: cp_config.h +hashlist.o: hashlist.h +hashlist.o: hashtable.h +hashlist.o: linked_list.h +hashlist.o: mempool.h +hashlist.o: rb.h +hashlist.o: vector.h +rb.o: collection.h +rb.o: common.h +rb.o: log.h +rb.o: cp_config.h +rb.o: vector.h +rb.o: rb.h +rb.o: mempool.h +rb.o: hashtable.h +thread.o: thread.h +thread.o: common.h +thread.o: cp_config.h +thread.o: collection.h +thread.o: log.h +thread.o: linked_list.h +thread.o: mempool.h +thread.o: rb.h +thread.o: vector.h +thread.o: hashtable.h +thread.o: hashlist.h Added: branches/multicore/numpy/core/cprops_thread/VERSION =================================================================== --- branches/multicore/numpy/core/cprops_thread/VERSION 2007-04-10 15:44:17 UTC (rev 3691) +++ branches/multicore/numpy/core/cprops_thread/VERSION 2007-04-10 17:54:59 UTC (rev 3692) @@ -0,0 +1,2 @@ +0.1.6 +10:0:0 Added: branches/multicore/numpy/core/cprops_thread/collection.c =================================================================== --- branches/multicore/numpy/core/cprops_thread/collection.c 2007-04-10 15:44:17 UTC (rev 3691) +++ branches/multicore/numpy/core/cprops_thread/collection.c 2007-04-10 17:54:59 UTC (rev 3692) @@ -0,0 +1,282 @@ +#include +#include "collection.h" + +cp_wrap *cp_wrap_new(void *item, cp_destructor_fn dtr) +{ +/* + cp_wrap *wrap = calloc(1, sizeof(cp_wrap)); + if (wrap) + { + wrap->item = item; + wrap->dtr = dtr; + } + + return wrap; +*/ +} + +void cp_wrap_delete(cp_wrap *wrap) +{ + if (wrap) + { + if (wrap->dtr) + (*wrap->dtr)(wrap->item); + + free(wrap); + } +} + +#ifdef _WINDOWS +BOOL APIENTRY DllMain( HANDLE hModule, + DWORD ul_reason_for_call, + LPVOID lpReserved + ) +{ + switch (ul_reason_for_call) + { + case DLL_PROCESS_ATTACH: + case DLL_THREAD_ATTACH: + case DLL_THREAD_DETACH: + case DLL_PROCESS_DETACH: + break; + } + return TRUE; +} + +/* WIN32 implementation of cp_mutex_init */ +int cp_mutex_init(cp_mutex *mutex, void *attr) +{ + *mutex = CreateMutex((attr), FALSE, NULL); + return *mutex == NULL; +} + +/* WIN32 implementation of read-write locks. cp_lock is not upgradeable. */ + +int cp_lock_init(cp_lock *lock, void *attr) +{ + SECURITY_ATTRIBUTES sec_attr; + sec_attr.nLength = sizeof(SECURITY_ATTRIBUTES); + sec_attr.lpSecurityDescriptor = NULL; + sec_attr.bInheritHandle = FALSE; + + lock->access_mutex = CreateMutex(&sec_attr, FALSE, NULL); +// lock->write_mutex = CreateMutex(&sec_attr, FALSE, NULL); + lock->readers = 0; + lock->writer = 0; + lock->writer_waiting = 0; + + return 0; +} + +int cp_lock_rdlock(cp_lock *lock) +{ + while (1) + { + WaitForSingleObject(lock->access_mutex, INFINITE); + if (lock->writer_waiting) + ReleaseMutex(lock->access_mutex); + else + break; + } + lock->readers++; + ReleaseMutex(lock->access_mutex); + + return 0; +} + +int cp_lock_wrlock(cp_lock *lock) +{ + if (lock->writer == GetCurrentThreadId()) return 0; + + while (1) + { + WaitForSingleObject(lock->access_mutex, INFINITE); + lock->writer_waiting = 1; + if (lock->readers) + ReleaseMutex(lock->access_mutex); + else + break; + } + + lock->writer = GetCurrentThreadId(); + lock->writer_waiting = 0; + + return 0; +} + +int cp_lock_unlock(cp_lock *lock) +{ + if (lock->writer == GetCurrentThreadId()) + lock->writer = 0; + else + { + WaitForSingleObject(lock->access_mutex, INFINITE); + lock->readers--; + } + + ReleaseMutex(lock->access_mutex); + return 0; +} + +int cp_lock_destroy(cp_lock *lock) +{ + CloseHandle(lock->access_mutex); + return 0; +} + +/* WIN32 implementation of a basic POSIX-condition-variable-like API + * + * based on "Strategies for Implementing POSIX Condition Variables on WIN32" + * by Douglas C. Schmidt and Irfan Pyarali - + * see http://www.cs.wustl.edu/~schmidt/WIN32-cv-1.html + */ +int cp_cond_init(cp_cond *cv, const void *attr) // pthread_condattr_t *) +{ + cv->waiters_count_ = 0; + cv->was_broadcast_ = 0; + cv->sema_ = CreateSemaphore (NULL, // no security + 0, // initially 0 + 0x7fffffff, // max count + NULL); // unnamed + if (cv->sema_ == NULL) return -1; + InitializeCriticalSection (&cv->waiters_count_lock_); + cv->waiters_done_ = CreateEvent (NULL, // no security + FALSE, // auto-reset + FALSE, // non-signaled initially + NULL); // unnamed + if (cv->waiters_done_ == NULL) return -1; + + return 0; +} + +int cp_cond_destroy(cp_cond *cv) +{ + if (cv) + { + CloseHandle(cv->sema_); + DeleteCriticalSection(&cv->waiters_count_lock_); + CloseHandle(cv->waiters_done_); + return 0; + } + + return -1; +} + +int cp_cond_wait(cp_cond *cv, cp_mutex *external_mutex) +{ + int last_waiter; +//printf(" <<< cond_wait: starting\n"); + // Avoid race conditions. + EnterCriticalSection (&cv->waiters_count_lock_); + cv->waiters_count_++; + LeaveCriticalSection (&cv->waiters_count_lock_); + +//printf("cond: calling SignalObjectAndWait\n"); + // This call atomically releases the mutex and waits on the + // semaphore until or + // are called by another thread. + SignalObjectAndWait (*external_mutex, cv->sema_, INFINITE, FALSE); +//printf("cond: popped wait\n"); + + // Reacquire lock to avoid race conditions. + EnterCriticalSection (&cv->waiters_count_lock_); + + // We're no longer waiting... + cv->waiters_count_--; + + // Check to see if we're the last waiter after . + last_waiter = cv->was_broadcast_ && cv->waiters_count_ == 0; + + LeaveCriticalSection (&cv->waiters_count_lock_); + + // If we're the last waiter thread during this particular broadcast + // then let all the other threads proceed. + if (last_waiter) + { +// printf("cond_wait: signaling waiters_done_\n"); + // This call atomically signals the event and waits until + // it can acquire the . This is required to ensure fairness. + SignalObjectAndWait (cv->waiters_done_, *external_mutex, INFINITE, FALSE); + } + else + { +// printf("cond_wait: grab external_mutex\n"); + // Always regain the external mutex since that's the guarantee we + // give to our callers. + WaitForSingleObject(*external_mutex, INFINITE); + } +//printf(" >>> cond_wait: done\n"); + return 0; +} + +int cp_cond_signal(cp_cond *cv) +{ + int have_waiters; + + EnterCriticalSection (&cv->waiters_count_lock_); +//printf("cp_cond_signal: %d waiters\n", cv->waiters_count_); + have_waiters = cv->waiters_count_ > 0; + LeaveCriticalSection (&cv->waiters_count_lock_); + + // If there aren't any waiters, then this is a no-op. + if (have_waiters) + ReleaseSemaphore (cv->sema_, 1, 0); + + return 0; +} + +int cp_cond_broadcast(cp_cond *cv) +{ + int have_waiters; + // This is needed to ensure that and are + // consistent relative to each other. + EnterCriticalSection (&cv->waiters_count_lock_); + have_waiters = 0; +//printf("cp_cond_broadcast: %d waiters\n", cv->waiters_count_); + if (cv->waiters_count_ > 0) { + // We are broadcasting, even if there is just one waiter... + // Record that we are broadcasting, which helps optimize + // for the non-broadcast case. + cv->was_broadcast_ = 1; + have_waiters = 1; + } + + if (have_waiters) { + // Wake up all the waiters atomically. + ReleaseSemaphore (cv->sema_, cv->waiters_count_, 0); + + LeaveCriticalSection (&cv->waiters_count_lock_); + + // Wait for all the awakened threads to acquire the counting + // semaphore. + WaitForSingleObject (cv->waiters_done_, INFINITE); + // This assignment is okay, even without the held + // because no other waiter threads can wake up to access it. + cv->was_broadcast_ = 0; + } + else + LeaveCriticalSection (&cv->waiters_count_lock_); + + return 0; +} + +void *cp_calloc(size_t count, size_t size) +{ + return calloc(count, size); +} + +void *cp_realloc(void *p, size_t size) +{ + return realloc(p, size); +} + +void *cp_malloc(size_t size) +{ + return malloc(size); +} + +void cp_free(void *p) +{ + free(p); +} +#endif /* _WINDOWS */ Added: branches/multicore/numpy/core/cprops_thread/collection.h =================================================================== --- branches/multicore/numpy/core/cprops_thread/collection.h 2007-04-10 15:44:17 UTC (rev 3691) +++ branches/multicore/numpy/core/cprops_thread/collection.h 2007-04-10 17:54:59 UTC (rev 3692) @@ -0,0 +1,262 @@ +#ifndef _CP_COLLECTION_H +#define _CP_COLLECTION_H + +#include "cp_config.h" +#include "common.h" + +__BEGIN_DECLS + +#ifdef CP_HAS_PTHREAD_H +#include +#endif + +#ifdef _WINDOWS +#undef _WIN32_WINNT +#define _WIN32_WINNT 0x0400 /* for SignalObjectAndWait */ +#include +#endif + +/** @{ */ +/** + * @file + * + * The c collection classes provide plain c implementations of famous data + * structures and algorithms such as linked lists, hash tables, hash lists and + * an extensible tree implementation (see graph.h). Behavior in terms of + * synchronization and member uniqueness may be set on initialization using the + * appropriate constructor function with the required flags. The default + * implementations are synchronized, and mostly allow mutliple values with the + * notable exception of the cp_hashtable and cp_hashlist collections which do + * not by default. Other subtle differences deriving from data structure + * characteristics or implentation inconsistencies would suggest reading the + * inline documentation in the header files for the specific collection you + * intend to use. + * + * This header file defines macros and function types used commonly throughout + * the package. + */ + +/** use collection defaults */ +#define COLLECTION_MODE_PLAIN 0 +/** collection copies and deletes elements (keys, values) */ +#define COLLECTION_MODE_DEEP 1 +/** collection allows non-unique keys */ +#define COLLECTION_MODE_MULTIPLE_VALUES 2 +/** collection stores copies of elements (keys, values) */ +#define COLLECTION_MODE_COPY 4 +/** no synchronization - suitable for the single threaded situation or if you + * want to do the synchronization yourself. */ +#define COLLECTION_MODE_NOSYNC 8 +/** + * The collection does not resize underlying hashtables. It might make sense + * to set this temporarily in code sections that shouldn't be unexpectedly + * slowed down by a resize operation, but resize should be allowed if the + * table fill factor is expected to go over ~70%, which is the point at which + * hashtable performace is rumored to start degrading. + */ +#define COLLECTION_MODE_NORESIZE 16 +/** + * hashlist multiple values are returned in list order (O(N)) rather than + * insertion order (O(1)) + */ +#define COLLECTION_MODE_LIST_ORDER 32 +/** + * indicates a transaction is in progress + */ +#define COLLECTION_MODE_IN_TRANSACTION 64 + +/** no lock */ +#define COLLECTION_LOCK_NONE 0 +/** lock for reading */ +#define COLLECTION_LOCK_READ 1 +/** lock for writing */ +#define COLLECTION_LOCK_WRITE 2 + +/** + * copy function. + * + * In cases where the collection holds copies rather than references to the + * original objects. To do this you need to provide a copy function for + * the items. + */ +typedef void *(*cp_copy_fn)(void *); + +/** + * destructor function. + */ +typedef void (*cp_destructor_fn)(void *); + +/** + * comparator functions implement strcmp semantics - 0 for identical keys, + * non-zero otherwise. + */ +typedef int (*cp_compare_fn)(void *, void *); + +/** + * callback function for iterator callback etc + */ +typedef int (*cp_callback_fn)(void *entry, void *client_prm); + +/** + * lock for collection types - current implementation uses pthread_rwlock_t + * + * _WINDOWS implementation for cp_cond is based on "Strategies for Implementing + * POSIX Condition Variables on _WINDOWS" by Douglas C. Schmidt and Irfan Pyarali + * see http://www.cs.wustl.edu/~schmidt/_WINDOWS-cv-1.html + */ +#ifdef CP_HAS_PTHREAD_H +typedef pthread_t cp_thread; +typedef pthread_rwlock_t cp_lock; +typedef pthread_mutex_t cp_mutex; +typedef pthread_cond_t cp_cond; +#define cp_thread_create(thread, attr, fn, prm) pthread_create(&(thread), attr, fn, prm) +#define cp_thread_join pthread_join +#define cp_thread_detach pthread_detach +#define cp_thread_self pthread_self +#define cp_mutex_init pthread_mutex_init +#define cp_mutex_lock pthread_mutex_lock +#define cp_mutex_unlock pthread_mutex_unlock +#define cp_mutex_destroy pthread_mutex_destroy +#define cp_cond_init pthread_cond_init +#define cp_cond_wait pthread_cond_wait +#define cp_cond_signal pthread_cond_signal +#define cp_cond_broadcast pthread_cond_broadcast +#define cp_cond_destroy pthread_cond_destroy +#define cp_lock_init pthread_rwlock_init +#define cp_lock_rdlock pthread_rwlock_rdlock +#define cp_lock_wrlock pthread_rwlock_wrlock +#define cp_lock_unlock pthread_rwlock_unlock +#define cp_lock_destroy pthread_rwlock_destroy +#define cp_thread_equal pthread_equal +#ifndef CP_HAS_PTHREAD_MUTEX_RECURSIVE +#ifdef CP_HAS_PTHREAD_MUTEX_RECURSIVE_NP +#define CP_HAS_PTHREAD_MUTEX_RECURSIVE CP_HAS_PTHREAD_MUTEX_RECURSIVE_NP +#endif /* CP_HAS_PTHREAD_MUTEX_RECURSIVE_NP */ +#endif /* CP_HAS_PTHREAD_MUTEX_RECURSIVE */ +#else +#ifdef _WINDOWS +typedef HANDLE cp_thread; +typedef HANDLE *cp_mutex; +#define cp_thread_create(thread, attr, fn, prm) \ + (((thread) = CreateThread(attr, 0, (LPTHREAD_START_ROUTINE) fn, prm, 0, NULL)) == NULL) +#define cp_thread_join(thread, exp) \ + { \ + cp_thread p = thread; \ + WaitForSingleObject(p, INFINITE); \ + } +#define cp_thread_detach +#define cp_thread_self GetCurrentThread +CPROPS_DLL +int cp_mutex_init(cp_mutex *mutex, void *attr); +#define cp_mutex_lock(mutex) (WaitForSingleObject((*(mutex)), INFINITE)) +#define cp_mutex_unlock(mutex) (ReleaseMutex(*(mutex))) +#define cp_mutex_destroy(mutex) (CloseHandle(*(mutex))) + +/* WIN32 implementation of a basic POSIX-condition-variable-like API + * + * based on "Strategies for Implementing POSIX Condition Variables on WIN32" + * by Douglas C. Schmidt and Irfan Pyarali - + * see http://www.cs.wustl.edu/~schmidt/WIN32-cv-1.html + */ +typedef CPROPS_DLL struct +{ + int waiters_count_; + // Number of waiting threads. + + CRITICAL_SECTION waiters_count_lock_; + // Serialize access to . + + HANDLE sema_; + // Semaphore used to queue up threads waiting for the condition to + // become signaled. + + HANDLE waiters_done_; + // An auto-reset event used by the broadcast/signal thread to wait + // for all the waiting thread(s) to wake up and be released from the + // semaphore. + + size_t was_broadcast_; + // Keeps track of whether we were broadcasting or signaling. This + // allows us to optimize the code if we're just signaling. +} cp_cond; + +CPROPS_DLL int cp_cond_init(cp_cond *cv, const void *attr); // pthread_condattr_t *) +CPROPS_DLL int cp_cond_wait(cp_cond *cv, cp_mutex *mutex); +CPROPS_DLL int cp_cond_signal(cp_cond *cv); +CPROPS_DLL int cp_cond_broadcast(cp_cond *cv); +CPROPS_DLL int cp_cond_destroy(cp_cond *cv); + +/* WIN32 implementation of a basic POSIX-read-write-lock-like API. cp_lock + * is not upgradeable, ie attempting to obtain the lock if the current + * thread already owns it causes deadlock. + */ +typedef CPROPS_DLL struct _cp_lock +{ + HANDLE access_mutex; +// HANDLE write_mutex; + + DWORD writer; + + int readers; + int writer_waiting; + +} cp_lock; + +CPROPS_DLL int cp_lock_init(cp_lock *lock, void *attr); +CPROPS_DLL int cp_lock_rdlock(cp_lock *lock); +CPROPS_DLL int cp_lock_wrlock(cp_lock *lock); +CPROPS_DLL int cp_lock_unlock(cp_lock *lock); +CPROPS_DLL int cp_lock_destroy(cp_lock *lock); + +#define cp_thread_equal(p, q) ((p) == (q)) +#endif +#endif + +typedef CPROPS_DLL struct _cp_wrap +{ + void *item; + cp_destructor_fn dtr; +} cp_wrap; + +CPROPS_DLL cp_wrap *cp_wrap_new(void *item, cp_destructor_fn dtr); +CPROPS_DLL void cp_wrap_delete(cp_wrap *wrap); + +typedef CPROPS_DLL struct _cp_mapping +{ + void *key; + void *value; +} cp_mapping; + +#define cp_mapping_key(m) ((m)->key) +#define cp_mapping_value(m) ((m)->value) + +typedef int (*cp_mapping_cmp_fn)(cp_mapping *a, cp_mapping *b); + +/* free an allocation made by a cprops api function. On Windows you can't just + * call free on memory allocated in a call to a DLL function. + */ +#ifdef _WINDOWS +CPROPS_DLL +void *cp_malloc(size_t size); +CPROPS_DLL +void *cp_calloc(size_t count, size_t size); +CPROPS_DLL +void *cp_realloc(void *p, size_t size); +CPROPS_DLL +void cp_free(void *p); +#else +#define cp_malloc malloc +#define cp_calloc calloc +#define cp_realloc realloc +#define cp_free free +#endif /* _WINDOWS */ + +struct _cp_mempool; +struct _cp_shared_mempool; + +__END_DECLS + +/** @} */ + +#endif + Added: branches/multicore/numpy/core/cprops_thread/common.h =================================================================== --- branches/multicore/numpy/core/cprops_thread/common.h 2007-04-10 15:44:17 UTC (rev 3691) +++ branches/multicore/numpy/core/cprops_thread/common.h 2007-04-10 17:54:59 UTC (rev 3692) @@ -0,0 +1,134 @@ +#ifndef _CP_COMMON_H +#define _CP_COMMON_H + +/** @{ */ +/** + * @file + * common symbols for cprops library -- mostly error codes + */ + +#ifdef __cplusplus +#ifndef __BEGIN_DECLS +#define __BEGIN_DECLS extern "C" { +#endif +#ifndef __END_DECLS +#define __END_DECLS } +#endif +#else +#ifndef __BEGIN_DECLS +#define __BEGIN_DECLS +#endif +#ifndef __END_DECLS +#define __END_DECLS +#endif +#endif + +#if defined(linux) || defined(__linux__) || defined (__linux) || defined(__gnu_linux__) +#ifndef _GNU_SOURCE +#define _GNU_SOURCE +#endif /* _GNU_SOURCE */ +#endif /* linux */ + +#ifdef __NetBSD__ +#ifndef __unix__ +#define __unix__ 1 +#endif /* __unix__ */ +#endif /* __NetBSD__ */ + +#ifdef _WINDOWS + +/* compatibility definitions */ +typedef int pid_t; + +#define SHUT_RD SD_RECEIVE +#define SHUT_WR SD_SEND +#define SHUT_RDWR SD_BOTH + +#define close closesocket + +// eric: done so that we aren't a dll. +#define CPROPS_DLL +//#ifdef CPROPS_EXPORTS +//#define CPROPS_DLL __declspec(dllexport) +//#else +//#define CPROPS_DLL __declspec(dllimport) +//#endif +#else /* _WINDOWS */ +#define CPROPS_DLL +#endif /* _WINDOWS */ + +#if (defined linux || defined __linux || defined __gnu_linux__) + +#ifndef _REENTRANT +#define _REENTRANT +#endif + +/* for pthread_rwlock_t et al. */ +#ifndef _XOPEN_SOURCE +#define _XOPEN_SOURCE 600 +#endif +#ifndef __USE_UNIX98 +#define __USE_UNIX98 +#endif + +#include + +#endif + +#define DEFAULT_LOGFILE "cp.log" +#if defined(unix) || defined(__unix__) || defined(__MACH__) +#define DEFAULT_TIME_FORMAT "%Y-%m-%d %T" +#else +#define DEFAULT_TIME_FORMAT "%Y-%m-%d %H:%M:%S" +#endif /* unix */ + /* error codes */ + +#define CP_MEMORY_ALLOCATION_FAILURE 10000 +#define CP_INVALID_FUNCTION_POINTER 10010 +#define CP_THREAD_CREATION_FAILURE 10020 + +#define CP_LOADLIB_FAILED 11010 +#define CP_LOADFN_FAILED 11020 +#define CP_MODULE_NOT_LOADED 11030 + +#define CP_IO_ERROR 12000 +#define CP_OPEN_PORT_FAILED 12010 +#define CP_HTTP_FETCH_FAILED 12020 +#define CP_INVALID_RESPONSE 12030 +#define CP_HTTP_EMPTY_REQUEST 12100 +#define CP_HTTP_INVALID_REQUEST_LINE 12110 +#define CP_HTTP_INVALID_STATUS_LINE 12111 +#define CP_HTTP_UNKNOWN_REQUEST_TYPE 12120 +#define CP_HTTP_INVALID_URI 12130 +#define CP_HTTP_INVALID_URL 12131 +#define CP_HTTP_VERSION_NOT_SPECIFIED 12140 +#define CP_HTTP_1_1_HOST_NOT_SPECIFIED 12150 +#define CP_HTTP_INCORRECT_REQUEST_BODY_LENGTH 12160 +#define CP_SSL_CTX_INITIALIZATION_ERROR 12200 +#define CP_SSL_HANDSHAKE_FAILED 12210 +#define CP_SSL_VERIFICATION_ERROR 12220 + +#define CP_LOG_FILE_OPEN_FAILURE 13000 +#define CP_LOG_NOT_OPEN 13010 + +#define CP_INVALID_VALUE 14000 +#define CP_MISSING_PARAMETER 14010 +#define CP_BAD_PARAMETER_SET 14020 +#define CP_ITEM_EXISTS 14030 +#define CP_UNHANDLED_SIGNAL 14040 +#define CP_FILE_NOT_FOUND 14050 +#define CP_METHOD_NOT_IMPLEMENTED 14060 + +#define CP_REGEX_COMPILATION_FAILURE 15000 +#define CP_COMPILATION_FAILURE 15010 + +#define CP_DBMS_NO_DRIVER 16000 +#define CP_DBMS_CONNECTION_FAILURE 16010 +#define CP_DBMS_QUERY_FAILED 16020 +#define CP_DBMS_CLIENT_ERROR 16030 +#define CP_DBMS_STATEMENT_ERROR 16040 + +/** @} */ + +#endif + Added: branches/multicore/numpy/core/cprops_thread/configure.bat =================================================================== --- branches/multicore/numpy/core/cprops_thread/configure.bat 2007-04-10 15:44:17 UTC (rev 3691) +++ branches/multicore/numpy/core/cprops_thread/configure.bat 2007-04-10 17:54:59 UTC (rev 3692) @@ -0,0 +1,1143 @@ + at echo off +echo +--------------------------------------------------------------------------+ +echo ^| ^| +echo ^| cprops configuration script for windows ^| +echo ^| ^| +echo +--------------------------------------------------------------------------+ + +rem ***************************************************************************** +rem * * +rem * set up utilities * +rem * * +rem ***************************************************************************** + +echo Checking for C compiler CL +cl > nul: 2>&1 +if errorlevel 1 ( + @echo can^'t find CL on the path + goto :EOF +) +echo found. +if defined LDFLAGS set LINKFLAGS=/link %LDFLAGS% +set CFG_CFLAGS=%CFLAGS% +set CFG_LDFLAGS=%LDFLAGS% + +rem ***************************************************************************** +rem * * +rem * newline * +rem * * +rem ***************************************************************************** + +if exist newline.c del /q newline.c +echo #include ^ > newline.c +echo int main() >> newline.c +echo { >> newline.c +echo printf("\n"); >> newline.c +echo return 0; >> newline.c +echo } >> newline.c + +cl %CFLAGS% newline.c %LINKFLAGS% > nul: 2>&1 +if errorlevel 1 ( + @echo can^'t compile newline utility + goto :END +) + +if exist newline.c del /q newline.c +if exist newline.obj del /q newline.obj + +rem ***************************************************************************** +rem * * +rem * readline * +rem * * +rem ***************************************************************************** + +if exist readline.c del /q readline.c +echo #include ^ > readline.c +echo #include ^ >> readline.c +echo #include ^ >> readline.c +newline >> readline.c +echo #define MAXLEN 0x400 >> readline.c +newline >> readline.c +echo int main(int argc, char *argv[]) >> readline.c +echo { >> readline.c +echo char *question; >> readline.c +echo char answer[MAXLEN]; >> readline.c +echo FILE *out; >> readline.c +newline >> readline.c +echo if (argc ^> 1) printf("%%s ", argv[1]); >> readline.c +echo if (argc ^> 2) printf("[%%s] ", argv[2]); >> readline.c +echo printf(": "); >> readline.c +echo fgets(answer, MAXLEN - 1, stdin); >> readline.c +echo if ((answer == NULL ^|^| *answer == '\0' ^|^| *answer == '\n') ^&^& argc ^> 2) >> readline.c +echo strcpy(answer, argv[2]); >> readline.c +echo else /* chop newline */ >> readline.c +echo answer[strlen(answer) - 1] = '\0'; >> readline.c +echo if ((out = fopen("__answer", "w")) == NULL) >> readline.c +echo return -1; >> readline.c +echo fputs(answer, out); >> readline.c +echo fclose(out); >> readline.c +newline >> readline.c +echo return 0; >> readline.c +echo } >> readline.c + +cl %CFLAGS% readline.c %LINKFLAGS% > nul: 2>&1 +if errorlevel 1 ( + @echo can^'t compile readline utility + goto :END +) + +if exist readline.c del /q readline.c +if exist readline.obj del /q readline.obj + +rem ***************************************************************************** +rem * * +rem * match * +rem * * +rem ***************************************************************************** + +if exist match.c del /q match.c +echo #include ^ > match.c +newline >> match.c +echo #define UC(c) ((c) ^>= 'a' ^&^& (c) ^<= 'z' ? (c) - 'a' + 'A' : (c)) >> match.c +newline >> match.c +echo char *stristr(char *buffer, char *key) >> match.c +echo { >> match.c +echo char *p, *q, *r; >> match.c +newline >> match.c +echo p = buffer; >> match.c +echo while (*p != '\0') >> match.c +echo { >> match.c +echo q = p; >> match.c +echo r = key; >> match.c +echo while (*q != '\0' ^&^& *r != '\0' ^&^& UC(*q) == UC(*r)) >> match.c +echo { >> match.c +echo q++; >> match.c +echo r++; >> match.c +echo } >> match.c +echo if (*r == '\0') return p; >> match.c +echo p++; >> match.c +echo } >> match.c +newline >> match.c +echo return NULL; >> match.c +echo } >> match.c +newline >> match.c +echo char *strirstr(char *buffer, char *key) >> match.c +echo { >> match.c +echo char *p, *q, *r; >> match.c +newline >> match.c +echo p = ^&buffer[strlen(buffer) - 1]; >> match.c +echo while (p ^>= buffer) >> match.c +echo { >> match.c +echo q = p; >> match.c +echo r = key; >> match.c +echo while (*q != '\0' ^&^& *r != '\0' ^&^& UC(*q) == UC(*r)) >> match.c +echo { >> match.c +echo q++; >> match.c +echo r++; >> match.c +echo } >> match.c +echo if (*r == '\0') return p; >> match.c +echo p--; >> match.c +echo } >> match.c +newline >> match.c +echo return NULL; >> match.c +echo } >> match.c +newline >> match.c +echo int main(int argc, char *argv[]) >> match.c +echo { >> match.c +echo char *src; >> match.c +echo char *key; >> match.c +echo int len; >> match.c +echo int reverse; >> match.c +echo char *p, ch; >> match.c +echo FILE *out; >> match.c +newline >> match.c +echo if (argc ^< 3) return 1; >> match.c +echo src = argv[1]; >> match.c +echo key = argv[2]; >> match.c +echo reverse = argc ^> 3 ^&^& strcmp(argv[3], "-r") == 0; >> match.c +echo p = reverse ? strirstr(src, key) : stristr(src, key); >> match.c +echo if (p == NULL) return 2; >> match.c +newline >> match.c +echo ch = *p; >> match.c +echo *p = '\0'; >> match.c +echo out = fopen("__prefix", "w"); >> match.c +echo fputs(src, out); >> match.c +echo fclose(out); >> match.c +echo *p = ch; >> match.c +newline >> match.c +echo src = p; >> match.c +echo p += strlen(key); >> match.c +echo ch = *p; >> match.c +echo *p = '\0'; >> match.c +echo out = fopen("__match", "w"); >> match.c +echo fputs(src, out); >> match.c +echo fclose(out); >> match.c +echo *p = ch; >> match.c +newline >> match.c +echo out = fopen("__suffix", "w"); >> match.c +echo fputs(p, out); >> match.c +echo fclose(out); >> match.c +newline >> match.c +echo return 0; >> match.c +echo } >> match.c + +cl %CFLAGS% match.c %LINKFLAGS% > nul: 2>&1 +if errorlevel 1 ( + @echo can^'t compile match utility + goto :END +) +if exist match.c del /q match.c +if exist match.obj del /q match.obj + + +rem ***************************************************************************** +rem * * +rem * strsubst * +rem * * +rem ***************************************************************************** + +if exist strsubst.c del /q strsubst.c +echo #include ^ > strsubst.c +echo #include ^ >> strsubst.c +echo #include ^ >> strsubst.c +newline >> strsubst.c +echo int main(int argc, char *argv[]) >> strsubst.c +echo { >> strsubst.c +echo char buf[0x400]; >> strsubst.c +echo char *p, *q; >> strsubst.c +echo int rc; >> strsubst.c +echo FILE *in, *out; >> strsubst.c +echo char *fname_in, *fname_out, *token, *subst; >> strsubst.c +newline >> strsubst.c +echo if (argc ^< 4) >> strsubst.c +echo { >> strsubst.c +echo fprintf(stderr, "usage: %%s \n", >> strsubst.c +echo argv[0]); >> strsubst.c +echo return 1; >> strsubst.c +echo } >> strsubst.c +newline >> strsubst.c +echo fname_in = argv[1]; >> strsubst.c +echo token = argv[2]; >> strsubst.c +echo subst = argv[3]; >> strsubst.c +newline >> strsubst.c +echo if (strcmp(fname_in, "-") == 0) >> strsubst.c +echo { >> strsubst.c +echo in = stdin; >> strsubst.c +echo out = stdout; >> strsubst.c +echo } >> strsubst.c +echo else >> strsubst.c +echo { >> strsubst.c +echo fname_out = malloc(strlen(fname_in) + strlen(".strsubst") + 1); >> strsubst.c +echo sprintf(fname_out, "%%s.strsubst", fname_in); >> strsubst.c +echo if ((in = fopen(fname_in, "r")) == NULL) >> strsubst.c +echo { >> strsubst.c +echo fprintf(stderr, "%%s: can\'t open %%s\n", argv[0], fname_in); >> strsubst.c +echo return 2; >> strsubst.c +echo } >> strsubst.c +newline >> strsubst.c +echo if ((out = fopen(fname_out, "w")) == NULL) >> strsubst.c +echo { >> strsubst.c +echo fprintf(stderr, "%%s: can\'t open %s\n", argv[0], fname_out); >> strsubst.c +echo return 2; >> strsubst.c +echo } >> strsubst.c +echo free(fname_out); >> strsubst.c +echo } >> strsubst.c +newline >> strsubst.c +echo while ((fgets(buf, 0x400, in))) >> strsubst.c +echo { >> strsubst.c +echo q = buf; >> strsubst.c +echo while ((p = strstr(q, token)) != NULL) >> strsubst.c +echo { >> strsubst.c +echo *p = '\0'; >> strsubst.c +echo fprintf(out, "%%s%%s", q, subst); >> strsubst.c +echo q = p + strlen(token); >> strsubst.c +echo } >> strsubst.c +echo fprintf(out, q); >> strsubst.c +echo } >> strsubst.c +newline >> strsubst.c +echo fclose(in); >> strsubst.c +echo fclose(out); >> strsubst.c +newline >> strsubst.c +echo return 0; >> strsubst.c +echo } >> strsubst.c + +cl %CFLAGS% strsubst.c %LINKFLAGS% > nul: 2>&1 +if errorlevel 1 ( + @echo can^'t compile strsubst utility + goto :END +) +if exist strsubst.c del /q strsubst.c +if exist strsubst.obj del /q strsubst.obj + +rem ***************************************************************************** +rem * * +rem * head * +rem * * +rem ***************************************************************************** + +if exist head.c del /q head.c +echo #include ^ > head.c +echo #include ^ >> head.c +newline >> head.c +echo int main(int argc, char *argv[]) >> head.c +echo { >> head.c +echo char buf[0x400]; >> head.c +echo int line_count; >> head.c +newline >> head.c +echo if (argc ^< 2) >> head.c +echo { >> head.c +echo fprintf(stderr, "usage: %%s \n", argv[0]); >> head.c +echo return 1; >> head.c +echo } >> head.c +echo line_count = atoi(argv[1]); >> head.c +newline >> head.c +echo while (line_count-- ^&^& (fgets(buf, 0x400, stdin)) != NULL) >> head.c +echo printf(buf); >> head.c +newline >> head.c +echo return 0; >> head.c +echo } >> head.c + +cl %CFLAGS% head.c %LINKFLAGS% > nul: 2>&1 +if errorlevel 1 ( + @echo can^'t compile head utility + goto :END +) +if exist head.c del /q head.c +if exist head.obj del /q head.obj + + +rem ***************************************************************************** +rem * * +rem * filter * +rem * * +rem ***************************************************************************** + +if exist filter.c del /q filter.c +echo #include ^ > filter.c +newline >> filter.c +echo #define BUFSIZE 0x1000 >> filter.c +newline >> filter.c +echo int main(int argc, char *argv[]) >> filter.c +echo { >> filter.c +echo char buf[BUFSIZE]; >> filter.c +echo char *mark; >> filter.c +echo char *p; >> filter.c +newline >> filter.c +echo mark = argv[1]; >> filter.c +newline >> filter.c +echo while (!feof(stdin)) >> filter.c +echo { >> filter.c +echo if ((p = fgets(buf, BUFSIZE - 1, stdin)) == NULL) break; >> filter.c +echo if (strstr(buf, mark)) continue; >> filter.c +echo fprintf(stdout, "%%s", buf); >> filter.c +echo } >> filter.c +newline >> filter.c +echo return 0; >> filter.c +echo } >> filter.c + +cl %CFLAGS% filter.c %LINKFLAGS% > nul: 2>&1 +if errorlevel 1 ( + @echo can^'t compile filter utility + goto :END +) +if exist filter.c del /q filter.c +if exist filter.obj del /q filter.obj + + +rem ***************************************************************************** +rem * * +rem * configuration * +rem * * +rem ***************************************************************************** + +newline + +set PREFIX= +set MATCH= +set SUFFIX= +set NEEDLE= +set HAYSTACK= +set QUESTION= +set ANSWER= +set USE_SSL= +set SSL_DIR= +set PCRE_DIR= +set SUBDIRS= +set DEBUG= + +echo please choose a few configuration options. +newline + + +rem ***************************************************************************** +rem * * +rem * PCRE * +rem * * +rem ***************************************************************************** + +echo the cprops build on windows requires PCRE. +:GET_PCRE +newline +set _PCRE= +if exist _pcre ( + for /f "tokens=*" %%i in (_pcre) do set _PCRE=%%i +) + +set QUESTION="Please specify PCRE include and library path" +set DEFAULT= +if defined _PCRE set DEFAULT=%_PCRE% +call :readline + +if x%ANSWER% == x ( + newline + echo libcprops requires PCRE to build on windows. If you do not have PCRE installed, + echo you could download it from http://gnuwin32.sourceforge.net/packages/pcre.htm + goto :END +) + +set PCRE_DIR=%ANSWER% +if not exist %PCRE_DIR%\include\pcreposix.h ( + echo can^'t find %PCRE_DIR%\include\pcreposix.h + goto :GET_PCRE +) +newline + +if exist _pcre del /q _pcre +echo %PCRE_DIR% > _pcre + +rem ***************************************************************************** +rem * * +rem * Create DLL or lib * +rem * * +rem ***************************************************************************** + +set QUESTION="link libcprops dynamically (DLL) or statically (LIB)" +set DEFAULT=dll +call :readline +newline +set TARGET=libcprops.lib + +if /i not "d"=="%ANSWER:~0,1%" goto :ENDLINK + +set TARGET=libcprops.dll +set MAIN_CFLAGS=/D "_USRDLL" /D "CPROPS_EXPORTS" /GD +:ENDLINK + +newline + +rem ***************************************************************************** +rem * * +rem * DEBUG * +rem * * +rem ***************************************************************************** + +echo cprops may be built in DEBUG mode. The resulting DLL or library includes debug +echo information, and some routines make debug printouts. +set QUESTION="Build in DEBUG mode?" +set DEFAULT=no +call :readline +newline +if /i "n"=="%ANSWER:~0,1%" goto :END_DEBUG +set DEBUG=yes + +echo defining __TRACE__ gives a higher resolution of debug printouts. +set QUESTION="define __TRACE__?" +set DEFAULT=no +call :readline +newline +if /i "n"=="%ANSWER:~0,1%" goto :END_DEBUG +set __TRACE__=yes +:END_DEBUG + +rem ***************************************************************************** +rem * * +rem * Multiple values in hash tables * +rem * * +rem ***************************************************************************** + +set QUESTION="allow multiple values in hash tables" +set DEFAULT=no +call :readline +newline +set HASHTABLE_MULTIPLES= + +if /i not "y"=="%ANSWER:~0,1%" goto :END_HASHTABLE_MULTIPLES + +set HASHTABLE_MULTIPLES=yes + +:END_HASHTABLE_MULTIPLES + + +rem ***************************************************************************** +rem * * +rem * Multiple values in hash lists * +rem * * +rem ***************************************************************************** + +set QUESTION="allow multiple values in hash lists" +set DEFAULT=no +call :readline +newline +set HASHLIST_MULTIPLES= + +if /i not "y"=="%ANSWER:~0,1%" goto :END_HASHLIST_MULTIPLES + +set HASHLIST_MULTIPLES=yes + +:END_HASHLIST_MULTIPLES + + +rem ***************************************************************************** +rem * * +rem * HTTP cookie support * +rem * * +rem ***************************************************************************** + +set QUESTION="include support for HTTP cookies" +set DEFAULT="yes" +call :readline +newline +set USE_COOKIES=yes + +if /i "y"=="%ANSWER:~0,1%" goto :END_COOKIES + +set USE_COOKIES= + +:END_COOKIES + + +rem ***************************************************************************** +rem * * +rem * HTTP session support * +rem * * +rem ***************************************************************************** + +set QUESTION="include support for HTTP sessions" +set DEFAULT="yes" +call :readline +newline +set USE_HTTP_SESSIONS=yes + +if /i "y"=="%ANSWER:~0,1%" goto :END_HTTP_SESSIONS + +set USE_HTTP_SESSIONS= + +:END_HTTP_SESSIONS + + +rem ***************************************************************************** +rem * * +rem * Open SSL * +rem * * +rem ***************************************************************************** + +set QUESTION="include ssl support (this requires Open SSL)" +set DEFAULT="yes" +call :readline +newline + +if /i not "y"=="%ANSWER:~0,1%" goto :ENDSSL + +set USE_SSL=1 + +if not defined OPENSSL_CONF goto :NO_OPENSSL_CONF + +echo found OPENSSL_CONF at %OPENSSL_CONF% +set NEEDLE=OpenSSL +set HAYSTACK=%OPENSSL_CONF% +call :match +set SSL_DIR=%PREFIX%%MATCH% +if defined MATCH goto ENDSSL + +:NO_OPENSSL_CONF + +set QUESTION="please specify the location of your Open SSL installation" +set DEFAULT= +call :readline + +set SSL_DIR=%ANSWER% + at echo using openssl installation at %SSL_DIR% + +:ENDSSL + +newline +newline + +rem ***************************************************************************** +rem * * +rem * cpsvc * +rem * * +rem ***************************************************************************** + +echo cpsvc is a simple web server included as sample code with the cprops +echo distribution. cpsvc is based on the cp_httpsocket API and supports CGI, +echo HTTP sessions, request piplining, and SSL if libcprops is configured +echo accordingly. +set QUESTION="build cpsvc?" +set DEFAULT=yes +call :readline +newline + +if /i not "y"=="%ANSWER:~0,1%" goto :END_CPSVC + +set BUILD_CPSVC=yes + +echo cpsp is an html page scripting framework allowing embedding C code in web +echo pages. Requires lex or an equivalent and yacc or an equivalent. +set QUESTION="build cpsp?" +set DEFAULT=yes +call :readline +newline + +if /i not "y"=="%ANSWER:~0,1%" goto :END_CPSVC + +set BUILD_CPSP=yes +set SUBDIRS=%SUBDIRS% svc\cpsp + +lex --version > nul: 2>&1 +if errorlevel 1 goto :FLEX +set LEX=lex +goto :FIND_YACC + +:FLEX +flex --version > nul: 2>&1 +if errorlevel 1 goto :ASK_LEX + +set LEX=flex +goto :FIND_YACC + +:ASK_LEX +echo can't find lex or flex on the path. If you don't have lex installed, a flex +echo version for windows is vailable at +echo http://www.monmouth.com/~wstreett/lex-yacc/lex-yacc.html +newline + +set _LEX= +if exist _lex ( + for /f "tokens=*" %%i in (_lex) do set _LEX=%%i +) + +:LEX +set QUESTION="please specify path to lex executable" +set DEFAULT= +if defined _LEX set DEFAULT=%_LEX% + +call :readline +newline +if x%ANSWER%==x ( + echo no lex available, stopping + goto :END +) +set LEX=%ANSWER% +%LEX% --version > nul: 2>&1 +if errorlevel 1 ( + echo can't execute lex at [%LEX%] + goto :LEX +) +if exist _lex del /q _lex +echo %LEX% > _lex + +:FIND_YACC +yacc --version > nul: 2>&1 +if errorlevel 1 goto :BISON + +set YACC=yacc +goto :END_CPSVC + + +:BISON +bison --version > nul: 2>&1 +if errorlevel 1 goto :ASK_YACC + +set YACC=bison +goto :END_CPSVC + +:ASK_YACC +echo can't find yacc or bison on the path. If you don't have yacc installed, a +echo bison version for windows is available at +echo http://www.monmouth.com/~wstreett/lex-yacc/lex-yacc.html +newline + +set _YACC= +if exist _yacc ( + for /f "tokens=*" %%i in (_yacc) do set _YACC=%%i +) + +:YACC +set QUESTION="please specify path to yacc executable" +set DEFAULT= +if defined _YACC set DEFAULT=%_YACC% + +call :readline +if x%ANSWER%==x ( + echo no yacc available, stopping + goto :END +) +set YACC=%ANSWER% +%YACC% --version > nul: 2>&1 +if errorlevel 1 ( + echo can't execute yacc at [%YACC%] + goto :YACC +) + +if exist _yacc del /q _yacc +echo %YACC% > _yacc + +if exist %YACC%.simple copy %YACC%.simple svc\cpsp > nul: 2>&1 + +:END_CPSVC + + +rem ***************************************************************************** +rem * * +rem * DBMS abstraction layer * +rem * * +rem ***************************************************************************** + +set QUESTION="Build cp_dbms - DBMS abstraction layer" +set DEFAULT="yes" +call :readline +newline +set BUILD_DBMS=dynamic + +if /i "y"=="%ANSWER:~0,1%" goto :DBMS_LINKAGE + +set BUILD_CP_DBMS= + +goto :END_DBMS + +:DBMS_LINKAGE + +set QUESTION="link DBMS driver/s statically or dynamically" +set DEFAULT="dynamic" +call :readline +newline + +if /i not "s"=="%ANSWER:~0,1%" goto :DBMS_DRIVERS + +set BUILD_DBMS=static + +:DBMS_DRIVERS +set CP_DBMS_DRIVERS= +set QUESTION="install PostgresQL driver (requires libpq)" +set DEFAULT=no +call :readline +newline + +if /i not "y"=="%ANSWER:~0,1%" goto :DBMS_MYSQL + +:GET_PGSQL_PATH +set _PGSQL= +if exist _pgsql ( + for /f "tokens=*" %%i in (_pgsql) do set _PGSQL=%%i +) + +set QUESTION="please specify path to postgres headers and include files" +set DEFAULT= +if defined _PGSQL set DEFAULT=%_PGSQL% +call :readline +set _PGSQL= +newline +set POSTGRES_DIR=%ANSWER% + +if "x%ANSWER%"=="x" ( + echo "postgres path not specified, stopping" + goto :END +) + +if not exist %POSTGRES_DIR%\include\libpq-fe.h ( + echo can't find libpq-fe.h under %POSTGRES_DIR%\include + goto :GET_PGSQL_PATH +) +if exist %POSTGRES_DIR%\lib\libpq.lib goto :GOT_LIBPQ +if exist %POSTGRES_DIR%\lib\ms\libpq.lib goto :GOT_LIBPQ +echo can't find libpq.lib under %POSTGRES_DIR%\lib or %POSTGRES_DIR%\lib\ms +echo did you install postgres from the no-installer zip? You'll need the +echo installer. Make sure to select developer files and MSVC libraries. +goto :GET_PGSQL_PATH +:GOT_LIBPQ + +echo %POSTGRES_DIR%>_pgsql + +:DBMS_MYSQL +set QUESTION="install MySQL driver (requires mysqlclient.lib)" +set DEFAULT=no +call :readline +newline + +if /i not "y"=="%ANSWER:~0,1%" goto :END_DBMS + +:GET_MYSQL_PATH +set _MYSQL= +if exist _mysql ( + for /f "tokens=*" %%i in (_mysql) do set _MYSQL=%%i +) +set QUESTION="please specify path to MySQL headers and include files" +set DEFAULT= +if defined _MYSQL set DEFAULT=%_MYSQL% +call :readline +set _MYSQL= +newline +set MYSQL_DIR=%ANSWER% + +if "x%ANSWER%"=="x" ( + echo "MySQL path not specified, stopping" + goto :END +) + +if not exist "%MYSQL_DIR%\lib\opt\mysqlclient.lib" ( + echo can't find mysqlclient.lib on mysql path [%MYSQL_DIR%] + goto :GET_MYSQL_PATH +) +if not exist "%MYSQL_DIR%\include\mysql.h" ( + echo can't find mysql.h header in mysql installation - possibly MySQL was + echo installed without developer files + goto :GET_MYSQL_PATH +) + +echo "%MYSQL_DIR%">_mysql +:END_DBMS + + + +rem ***************************************************************************** +rem * * +rem * write output * +rem * * +rem ***************************************************************************** + +newline +echo +--------------------------------------------------------------------------+ +echo ^| ^| +echo ^| generating configuration headers and make files ^| +echo ^| ^| +echo +--------------------------------------------------------------------------+ +newline + +if exist config-cpwin.h del /q config-cpwin.h + +set CFG_CFLAGS=%CFG_CFLAGS% /I%PCRE_DIR%\include +set CFG_LDFLAGS=%CFG_LDFLAGS% +set CFG_LIBS=%PCRE_DIR%\lib\pcre.lib + +newline +copy config.h.vc config.h > nul: 2>&1 + +echo writing config-cpwin.h + +if defined HASHTABLE_MULTIPLES ( + echo #define CP_HASHTABLE_MULTIPLE_VALUES 1 >> config-cpwin.h +) + +if defined HASHLIST_MULTIPLES ( + echo #define CP_HASHLIST_MULTIPLE_VALUES 1 >> config-cpwin.h +) + +if defined USE_COOKIES ( + echo #define CP_USE_COOKIES 1 >> config-cpwin.h +) + +if defined USE_HTTP_SESSIONS ( + echo #define CP_USE_HTTP_SESSIONS 1 >> config-cpwin.h +) + +if defined BUILD_CPSVC ( + set SUBDIRS=svc %SUBDIRS% +) + +if defined BUILD_DBMS ( + set OPT_OBJS=%OPT_OBJS% db.obj + if /i "d"=="%BUILD_DBMS:~0,1%" call :set_db_directories + if /i "s"=="%BUILD_DBMS:~0,1%" call :set_db_objects +) + +if defined USE_SSL ( + echo #define CP_USE_SSL 1 >> config-cpwin.h + set CFG_CFLAGS=%CFG_CFLAGS% /I%SSL_DIR%\include + set CFG_LDFLAGS=%CFG_LDFLAGS% %SSL_DIR%\lib\VC\libeay32MT.lib %SSL_DIR%\lib\VC\ssleay32MT.lib +) + +if defined DEBUG ( + set CFG_CFLAGS=%CFG_CFLAGS% /DDEBUG /D_DEBUG /Zi /MTd + set CFG_LDFLAGS=%CFG_LDFLAGS% /debug /pdb:libcprops.pdb /pdbtype:sept +) +if not defined DEBUG set CFG_CFLAGS=%CFG_CFLAGS% /MT + +if defined __TRACE__ set CFG_CFLAGS=%CFG_CFLAGS% /D__TRACE__ + +if exist Makefile del /q Makefile +echo writing Makefile + +echo ############################################################################ > Makefile +echo # >> Makefile +echo # This makefile was generated by the configure.bat script. run nmake in this >> Makefile +echo # directory to build libcprops. >> Makefile +echo # >> Makefile +echo # Copyright Ilan Aelion 2005, 2006 >> Makefile +echo # >> Makefile +echo # Please send bug reports, comments, suggestions, patches etc. to iaelion at >> Makefile +echo # users dot sourceforge dot net. >> Makefile +echo # >> Makefile +echo ############################################################################ >> Makefile +newline >> Makefile +echo CC=CL >> Makefile +echo LD=LINK >> Makefile +echo CFLAGS=%MAIN_CFLAGS% %CFG_CFLAGS% >> Makefile +echo LDFLAGS=%CFG_LDFLAGS% >> Makefile +echo LIBS=%CFG_LIBS% >> Makefile +newline >> Makefile +echo TARGET=%TARGET% >> Makefile +echo OPT_OBJS=%OPT_OBJS% >> Makefile +echo OPT_TARGETS=%OPT_TARGETS% >> Makefile +if defined POSTGRES_DIR ( + newline >> Makefile + echo PGSQL_CFLAGS=/I"%POSTGRES_DIR%"\include >> Makefile + echo PGSQL_LDFLAGS=/libpath:"%POSTGRES_DIR%"\lib /libpath:"%POSTGRES_DIR%"\lib\ms>> Makefile + echo PGSQL_LIBS=libpq.lib >> Makefile +) +if defined MYSQL_DIR ( + newline >> Makefile + echo MYSQL_CFLAGS=/I"%MYSQL_DIR%"\include >> Makefile + echo MYSQL_LDFLAGS=/libpath:"%MYSQL_DIR%"\lib\opt >> Makefile + echo MYSQL_LIBS=mysqlclient.lib >> Makefile +) + +CD > CWD +for /f "tokens=*" %%i in (CWD) do set CWD=%%i +echo top_builddir=%CWD%>> Makefile +del /q CWD +newline >> Makefile +echo subdirs=%SUBDIRS% >> Makefile +newline >> Makefile + +type Makefile.vc >> Makefile +if errorlevel 1 ( + echo can't find Makefile.vc + goto :EOF +) + +if defined BUILD_CPSVC ( + echo writing svc\win.mak + if exist svc\win.mak del /q svc\win.mak > nul: 2>&1 + + copy svc\Makefile.vc svc\Makefile > nul: 2>&1 + if errorlevel 1 ( + echo can't find svc\Makefile.vc + goto :EOF + ) + call :write_svc_mak + + if exist svc\runcpsvc.bat del /q svc\runcpsvc.bat + CD > CWD + for /f "tokens=*" %%i in (CWD) do set CWD=%%i + echo set PATH=%%^PATH%%;%CWD%;%PCRE_DIR%\lib;%SSL_DIR%\lib\vc > svc\runcpsvc.bat + echo cpsvc %%^1 %%^2 %%^3 %%^4 %%^5 %%^6 %%^7 %%^8 %%^9 >> svc\runcpsvc.bat +) + +if defined BUILD_CPSP ( + echo #define CP_USE_CPSP 1 >> config-cpwin.h + + if exist svc\cpsp\win.cpsp.mak del svc\cpsp\win.cpsp.mak + call :write_svc_cpsp_mak + CD > CWD + for /f "tokens=*" %%i in (CWD) do set CWD=%%i + echo top_builddir=%CWD%>> svc\cpsp\win.cpsp.mak + del /q CWD + echo prefix= >> svc\cpsp\win.cpsp.mak + echo exec_prefix= >> svc\cpsp\win.cpsp.mak + newline >> svc\cpsp\win.cpsp.mak + echo libdir=%CWD% >> svc\cpsp\win.cpsp.mak + echo incdir=%CWD%\.. >> svc\cpsp\win.cpsp.mak + echo bindir=%CWD%\svc >> svc\cpsp\win.cpsp.mak + newline >> svc\cpsp\win.cpsp.mak + echo LEX=%LEX% >> svc\cpsp\win.cpsp.mak + echo YACC=%YACC% >> svc\cpsp\win.cpsp.mak + + echo CPSP_SOURCES=cpsp.c cpsp_invoker.c >> svc\win.mak + + copy svc\cpsp\Makefile.vc svc\cpsp\Makefile > nul: 2>&1 + copy svc\cpsp\Makefile.cpsp.vc svc\cpsp\Makefile.cpsp > nul: 2>&1 + + set SETPATH=svc\cpsp\setpath.bat + call :write_setpath + set SETPATH=svc\setpath.bat + call :write_setpath + set SETPATH= + copy newline.exe svc > nul: 2>&1 + copy newline.exe svc\cpsp > nul: 2>&1 + copy match.exe svc > nul: 2>&1 + copy match.exe svc\cpsp > nul: 2>&1 + copy strsubst.exe svc > nul: 2>&1 + copy strsubst.exe svc\cpsp > nul: 2>&1 + copy filter.exe svc > nul: 2>&1 + copy filter.exe svc\cpsp > nul: 2>&1 +) + +echo writing example\win.mak +copy example\Makefile.vc example\Makefile > nul: 2>&1 +if errorlevel 1 ( + echo can't find example\Makefile.vc + goto :EOF +) +if exist example\win.mak del /q example\win.mak > nul: 2>&1 +echo CFLAGS=$(CFLAGS) %CFG_CFLAGS% > example\win.mak +echo LDFLAGS=$(LDFLAGS) %CFG_LDFLAGS% >> example\win.mak +echo LIBS=$(LIBS) %CFG_LIBS% >> example\win.mak +if defined POSTGRES_DIR echo OPT_SRC=test_pq.c>> example\win.mak +if defined MYSQL_DIR echo OPT_SRC=$(OPT_SRC) test_mysql.c>> example\win.mak + +echo writing http.h +head 1 < VERSION > LIBVERSION +for /f "tokens=*" %%i in (LIBVERSION) do set VERSION=%%i +if exist http.h.in del http.h.in +ren http.h http.h.in +strsubst http.h.in __CPROPSVERSION %VERSION% +copy http.h.in.strsubst http.h > nul: 2>&1 +set VERSION= + +echo done. +newline +echo run nmake to build libcprops. + +goto :END + + +rem ***************************************************************************** +rem * * +rem * utility invocations * +rem * * +rem ***************************************************************************** + +:readline +set ANSWER= +readline %QUESTION% %DEFAULT% +if errorlevel 1 goto :EOF +for /f "tokens=*" %%i in (__answer) do set ANSWER=%%i +if exist __answer del __answer +goto :EOF + +:match +set MATCH= +set PREFIX= +set SUFFIX= +match %HAYSTACK% %NEEDLE% +if errorlevel 1 goto :EOF + +for /f "tokens=*" %%i in (__prefix) do set PREFIX=%%i +for /f "tokens=*" %%i in (__match) do set MATCH=%%i +for /f "tokens=*" %%i in (__suffix) do set SUFFIX=%%i +if exist __prefix del __prefix +if exist __match del __match +if exist __suffix del __suffix +goto :EOF + +:write_svc_mak +echo CFLAGS=$(CFLAGS) %CFG_CFLAGS% > svc\win.mak +echo LDFLAGS=$(LDFLAGS) %CFG_LDFLAGS% >> svc\win.mak +echo LIBS=$(LIBS) %CFG_LIBS% >> svc\win.mak +goto :EOF + +:write_svc_cpsp_mak +echo CFLAGS=$(CFLAGS) %CFG_CFLAGS% > svc\cpsp\win.cpsp.mak +echo LDFLAGS=$(LDFLAGS) %CFG_LDFLAGS% >> svc\cpsp\win.cpsp.mak +echo LIBS=$(LIBS) %CFG_LIBS% >> svc\cpsp\win.cpsp.mak +goto :EOF + +:set_db_directories +if defined POSTGRES_DIR set OPT_TARGETS=libcp_dbms_postgres.dll +if defined MYSQL_DIR set OPT_TARGETS=%OPT_TARGETS% libcp_dbms_mysql.dll +goto :EOF + +:set_db_objects +if defined POSTGRES_DIR ( + set OPT_OBJS=%OPT_OBJS% db_postgres.obj + set CFG_CFLAGS=%CFG_CFLAGS% /I%POSTGRES_DIR%\include + set CFG_LDFLAGS=%CFG_LDFLAGS% /libpath:%POSTGRES_DIR%\lib /libpath:%POSTGRES_DIR%\lib\ms libpq.lib +) +if defined MYSQL_DIR ( + set OPT_OBJS=%OPT_OBJS% db_mysql.obj + set CFG_CFLAGS=%CFG_CFLAGS% /I"%MYSQL_DIR%"\include + set CFG_LDFLAGS=%CFG_LDFLAGS% /libpath:"%MYSQL_DIR%"\lib\opt mysqlclient.lib + set CFG_LIBS=%CFG_LIBS% crypt32.lib advapi32.lib +) +goto :EOF + +:write_setpath +if exist %SETPATH% del /q %SETPATH% +set PATHSTR=%%^PATH%% +echo set PCRE=> %SETPATH% +echo match "%PATHSTR%" "%PCRE_DIR%">> %SETPATH% +echo for /f "tokens=*" %%^%%^i in (__match) do set PCRE=%%^%%^i>> %SETPATH% +echo if defined PCRE goto :CPROPS>> %SETPATH% +echo @set PATH=%%^PATH%%;%PCRE_DIR%\lib>> %SETPATH% +newline>> %SETPATH% +echo :CPROPS>> %SETPATH% +echo set CPDLL=>> %SETPATH% +echo match "%PATHSTR%" "%CWD%">> %SETPATH% +echo for /f "tokens=*" %%^%%^i in (__match) do set CPDLL=%%^%%^i>> %SETPATH% +echo if defined CPDLL goto :CPSPEXE>> %SETPATH% +echo @set PATH=%%^PATH%%;%CWD%>> %SETPATH% +newline>> %SETPATH% +echo :CPSPEXE>> %SETPATH% +echo set CPSPPATH=>> %SETPATH% +echo match "%PATHSTR%" "%CWD%\svc\cpsp">> %SETPATH% +echo for /f "tokens=*" %%^%%^i in (__match) do set CPSPPATH=%%^%%^i>> %SETPATH% +echo if defined CPSPPATH goto :SSL>> %SETPATH% +echo @set PATH=%%^PATH%%;%CWD%\svc\cpsp>> %SETPATH% +newline>> %SETPATH% +echo :SSL>> %SETPATH% +echo set OPENSSL=>> %SETPATH% +echo match "%PATHSTR%" "%SSL_DIR%\lib\vc">> %SETPATH% +echo for /f "tokens=*" %%^%%^i in (__match) do set OPENSSL=%%^%%^i>> %SETPATH% +echo if defined OPENSSL goto :DONE>> %SETPATH% +echo @set PATH=%%^PATH%%;%SSL_DIR%\lib\vc>> %SETPATH% +echo :DONE>> %SETPATH% +newline>> %SETPATH% +echo set PCRE=>> %SETPATH% +echo set CPDLL=>> %SETPATH% +echo set CPSPPATH=>> %SETPATH% +echo set OPENSSL=>> %SETPATH% +set PATHSTR= +goto :EOF + +:END +rem clear variables and temporary files +set QUESTION= +set ANSWER= +set NEEDLE= +set HAYSTACK= +set MATCH= +set PREFIX= +set SUFFIX= + +set CPROPS_LINK= +set HASHTABLE_MULTIPLES= +set HASHLIST_MULTIPLES= +set USE_COOKIES= +set USE_HTTP_SESSIONS= +set BUILD_CPSVC= +set BUILD_CPSP= +set LEX= +set YACC= +set BUILD_DBMS= +set TARGET= +set OPT_OBJS= +set OPT_TARGETS= +set SUBDIRS= +set PCRE_DIR= +set SSL_DIR= +set POSTGRES_DIR= +set MYSQL_DIR= +set DEBUG= +set __TRACE__= +set CFG_CFLAGS= +set CFG_LDFLAGS= +set LINKFLAGS= +set CFG_LIBS= +set MAIN_CFLAGS= + +if exist __suffix del __suffix +if exist __answer del __answer +if exist __prefix del __prefix +set USE_SSL= + Added: branches/multicore/numpy/core/cprops_thread/configure.in =================================================================== --- branches/multicore/numpy/core/cprops_thread/configure.in 2007-04-10 15:44:17 UTC (rev 3691) +++ branches/multicore/numpy/core/cprops_thread/configure.in 2007-04-10 17:54:59 UTC (rev 3692) @@ -0,0 +1,762 @@ +dnl Process this file with autoconf to produce a configure script. +AC_INIT(hashlist.c) +AC_CONFIG_HEADER(config.h) + +CPROPSVERSION=`head -n 1 VERSION` +AC_SUBST(CPROPSVERSION) +CPROPSLIBVERSION=`head -n 2 VERSION | tail -n 1` +AC_SUBST(CPROPSLIBVERSION) +AC_SUBST(SED) + +SUBDIRS= +root_dir=`pwd` +AC_SUBST(root_dir) + +AC_ARG_WITH(cflags, +[ --with-cflags=FLAGS use FLAGS for CFLAGS], +CFLAGS="$CFLAGS $withval") + +AC_ARG_WITH(libs, +[ --with-libs=LIBS use LIBS for extra libraries], +LIBS="$LIBS $withval") + +OPT_OBJS="" + +AC_CANONICAL_HOST + +case "$host" in + *-linux-*) + CFLAGS="$CFLAGS -D_REENTRANT -D_GNU_SOURCE" + ;; + *-solaris*) + LIBS="$LIBS -lsocket -lnsl" + AC_MSG_CHECKING([where ar is]) + for loc in /usr/xpg4/bin /usr/ccs/bin /usr/local/bin /usr/bin; do + if test -x "$loc/ar"; then + ardir="$loc" + break; + fi + done + if test "x$ardir" != "x"; then + AR=$ardir/ar + fi + AC_MSG_RESULT($ardir) + ;; + *-apple-darwin6*) + CFLAGS="$CFLAGS -no-cpp-precomp" + ;; +esac + + +dnl ------------------------------------------------------------------------- +dnl check for gnu make +dnl ------------------------------------------------------------------------- + +make_command="" +for a in "$MAKE" make gmake gnumake + do test -z "$a" && continue + if ( sh -c "$a --version" 2>/dev/null | grep GNU >/dev/null ) + then make_command=$a ; break; + fi + done +if test -z $make_command ; then + gnu_make="" +else + gnu_make="$make_command" +fi + +AC_SUBST(gnu_make) + + +dnl ------------------------------------------------------------------------- +dnl Checks for programs. +dnl ------------------------------------------------------------------------- + +AC_PROG_CC +AC_PROG_LEX +AC_PROG_YACC +AC_PROG_INSTALL +AC_PROG_LIBTOOL + +if test "$GCC" = "yes" ; then + CFLAGS="$CFLAGS -O2" +fi + +dnl ------------------------------------------------------------------------- +dnl Checks for libraries. +dnl ------------------------------------------------------------------------- + +AC_CHECK_LIB(dl, dlsym) +if test -z "$pthread"; then + AC_CHECK_LIB(pthread, pthread_create, [LIBS="$LIBS -lpthread"]) +fi + +dnl ------------------------------------------------------------------------- +dnl Checks for header files +dnl ------------------------------------------------------------------------- + +AC_HEADER_STDC +AC_CHECK_HEADER(fcntl.h, AC_DEFINE([CP_HAS_FCNTL_H]), ) +AC_CHECK_HEADER(sys/time.h, AC_DEFINE([CP_HAS_SYS_TIME_H]), ) +AC_CHECK_HEADER(stdarg.h, AC_DEFINE([CP_HAS_STDARG_H]), ) +AC_CHECK_HEADER(unistd.h, AC_DEFINE([CP_HAS_UNISTD_H]), ) +AC_CHECK_HEADER(pthread.h, AC_DEFINE([CP_HAS_PTHREAD_H]), ) +AC_CHECK_HEADER(regex.h, AC_DEFINE([CP_HAS_REGEX_H]), ) +AC_CHECK_HEADER(sys/socket.h, AC_DEFINE([CP_HAS_SYS_SOCKET_H]), ) +AC_CHECK_HEADER(sys/select.h, AC_DEFINE([CP_HAS_SYS_SELECT_H]), ) +AC_CHECK_HEADER(netinet/in.h, AC_DEFINE([CP_HAS_NETINET_IN_H]), ) +AC_CHECK_HEADER(netdb.h, AC_DEFINE([CP_HAS_NETDB_H]), ) +AC_CHECK_HEADER(sys/poll.h, AC_DEFINE([CP_HAS_SYS_POLL_H]), ) +AC_CHECK_HEADER(dirent.h, AC_DEFINE([CP_HAS_DIRENT_H]), ) + +AC_CHECK_HEADER(dlfcn.h,[ +AC_DEFINE_UNQUOTED(CP_HAS_DLFCN_H, 1, [define if you have ]) +ac_have_dlfcn_h=yes +],[ +ac_have_dlfcn_h= +]) + +dnl ------------------------------------------------------------------------- +dnl Checks for typedefs, structures, and compiler characteristics +dnl ------------------------------------------------------------------------- + +AC_C_CONST +AC_C_INLINE +AC_HEADER_TIME +AC_STRUCT_TM + +AC_MSG_CHECKING(whether long long is supported) +AC_TRY_COMPILE([ +#include +], [ + long long l = 1; +], +[ + AC_MSG_RESULT(yes) + AC_DEFINE([CP_HAS_LONG_LONG], [1], [long long supported]) +], [ + AC_MSG_RESULT(no) +]) + +AC_MSG_CHECKING(whether variadic macros are supported) +AC_TRY_COMPILE([ +#include +#define PRINT(fmt, ...) printf(fmt, ## __VA_ARGS__) +], [ + PRINT("%d %d %d", 1, 2, 3); + return 0; +], [ +AC_MSG_RESULT(yes) +AC_DEFINE([CP_HAS_VARIADIC_MACROS], [1], [variadic macros are supported]) +], [ +AC_MSG_RESULT(no) +]) + + +dnl ------------------------------------------------------------------------- +dnl Checks for library functions +dnl ------------------------------------------------------------------------- + +AC_MSG_CHECKING(whether struct addrinfo is defined) +AC_TRY_LINK([ +#include +#include +], [ +struct addrinfo p; +struct addrinfo *a = &p; +], [ +AC_MSG_RESULT(yes) +AC_DEFINE([CP_HAS_ADDRINFO], [1], [struct addrinfo is defined]) +], [ +AC_MSG_RESULT(no) +]) + +AC_MSG_CHECKING(whether PTHREAD_MUTEX_RECURSIVE is supported) +AC_TRY_RUN([ +#define GNU_SOURCE +#include + +int main(void) +{ + int rc; + pthread_mutex_t m; + pthread_mutexattr_t a; + + if ((rc = pthread_mutexattr_init(&a))) return rc; + if ((rc = pthread_mutexattr_settype(&a, PTHREAD_MUTEX_RECURSIVE))) + return rc; + + if ((rc = pthread_mutex_init(&m, &a))) return rc; + if ((rc = pthread_mutex_lock(&m))) return rc; + if ((rc = pthread_mutex_trylock(&m))) return rc; + pthread_mutex_unlock(&m); + pthread_mutex_unlock(&m); + + return 0; +} +], +recursive_mutex=yes +AC_MSG_RESULT(yes) +AC_DEFINE(CP_HAS_PTHREAD_MUTEX_RECURSIVE, [1], + [Define to 1 if PTHREAD_MUTEX_RECURSIVE is supported]), +AC_MSG_RESULT(no)) + +if test "x$recursive_mutex" = "x" ; then +AC_MSG_CHECKING(whether PTHREAD_MUTEX_RECURSIVE_NP is supported) +AC_TRY_RUN([ +#define GNU_SOURCE +#include + +int main(void) +{ + int rc; + pthread_mutex_t m; + pthread_mutexattr_t a; + + if ((rc = pthread_mutexattr_init(&a))) return rc; + if ((rc = pthread_mutexattr_settype(&a, PTHREAD_MUTEX_RECURSIVE_NP))) + return rc; + + if ((rc = pthread_mutex_init(&m, &a))) return rc; + if ((rc = pthread_mutex_lock(&m))) return rc; + if ((rc = pthread_mutex_trylock(&m))) return rc; + pthread_mutex_unlock(&m); + pthread_mutex_unlock(&m); + + return 0; +} +], +recursive_mutex=yes +AC_MSG_RESULT(yes) +AC_DEFINE(CP_HAS_PTHREAD_MUTEX_RECURSIVE_NP, [1], + [Define to 1 if PTHREAD_MUTEX_RECURSIVE_NP is supported]), +AC_MSG_RESULT(no)) +fi + +AC_FUNC_MEMCMP +AC_FUNC_STRFTIME +AC_FUNC_VPRINTF +AC_CHECK_FUNC(strstr, AC_DEFINE([CP_HAS_STRSTR]),) +AC_CHECK_FUNC(memset, AC_DEFINE([CP_HAS_MEMSET]),) +AC_CHECK_FUNC(strdup, AC_DEFINE([CP_HAS_STRDUP]),) +AC_CHECK_FUNC(strndup, AC_DEFINE([CP_HAS_STRNDUP]),) +AC_CHECK_FUNC(regcomp, AC_DEFINE([CP_HAS_REGCOMP]),) +AC_CHECK_FUNC(strerror_r, AC_DEFINE([CP_HAS_STRERROR_R]),) +AC_CHECK_FUNC(gettimeofday, AC_DEFINE([CP_HAS_GETTIMEOFDAY]),) +AC_CHECK_FUNC(getopt, AC_DEFINE([CP_HAS_GETOPT]),) +AC_CHECK_FUNC(dlopen, AC_DEFINE([CP_HAS_DLOPEN]),) +AC_CHECK_FUNC(sigaction, AC_DEFINE([CP_HAS_SIGACTION]),) +AC_CHECK_FUNC(read, AC_DEFINE([CP_HAS_READ]),) +AC_CHECK_FUNC(write, AC_DEFINE([CP_HAS_WRITE]),) +AC_CHECK_FUNC(socket, AC_DEFINE([CP_HAS_SOCKET]),) +AC_CHECK_FUNC(select, AC_DEFINE([CP_HAS_SELECT]),) +AC_CHECK_FUNC(poll, AC_DEFINE([CP_HAS_POLL]),) +AC_CHECK_FUNC(inet_ntoa, AC_DEFINE([CP_HAS_INET_NTOA]),) +AC_CHECK_FUNC(inet_ntop, AC_DEFINE([CP_HAS_INET_NTOP]),) +AC_CHECK_FUNC(gethostname, AC_DEFINE([CP_HAS_GETHOSTNAME]),) +AC_CHECK_FUNC(getaddrinfo, AC_DEFINE([CP_HAS_GETADDRINFO]),) +AC_CHECK_FUNC(getcwd, AC_DEFINE([CP_HAS_GETCWD]),) +AC_CHECK_FUNC(gmtime_r, AC_DEFINE([CP_HAS_GMTIME_R]),) +AC_CHECK_FUNC(localtime_r, AC_DEFINE([CP_HAS_LOCALTIME_R]),) +AC_CHECK_FUNC(pthread_getunique_np, AC_DEFINE([CP_HAS_PTHREAD_GETUNIQUE_NP]),) +AC_CHECK_FUNC(random, AC_DEFINE([CP_HAS_RANDOM]),) +AC_CHECK_FUNC(strlcat, AC_DEFINE([CP_HAS_STRLCAT]),) +AC_CHECK_FUNC(strlcpy, AC_DEFINE([CP_HAS_STRLCPY]),) +AC_CHECK_FUNC(snprintf, AC_DEFINE([CP_HAS_SNPRINTF]),) +AC_CHECK_FUNC(vsprintf, AC_DEFINE([CP_HAS_VSPRINTF]),) +AC_CHECK_FUNC(vsnprintf, AC_DEFINE([CP_HAS_VSNPRINTF]),) +AC_CHECK_FUNC(strcasecmp, AC_DEFINE([CP_HAS_STRCASECMP]),) +AC_CHECK_FUNC(strncasecmp, AC_DEFINE([CP_HAS_STRNCASECMP]),) +AC_CHECK_FUNC(srandom, AC_DEFINE([CP_HAS_SRANDOM]),) +AC_CHECK_FUNC(stat, AC_DEFINE([CP_HAS_STAT]),) +AC_CHECK_FUNC(strptime, AC_DEFINE([CP_HAS_STRPTIME]),) +AC_CHECK_FUNC(getpagesize, AC_DEFINE([CP_HAS_GETPAGESIZE]),) + + +dnl ------------------------------------------------------------------------- +dnl collection behavior options +dnl ------------------------------------------------------------------------- + +AC_ARG_ENABLE(hashtable-multiples, +[ --enable-hashtable-multiples hashtables allow multiple values [[disabled]]], [ + if test "$enableval" = yes; then + echo enabling multiple values in hash tables + AC_DEFINE([CP_HASHTABLE_MUTLIPLE_VALUES], [1], [allow multiple values]) + else + echo disabling multiple values in hash tables + AC_DEFINE([CP_HASHTABLE_MUTLIPLE_VALUES], [0], [no multiple values]) + fi +]) + +AC_ARG_ENABLE(hashlist-multiples, +[ --enable-hashlist-multiples hashlists allow multiple values [[disabled]]], [ + if test "$enableval" = yes; then + echo enabling multiple values in hash lists + AC_DEFINE([CP_HASHLIST_MUTLIPLE_VALUES], [1], [allow multiple values]) + else + echo disabling multiple values in hash lists + AC_DEFINE([CP_HASHLIST_MUTLIPLE_VALUES], [0], [no multiple values]) + fi +]) + +dnl ------------------------------------------------------------------------- +dnl server cookie support +dnl ------------------------------------------------------------------------- + +AC_ARG_ENABLE(server-cookies, +[ --disable-server-cookies server support for http cookies [[enabled]]], + enable_server_cookies=$enableval, enable_server_cookies=yes) + +if test "$enable_server_cookies" = yes ; then + echo enabling server support for http cookies + AC_DEFINE(CP_USE_COOKIES, [1], [Define to 1 if supporting http cookies]) +else + echo disabling server support for http cookies + AC_DEFINE(CP_USE_COOKIES, [0], [not supporting http cookies]) +fi + +dnl ------------------------------------------------------------------------- +dnl http session support +dnl ------------------------------------------------------------------------- + +AC_ARG_ENABLE(http-sessions, +[ --disable-http-sessions support for http sessions [[enabled]]], + enable_http_sessions=$enableval, enable_http_sessions=yes) + +if test "$enable_http_sessions" = yes ; then + echo enabling http sessions + AC_DEFINE(CP_USE_HTTP_SESSIONS, [1], [Define to 1 if supporting http sessions]) +else + echo disabling http sessions + AC_DEFINE(CP_USE_HTTP_SESSIONS, [0], [not supporting http sessions]) +fi + +dnl ------------------------------------------------------------------------- +dnl openssl +dnl ------------------------------------------------------------------------- + +AC_ARG_WITH(ssl, +[ --with-ssl[=DIR] path to OpenSSL installation [[/usr/local/ssl]]], [ + AC_MSG_CHECKING(for libssl) + if test -d "$withval"; then + ssllib="$withval/lib"; + sslinc="$withval/include"; + AC_MSG_RESULT(found) + else + AC_MSG_RESULT(not found) + AC_MSG_ERROR(can't find OpenSSL installation at $withval) + fi +]) + +AC_ARG_ENABLE(ssl, +[ --enable-ssl enable ssl support [[enabled]]], [ + if test "$enableval" = no ; then + AC_MSG_RESULT(disabling ssl) + ssl=no + else + ssl=yes + fi +],[ + ssl=yes +]) + +dnl check where openssl is installed +if test "$ssl" = "yes" ; then + AC_MSG_CHECKING(libssl location) + if test "x$ssllib" = "x" && test "x$sslinc" = "x"; then + for loc in /usr/lib /usr/local/ssl/lib /usr/local/openssl/lib; do + if test -f "$loc/libssl.a"; then + ssllib="$loc" + break + fi + done + for loc in /usr/include/ssl /usr/include/openssl /usr/local/ssl/include \ + /usr/local/openssl/include; do + if test -d "$loc"; then + sslinc="$loc" + break + fi + done + fi + + if test "x$ssllib" = "x" ; then + AC_MSG_RESULT(not found, disabling) + ssl=no + else + AC_MSG_RESULT( $ssllib) + fi +fi + + +if test "$ssl" = "yes" ; then + LIBS="$LIBS -lssl" + ssl_example="test_ssl_client.c" + AC_DEFINE(CP_USE_SSL, [1], [Define to 1 if compiling with OpenSSL support]) + if test "x$sslinc" != "x" ; then + CFLAGS="$CFLAGS -I $sslinc" + fi + if test "x$ssllib" != "x" ; then + LDFLAGS="$LDFLAGS -L$ssllib" + fi + + case "$host" in + *-*-openbsd* | *-*-freebsd* | *-*-netbsd* | *-*-darwin*) + LIBS="$LIBS -lcrypto" + ;; + *-solaris*) + LIBS="$LIBS -lcrypto" + ;; + esac +fi + +dnl ------------------------------------------------------------------------- +dnl cp_dbms support +dnl ------------------------------------------------------------------------- + +dnl cp_dbms enabled by default unless dlfcn.h is missing +if test "$ac_have_dlfcn_h" = "yes" ; then + AC_ARG_ENABLE(cp-dbms, + [ --enable-cp-dbms build dbms abstraction layer [[enabled]]], + make_cp_dbms=$enableval, make_cp_dbms=yes) +else + AC_ARG_ENABLE(cp-dbms, + [ --enable-cp-dbms build dbms abstraction layer [[disabled]]], + make_cp_dbms=$enableval, make_cp_dbms=) +fi + +dnl ------------------------------------------------------------------------- +dnl postgres declarations +dnl ------------------------------------------------------------------------- + +use_pgsql="" +pg_dir_prm="" +pg_lib_prm="" +pg_include_prm="" + +AC_ARG_WITH(postgres, +[ --with-postgres[[=DIR]] enable postgres support, assume postgres + installation in DIR [[disabled]]], +[ use_pgsql="1" + pg_dir_prm=$withval], []) + +AC_ARG_WITH(postgres-libs, +[ --with-postgres-libs=DIR use postgres libraries installed in DIR], +[ use_pgsql="1" + pg_lib_prm=$withval], []) + +AC_ARG_WITH(postgres-includes, +[ --with-postgres-includes=DIR use postgres header files installed in DIR], +[ use_pgsql="1" + pg_include_prm=$withval], []) + +if test "x$use_pgsql" != "x" ; then + make_cp_dbms=yes +fi + +dnl ------------------------------------------------------------------------- +dnl mysql declarations +dnl ------------------------------------------------------------------------- + +use_mysql="" +mysql_dir_prm="" +mysql_lib_prm="" +mysql_include_prm="" + +AC_ARG_WITH(mysql, +[ --with-mysql[[=DIR]] enable mysql support, assume mysql + installation in DIR [[disabled]]], +[ use_mysql="1" + mysql_dir_prm=$withval], []) + +AC_ARG_WITH(mysql-libs, +[ --with-mysql-libs=DIR use mysql libraries installed in DIR], +[ use_mysql="1" + mysql_lib_prm=$withval], []) + +AC_ARG_WITH(mysql-includes, +[ --with-mysql-includes=DIR use mysql header files installed in DIR], +[ use_mysql="1" + mysql_include_prm=$withval], []) + +if test "x$use_mysql" != "x" ; then + make_cp_dbms=yes +fi + +dnl ------------------------------------------------------------------------- +dnl link cp_dbms support statically or dynamically +dnl ------------------------------------------------------------------------- + +dnl if dlfcn available, use --enable-static-dbms configuration option. +dnl Otherwise, link dbms libraries statically. +if test "$ac_have_dlfcn_h" = "yes" ; then + AC_ARG_ENABLE(static-dbms, + [ --enable-static-dbms link dbms drivers statically [[disabled]]], + cp_dbms_static=$enableval, cp_dbms_static=no) +else + cp_dbms_static=yes +fi + +if test "$make_cp_dbms" = yes; then + OPT_OBJS=db.o + if test "$cp_dbms_static" = yes ; then + echo linking dbms drivers statically + AC_DEFINE(CP_DBMS_STATIC, [1], + [Define to 1 if linking dbms libraries statically]), + else + echo linking dbms drivers dynamically + fi +fi + +dnl ------------------------------------------------------------------------- +dnl postgres setup +dnl ------------------------------------------------------------------------- + +AC_MSG_CHECKING(whether to compile postgres support) +if test "x$use_pgsql" != "x" ; then + AC_MSG_RESULT(yes) + if test -e "$pg_lib_prm/libpq.a" ; then + pg_lib = $pg_lib_prm + else + for loc in $pg_dir_prm /usr/local /usr /usr/local/pgsql /usr/local/postgres /usr/local/postgresql /opt/pgsql /opt/postgres /opt/postgresql ; do + if test -e "$loc/lib/libpq.a" ; then + pg_lib="$loc/lib" + break + fi + done + fi + + if test "x$pg_lib" = "x" ; then + AC_MSG_ERROR(can't find postgres client library) + fi + + if test -e "$pg_include_prm/libpq-fe.h" ; then + pg_include = $pg_include_prm + else + for loc in $pg_dir_prm /usr/local /usr /usr/local/pgsql /usr/local/postgres /usr/local/postgresql /opt/pgsql /opt/postgres /opt/postgresql ; do + if test -e "$loc/include/libpq-fe.h" ; then + pg_include="$loc/include" + break + fi + done + fi + + if test "x$pg_include" = "x" ; then + AC_MSG_ERROR(can't find postgres client header files) + fi + + dnl libpq treats binary parameters as big endian (network order) - check if + dnl conversions required + AC_MSG_CHECKING(whether hardware byte order is little endian) + AC_TRY_RUN([ + int main(void) + { + int i = 1; + char *c = (char *) &i; + return *c == 0; + }], + AC_MSG_RESULT(yes) + AC_DEFINE(CP_BYTE_ORDER_LITTLE_ENDIAN, [1], + [Define to 1 if hardware byte order is little endian]), + AC_MSG_RESULT(no)) + + OPT_TARGETS="$OPT_TARGETS libcp_dbms_postgres.la" + OPT_INSTALL="$OPT_INSTALL install-libcp-dbms-postgres" + PGSQL_CFLAGS="$CFLAGS -I$pg_include" + PGSQL_LDFLAGS="$LDFLAGS -L$pg_lib" + PGSQL_LIBS="$LIBS -lpq" + AC_SUBST(PGSQL_CFLAGS) + AC_SUBST(PGSQL_LDFLAGS) + AC_SUBST(PGSQL_LIBS) + PGSQL_SRC=db_postgres.c + PGSQL_HDR=db_postgres.h + PGSQL_OBJ=db_postgres.o + AC_SUBST(PGSQL_SRC) + AC_SUBST(PGSQL_HDR) + AC_SUBST(PGSQL_OBJ) + CP_DBMS_PGSQL_LIBVERSION=`cat LIBVERSION_CP_DBMS_POSTGRES` + AC_SUBST(CP_DBMS_PGSQL_LIBVERSION) + db_examples="$db_examples test_pq.c" + if test "$cp_dbms_static" = "yes" ; then + CFLAGS="$CFLAGS -I$pg_include" + LDFLAGS="$LDFLAGS -L$pg_lib" + LIBS="$LIBS -lpq" + OPT_OBJS="$OPT_OBJS db_postgres.o" + fi +else + AC_MSG_RESULT(no) +fi + +dnl ------------------------------------------------------------------------- +dnl mysql setup +dnl ------------------------------------------------------------------------- + +AC_MSG_CHECKING(whether to compile mysql support) +if test "x$use_mysql" != "x" ; then + AC_MSG_RESULT(yes) + if test -e "$mysql_lib_prm/libmysqlclient.a" ; then + mysql_lib = $mysql_lib_prm + else + for loc in $mysql_dir_prm /usr/local /usr /usr/local/mysql /opt/mysql ; do + if test -e "$loc/lib/libmysqlclient.a" ; then + mysql_lib="$loc/lib" + break + fi + done + fi + + if test "x$mysql_lib" = "x" ; then + AC_MSG_ERROR(can't find mysql client library) + fi + + if test -e "$mysql_include_prm/mysql.h" ; then + mysql_include = $mysql_include_prm + else + for loc in $mysql_dir_prm /usr/local /usr /usr/local/mysql /opt/mysql ; do + if test -e "$loc/include/mysql.h" ; then + mysql_include="$loc/include" + break + fi + done + fi + + if test "x$mysql_include" = "x" ; then + AC_MSG_ERROR(can't find mysql client header files) + fi + + OPT_TARGETS="$OPT_TARGETS libcp_dbms_mysql.la" + OPT_INSTALL="$OPT_INSTALL install-libcp-dbms-mysql" + MYSQL_CFLAGS="$CFLAGS -I$mysql_include" + MYSQL_LDFLAGS="$LDFLAGS -L$mysql_lib" + MYSQL_LIBS="$LIBS -lmysqlclient -lz" + AC_SUBST(MYSQL_CFLAGS) + AC_SUBST(MYSQL_LDFLAGS) + AC_SUBST(MYSQL_LIBS) + MYSQL_SRC=db_mysql.c + MYSQL_HDR=db_mysql.h + MYSQL_OBJ=db_mysql.o + AC_SUBST(MYSQL_SRC) + AC_SUBST(MYSQL_HDR) + AC_SUBST(MYSQL_OBJ) + CP_DBMS_MYSQL_LIBVERSION=`cat LIBVERSION_CP_DBMS_MYSQL` + AC_SUBST(CP_DBMS_MYSQL_LIBVERSION) + db_examples="$db_examples test_mysql.c" + if test "$cp_dbms_static" = "yes" ; then + CFLAGS="$CFLAGS -I$mysql_include" + LDFLAGS="$LDFLAGS -L$mysql_lib" + LIBS="$LIBS -lmysqlclient -lz" + OPT_OBJS="$OPT_OBJS db_mysql.o" + fi +else + AC_MSG_RESULT(no) +fi + +dnl ------------------------------------------------------------------------- +dnl build cpsvc +dnl ------------------------------------------------------------------------- + +AC_ARG_ENABLE(cpsvc, +[ --enable-cpsvc build cpsvc [[yes]]], + enable_cpsvc=$enableval, enable_cpsvc=yes) + +if test "$enable_cpsvc" = yes ; then + echo building cpsvc + CPSVC=yes + subdirs="$subdirs svc" +else + echo skipping cpsvc + CPSVC= +fi + +dnl define enable-cpsp option unless dlfcn.h missing +if test "$ac_have_dlfcn_h" = "yes" ; then +AC_ARG_ENABLE(cpsp, +[ --enable-cpsp build cpsp [[yes]]], + enable_cpsp=$enableval, enable_cpsp=yes) +else + enable_cpsp= +fi + +if test "$enable_cpsp" = yes ; then + + if test "$LEX" = "" || test "$LEX" = ":" ; then + AC_MSG_ERROR(lex required for cpsp - either install lex or disable cpsp); + fi + + if test "$YACC" = "" || test "$YACC" = ":" ; then + AC_MSG_ERROR(yacc required for cpsp - either install yacc or disable cpsp); + fi + + echo enabling cpsp service + CPSP=yes + AC_DEFINE([CP_USE_CPSP], [1], [supporting cpsp]) + subdirs="$subdirs svc/cpsp" + cpsp_sources="cpsp.c cpsp_invoker.c" + AC_SUBST(cpsp_sources) +else + echo skipping cpsp + CPSP= +fi + +AC_SUBST(subdirs) +AC_SUBST(OPT_TARGETS) +AC_SUBST(OPT_INSTALL) +AC_SUBST(ssl_example) +AC_SUBST(db_examples) + +if test "x$CFLAGS" = "x" ; then + CFLAGS=-O2 +fi + +output=Makefile + +if test "x$CPSVC" != "x" ; then + output="$output svc/Makefile" +fi + +if test "x$CPSP" != "x" ; then + output="$output svc/cpsp/Makefile svc/cpsp/cpsp-gen.sh svc/cpsp/Makefile.cpsp" +fi + +output="$output example/Makefile" + +dnl ------------------------------------------------------------------------- +dnl set current version number for default server name in http.h +dnl ------------------------------------------------------------------------- +mv http.h http.h.in +sed "s/__CPROPSVERSION/$CPROPSVERSION/" http.h.in > http.h + +AC_SUBST(OPT_OBJS) + +dnl check for makedepend +MAKEDEPEND=`which makedepend | sed '/^no /d'` +if test "x$MAKEDEPEND" = "x" ; then + for loc in /usr/X11R6/bin /usr/X/bin; do + if test -e "$loc/makedepend"; then + MAKEDEPEND=$loc/makedepend -Y + break + fi + done + if test "x$MAKEDEPEND" = "x" ; then + MAKEDEPEND=$root_dir/makedepend.sh + fi +else + MAKEDEPEND="$MAKEDEPEND -Y" +fi + +AC_SUBST(MAKEDEPEND) + +AC_OUTPUT($output) + +dnl ------------------------------------------------------------------------- +dnl create dependencies +dnl ------------------------------------------------------------------------- + +make depend +if test "$enable_cpsvc" = "yes" ; then + pushd svc > /dev/null + make depend + popd > /dev/null +fi +pushd example > /dev/null +make depend +popd > /dev/null Added: branches/multicore/numpy/core/cprops_thread/cp_config.h =================================================================== --- branches/multicore/numpy/core/cprops_thread/cp_config.h 2007-04-10 15:44:17 UTC (rev 3691) +++ branches/multicore/numpy/core/cprops_thread/cp_config.h 2007-04-10 17:54:59 UTC (rev 3692) @@ -0,0 +1,48 @@ +/* config.h. Generated by configure. */ +/* config.h.in. Generated from configure.in by autoheader. */ + +/* fixme: #define values that have been commented out with //// are not used + in any of the files we need. +*/ + +#ifndef _CP_CONFIG_H +#define _CP_CONFIG_H + +/* Unix specific things. + * fixme: this ifdef can check more intelligently. For now, it assumes any + * non-windows platform has pthreads. + */ +#ifndef _WIN32 +/* eric: This is used quite a few places but isn't valid on windows. */ +/* Define to 1 if you have the header file. */ +#define CP_HAS_PTHREAD_H 1 + +/* eric: used in mempool.c. Not valid on windows. */ +/* Define to 1 if you have the `getpagesize' function. */ +#define CP_HAS_GETPAGESIZE 1 +#endif + +/* eric: This is used in mempool.c, but I don't know how important it is... */ +/* Define to 1 if PTHREAD_MUTEX_RECURSIVE works */ +#define CP_HAS_PTHREAD_MUTEX_RECURSIVE 1 + + +/* eric: used in thread.c */ +/* Define to 1 if you have the `random' function. */ +#define CP_HAS_RANDOM 1 + +/* eric: used in thread.c */ +/* Define to 1 if you have the `srandom' function. */ +#define CP_HAS_SRANDOM 1 + +/* eric: what system doesn't have this??? */ +/* Define to 1 if you have the `read' function. */ +#define CP_HAS_READ 1 + +/* eric: what system doesn't have this??? */ +/* Define to 1 if you have the `write' function. */ +#define CP_HAS_WRITE 1 + + + +#endif /* _CP_CONFIG_H */ Added: branches/multicore/numpy/core/cprops_thread/hashlist.c =================================================================== --- branches/multicore/numpy/core/cprops_thread/hashlist.c 2007-04-10 15:44:17 UTC (rev 3691) +++ branches/multicore/numpy/core/cprops_thread/hashlist.c 2007-04-10 17:54:59 UTC (rev 3692) @@ -0,0 +1,1330 @@ + +/** + * @addtogroup cp_hashlist + */ +/** @{ */ +/** + * @file + * Implementation for cp_hashlist Collection with linked elements and hash key + * and with cp_hashlist_iterator. + * + * @copydoc collection + */ +/* ----------------------------------------------------------------- */ + +#include /* debug */ +#include +#include + +#include "collection.h" +//#include "log.h" +#include "common.h" + +#include "hashlist.h" +#include "linked_list.h" + +#include "cp_config.h" + +/* debug */ +#ifndef CP_HASHLIST_MULTIPLE_VALUES +#define CP_HASHLIST_MULTIPLE_VALUES 1 +#endif + + + /* internal methods */ + +/* internal lock function */ +int cp_hashlist_txlock(cp_hashlist *list, int type); +/* internal unlock function */ +int cp_hashlist_txunlock(cp_hashlist *list); + +static cp_hashlist_entry * + cp_hashlist_create_entry(cp_hashlist *list, int mode, + void *key, void *value); + +static void + cp_hashlist_entry_delete(cp_hashlist_entry *entry); + +static void cp_hashlist_entry_release_by_option(cp_hashlist *list, + cp_hashlist_entry *entry, + int mode); +/** + * insert an entry + * + * @param list the collection object + * @param entry the entry to insert + * @return entry the inserted entry + */ +static cp_hashlist_entry * + cp_hashlist_insert_internal(cp_hashlist *list, cp_hashlist_entry *entry); + +/** + * remove first entry matching key + * + * @param list the collection object + * @param key that is searched for + * @retval entry if successful the removed entry + * @retval NULL if the entry was not found + */ +static cp_hashlist_entry * + cp_hashlist_remove_internal(cp_hashlist *list, void *key); + +/** + * remove specified entry + * + * @param list the collection object + * @param entry the entry to remove + * @retval entry if successful the passed entry + * @retval NULL if the entry was not found + */ +static cp_hashlist_entry * + cp_hashlist_remove_entry_internal(cp_hashlist *list, + cp_hashlist_entry *entry); + +static void *cp_hashlist_get_internal(cp_hashlist *list, void *key); + + /* end internal methods */ + + +cp_hashlist * + cp_hashlist_create_by_option(int mode, + unsigned long size_hint, + cp_hashfunction hash_fn, + cp_compare_fn compare_fn, + cp_copy_fn copy_key, + cp_destructor_fn free_key, + cp_copy_fn copy_value, + cp_destructor_fn free_value) +{ + cp_hashlist *list = (cp_hashlist *) calloc(1, sizeof(cp_hashlist)); + if (list == NULL) + { + errno = ENOMEM; + return NULL; + } + + list->table_size = cp_hashtable_choose_size(size_hint); + list->items = 0; + list->table = (cp_hashlist_entry **) calloc(list->table_size, sizeof(cp_hashlist_entry *)); + if (list->table == NULL) + { + errno = ENOMEM; + return NULL; + } + + list->hash_fn = hash_fn; + list->compare_fn = compare_fn; + list->copy_key = NULL; + list->copy_value = NULL; + + list->head = list->tail = NULL; + list->lock = malloc(sizeof(cp_lock)); + if (list->lock == NULL) + { + free(list->table); + free(list); + errno = ENOMEM; + return NULL; + } + if (!(mode & COLLECTION_MODE_NOSYNC)) + if (cp_lock_init(list->lock, NULL)) + { + free(list->lock); + free(list->table); + free(list); + return NULL; + } + + list->mode = mode; + + list->copy_key = copy_key; + list->copy_value = copy_value; + list->free_key = free_key; + list->free_value = free_value; + + list->min_size = size_hint; + list->fill_factor_min = CP_HASHTABLE_DEFAULT_MIN_FILL_FACTOR; + list->fill_factor_max = CP_HASHTABLE_DEFAULT_MAX_FILL_FACTOR; + + return list; +} + + +cp_hashlist *cp_hashlist_create_by_mode(int mode, + unsigned long size_hint, + cp_hashfunction hash_fn, + cp_compare_fn compare_fn) +{ + return + cp_hashlist_create_by_option(mode, size_hint, hash_fn, compare_fn, + NULL, NULL, NULL, NULL); +} + +static cp_hashlist_entry * + cp_hashlist_create_entry(cp_hashlist *list, int mode, + void *key, void *value) +{ + cp_copy_fn ck = list->copy_key; + cp_copy_fn cv = list->copy_value; + cp_hashlist_entry *entry = + (cp_hashlist_entry *) calloc(1, sizeof(cp_hashlist_entry)); + + if (entry == NULL) + { + errno = ENOMEM; + return NULL; + } + + entry->next = entry->prev = entry->bucket = NULL; + if (mode & COLLECTION_MODE_COPY) + { + entry->key = ck ? (*ck)(key) : key; + entry->value = cv ? (*cv)(value) : value; + } + else + { + entry->key = key; + entry->value = value; + } + + return entry; +} + + +static void + cp_hashlist_destroy_internal(cp_hashlist *list, + int mode, + cp_destructor_fn dk, + cp_destructor_fn dv) +{ + int syncbit = list->mode & COLLECTION_MODE_NOSYNC; + + if (!syncbit) cp_hashlist_txlock(list, COLLECTION_LOCK_WRITE); + while (list->head != NULL) + { + cp_hashlist_entry *entry = list->head; + list->head = entry->next; + if (mode & COLLECTION_MODE_DEEP) + { + if (dk) (*dk)(entry->key); + if (dv) (*dv)(entry->value); + } + cp_hashlist_entry_delete(entry); + } + + if (!syncbit) cp_hashlist_txunlock(list); + if (list->lock) + { + cp_lock_destroy(list->lock); + free(list->lock); + } + + free(list->table); + free(list); +} + +void cp_hashlist_destroy(cp_hashlist *list) +{ + cp_hashlist_destroy_internal(list, list->mode, + list->free_key, list->free_value); +} + +void cp_hashlist_destroy_deep(cp_hashlist *list) +{ + cp_hashlist_set_mode(list, COLLECTION_MODE_DEEP); + cp_hashlist_destroy_custom(list, list->free_key, list->free_value); +} + +void cp_hashlist_destroy_by_option(cp_hashlist *list, int mode) +{ + + if (list) + cp_hashlist_destroy_internal(list, mode, + list->free_key, list->free_value); +} + +void cp_hashlist_destroy_custom(cp_hashlist *list, + cp_destructor_fn dk, + cp_destructor_fn dv) +{ + if (list) + cp_hashlist_destroy_internal(list, list->mode, dk, dv); +} + +int cp_hashlist_callback(cp_hashlist *list, + int (*cb)(void *key, void *value, void *id), + void *id) +{ + cp_hashlist_entry *entry; + + if (list == NULL || cb == NULL) + { + errno = EINVAL; + return -1; + } + + if (cp_hashlist_txlock(list, COLLECTION_LOCK_READ)) return -1; + + entry = list->head; + while (entry != NULL) + { + if ((*cb)(entry->key, entry->value, id) != 0) + break; + entry = entry->next; + } + + cp_hashlist_txunlock(list); + return 0; +} + +int cp_hashlist_get_mode(cp_hashlist *list) +{ + return list->mode; +} + +int cp_hashlist_set_mode(cp_hashlist *list, int mode) +{ + int rc = EINVAL; + if (list) + { + int syncbit = list->mode & COLLECTION_MODE_NOSYNC; + + /* can't set NOSYNC in the middle of a transaction */ + if ((list->mode & COLLECTION_MODE_IN_TRANSACTION) && + (mode & COLLECTION_MODE_NOSYNC)) return EINVAL; + + syncbit = list->mode & COLLECTION_MODE_NOSYNC; + + if (cp_hashlist_txlock(list, COLLECTION_LOCK_WRITE)) return -1; + list->mode |= mode; + if (!syncbit) cp_hashlist_txunlock(list); + + rc = 0; + } + + return 0; +} + +int cp_hashlist_unset_mode(cp_hashlist *list, int mode) +{ + int syncbit; + if (cp_hashlist_txlock(list, COLLECTION_LOCK_WRITE)) return -1; + syncbit = list->mode & COLLECTION_MODE_NOSYNC; + list->mode &= list->mode ^ mode; + if (!syncbit) cp_hashlist_txunlock(list); + + return 0; +} + +int cp_hashlist_set_min_size(cp_hashlist *list, unsigned long min_size) +{ + if (cp_hashlist_txlock(list, COLLECTION_LOCK_WRITE)) return -1; + list->min_size = min_size; + cp_hashlist_txunlock(list); + return 0; +} + + +int cp_hashlist_set_max_fill_factor(cp_hashlist *list, int fill_factor) +{ + if (cp_hashlist_txlock(list, COLLECTION_LOCK_WRITE)) return -1; + list->fill_factor_max = fill_factor; + cp_hashlist_txunlock(list); + return 0; +} + +int cp_hashlist_set_min_fill_factor(cp_hashlist *list, int fill_factor) +{ + if (cp_hashlist_txlock(list, COLLECTION_LOCK_WRITE)) return -1; + list->fill_factor_min = fill_factor; + cp_hashlist_txunlock(list); + return 0; +} + +void *cp_hashlist_resize_nosync(cp_hashlist *list, unsigned long new_size) +{ + unsigned long old_size; + cp_hashlist_entry **old_table; + cp_hashlist_entry *entry, *next, **insert; + unsigned long i, index; + + old_size = list->table_size; + old_table = list->table; + + new_size = cp_hashtable_choose_size(new_size); + if (old_size == new_size) /* not enough gap to make a change yet */ + return list; + else + list->table_size = new_size; +#ifdef __TRACE__ + DEBUGMSG("resizing table (nosync): %d to %d\n", old_size, list->table_size); +#endif + + list->table = (cp_hashlist_entry **) calloc(list->table_size, sizeof(cp_hashlist_entry *)); + + if (list->table == NULL) + { + errno = ENOMEM; + return NULL; + } + + for (i = 0; i < old_size; i++) + { + entry = old_table[i]; + while (entry != NULL) + { + index = abs((*list->hash_fn)(entry->key)) % list->table_size; + next = entry->bucket; + entry->bucket = NULL; + insert = &list->table[index]; + while (*insert != NULL) insert = &(*insert)->bucket; + *insert = entry; + + entry = next; + } + } + + free(old_table); + + return list; +} + +void *cp_hashlist_append(cp_hashlist *list, void *key, void *value) +{ + return cp_hashlist_append_by_option(list, key, value, list->mode); +} + +static int cp_hashlist_contains_internal(cp_hashlist *list, void *key) +{ + int rc = 0; + cp_hashlist_entry *curr; + int index = abs((*list->hash_fn)(key)) % list->table_size; + + curr = list->table[index]; + + while (curr != NULL) + { + if ((*list->compare_fn)(key, curr->key) == 0) + { + rc = 1; + break; + } + curr = curr->bucket; + } + + return rc; +} + +int cp_hashlist_contains(cp_hashlist *list, void *key) +{ + int rc = 0; + + if (cp_hashlist_txlock(list, COLLECTION_LOCK_READ)) return -1; + rc = cp_hashlist_contains_internal(list, key); + cp_hashlist_txunlock(list); + + return rc; +} + +void *cp_hashlist_append_by_option(cp_hashlist *list, + void *key, + void *value, + int mode) +{ + cp_hashlist_entry *entry; + void *res = NULL; + int rc = 0; + + if (cp_hashlist_txlock(list, COLLECTION_LOCK_WRITE)) return NULL; + + if ((mode & COLLECTION_MODE_MULTIPLE_VALUES) == 0 + && cp_hashlist_contains_internal(list, key)) + { + rc = EINVAL; + goto DONE; + } + + if ((entry = cp_hashlist_create_entry(list, mode, key, value)) == NULL) + { + rc = ENOMEM; + goto DONE; + } + + cp_hashlist_insert_internal(list, entry); + + if (list->tail) + { + entry->prev = list->tail; + list->tail->next = entry; + list->tail = entry; + } + else list->tail = list->head = entry; + + res = value; + +DONE: + cp_hashlist_txunlock(list); + if (rc) errno = rc; + + return res; +} + + +void *cp_hashlist_insert(cp_hashlist *list, void *key, void *value) +{ + return cp_hashlist_insert_by_option(list, key, value, list->mode); +} + + +void *cp_hashlist_insert_by_option(cp_hashlist *list, void *key, + void *value, int mode) +{ + cp_hashlist_entry *entry; + void *res = NULL; + int rc = 0; + + if (cp_hashlist_txlock(list, COLLECTION_LOCK_WRITE)) return NULL; + + if ((mode & COLLECTION_MODE_MULTIPLE_VALUES) == 0 + && cp_hashlist_contains_internal(list, key)) + { + rc = EINVAL; + goto DONE; + } + + if ((entry = cp_hashlist_create_entry(list, mode, key, value)) == NULL) + { + rc = errno; + goto DONE; + } + + cp_hashlist_insert_internal(list, entry); + if (list->head) + { + entry->next = list->head; + list->head->prev = entry; + list->head = entry; + } + else list->head = list->tail = entry; + + res = value; + +DONE: + cp_hashlist_txunlock(list); + if (rc) errno = rc; + + return res; +} + + +void *cp_hashlist_get(cp_hashlist *list, void *key) +{ + void *res = NULL; + + if (cp_hashlist_txlock(list, COLLECTION_LOCK_READ)) return NULL; + + res = cp_hashlist_get_internal(list, key); + +#if CP_HASHLIST_MULTIPLE_VALUES + if (!(list->mode & COLLECTION_MODE_MULTIPLE_VALUES)) +#endif + if (res) res = ((cp_hashlist_entry *) res)->value; + + cp_hashlist_txunlock(list); + + return res; +} + +static void *cp_hashlist_unlink_internal(cp_hashlist *list, + cp_hashlist_entry *holder, + int mode) +{ + void *res = NULL; + + if (holder) + { + if (holder->next) + holder->next->prev = holder->prev; + else + list->tail = holder->prev; + + if (holder->prev) + holder->prev->next = holder->next; + else + list->head = holder->next; + + res = holder->value; + cp_hashlist_entry_release_by_option(list, holder, mode); + } + + return res; +} + +void *cp_hashlist_remove_by_option(cp_hashlist *list, void *key, int mode) +{ + void *res; + cp_hashlist_entry *holder; + + if (cp_hashlist_txlock(list, COLLECTION_LOCK_WRITE)) return NULL; + + holder = cp_hashlist_remove_internal(list, key); + res = cp_hashlist_unlink_internal(list, holder, mode); + + cp_hashlist_txunlock(list); + + return res; +} + +void *cp_hashlist_remove(cp_hashlist *list, void *key) +{ + return cp_hashlist_remove_by_option(list, key, list->mode); +} + +void *cp_hashlist_remove_deep(cp_hashlist *list, void *key) +{ + return + cp_hashlist_remove_by_option(list, key, + list->mode | COLLECTION_MODE_DEEP); +} + +void *cp_hashlist_get_head(cp_hashlist *list) +{ + void *res; + + if (cp_hashlist_txlock(list, COLLECTION_LOCK_WRITE)) return NULL; + + res = list->head ? list->head->value : NULL; + + cp_hashlist_txunlock(list); + return res; +} + +void *cp_hashlist_get_tail(cp_hashlist *list) +{ + void *res; + + if (cp_hashlist_txlock(list, COLLECTION_LOCK_WRITE)) return NULL; + + res = list->tail ? list->tail->value : NULL; + + cp_hashlist_txunlock(list); + return res; +} + + +void *cp_hashlist_remove_head(cp_hashlist *list) +{ + return cp_hashlist_remove_head_by_option(list, list->mode); +} + +void *cp_hashlist_remove_head_by_option(cp_hashlist *list, int mode) +{ + cp_hashlist_entry *entry; + void *res = NULL; + + if (cp_hashlist_txlock(list, COLLECTION_LOCK_WRITE)) return NULL; + + entry = list->head; + if (entry) + { + if (!cp_hashlist_remove_entry_internal(list, entry)) /* should _not_ happen */ + printf("failed to remove item from cp_hashlist table: %s\n", (char *) entry->value); + + list->head = list->head->next; + if (list->head) + list->head->prev = NULL; + else + list->tail = NULL; + + res = entry->value; + + cp_hashlist_entry_release_by_option(list, entry, mode); + } + + cp_hashlist_txunlock(list); + return res; +} + +void *cp_hashlist_remove_tail(cp_hashlist *list) +{ + return cp_hashlist_remove_tail_by_option(list, list->mode); +} + +void *cp_hashlist_remove_tail_by_option(cp_hashlist *list, int mode) +{ + cp_hashlist_entry *entry; + void *res = NULL; + + if (cp_hashlist_txlock(list, COLLECTION_LOCK_WRITE)) return NULL; + + entry = list->tail; + if (entry) + { + if (!cp_hashlist_remove_entry_internal(list, entry)) /* should _not_ happen */ + printf("failed to remove item from cp_hashlist table: %s\n", (char *) entry->value); + + list->tail = entry->prev; + if (list->tail) + list->tail->next = NULL; + else + list->head = NULL; + + res = entry->value; + cp_hashlist_entry_release_by_option(list, entry, mode); + } + + cp_hashlist_txunlock(list); + return res; +} + +unsigned long cp_hashlist_item_count(cp_hashlist *list) +{ + unsigned long count; + if (cp_hashlist_txlock(list, COLLECTION_LOCK_READ)) return -1; + + count = list->items; + + cp_hashlist_txunlock(list); + return count; +} + + +int cp_hashlist_lock_internal(cp_hashlist *list, int lock_mode) +{ + int rc = -1; + + switch (lock_mode) + { + case COLLECTION_LOCK_READ: + rc = cp_lock_rdlock(list->lock); + break; + + case COLLECTION_LOCK_WRITE: + rc = cp_lock_wrlock(list->lock); + break; + + case COLLECTION_LOCK_NONE: + rc = 0; + break; + + default: + errno = EINVAL; + break; + } + + return rc; +} + +int cp_hashlist_unlock_internal(cp_hashlist *list) +{ + return cp_lock_unlock(list->lock); +} + +int cp_hashlist_txlock(cp_hashlist *list, int type) +{ + if (list->mode & COLLECTION_MODE_NOSYNC) return 0; + if (list->mode & COLLECTION_MODE_IN_TRANSACTION && + list->txtype == COLLECTION_LOCK_WRITE) + { + cp_thread self = cp_thread_self(); + if (cp_thread_equal(self, list->txowner)) return 0; + } + return cp_hashlist_lock_internal(list, type); +} + +int cp_hashlist_txunlock(cp_hashlist *list) +{ + if (list->mode & COLLECTION_MODE_NOSYNC) return 0; + if (list->mode & COLLECTION_MODE_IN_TRANSACTION && + list->txtype == COLLECTION_LOCK_WRITE) + { + cp_thread self = cp_thread_self(); + if (cp_thread_equal(self, list->txowner)) return 0; + } + return cp_hashlist_unlock_internal(list); +} + +/* lock and set the transaction indicators */ +int cp_hashlist_lock(cp_hashlist *list, int type) +{ + int rc; + if ((list->mode & COLLECTION_MODE_NOSYNC)) return EINVAL; + if ((rc = cp_hashlist_lock_internal(list, type))) return rc; + list->txtype = type; + list->txowner = cp_thread_self(); + list->mode |= COLLECTION_MODE_IN_TRANSACTION; + return 0; +} + +/* unset the transaction indicators and unlock */ +int cp_hashlist_unlock(cp_hashlist *list) +{ + cp_thread self = cp_thread_self(); + if (list->txowner == self) + { + list->txtype = 0; + list->txowner = 0; + list->mode ^= COLLECTION_MODE_IN_TRANSACTION; + } + else if (list->txtype == COLLECTION_LOCK_WRITE) + return -1; + return cp_hashlist_unlock_internal(list); +} + + +void *cp_hashlist_entry_get_key(cp_hashlist_entry *entry) +{ + return (entry) ? entry->key : NULL; +} + +void *cp_hashlist_entry_get_value(cp_hashlist_entry *entry) +{ + return (entry) ? entry->value : NULL; +} + +int cp_hashlist_is_empty(cp_hashlist *list) +{ + return cp_hashlist_item_count(list) == 0; +} + + +/**************************************************************************** + * * + * cp_hashlist_iterator implementation * + * * + ****************************************************************************/ + +cp_hashlist_iterator* cp_hashlist_create_iterator(cp_hashlist *list, int type) +{ + int rc = - 1; + cp_hashlist_iterator *iterator = + (cp_hashlist_iterator *) malloc(sizeof(cp_hashlist_iterator)); + if (iterator == NULL) return NULL; + + iterator->list = list; + iterator->pos = &list->head; + iterator->lock_type = type; + + switch (type) + { + case COLLECTION_LOCK_READ : + rc = cp_hashlist_txlock(list, COLLECTION_LOCK_READ); + break; + + case COLLECTION_LOCK_WRITE : + rc = cp_hashlist_txlock(list, COLLECTION_LOCK_WRITE); + break; + + default : + rc = 0; + } + + if (rc) /* locking failed */ + { + free(iterator); + iterator = NULL; + } + + return iterator; +} + +int cp_hashlist_iterator_init(cp_hashlist_iterator *iterator, + cp_hashlist *list, int type) +{ + int rc; + iterator->list = list; + iterator->pos = &list->head; + iterator->lock_type = type; + + switch (type) + { + case COLLECTION_LOCK_READ : + rc = cp_hashlist_txlock(list, COLLECTION_LOCK_READ); + break; + + case COLLECTION_LOCK_WRITE : + rc = cp_hashlist_txlock(list, COLLECTION_LOCK_WRITE); + break; + + default : + rc = 0; + } + + return rc; +} + + +int cp_hashlist_iterator_head(cp_hashlist_iterator *iterator) +{ + if (iterator == NULL) return -1; + iterator->pos = &iterator->list->head; + + return 0; +} + +int cp_hashlist_iterator_tail(cp_hashlist_iterator *iterator) +{ + if (iterator == NULL) return -1; + iterator->pos = &iterator->list->tail; + + return 0; +} + +int cp_hashlist_iterator_init_tail(cp_hashlist_iterator *iterator, cp_hashlist *list, int type) +{ + int rc; + iterator->list = list; + iterator->pos = &list->tail; + iterator->lock_type = type; + + switch (type) + { + case COLLECTION_LOCK_READ : + rc = cp_hashlist_txlock(list, COLLECTION_LOCK_READ); + break; + + case COLLECTION_LOCK_WRITE : + rc = cp_hashlist_txlock(list, COLLECTION_LOCK_WRITE); + break; + + default : + rc = 0; + } + + return rc; +} + +int cp_hashlist_iterator_to_key(cp_hashlist_iterator *iterator, void *key) +{ + cp_hashlist_entry *entry = NULL; + +#if CP_HASHLIST_MULTIPLE_VALUES + if ((iterator->list->mode & COLLECTION_MODE_MULTIPLE_VALUES)) + { + cp_list *res = cp_hashlist_get_internal(iterator->list, key); + if (res) + { + entry = cp_list_get_head(res); + cp_list_destroy(res); + } + } + else +#endif + entry = cp_hashlist_get_internal(iterator->list, key); + + if (entry == NULL) return -1; + + if (entry->prev) + iterator->pos = &entry->prev->next; + else + iterator->pos = &iterator->list->head; + + return 0; +} + + +int cp_hashlist_iterator_release(cp_hashlist_iterator *iterator) +{ + int rc = 0; + if (iterator->lock_type != COLLECTION_LOCK_NONE) + rc = cp_hashlist_txunlock(iterator->list); + + return rc; +} + +int cp_hashlist_iterator_destroy(cp_hashlist_iterator *iterator) +{ + int rc = cp_hashlist_iterator_release(iterator); + free(iterator); + + return rc; +} + +cp_hashlist_entry *cp_hashlist_iterator_next(cp_hashlist_iterator *iterator) +{ + cp_hashlist_entry *entry = NULL; + + if (*(iterator->pos)) + { + entry = (*iterator->pos); + iterator->pos = &(*(iterator->pos))->next; + } + else if (iterator->list->head && + iterator->pos == &iterator->list->head->prev) + { + entry = iterator->list->head; + iterator->pos = &iterator->list->head; + } + + return entry; +} + +void *cp_hashlist_iterator_next_key(cp_hashlist_iterator *iterator) +{ + return cp_hashlist_entry_get_key(cp_hashlist_iterator_next(iterator)); +} + +void *cp_hashlist_iterator_next_value(cp_hashlist_iterator *iterator) +{ + return cp_hashlist_entry_get_value(cp_hashlist_iterator_next(iterator)); +} + +cp_hashlist_entry *cp_hashlist_iterator_prev(cp_hashlist_iterator *iterator) +{ + cp_hashlist_entry *entry = NULL; + + if (*iterator->pos) + { + entry = (*iterator->pos); + iterator->pos = &(*iterator->pos)->prev; + } + else if (iterator->list->tail && + iterator->pos == &iterator->list->tail->next) + { + entry = iterator->list->tail; + iterator->pos = &iterator->list->tail; + } + + return entry; +} + +void *cp_hashlist_iterator_prev_key(cp_hashlist_iterator *iterator) +{ + return cp_hashlist_entry_get_key(cp_hashlist_iterator_prev(iterator)); +} + +void *cp_hashlist_iterator_prev_value(cp_hashlist_iterator *iterator) +{ + return cp_hashlist_entry_get_value(cp_hashlist_iterator_prev(iterator)); +} + +cp_hashlist_entry *cp_hashlist_iterator_curr(cp_hashlist_iterator *iterator) +{ + cp_hashlist_entry *item = NULL; + + if (*iterator->pos) + item = (*iterator->pos); + + return item; +} + +void *cp_hashlist_iterator_curr_key(cp_hashlist_iterator *iterator) +{ + return cp_hashlist_entry_get_key(cp_hashlist_iterator_curr(iterator)); +} + +void *cp_hashlist_iterator_curr_value(cp_hashlist_iterator *iterator) +{ + return cp_hashlist_entry_get_value(cp_hashlist_iterator_curr(iterator)); +} + +cp_hashlist_entry *cp_hashlist_iterator_insert(cp_hashlist_iterator *iterator, + void *key, + void *value) +{ + cp_hashlist_entry *new_entry = NULL; + + if ((iterator->list->mode & COLLECTION_MODE_NOSYNC) || + (iterator->lock_type == COLLECTION_LOCK_WRITE)) + { + cp_hashlist_entry *entry; + if ((iterator->list->mode & COLLECTION_MODE_MULTIPLE_VALUES) == 0 + && cp_hashlist_contains_internal(iterator->list, key)) + { + errno = EINVAL; + return NULL; + } + + entry = cp_hashlist_create_entry(iterator->list, + iterator->list->mode, + key, + value); + if (entry == NULL) return NULL; + cp_hashlist_insert_internal(iterator->list, entry); + new_entry = entry; + + entry->next = *iterator->pos; + + if (*iterator->pos) + { + entry->prev = (*iterator->pos)->prev; + (*iterator->pos)->prev = entry; + if (entry->prev) + entry->prev->next = entry; + } + else if (iterator->list->head == NULL) /* iterator not pointing at much - list may be empty */ + iterator->list->head = iterator->list->tail = entry; + else if (iterator->pos == &iterator->list->head->prev) /* iterator moved before head */ + { + entry->prev = NULL; + entry->next = iterator->list->head; + entry->next->prev = entry; + iterator->list->head = entry; + } + else /* iterator moved after tail */ + { + entry->prev = iterator->list->tail; + entry->prev->next = entry; + iterator->list->tail = entry; + } + + iterator->pos = &entry->next; /* keep iterator on same entry */ + + iterator->list->items++; + } + else /* mode is not NOSYNC and no LOCK_WRITE */ + errno = EINVAL; + + return new_entry; +} + +cp_hashlist_entry *cp_hashlist_iterator_append(cp_hashlist_iterator *iterator, + void *key, + void *value) +{ + cp_hashlist_entry *new_entry = NULL; + + if ((iterator->list->mode & COLLECTION_MODE_NOSYNC) || + (iterator->lock_type == COLLECTION_LOCK_WRITE)) + { + cp_hashlist_entry *entry; + + if ((iterator->list->mode & COLLECTION_MODE_MULTIPLE_VALUES) == 0 + && cp_hashlist_contains_internal(iterator->list, key)) + { + errno = EINVAL; + return NULL; + } + + entry = cp_hashlist_create_entry(iterator->list, + iterator->list->mode, + key, + value); + if (entry == NULL) return NULL; + cp_hashlist_insert_internal(iterator->list, entry); + new_entry = entry; + + entry->prev = *iterator->pos; + + if (*iterator->pos) + { + entry->next = (*iterator->pos)->next; + (*iterator->pos)->next = entry; + if (entry->next) + entry->next->prev = entry; + } + else if (iterator->list->tail == NULL) /* iterator not pointing at much - list may be empty */ + iterator->list->tail = iterator->list->head = entry; + else if (iterator->pos == &iterator->list->tail->next) /* iterator moved after tail */ + { + entry->next = NULL; + entry->prev = iterator->list->tail; + entry->prev->next = entry; + iterator->list->tail = entry; + } + else /* iterator moved before head */ + { + entry->next = iterator->list->head; + entry->next->prev = entry; + iterator->list->head = entry; + } + + iterator->pos = &entry->prev; /* keep iterator on same entry */ + iterator->list->items++; + } + else /* mode is not NOSYNC and no LOCK_WRITE */ + errno = EINVAL; + + return new_entry; +} + +void *cp_hashlist_iterator_remove(cp_hashlist_iterator *iterator) +{ + void *rm_value = NULL; + + if ((iterator->list->mode & COLLECTION_MODE_NOSYNC) || + (iterator->lock_type == COLLECTION_LOCK_WRITE)) + { + if (*iterator->pos) + { + cp_hashlist_entry *curr = *iterator->pos; + + if (curr->next) + iterator->pos = &curr->next->prev; + else if (curr->prev) + iterator->pos = &curr->prev->next; + else /* removing last item */ + iterator->pos = &iterator->list->head; + + curr = cp_hashlist_remove_internal(iterator->list, curr->key); + rm_value = + cp_hashlist_unlink_internal(iterator->list, + curr, iterator->list->mode); + } + } + + return rm_value; +} + +/* ----------------------------------------------------------------- */ +/** @} */ + + +/* ----------------------------------------------------------------- */ +/* Internal methods */ +/* ----------------------------------------------------------------- */ + +static cp_hashlist_entry * + cp_hashlist_insert_internal(cp_hashlist *list, + cp_hashlist_entry *entry) +{ + cp_hashlist_entry **insert; + unsigned long index; + + if (!(list->mode & COLLECTION_MODE_NORESIZE) && + list->items * 100 > list->table_size * list->fill_factor_max) + cp_hashlist_resize_nosync(list, list->table_size * 2); + + index = abs((*list->hash_fn)(entry->key)) % list->table_size; + insert = &list->table[index]; + + /* accept doubles */ + while (*insert != NULL) + insert = &(*insert)->bucket; + + *insert = entry; + list->items++; + + return entry; +} + + +static void *cp_hashlist_get_internal(cp_hashlist *list, void *key) +{ + unsigned long index; + cp_hashlist_entry *entry; + + index = abs((*list->hash_fn)(key)) % list->table_size; + entry = list->table[index]; + while (entry && (*list->compare_fn)(entry->key, key)) + entry = entry->bucket; + +#if CP_HASHLIST_MULTIPLE_VALUES + if ((list->mode & COLLECTION_MODE_MULTIPLE_VALUES) && entry) + { + cp_list *res = + cp_list_create_view(list->mode, + NULL, + list->copy_value, + list->free_value, + list->lock); + cp_list_insert(res, entry->value); + + if (list->mode & COLLECTION_MODE_LIST_ORDER) /* list order */ + { + cp_hashlist_entry *i; + for (i = entry->prev; i; i++) + if ((*list->compare_fn)(i->key, key) == 0) + cp_list_insert(res, i->value); + + for (i = entry->next; i; i++) + if ((*list->compare_fn)(i->key, key) == 0) + cp_list_append(res, i->value); + } + else /* insertion order */ + { + entry = entry->bucket; + while (entry) + if ((*list->compare_fn)(entry->key, key) == 0) + cp_list_append(res, entry->value); + } + + return res; + } +#endif + + return entry; +} + + +static cp_hashlist_entry * + cp_hashlist_remove_entry_internal(cp_hashlist *list, + cp_hashlist_entry *entry) +{ + cp_hashlist_entry **remove; + unsigned long index; + + index = abs((*list->hash_fn)(entry->key)) % list->table_size; + remove = &list->table[index]; + while (*remove != NULL) + { + if (*remove == entry) break; + remove = &(*remove)->bucket; + } + + if (*remove) + { + *remove = (*remove)->bucket; + list->items--; + } + else /* should _not_ happen */ + { + printf("may day, cannot find that entry: %s\n", (char *) entry->key); + return NULL; + } + + return entry; +} + +static cp_hashlist_entry * + cp_hashlist_remove_internal(cp_hashlist *list, void *key) +{ + cp_hashlist_entry **remove, *holder; + unsigned long index; + + if (!(list->mode & COLLECTION_MODE_NORESIZE) && + list->items * 100 < list->table_size * list->fill_factor_min && + list->items > list->min_size) + cp_hashlist_resize_nosync(list, list->table_size / 2); + + index = abs((*list->hash_fn)(key)) % list->table_size; + remove = &list->table[index]; + while (*remove != NULL) + { + if ((*list->compare_fn)((*remove)->key, key) == 0) break; + remove = &(*remove)->bucket; + } + + holder = NULL; + if (*remove) + { + holder = *remove; + *remove = (*remove)->bucket; + list->items--; + } + + return holder; +} + + +static void cp_hashlist_entry_delete(cp_hashlist_entry *entry) +{ + if (entry) free(entry); +} + +static void + cp_hashlist_entry_release_by_option(cp_hashlist *list, + cp_hashlist_entry *entry, + int mode) +{ + if (entry) + { + if (mode & COLLECTION_MODE_DEEP) + { + if (list->free_key) (*list->free_key)(entry->key); + if (list->free_value) (*list->free_value)(entry->value); + } + free(entry); + } +} + Property changes on: branches/multicore/numpy/core/cprops_thread/hashlist.c ___________________________________________________________________ Name: svn:executable + * Added: branches/multicore/numpy/core/cprops_thread/hashlist.h =================================================================== --- branches/multicore/numpy/core/cprops_thread/hashlist.h 2007-04-10 15:44:17 UTC (rev 3691) +++ branches/multicore/numpy/core/cprops_thread/hashlist.h 2007-04-10 17:54:59 UTC (rev 3692) @@ -0,0 +1,572 @@ +#ifndef _CP_HASHLIST_H +#define _CP_HASHLIST_H + +/** @{ */ +/** + * @file + * + * a mapping traversable by iterator - who could want more. access elements + * sequentially or by key. + */ +/* ----------------------------------------------------------------- */ + +#include "common.h" + +__BEGIN_DECLS + +#include "cp_config.h" + +#include "collection.h" +#include "hashtable.h" + +/*************/ + +typedef CPROPS_DLL struct _cp_hashlist_entry +{ + void *key; /**< key of stored element */ + void *value; /**< stored element (content) */ + struct _cp_hashlist_entry *next; /**< next entry */ + struct _cp_hashlist_entry *prev; /**< previous entry */ + struct _cp_hashlist_entry *bucket; /**< next record in bucket */ +} cp_hashlist_entry; + + +/** + * Main object that holds the endpoints of the hash-list and the hash-table. + * + * It also stores the hash, compare and copy methods and the default + * operation mode. + */ +typedef CPROPS_DLL struct _cp_hashlist +{ + cp_hashlist_entry **table; /**< table of entries in the hash-table */ + cp_hashlist_entry *head; /**< first item in the list */ + cp_hashlist_entry *tail; /**< last item in the list */ + unsigned long table_size; /**< size of the hash-table */ + unsigned long items; /**< number of items in the collection */ + + cp_hashfunction hash_fn; /**< pointer to hash function */ + cp_compare_fn compare_fn; /**< pointer to compare function */ + cp_copy_fn copy_key; /**< pointer to key copy function */ + cp_copy_fn copy_value; /**< pointer to value copy function */ + cp_destructor_fn free_key; + cp_destructor_fn free_value; + + int mode; /**< operation mode (see collection.h) */ + cp_lock *lock; /**< lock */ + cp_thread txowner; /**< lock owner */ + int txtype; /**< lock type */ + + unsigned long min_size; + int fill_factor_min; /**< minimal fill factor in percent */ + int fill_factor_max; /**< maximal fill factor in percent */ +} cp_hashlist; + +/** + * iterator for hashlists + */ +typedef CPROPS_DLL struct _cp_hashlist_iterator +{ + cp_hashlist *list; /**< link to the list */ + cp_hashlist_entry **pos; /**< current position */ + + int lock_type; /**< locking mode */ +} cp_hashlist_iterator; + + +/* + * Removes the entry with matching key and destroys it. + * + * @param list the object + * @param key Key which is searched. + * @param mode locking mode + * @retval value that was stored in the entry. + * @retval NULL if key was not found + */ +CPROPS_DLL +void *cp_hashlist_remove_by_option(cp_hashlist *list, void *key, int mode); + +/** + * Removes the first entry and destroys it. + * + * @param list the object + * @param mode locking mode + * @return Element that was stored in the first entry. + */ +CPROPS_DLL +void *cp_hashlist_remove_head_by_option(cp_hashlist *list, int mode); + +/** + * Removes the last entry and destroys it. + * + * @param list the object + * @param mode locking mode + * @return Element that was stored in the first entry. + */ +CPROPS_DLL +void *cp_hashlist_remove_tail_by_option(cp_hashlist *list, int mode); + +/*************/ + +/** default constructor */ +#define cp_hashlist_create(size_hint, hash_fn, compare_fn) \ + cp_hashlist_create_by_option(0, (size_hint), \ + (hash_fn), (compare_fn), \ + NULL, NULL, NULL, NULL) + +/** + * constructor with parameters. + * + * @param operation mode bitmap (see collection.h) + * @param size_hint initial size of the cp_hashtable + * @param hash_fn hash method + * @param compare_fn hash compare method + */ +CPROPS_DLL +cp_hashlist *cp_hashlist_create_by_mode(int mode, + unsigned long size_hint, + cp_hashfunction hash_fn, + cp_compare_fn compare_fn); + +/** + * Constructor for copy mode. + * + * @param mode Bitmap of operation mode (see collection.h) + * @param size_hint initial size of the cp_hashtable + * @param hash_fn hash method + * @param compare_fn hash compare method + * @param copy_key copy key method + * @param copy_value copy value method + */ +CPROPS_DLL +cp_hashlist * + cp_hashlist_create_by_option(int mode, unsigned long size_hint, + cp_hashfunction hash_fn, + cp_compare_fn compare_fn, + cp_copy_fn copy_key, + cp_destructor_fn free_key, + cp_copy_fn copy_value, + cp_destructor_fn free_value); + +/** + * Destroy the list with the mode stored in the list. + */ +CPROPS_DLL +void cp_hashlist_destroy(cp_hashlist *); + +/** + * Destroy the list with the mode stored in the list plus COLLECTION_MODE_DEEP. + */ +CPROPS_DLL +void cp_hashlist_destroy_deep(cp_hashlist *); + +/** + * Destroy the object with the specified mode (override default). + * + * @param list the object + * @param mode locking mode + */ +CPROPS_DLL +void cp_hashlist_destroy_by_option(cp_hashlist *list, int mode); + +/** + * This function does exactly what you would think it does. Before it didn't - + * that was a bug. Now it does. + */ +CPROPS_DLL +void cp_hashlist_destroy_custom(cp_hashlist *list, + cp_destructor_fn dk, + cp_destructor_fn dv); + +/** + * iterates over the list and calls the callback function on each item. + * + * @param list the hashlist + * @param dk if not NULL, this function is invoked with the key for each entry + * @param dv if not NULL, this function is invoked with the value for each entry + */ +CPROPS_DLL +int cp_hashlist_callback(cp_hashlist *list, + int (*cb)(void *key, void *value, void *id), + void *id); + +/** find out what mode your cp_hashlist is running in */ +CPROPS_DLL +int cp_hashlist_get_mode(cp_hashlist *list); + +/** set the mode on your cp_hashlist */ +CPROPS_DLL +int cp_hashlist_set_mode(cp_hashlist *list, int mode); + +/** unset mode bits on list */ +CPROPS_DLL +int cp_hashlist_unset_mode(cp_hashlist *list, int mode); + + +/** + * the internal table will not be resized to less than min_size + */ +CPROPS_DLL +int cp_hashlist_set_min_size(cp_hashlist *list, unsigned long min_size); + +/** + * a resize is triggered when the table contains more items than + * table_size * fill_factor / 100 + */ +CPROPS_DLL +int cp_hashlist_set_max_fill_factor(cp_hashlist *list, int fill_factor); + +/** + * a resize is triggered when the table contains less items than + * table_size * fill_factor / 100 if table_size > min_size + */ +CPROPS_DLL +int cp_hashlist_set_min_fill_factor(cp_hashlist *list, int fill_factor); + + +/* ************************************************************************** + * * + * iterator functions * + * * + ************************************************************************** */ + +/** + * Create a new iterator and initialize it at the beginning. + * + * @param list list to iterate over + * @param lock_mode locking mode to use + * @return new iterator object + */ +CPROPS_DLL +cp_hashlist_iterator *cp_hashlist_create_iterator(cp_hashlist *list, int lock_mode); + +/** + * initialize the iterator at the beginning + * + * set the iterator at the beginning of the list and lock the list in the + * mode specified in type. + */ +CPROPS_DLL +int cp_hashlist_iterator_head(cp_hashlist_iterator *iterator); +//int cp_hashlist_iterator_head(cp_hashlist_iterator *iterator, cp_hashlist *l, int lock_mode); + +CPROPS_DLL +int cp_hashlist_iterator_init(cp_hashlist_iterator *iterator, + cp_hashlist *list, int type); +/** + * Initialize the Iterator at the end. + * + * Set the iterator at the end of the list and lock the list in the + * mode specified in type. + */ +CPROPS_DLL +int cp_hashlist_iterator_init_tail(cp_hashlist_iterator *iterator, cp_hashlist *l, int lock_mode); + +/** + * set iterator at list tail + */ +CPROPS_DLL +int cp_hashlist_iterator_tail(cp_hashlist_iterator *iterator); + +/** + * set iterator position at first occurence of given key + */ +CPROPS_DLL +int cp_hashlist_iterator_to_key(cp_hashlist_iterator *iterator, void *key); + +/** + * iterator destructor + */ +CPROPS_DLL +int cp_hashlist_iterator_destroy(cp_hashlist_iterator *iterator); + +/** + * Unlock the list of the Iterator. + * + * If the locking mode is COLLECTION_LOCK_NONE, do nothing. + */ +CPROPS_DLL +int cp_hashlist_iterator_release(cp_hashlist_iterator *iterator); + + +/** + * Go to the next entry in the list and return the content. + * + * @retval entry the next entry object. + * @retval NULL if reading beyond end or from empty list. + */ +CPROPS_DLL +cp_hashlist_entry *cp_hashlist_iterator_next(cp_hashlist_iterator *iterator); + +/** + * Go to the next entry in the list and return the key. + * + * @return object of the next entry. + * @retval NULL if reading beyond end or from empty list. + */ +CPROPS_DLL +void *cp_hashlist_iterator_next_key(cp_hashlist_iterator *iterator); + +/** + * Go to the next entry in the list and return the content. + * + * @return object of the next entry. + * @retval NULL if reading beyond end or from empty list. + */ +CPROPS_DLL +void *cp_hashlist_iterator_next_value(cp_hashlist_iterator *iterator); + +/** + * Go to the previous entry in the list and return the content. + * + * @retval entry the previous entry object. + * @retval NULL if reading beyond beginning or from empty list. + */ +CPROPS_DLL +cp_hashlist_entry *cp_hashlist_iterator_prev(cp_hashlist_iterator *iterator); + +/** + * Go to the previous entry in the list and return the key. + * + * @return object of the previous entry. + * @retval NULL if reading beyond beginning or from empty list. + */ +CPROPS_DLL +void *cp_hashlist_iterator_prev_key(cp_hashlist_iterator *iterator); + +/** + * Go to the previous entry in the list and return the content. + * + * @return object of the previous entry. + * @retval NULL if reading beyond beginning or from empty list. + */ +CPROPS_DLL +void *cp_hashlist_iterator_prev_value(cp_hashlist_iterator *iterator); + +/** + * return the entry at the current iterator position + */ +CPROPS_DLL +cp_hashlist_entry *cp_hashlist_iterator_curr(cp_hashlist_iterator *iterator); + +/** + * return the key at the current iterator position + */ +CPROPS_DLL +void *cp_hashlist_iterator_curr_key(cp_hashlist_iterator *iterator); + +/** + * return the value at the current iterator position + */ +CPROPS_DLL +void *cp_hashlist_iterator_curr_value(cp_hashlist_iterator *iterator); + + +/** + * add a mapping before the current iterator position + */ +CPROPS_DLL +cp_hashlist_entry *cp_hashlist_iterator_insert(cp_hashlist_iterator *iterator, + void *key, + void *value); +/** + * add a mapping after the current iterator position + */ +CPROPS_DLL +cp_hashlist_entry *cp_hashlist_iterator_append(cp_hashlist_iterator *iterator, + void *key, + void *value); + +/** + * remove the mapping at the current iterator position + */ +CPROPS_DLL +void *cp_hashlist_iterator_remove(cp_hashlist_iterator *iterator); + + +/* ------------------------ end iterator functions ------------------------ */ + + + +/** + * Get the number of elements in the collection. + * + * @return number of elements in the list. + * @retval 0 if list is NULL + */ +CPROPS_DLL +unsigned long cp_hashlist_item_count(cp_hashlist *); + +/** + * Get the key of the entry. + * + * @note This function is fail-safe - works also on NULL entries. + * In any case you should check the result! + * + * @retval key of the entry. + * @retval NULL if entry is NULL + */ +CPROPS_DLL +void *cp_hashlist_entry_get_key(cp_hashlist_entry *entry); + +/** + * Get the value of the entry. + * + * @note This function is fail-safe - works also on NULL entries. + * In any case you should check the result! + * + * @retval value of the entry. + * @retval NULL if entry is NULL + */ +CPROPS_DLL +void *cp_hashlist_entry_get_value(cp_hashlist_entry *entry); + +/** + * Insert a new element (key, value) at the beginning of the list. + * The operation is synchronized according to the properties of the object. + * + * @pre list != NULL + * @pre key != NULL + * @return value object + */ +CPROPS_DLL +void *cp_hashlist_insert(cp_hashlist *list, void *key, void *value); + +/** + * Insert a new element (key, value) at the beginning of the list with mode. + * @return value object + */ +CPROPS_DLL +void *cp_hashlist_insert_by_option(cp_hashlist *list, void *key, void *item, int mode); + +/** + * Append a new element (key, value) at the end of the list. + * The operation is synchronized according to the properties of the object. + * @pre list != NULL + * @pre key != NULL + */ +CPROPS_DLL +void *cp_hashlist_append(cp_hashlist *list, void *key, void *value); + +/** + * Append a new element (key, value) at the end of the list with mode. + */ +CPROPS_DLL +void *cp_hashlist_append_by_option(cp_hashlist *, void *key, void *value, int mode); + +/** + * Returns the first element with matching key. + */ +CPROPS_DLL +void *cp_hashlist_get(cp_hashlist *, void *key); + +/** + * returns non-zero if list contains key + */ +CPROPS_DLL +int cp_hashlist_contains(cp_hashlist *list, void *key); + +/** + * Returns the first element of the list. + */ +CPROPS_DLL +void *cp_hashlist_get_head(cp_hashlist *); + +/** + * Returns the last element of the list. + */ +CPROPS_DLL +void *cp_hashlist_get_tail(cp_hashlist *); + +/** + * Removes the entry with matching key and destroys it (internal locking mode). + * + * @param list the object + * @param key Key which is searched. + * @retval value that was stored in the entry. + * @retval NULL if key was not found + */ +CPROPS_DLL +void *cp_hashlist_remove(cp_hashlist *list, void *key); + +CPROPS_DLL +void *cp_hashlist_remove_deep(cp_hashlist *list, void *key); + + +/** + * Removes the entry with matching key and destroys it with locking mode. + * + * @param list the object + * @param key Key which is searched. + * @param mode locking mode + * @retval value that was stored in the entry. + * @retval NULL if key was not found + */ +CPROPS_DLL +void *cp_hashlist_remove_by_option(cp_hashlist *list, void *key, int mode); + +/** + * Removes the first entry and destroys it. + * + * @return Element that was stored in the first entry. + */ +CPROPS_DLL +void *cp_hashlist_remove_head(cp_hashlist *list); + +/** + * Removes the last entry and destroys it. + * + * @pre list != NULL + * @retval Element that was stored in the first entry if not empty. + * @retval NULL if collection is empty + */ +CPROPS_DLL +void *cp_hashlist_remove_tail(cp_hashlist *list); + +/* + * Get the next entry. + * + * @return value of the next element + */ +//CPROPS_DLL +//void *cp_hashlist_get_next(cp_hashlist *list); + +/** + * Test if object is empty. + * + * @retval true if no element contained. + * @retval false if at least one element is contained. + */ +CPROPS_DLL +int cp_hashlist_is_empty(cp_hashlist *list); // { return cp_hashlist_item_count(list) == 0; } + +/** + * Locks the collection with the specified mode. + * + * This overrides the default mode stored in the object. + */ +CPROPS_DLL +int cp_hashlist_lock(cp_hashlist *list, int type); + +/** + * Unlock the object. + */ +CPROPS_DLL +int cp_hashlist_unlock(cp_hashlist *list); + +/** + * Set a read lock on the object. + */ +#define cp_hashlist_rdlock(list) cp_hashlist_lock((list), COLLECTION_LOCK_READ) + +/** + * Set a write lock on the object. + */ +#define cp_hashlist_wrlock(list) cp_hashlist_lock((list), COLLECTION_LOCK_WRITE) + +__END_DECLS + +/** @} */ + +#endif + Property changes on: branches/multicore/numpy/core/cprops_thread/hashlist.h ___________________________________________________________________ Name: svn:executable + * Added: branches/multicore/numpy/core/cprops_thread/hashtable.c =================================================================== --- branches/multicore/numpy/core/cprops_thread/hashtable.c 2007-04-10 15:44:17 UTC (rev 3691) +++ branches/multicore/numpy/core/cprops_thread/hashtable.c 2007-04-10 17:54:59 UTC (rev 3692) @@ -0,0 +1,1265 @@ + +/** + * @addtogroup cp_hashtable + */ +/** @{ */ + +/** + * @file + * Implementation of generic synchronized cp_hashtable. + * + * The elements are stored in cp_list_entry objects. + * + * @copydoc collection + */ +/* ----------------------------------------------------------------- */ + +#include +#include +#include +#include +#include "hashtable.h" +#include "linked_list.h" +#include "log.h" +#include "common.h" +#include "collection.h" +#include "thread.h" +/* #include "util.h" */ + +#include "cp_config.h" +#ifdef CP_HAS_STRINGS_H +#include +#endif + +#ifdef __OpenBSD__ +#include +#include +#include +#endif /* __OpenBSD__ */ + +#ifndef CP_HASHTABLE_MULTIPLE_VALUES +#define CP_HASHTABLE_MULTIPLE_VALUES 1 +#endif + +static int table_sizes[] = + { + 5, 7, 11, 23, 47, + 79, 97, 157, 197, 299, + 397, 599, 797, 1297, 1597, + 2499, 3199, 4799, 6397, 9599, + 12799, 19199, 25597, 38399, 51199, + 76799, 102397, 153599, 204797, 306797, + 409597, 614399, 819199, 1288799, 1638397, + 2457599, 3276799, 4915217, 6553577, 9830393 + }; + +static int table_sizes_len = 40; + + +unsigned long cp_hashtable_choose_size(unsigned long size_request) +{ + unsigned long new_size; + + if (table_sizes[table_sizes_len - 1] < size_request) + { + for (new_size = table_sizes[table_sizes_len - 1]; + new_size < size_request; + new_size = new_size * 2 + 1); + } + else + { + int min = -1; + int max = table_sizes_len - 1; + int pos; + + while (max > min + 1) + { + pos = (max + min + 1) / 2; + if (table_sizes[pos] < size_request) + min = pos; + else + max = pos; + } + + new_size = table_sizes[max]; + } + + return new_size; +} + +cp_hashtable *cp_hashtable_create(unsigned long size_hint, + cp_hashfunction hash_fn, + cp_compare_fn compare_fn) +{ + return cp_hashtable_create_by_option(0, size_hint, hash_fn, + compare_fn, NULL, NULL, NULL, NULL); +} + + +cp_hashtable * + cp_hashtable_create_copy_mode(unsigned long size_hint, + cp_hashfunction hash_fn, + cp_compare_fn compare_fn, + cp_copy_fn copy_key, + cp_destructor_fn free_key, + cp_copy_fn copy_value, + cp_destructor_fn free_value) +{ + return cp_hashtable_create_by_option(COLLECTION_MODE_DEEP | + COLLECTION_MODE_COPY, + size_hint, + hash_fn, + compare_fn, + copy_key, + free_key, + copy_value, + free_value); +} + +cp_hashtable * + cp_hashtable_create_by_option(int mode, unsigned long size_hint, + cp_hashfunction hash_fn, + cp_compare_fn compare_fn, + cp_copy_fn copy_key, + cp_destructor_fn free_key, + cp_copy_fn copy_value, + cp_destructor_fn free_value) +{ + cp_hashtable *table; + + table = (cp_hashtable *) calloc(1, sizeof(cp_hashtable)); + if (table == NULL) + { + errno = ENOMEM; + return NULL; + } + + table->table_size = cp_hashtable_choose_size(size_hint); + table->items = 0; + table->table = (cp_hashtable_entry **) + calloc(table->table_size, sizeof(cp_hashtable_entry *)); + if (table->table == NULL) + { + errno = ENOMEM; + return NULL; + } + + table->hash_fn = hash_fn; + table->compare_fn = compare_fn; + table->copy_key = copy_key; + table->copy_value = copy_value; + table->free_key = free_key; + table->free_value = free_value; + + table->mode = mode; + + table->min_size = size_hint; + table->fill_factor_min = CP_HASHTABLE_DEFAULT_MIN_FILL_FACTOR; + table->fill_factor_max = CP_HASHTABLE_DEFAULT_MAX_FILL_FACTOR; + + table->resizing = 0; + + table->lock = malloc(sizeof(cp_lock)); + if (table->lock == NULL) + { + free(table->table); + free(table); + errno = ENOMEM; + return NULL; + } + + if (cp_lock_init(table->lock, NULL)) + { + free(table->lock); + free(table->table); + free(table); + return NULL; + } + + return table; +} + +cp_hashtable_entry * + cp_hashtable_create_entry(cp_hashtable *table, + int mode, + void *key, + void *value, + long hashcode) +{ + cp_hashtable_entry *entry; + + entry = (cp_hashtable_entry *) malloc(sizeof(cp_hashtable_entry)); + if (entry == NULL) + { + errno = ENOMEM; + return NULL; + } + + if (mode & COLLECTION_MODE_COPY) + { + entry->key = table->copy_key ? (*table->copy_key)(key) : key; + entry->value = table->copy_value ? (*table->copy_value)(value) :value; + } + else + { + entry->key = key; + entry->value = value; + } + + entry->hashcode = hashcode; + entry->next = NULL; + + return entry; +} + + +void cp_hashtable_destroy(cp_hashtable *table) +{ + long i; + cp_hashtable_entry *entry, *next; + + table->mode |= COLLECTION_MODE_NORESIZE; + + if (table->resizing) + { + struct timeval timeout; + timeout.tv_sec = 0; + timeout.tv_usec = 10; + while (table->resizing) + select(0, NULL, NULL, NULL, &timeout); + } + + for (i = 0; i < table->table_size; i++) + { + entry = table->table[i]; + while (entry != NULL) + { + next = entry->next; + if (table->mode & COLLECTION_MODE_DEEP) + { + if (table->free_key) + (*table->free_key)(entry->key); + if (table->free_value) + (*table->free_value)(entry->value); + } + free(entry); + entry = next; + } + } + + free(table->table); + cp_lock_destroy(table->lock); + free(table->lock); + free(table); +} + +void cp_hashtable_destroy_deep(cp_hashtable *table) +{ + cp_hashtable_set_mode(table, COLLECTION_MODE_DEEP); + cp_hashtable_destroy_custom(table, table->free_key, table->free_value); +} + +void cp_hashtable_destroy_custom(cp_hashtable *table, cp_destructor_fn dk, cp_destructor_fn dv) +{ + long i; + cp_hashtable_entry *entry, *next; + + if (table->resizing) + { + struct timeval timeout; + timeout.tv_sec = 0; + timeout.tv_usec = 10; + while (table->resizing) + select(0, NULL, NULL, NULL, &timeout); + } + + for (i = 0; i < table->table_size; i++) + { + entry = table->table[i]; + while (entry != NULL) + { + next = entry->next; + if (dk) (*dk)(entry->key); + if (dv) (*dv)(entry->value); + free(entry); + entry = next; + } + } + + free(table->table); + cp_lock_destroy(table->lock); + free(table->lock); + free(table); +} + + +void cp_hashtable_destroy_shallow(cp_hashtable *table) +{ + cp_hashtable_unset_mode(table, COLLECTION_MODE_DEEP); + cp_hashtable_destroy(table); +} + +int cp_hashtable_lock_internal(cp_hashtable *table, int type) +{ + int rc; + + switch (type) + { + case COLLECTION_LOCK_READ: + rc = cp_lock_rdlock(table->lock); + break; + + case COLLECTION_LOCK_WRITE: + rc = cp_lock_wrlock(table->lock); + break; + + case COLLECTION_LOCK_NONE: + rc = 0; + break; + + default: + rc = EINVAL; + break; + } + + return rc; +} + +int cp_hashtable_unlock_internal(cp_hashtable *table) +{ + return cp_lock_unlock(table->lock); +} + +int cp_hashtable_txlock(cp_hashtable *table, int type) +{ + if (table->mode & COLLECTION_MODE_NOSYNC) return 0; + if (table->mode & COLLECTION_MODE_IN_TRANSACTION && + table->txtype == COLLECTION_LOCK_WRITE) + { + cp_thread self = cp_thread_self(); + if (cp_thread_equal(self, table->txowner)) return 0; + } + return cp_hashtable_lock_internal(table, type); +} + +int cp_hashtable_txunlock(cp_hashtable *table) +{ + if (table->mode & COLLECTION_MODE_NOSYNC) return 0; + if (table->mode & COLLECTION_MODE_IN_TRANSACTION && + table->txtype == COLLECTION_LOCK_WRITE) + { + cp_thread self = cp_thread_self(); + if (cp_thread_equal(self, table->txowner)) return 0; + } + return cp_hashtable_unlock_internal(table); +} + +/* lock and set the transaction indicators */ +int cp_hashtable_lock(cp_hashtable *table, int type) +{ + int rc; + if ((table->mode & COLLECTION_MODE_NOSYNC)) return EINVAL; + if ((rc = cp_hashtable_lock_internal(table, type))) return rc; + table->txtype = type; + table->txowner = cp_thread_self(); + table->mode |= COLLECTION_MODE_IN_TRANSACTION; + return 0; +} + +/* unset the transaction indicators and unlock */ +int cp_hashtable_unlock(cp_hashtable *table) +{ + cp_thread self = cp_thread_self(); + if (table->txowner == self) + { + table->txtype = 0; + table->txowner = 0; + table->mode ^= COLLECTION_MODE_IN_TRANSACTION; + } + else if (table->txtype == COLLECTION_LOCK_WRITE) + return -1; + return cp_hashtable_unlock_internal(table); +} + + + +int cp_hashtable_set_mode(cp_hashtable *table, int mode) +{ + int syncbit; + /* can't set NOSYNC in the middle of a transaction */ + if ((table->mode & COLLECTION_MODE_IN_TRANSACTION) && + (mode & COLLECTION_MODE_NOSYNC)) return EINVAL; + + syncbit = table->mode & COLLECTION_MODE_NOSYNC; + if (!syncbit) + cp_hashtable_txlock(table, COLLECTION_LOCK_WRITE); + table->mode |= mode; + if (!syncbit) + cp_hashtable_txunlock(table); + + return 0; +} + +int cp_hashtable_get_mode(cp_hashtable *table) +{ + return table->mode; +} + +int cp_hashtable_unset_mode(cp_hashtable *table, int mode) +{ + int syncbit = table->mode & COLLECTION_MODE_NOSYNC; + if (!syncbit) + cp_hashtable_txlock(table, COLLECTION_LOCK_WRITE); + table->mode &= table->mode ^ mode; + if (!syncbit) + cp_hashtable_txunlock(table); + return 0; +} + +/** + * Retrieves the value by key from normal or resizing table. + * + * @param table the object + * @param key Key to search for. + * @param code Hash code of the Key (saves recalculating it) + * @param option operation mode + * @param resize 0: search in the normal table, 1: search in the resize table + * @retval value of the entry with key. + * @retval NULL otherwise (no entry with given key) + */ +void *lookup_internal(cp_hashtable *table, void *key, long code, int option, int resize) +{ + cp_hashtable_entry *entry; + void *ret = NULL; + + entry = resize ? table->resize_table[code % table->resize_len] + : table->table[code % table->table_size]; + + while (entry != NULL && (*table->compare_fn)(key, entry->key)) + entry = entry->next; + + if (entry) + { +#if CP_HASHTABLE_MULTIPLE_VALUES + if (option & COLLECTION_MODE_MULTIPLE_VALUES) + { + cp_list *l = + cp_list_create_view(table->mode, + NULL, + table->copy_value, + table->free_value, + table->lock); + cp_list_insert(l, entry->value); + entry = entry->next; + while (entry != NULL) + { + if ((*table->compare_fn)(key, entry->key) == 0) + cp_list_append(l, entry->value); + + entry = entry->next; + } + + ret = l; + } + else +#endif + ret = entry->value; + } + + return ret; +} + +/** + * Retrieves the value by key. + * + * @param table the object + * @param key Key to search for. + * @param option operation mode + * @retval value of the entry with key. + * @retval NULL otherwise (no entry with given key or key == NULL) + */ +void *cp_hashtable_get_by_option(cp_hashtable *table, void *key, int option) +{ + long code; + void *ret; + + if (table == NULL || key == NULL) + { + errno = EINVAL; + return NULL; + } + + if (cp_hashtable_txlock(table, COLLECTION_LOCK_READ)) return NULL; + + code = abs((*table->hash_fn)(key)); + ret = lookup_internal(table, key, code, option, 0); + /* when resizing, search also there */ + if (ret == NULL && table->resizing) + ret = lookup_internal(table, key, code, option, 1); + + cp_hashtable_txunlock(table); + + return ret; +} + +/** + * \<\\> resize a cp_hashtable. + * + * This cp_thread does a background resize of the table. + * It creates a new table and moves the entries to the new table. + * @post All items moved to the new table which replaces the old table + * The old table is destroyed. + * @note The cp_thread locks and unlocks the table for each item. + * This creates some overhead, but ensures that the table can still be used + * during resizing. + */ +void *cp_hashtable_resize_thread(void *tbl) +{ + long i, old_size, index; + long new_size; + cp_hashtable_entry **new_table, **old_table; + cp_hashtable_entry **insert, *entry; + cp_hashtable *table = (cp_hashtable *) tbl; + + new_size = table->table_size; + new_table = table->table; + + old_size = table->resize_len; + old_table = table->resize_table; + +#ifdef __TRACE__ + DEBUGMSG("resize %d to %d - resize thread starting\n", old_size, new_size); +#endif + + /* copy old table into new table, bucket by bucket */ + for (i = 0; i < old_size; i++) + { +// if (!(table->mode & COLLECTION_MODE_NOSYNC)) + cp_hashtable_txlock(table, COLLECTION_LOCK_WRITE); + entry = old_table[i]; + while (entry != NULL) + { + index = entry->hashcode % new_size; + insert = &new_table[index]; + while (*insert != NULL) + insert = &(*insert)->next; + + *insert = entry; + entry = entry->next; + (*insert)->next = NULL; + } + old_table[i] = NULL; + +// if (!(table->mode & COLLECTION_MODE_NOSYNC)) + cp_hashtable_txunlock(table); + } + + /* cleanup */ +// if (!(table->mode & COLLECTION_MODE_NOSYNC)) + cp_hashtable_txlock(table, COLLECTION_LOCK_WRITE); + free(table->resize_table); table->resize_table = NULL; + table->resizing = 0; +// if (!(table->mode & COLLECTION_MODE_NOSYNC)) + +#ifdef __TRACE__ + DEBUGMSG("resize %d to %d - done\n", old_size, new_size); +#endif + cp_hashtable_txunlock(table); + + return NULL; +} + +int cp_hashtable_set_min_size(cp_hashtable *table, int min_size) +{ + if (cp_hashtable_txlock(table, COLLECTION_LOCK_WRITE)) return -1; + table->min_size = min_size; + cp_hashtable_txunlock(table); + return 0; +} + + +int cp_hashtable_set_max_fill_factor(cp_hashtable *table, int fill_factor) +{ + if (cp_hashtable_txlock(table, COLLECTION_LOCK_WRITE)) return -1; + table->fill_factor_max = fill_factor; + cp_hashtable_txunlock(table); + return 0; +} + +int cp_hashtable_set_min_fill_factor(cp_hashtable *table, int fill_factor) +{ + if (cp_hashtable_txlock(table, COLLECTION_LOCK_WRITE)) return -1; + table->fill_factor_min = fill_factor; + cp_hashtable_txunlock(table); + return 0; +} + + +/** + * Initiates a resize of the cp_hashtable which is executed in the background. + * + * @return NULL + */ +void *cp_hashtable_resize(cp_hashtable *table, long new_size) +{ + cp_hashtable_entry **new_table; + + if (table->resizing) return NULL; + + new_table = (cp_hashtable_entry **) malloc(new_size * sizeof(cp_hashtable_entry *)); + if (new_table == NULL) + { + errno = ENOMEM; + return NULL; + } + memset(new_table, 0, new_size * sizeof(cp_hashtable_entry *)); + + table->resize_table = table->table; + table->resize_len = table->table_size; + table->table = new_table; + table->table_size = new_size; + table->resizing = 1; + + cp_thread_create(table->resize_thread, NULL, cp_hashtable_resize_thread, table); + cp_thread_detach(table->resize_thread); + + return NULL; +} + +/** + * Resizes the table to a new size. + * + * This is invoked by the insertion code if the load * factor goes over the + * fill factor limits. + * @param table the object + * @param new_size desired size. + * The system trys to optmize the actual size for good distribution. + */ +void *cp_hashtable_resize_nosync(cp_hashtable *table, unsigned long new_size) +{ + unsigned long old_size; + cp_hashtable_entry **old_table; + cp_hashtable_entry *entry, *next, **insert; + unsigned long i, index; + + old_size = table->table_size; + old_table = table->table; + + table->table_size = cp_hashtable_choose_size(new_size); + +#ifdef __TRACE__ + DEBUGMSG("resizing table (nosync): %d to %d\n", old_size, table->table_size); +#endif + + table->table = (cp_hashtable_entry **) malloc(table->table_size * sizeof(cp_hashtable_entry *)); + memset(table->table, 0, table->table_size * sizeof(cp_hashtable_entry *)); + + if (table->table == NULL) + { + errno = ENOMEM; + return NULL; + } + + for (i = 0; i < old_size; i++) + { + entry = old_table[i]; + while (entry != NULL) + { + index = entry->hashcode % table->table_size; + next = entry->next; + entry->next = NULL; + insert = &table->table[index]; + while (*insert != NULL) + insert = &(*insert)->next; + + *insert = entry; + + entry = next; + } + } + + free(old_table); + + return table; +} + +/** + * Internal replace an existing entry with a new key, value pair. + * + * @param table the object + * @param key Key to search for. + * @param value new value + * @param code Hash code of the Key (saves recalculating it) + * @param option operation mode + * @param resize 0: search in the normal table, 1: search in the resize table + * @return pointer to table of entries + */ +static cp_hashtable_entry **cp_hashtable_replace_internal(cp_hashtable *table, + void *key, + void *value, + unsigned long code, + int option, + int resize) +{ + cp_hashtable_entry **entry; + unsigned long index; + + index = resize ? code % table->resize_len : code % table->table_size; + + entry = resize ? &table->resize_table[index] : &table->table[index]; + while (*entry != NULL) + { +#if CP_HASHTABLE_MULTIPLE_VALUES + if (!(option & COLLECTION_MODE_MULTIPLE_VALUES) && + (*table->compare_fn)(key, (*entry)->key) == 0) +#else + if ((*table->compare_fn)(key, (*entry)->key) == 0) +#endif + { + if (option & COLLECTION_MODE_DEEP) + { + if (table->free_key) + (*table->free_key)((*entry)->key); + if (table->free_value) + (*table->free_value)((*entry)->value); + (*entry)->key = key; + } + + if (option & COLLECTION_MODE_COPY) + { + (*entry)->key = table->copy_key ? (*table->copy_key)(key) : key; + (*entry)->value = table->copy_value ? (*table->copy_value)(value) : value; + } + else + (*entry)->value = value; + + (*entry)->hashcode = code; + break; + } + + entry = &(*entry)->next; + } + + return entry; +} + +void *cp_hashtable_put(cp_hashtable *table, void *key, void *value) +{ + return cp_hashtable_put_by_option(table, key, value, table->mode); +} + +void *cp_hashtable_put_safe(cp_hashtable *table, void *key, void *value) +{ + return cp_hashtable_put_by_option(table, key, value, table->mode | COLLECTION_MODE_DEEP); +} + +void *cp_hashtable_put_copy(cp_hashtable *table, void *key, void *value) +{ + return cp_hashtable_put_by_option(table, key, value, table->mode | COLLECTION_MODE_COPY); +} + + +/* actual insertion code */ +void *cp_hashtable_put_by_option(cp_hashtable *table, void *key, void *value, int option) +{ + unsigned long code; + cp_hashtable_entry **entry; /* defined ** for when initializing a bucket */ + int syncbit; + void *ret = NULL; + + syncbit = table->mode & COLLECTION_MODE_NOSYNC; + if (cp_hashtable_txlock(table, COLLECTION_LOCK_WRITE)) return NULL; + + if ((option & COLLECTION_MODE_NORESIZE) == 0) + { + if ((table->items * 100) > + (table->table_size * table->fill_factor_max)) + { + int new_size = cp_hashtable_choose_size(table->table_size * 2); + if (syncbit) + cp_hashtable_resize_nosync(table, new_size); + else + cp_hashtable_resize(table, new_size); + } + } + + code = abs((*table->hash_fn)(key)); + + entry = cp_hashtable_replace_internal(table, key, value, code, option, 0); + + if (*entry == NULL && table->resizing) + { + cp_hashtable_entry **resize_entry; + + resize_entry = cp_hashtable_replace_internal(table, key, value, code, option, 1); + if (*resize_entry != NULL) /* prevent write */ + entry = resize_entry; + + } + + if (*entry == NULL) + { + /* no entry found, entry points at lookup location */ + *entry = cp_hashtable_create_entry(table, option, key, value, code); + if (*entry) + table->items++; + } + + if (*entry) + ret = (*entry)->value; + + if (!syncbit) cp_hashtable_txunlock(table); + + return ret; +} + +/** + * Internal remove an entry from the table by key. + * + * Get the value by key and destroy the entry. + * + * @param table the object + * @param key Key to search for. + * @param code Hash code of the Key (saves recalculating it) + * @param mode operation mode + * @param resize 0: search in the normal table, 1: search in the resize table + * @retval value of the entry with key. + * @retval NULL otherwise (no entry with given key) + */ +void *cp_hashtable_remove_internal(cp_hashtable *table, void *key, long code, int mode, int resize) +{ + cp_hashtable_entry **entry, *item; + void *value = NULL; + + entry = resize ? &table->resize_table[code % table->resize_len] + : &table->table[code % table->table_size]; + + while (*entry != NULL) + { + if ((*table->compare_fn)(key, (*entry)->key) == 0) + { + /* entry now points either to the table->table element or to the */ + /* next pointer in the parent entry */ + table->items--; + item = *entry; + *entry = item->next; + + value = item->value; + if (mode & COLLECTION_MODE_DEEP) + { + if (table->free_key) + (*table->free_key)(item->key); + if (table->free_value) + (*table->free_value)(item->value); + } + + free(item); + +#if CP_HASHTABLE_MULTIPLE_VALUES + if (!(mode & COLLECTION_MODE_MULTIPLE_VALUES)) +#endif + break; + } + + entry = &(*entry)->next; + } + + return value; +} + +/** + * Remove an entry from the table by key with locking mode. + * + * Get the value by key and destroy the entry. + * + * @param table the object + * @param key Key to search for. + * @param mode operation/locking mode + * @retval value of the entry with key. + * @retval NULL otherwise (no entry with given key) + */ +void *cp_hashtable_remove_by_mode(cp_hashtable *table, void *key, int mode) +{ + long code; + void *value = NULL; + int syncbit = table->mode & COLLECTION_MODE_NOSYNC; + if (cp_hashtable_txlock(table, COLLECTION_LOCK_WRITE)) return NULL; + + code = abs((*table->hash_fn)(key)); + + value = cp_hashtable_remove_internal(table, key, code, mode, 0); + + if (table->resizing) + { + void *resize_value; + resize_value = cp_hashtable_remove_internal(table, key, code, mode, 1); + if (value == NULL) value = resize_value; + } + + if ((table->mode & COLLECTION_MODE_NORESIZE) == 0) + { + if (table->table_size > table->min_size && + ((table->items * 100) < + (table->table_size * table->fill_factor_min))) + { + int new_size = cp_hashtable_choose_size(table->table_size / 2); + if (syncbit) + cp_hashtable_resize_nosync(table, new_size); + else + cp_hashtable_resize(table, new_size); + } + } + + if (!syncbit) cp_hashtable_txunlock(table); + + return value; +} + +int cp_hashtable_remove_all(cp_hashtable *table) +{ + long i; + cp_hashtable_entry *entry, *next; + int deepbit = table->mode & COLLECTION_MODE_DEEP; + cp_destructor_fn dk = table->free_key; + cp_destructor_fn dv = table->free_value; + + if (cp_hashtable_txlock(table, COLLECTION_LOCK_WRITE)) return -1; + + for (i = 0; i < table->table_size; i++) + { + if ((entry = table->table[i]) != NULL) + { + while (entry != NULL) + { + next = entry->next; + if (deepbit) + { + if (dk) (*dk)(entry->key); + if (dv) (*dv)(entry->value); + } + free(entry); + entry = next; + } + } + } + + if (table->resizing) + { + for (i = 0; i < table->resize_len; i++) + if ((entry = table->resize_table[i]) != NULL) + while (entry != NULL) + { + next = entry->next; + if (deepbit) + { + if (dk) (*dk)(entry->key); + if (dv) (*dv)(entry->value); + } + free(entry); + entry = next; + } + } + + cp_hashtable_txunlock(table); + return 0; +} + +/* remove using current mode settings */ +void *cp_hashtable_remove(cp_hashtable *table, void *key) +{ + return cp_hashtable_remove_by_mode(table, key, table->mode); +} + + +/** + * Remove with COLLECTION_MODE_DEEP set + * @note here cp_hashtable_remove_by_mode returns an invalid pointer on + * success, since the item has just been released. We can not use it but we + * can tell it isn't null. + */ +int cp_hashtable_remove_deep(cp_hashtable *table, void *key) +{ + return cp_hashtable_remove_by_mode(table, key + , table->mode | COLLECTION_MODE_DEEP) != NULL; +} + +int cp_hashtable_contains(cp_hashtable *table, void *key) +{ + int rc = 0; + + if (table != NULL && key != NULL) + { + long code; + void *val; + int option; + if (cp_hashtable_txlock(table, COLLECTION_LOCK_READ)) return -1; + + option = table->mode & COLLECTION_MODE_MULTIPLE_VALUES; + code = abs((*table->hash_fn)(key)); + val = lookup_internal(table, key, code, table->mode, 0); + /* when resizing, search also there */ + if (val == NULL && table->resizing) + val = lookup_internal(table, key, code, table->mode, 1); + + if (val != NULL) + { + rc = 1; + if (option) cp_list_destroy(val); + } + + cp_hashtable_txunlock(table); + } + else + errno = EINVAL; //~~ and set rc = -1? + + return rc; +} + + +void *cp_hashtable_get(cp_hashtable *table, void *key) +{ + return cp_hashtable_get_by_option(table, key, table->mode); +} + +void **cp_hashtable_get_keys(cp_hashtable *table) +{ + long i, j; + void **keys; + cp_hashtable_entry *entry = NULL; + int rc = 0; + + if (table == NULL) + { + errno = EINVAL; + return NULL; + } + + if (cp_hashtable_txlock(table, COLLECTION_LOCK_READ)) return NULL; + + keys = (void **) calloc(table->items, sizeof(void *)); + if (keys == NULL) + { + rc = ENOMEM; + goto DONE; + } + + for (i = 0, j = 0; i < table->table_size; i++) \ + { + entry = table->table[i]; + while (entry != NULL) + { + keys[j++] = entry->key; + entry = entry->next; + } + } + + if (table->resizing) + for (i = 0; i < table->resize_len; i++) + entry = table->resize_table[i]; + while (entry != NULL) + { + keys[j++] = entry->key; + entry = entry->next; + } + +DONE: + cp_hashtable_txunlock(table); + if (rc) errno = rc; + + return keys; +} + + +unsigned long cp_hashtable_count(cp_hashtable *table) +{ + return (table) ? table->items : 0L; +} + + +void **cp_hashtable_get_values(cp_hashtable *table) +{ + long i, j; + void **values; + cp_hashtable_entry *entry; + int rc = 0; + + if (cp_hashtable_txlock(table, COLLECTION_LOCK_READ)) return NULL; + + values = (void **) malloc(table->items * sizeof(void *)); + if (values == NULL) + { + rc = ENOMEM; + goto DONE; + } + + for (i = 0, j = 0; i < table->table_size; i++) + { + entry = table->table[i]; + while (entry != NULL) + { + values[j++] = entry->value; + entry = entry->next; + } + } + + if (table->resizing) + { + for (i = 0; i < table->resize_len; i++) + { + entry = table->resize_table[i]; + while (entry != NULL) + { + values[j++] = entry->value; + entry = entry->next; + } + } + } + +DONE: + cp_hashtable_txunlock(table); + if (rc) errno = rc; + + return values; +} + + +/* ------------------------------------------------------------------------ */ +/* --- hash function implementations for primitive types & strings --- */ +/* ------------------------------------------------------------------------ */ + +unsigned long cp_hash_int(void *i) +{ + return (long) *((int *) i); +} + + +int cp_hash_compare_int(void *i, void *j) +{ + return *((int *) i) - *((int *) j); +} + +unsigned long cp_hash_long(void *l) +{ + return *((long *) l); +} + + +int cp_hash_compare_long(void *i, void *j) +{ + long diff = *((long *) i) - *((long *) j); + return diff > 0 ? 1 : diff < 0 ? -1 : 0; +} + +unsigned long cp_hash_addr(void *addr) +{ + return (unsigned long) addr; +} + +int cp_hash_compare_addr(void *a1, void *a2) +{ + return (long) a1 - (long) a2; +} + +unsigned long cp_hash_string(void *str) +{ + int i; + long res; + char *_str; + + if (str == NULL) return 0; + + _str = (char *) str; + + for (i = 0, res = 1; *_str != '\0'; _str++) + res = res * HASH_SEED + *_str; + + return res; +} + + +int cp_hash_compare_string(void *s1, void *s2) +{ + if (s1 == NULL && s2 == NULL) return 0; + if (s1 == NULL || s2 == NULL) return -1; + return strcmp((char *) s1, (char *) s2); +} + +#define CP_CHAR_UC(x) ((x) >= 'a' && (x) <= 'z' ? ((x) - 'a' + 'A') : (x)) + +unsigned long cp_hash_istring(void *str) +{ + int i; + long res; + char *_str; + + if (str == NULL) return 0; + + _str = (char *) str; + + for (i = 0, res = 1; *_str != '\0'; _str++) + res = res * HASH_SEED + CP_CHAR_UC(*_str); + + return res; +} + +int cp_hash_compare_istring(void *s1, void *s2) +{ + if (s1 == NULL && s2 == NULL) return 0; + if (s1 == NULL || s2 == NULL) return -1; + return strcasecmp((char *) s1, (char *) s2); +} + +void *cp_hash_copy_string(void *element) +{ + char *src; + char *dst; + size_t len; + + src = (char *) element; + len = strlen(src) + 1; + dst = (char *) malloc(len * sizeof(char)); + + if (dst == NULL) return NULL; + +#ifdef CP_HAS_STRLCPY + strlcpy(dst, src, len); +#else + strcpy(dst, src); +#endif /* CP_HAS_STRLCPY */ + return dst; +} + +unsigned long cp_hash_float(void *addr) +{ + unsigned long *p = (unsigned long *) addr; + return *p; +} + +int cp_hash_compare_float(void *a1, void *a2) +{ + float f1 = *(float *) a1; + float f2 = *(float *) a2; + if (f1 > f2) return 1; + if (f1 < f2) return -1; + return 0; +} + +unsigned long cp_hash_double(void *d) +{ + unsigned long *p = (unsigned long *) d; + if (sizeof(unsigned long) < sizeof(double)) + return p[0] ^ p[1]; + return *p; +} + +int cp_hash_compare_double(void *a1, void *a2) +{ + double d1 = *(double *) a1; + double d2 = *(double *) a2; + if (d1 > d2) return 1; + if (d1 < d2) return -1; + return 0; +} + +/** @} */ + Property changes on: branches/multicore/numpy/core/cprops_thread/hashtable.c ___________________________________________________________________ Name: svn:executable + * Added: branches/multicore/numpy/core/cprops_thread/hashtable.h =================================================================== --- branches/multicore/numpy/core/cprops_thread/hashtable.h 2007-04-10 15:44:17 UTC (rev 3691) +++ branches/multicore/numpy/core/cprops_thread/hashtable.h 2007-04-10 17:54:59 UTC (rev 3692) @@ -0,0 +1,568 @@ +#ifndef _CP_HASHTABLE_H +#define _CP_HASHTABLE_H + +/* + * hash table implementation + */ + +/** + * @addtogroup cp_hashtable + * @ingroup collection + * @copydoc collection + * + */ +/** @{ */ +/** + * @file + * generic synchronized hashtable. + * + * Here is an example of using a cp_hashtable to create a lookup for 'bar' + * items using 'foo' keys: + * + *
+ * unsigned long foo_hash_code(void *fooptr) 
+ * {
+ *     return ((foo *) fooptr)->id; 
+ * }    
+ *
+ * // compare function
+ * int foo_compare(void *f1, void *f2)
+ * {
+ *     return ((foo *) f1)->id != ((foo *) f2)->id;
+ * }
+ *
+ * ...
+ * 
+ *     cp_hashtable *t;
+ *     foo *foo1, *f;
+ *     bar *bar1, *bar2;
+ *     
+ *     t = cp_hashtable_create(10, foo_hash_code, foo_compare);
+ *     if (t == NULL) 
+ *     {
+ *         perror("can\'t create cp_hashtable");
+ *         exit(1);
+ *     }
+ * 
+ *     cp_hashtable_put(foo1, bar1, t);
+ * 
+ *     ...
+ *     f = foo_create(...);
+ *     ...
+ * 
+ *     if ((bar2 = (bar *) cp_hashtable_get(f, t))) 
+ *         printf("%s maps to %s\n", foo_get_name(f), bar_get_name(bar2));
+ *     else 
+ *         printf("%s is not mapped\n", foo_get_name(f));
+ *
+ *     ...
+ * 
+ *     cp_hashtable_destroy(t);
+ * 
+ * + * Note the strcmp like semantics of the compare function. The comparison + * should return 0 for identical keys. + *

+ * @see hash.h (util.collection) for function prototypes + * and convenience functions. + * @see cp_hashtable_create, cp_hashtable_destroy, cp_hashtable_destroy_deep, cp_hashtable_put, + * cp_hashtable_get, cp_hashtable_contains, cp_hashtable_remove_deep + */ + +#include "common.h" + +__BEGIN_DECLS + +#include "collection.h" + +/* + * cp_hashtable interface for members of mapping collections. + */ + +#include "cp_config.h" + +/** + * 1000000001 is a prime. HASH_SEED is used by cp_hash_string(). + */ +#define HASH_SEED 1000000001L + +#ifndef CP_HASHTABLE_DEFAULT_MIN_FILL_FACTOR +#define CP_HASHTABLE_DEFAULT_MIN_FILL_FACTOR 5 +#endif + +#ifndef CP_HASHTABLE_DEFAULT_MAX_FILL_FACTOR +#define CP_HASHTABLE_DEFAULT_MAX_FILL_FACTOR 70 +#endif + +/* ----------------------------------------------------------------- + * Function prototypes + * ----------------------------------------------------------------- */ +/** + * the hash function takes (void *) and returns unsigned long. + * + * Create a function with the name _hash_code() + */ +typedef unsigned long (*cp_hashfunction)(void *); + + +/* ------------------------------------------------------------------------ + * hash function prototypes for primitives and cp_strings + * ------------------------------------------------------------------------ */ + + +/** + * hash function for int keys + * @param key pointer to the int + * @return hash code of the key + */ +CPROPS_DLL +unsigned long cp_hash_int(void *key); + + +/** + * comparator for int keys + * @param key1 pointer the first int + * @param key2 pointer the second int + * @retval 0 if key1 equals key2; + * @retval <0 if key1 is less than key2; + * @retval >0 if key1 is greater than key2 + + */ +CPROPS_DLL +int cp_hash_compare_int(void *key1, void *key2); + +/** + * hash function for long keys + */ +CPROPS_DLL +unsigned long cp_hash_long(void *key); + +/** + * comparator for long keys + * + * @param key1 pointer the first long + * @param key2 pointer the second long + * @retval 0 if key1 equals key2; + * @retval <0 if key1 is less than key2; + * @retval >0 if key1 is greater than key2 + */ +CPROPS_DLL +int cp_hash_compare_long(void *key1, void *key2); + +/** + * hash function for pointer keys + */ +CPROPS_DLL +unsigned long cp_hash_addr(void *addr); + +/** + * comparator for pointer keys + * + * @param key1 pointer the first pointer + * @param key2 pointer the second pointer + * @retval 0 if key1 equals key2; + * @retval <0 if key1 is less than key2; + * @retval >0 if key1 is greater than key2 + */ +CPROPS_DLL +int cp_hash_compare_addr(void *key1, void *key2); + +/** + * hash function for (char *) keys + * @param key pointer to the cp_string + * @return hash code of the key + */ +CPROPS_DLL +unsigned long cp_hash_string(void *key); + +/** + * case insensitive hash function for (char *) keys + * @param key pointer to the cp_string + * @return hash code of the key + */ +CPROPS_DLL +unsigned long cp_hash_istring(void *key); + + +/** + * copy function for cp_string copy tables + */ +CPROPS_DLL +void *cp_hash_copy_string(void *element); + +/** + * comparator for (char *) keys + * + * @param key1 pointer to the first cp_string + * @param key2 pointer to the second cp_string + * @retval 0 if key1 equals key2 + * @retval <>0 otherwise + */ +CPROPS_DLL +int cp_hash_compare_string(void *key1, void *key2); + + +/** + * comparator for (char *) keys + * + * @param key1 pointer to the first cp_string + * @param key2 pointer to the second cp_string + * @retval 0 if key1 equals key2 + * @retval <>0 otherwise + */ +CPROPS_DLL +int cp_hash_compare_istring(void *key1, void *key2); + + + +/** + * Internal object that implements a key, value pair plus linked list. + * + * Entries which are stored under the same index in the hashtable are stored + * in a linked list. The algorithm of the hashtable has to ensure that the lists + * do not get too long. + */ +typedef CPROPS_DLL struct _cp_hashtable_entry +{ + void *key; /**< key (original) needed for comparisons */ + void *value; /**< the item value being stored */ + unsigned long hashcode; /**< save calculated hash-code of the key */ + struct _cp_hashtable_entry *next; /**< link to next entry */ +} cp_hashtable_entry; + +/** + * data structure of generic synchronized cp_hashtable + */ +typedef CPROPS_DLL struct _cp_hashtable +{ + cp_hashtable_entry **table; /**< array of pointers to entries */ + long table_size; /**< size of the table */ + + unsigned long items; /**< number of items in the table */ + int mode; /**< collection mode @see collection.h */ + cp_hashfunction hash_fn; /**< pointer to hash function */ + cp_compare_fn compare_fn; /**< pointer to compare function */ + cp_copy_fn copy_key; /**< pointer to key copy function */ + cp_copy_fn copy_value; /**< pointer to value copy function */ + cp_destructor_fn free_key; + cp_destructor_fn free_value; + + cp_lock *lock; /**< lock */ + cp_thread txowner; /**< lock owner */ + int txtype; /**< lock type */ + + int min_size; /**< table resize lower limit */ + int fill_factor_min; /**< minimal fill factor in percent */ + int fill_factor_max; /**< maximal fill factor in percent */ + + cp_hashtable_entry **resize_table; /**< temp table for resizing */ + int resizing; /**< resize running flag */ + unsigned long resize_len; /**< resize table length */ + cp_thread resize_thread; /**< run resize in a separate thread */ + cp_mutex *resize_lock; /**< for synchronizing resize operation */ +} cp_hashtable; + + +/** + * creates a new cp_hashtable. + * + * by default there is no memory management for table content; insertion, + * removal and retrieval operations are synchronized; and the table will + * automatically resize when the fill factor goes over 70% or under 5%. + * @param size_hint an estimate for the initial storage requirements. The table + * + * handles the storage appropriately when items become too tight. + * @param hashfn a hash code function. This should ideally produce different + * results for different keys. + * @param compare_fn the comparator for your key type. + * + * @return a pointer to the newly created cp_hashtable. + */ +CPROPS_DLL +cp_hashtable * + cp_hashtable_create(unsigned long size_hint, + cp_hashfunction hashfn, + cp_compare_fn compare_fn); + +/** + * creates a new cp_hashtable with the specified mode. + */ +#define cp_hashtable_create_by_mode(mode, size_hint, cp_hashfn, compare_fn) \ + cp_hashtable_create_by_option((mode), (size_hint), (cp_hashfn), (compare_fn), NULL, NULL, NULL, NULL) + +/** + * creates a new cp_hashtable with COLLECTION_MODE_DEEP | COLLECTION_MODE_COPY. + * @param size_hint an estimate for the initial storage requirements. The table + * handles the storage appropriately when items become too tight. + * @param hashfn a hash code function. This should ideally produce different + * results for different keys. + * @param compare_fn the comparator for your key type. + * + * @return a pointer to the newly created cp_hashtable. + */ +CPROPS_DLL +cp_hashtable * + cp_hashtable_create_copy_mode(unsigned long size_hint, + cp_hashfunction hash_fn, + cp_compare_fn compare_fn, + cp_copy_fn copy_key, + cp_destructor_fn free_key, + cp_copy_fn copy_value, + cp_destructor_fn free_value); + +/** + * create a new table, fully specifying all parameters. + * @param size_hint initial capacity + * @param hash_fn hash function + * @param compare_fn key comparison function + * @param copy_key function to return new copies of keys + * @param copy_value function to return new copies of values + * @param mode mode flags + * + * @return new created cp_hashtable. Returns NULL case of error. + */ +CPROPS_DLL +cp_hashtable * + cp_hashtable_create_by_option(int mode, unsigned long size_hint, + cp_hashfunction hash_fn, + cp_compare_fn compare_fn, + cp_copy_fn copy_key, + cp_destructor_fn free_key, + cp_copy_fn copy_value, + cp_destructor_fn free_value); + +/** + * deletes a cp_hashtable according to the current mode settings + * @param table object to delete + */ +CPROPS_DLL +void cp_hashtable_destroy(cp_hashtable *table); + +/** + * deletes a cp_hashtable. Pointers to the keys and values are not released. Use + * table if the keys and values you entered in the table should not be released + * by the cp_hashtable. + * @param table object to delete + */ +CPROPS_DLL +void cp_hashtable_destroy_shallow(cp_hashtable *table); + +/** + * deletes a cp_hashtable. Keys and values entered in the cp_hashtable are released. + * @param table object to delete + */ +CPROPS_DLL +void cp_hashtable_destroy_deep(cp_hashtable *table); + + +/** + * Deep destroy with custom destructors for keys and values. NULL function + * pointers are not invoked. + */ +CPROPS_DLL +void cp_hashtable_destroy_custom(cp_hashtable *table, cp_destructor_fn dk, cp_destructor_fn dv); + +/** + * by default the get, put and remove functions as well as set and unset mode + * perform their own locking. Other functions do not synchronize, since it is + * assumed they would be called in a single cp_thread context - the initialization * and deletion functions in particular. You can of course set + * COLLECTION_MODE_NOSYNC and perform your own synchronization.

+ * + * The current implementation uses a queued read/write lock where blocked + * cp_threads are guaranteed to be woken by the order in which they attempted + * + * the following macros are defined for convenience:

+ *

    + *
  • cp_hashtable_rdlock(table) - get a read lock on the table
  • + *
  • cp_hashtable_wrlock(table) - get a write lock on the table
  • + *
+ * @param table cp_hashtable to lock + * @param type COLLECTION_LOCK_READ or COLLECTION_LOCK_WRITE + */ +CPROPS_DLL +int cp_hashtable_lock(cp_hashtable *table, int type); + +/** unlock the table */ +CPROPS_DLL +int cp_hashtable_unlock(cp_hashtable *table); + +/** macro to get a read lock on the table + */ +#define cp_hashtable_rdlock(table) cp_hashtable_lock((table), COLLECTION_LOCK_READ) + +/** macro to get a write lock on the table */ +#define cp_hashtable_wrlock(table) cp_hashtable_lock((table), COLLECTION_LOCK_WRITE) + +/** + * returns the current operation mode. See cp_hashtable_set_mode for a list of + * mode bits and their effects. + */ +CPROPS_DLL +int cp_hashtable_get_mode(cp_hashtable *table); + +/** + * set the operation mode as a bit set of the following options: + *
    + *
  • COLLECTION_MODE_DEEP - release memory when removing references from table
  • + *
  • COLLECTION_MODE_MULTIPLE_PUT - allow multiple values for a key
  • + *
  • COLLECTION_MODE_COPY - keep copies rather than references
  • + *
  • COLLECTION_MODE_NOSYNC - the table will not perform its own synchronization.
  • + *
  • COLLECTION_MODE_NORESIZE - the table will not resize automatically.
  • + *
+ * + * The parameter bits are flipped on. If the current mode is + * COLLECTION_MODE_DEEP and you want to change it, call + * cp_hashtable_unset_mode(table, COLLECTION_MODE_DEEP). + */ +CPROPS_DLL +int cp_hashtable_set_mode(cp_hashtable *table, int mode); + + +/** + * unset the mode bits defined by mode + */ +CPROPS_DLL +int cp_hashtable_unset_mode(cp_hashtable *table, int mode); + + +/** + * the internal table will not be resized to less than min_size + */ +CPROPS_DLL +int cp_hashtable_set_min_size(cp_hashtable *table, int min_size); + +/** + * a resize is triggered when the table contains more items than + * table_size * fill_factor / 100 + */ +CPROPS_DLL +int cp_hashtable_set_max_fill_factor(cp_hashtable *table, int fill_factor); + +/** + * a resize is triggered when the table contains less items than + * table_size * fill_factor / 100 + */ +CPROPS_DLL +int cp_hashtable_set_min_fill_factor(cp_hashtable *table, int fill_factor); + +/** + * attempts to retrieve the value assigned to the key 'key'. To return + * multiple values the table mode must be set to COLLECTION_MODE_MULTIPLE_VALUES, + * otherwise the only first value for the given key will be returned. + * @retval (void*)value to the value if found + * @retval NULL otherwise + */ +CPROPS_DLL +void *cp_hashtable_get(cp_hashtable *table, void *key); + +/** + * retrieve the value or values for key 'key'. the 'mode' parameter sets the + * mode for the current operation. + */ +CPROPS_DLL +void *cp_hashtable_get_by_option(cp_hashtable *table, void *key, int mode); + +/** + * Internal put method. + */ +CPROPS_DLL +void *cp_hashtable_put_by_option(cp_hashtable *table, void *key, void *value, int mode); + +/** + * the key 'key' will be assigned to the value 'value'. The new value will + * override an old value if one exists. The old value will not be deallocated. + * If you would need the old value to be released call cp_hashtable_put_safe instead. + */ +CPROPS_DLL +void *cp_hashtable_put(cp_hashtable *table, void *key, void *value); + +/** + * same as cp_hashtable_put(table, key, value) except that an old value is released if it + * exists. + */ +CPROPS_DLL +void *cp_hashtable_put_safe(cp_hashtable *table, void *key, void *value); + +/** + * same as cp_hashtable_put(table, key, value) except that it inserts a copy + * of the key and the value object. + */ +CPROPS_DLL +void *cp_hashtable_put_copy(cp_hashtable *table, void *key, void *value); + +/** + * Attempts to remove the mapping for key from the table. + * + * @param table the object + * @param key Key to search for. + * @retval value retrieved by the key (that was removed) + * @retval NULL if the table does not contain the requested key. + */ +CPROPS_DLL +void *cp_hashtable_remove(cp_hashtable *table, void *key); + +/** remove all entries with current mode */ +CPROPS_DLL +int cp_hashtable_remove_all(cp_hashtable *table); + +/** + * removes a mapping from the table, and deallocates the memory for the mapped + * key and value. + * + * @param table the object + * @param key Key to search for. + * @return 1 if the operation was successful, 0 otherwise + */ +CPROPS_DLL +int cp_hashtable_remove_deep(cp_hashtable *table, void *key); + +/** + * Check if there is an entry with matching key. + * + * @param table the object + * @param key Key to search for. + * @return 1 if table contains key, 0 otherwise + */ +CPROPS_DLL +int cp_hashtable_contains(cp_hashtable *table, void *key); + +/** + * get an array containing all keys mapped in table table. + * @note It is the responsibility of the caller to free the returned array. + * @note The keys themselves must not be changed or deleted (read-only). + */ +CPROPS_DLL +void **cp_hashtable_get_keys(cp_hashtable *table); + +/** + * get an array containing all values in the table. + * @note It is the responsibility of the caller to free the returned array. + * @note The values themselves must not be changed or deleted (read-only). + */ +CPROPS_DLL +void **cp_hashtable_get_values(cp_hashtable *table); + +/** + * Get the number of entries in the collection. + * @return the number of key mappings currently in the table. + */ +CPROPS_DLL +unsigned long cp_hashtable_count(cp_hashtable *table); + +/** + * Check if the collection is empty. + * @retval true/1 if the collection is empty + * @retval false/0 if the collection has entries + */ +#define cp_hashtable_is_empty(table) (cp_hashtable_count(table) == 0) + +/** + * @return a prime greater than size_request + */ +CPROPS_DLL +unsigned long cp_hashtable_choose_size(unsigned long size_request); + +__END_DECLS +/** @} */ +#endif + Property changes on: branches/multicore/numpy/core/cprops_thread/hashtable.h ___________________________________________________________________ Name: svn:executable + * Added: branches/multicore/numpy/core/cprops_thread/linked_list.c =================================================================== --- branches/multicore/numpy/core/cprops_thread/linked_list.c 2007-04-10 15:44:17 UTC (rev 3691) +++ branches/multicore/numpy/core/cprops_thread/linked_list.c 2007-04-10 17:54:59 UTC (rev 3692) @@ -0,0 +1,1072 @@ +/** + * @addtogroup cp_list + */ +/** @{ */ +/** + * @file + * Implementation of cp_list Collection with linked elements and + * cp_list_iterator. + * + * The elements are stored in cp_list_entry objects. + * + * @copydoc collection + */ +/* ----------------------------------------------------------------- */ + +#include +#include +#include +#include "linked_list.h" + +/* fwd declarations of internal locking functions */ +int cp_list_txlock(cp_list *list, int type); +/* fwd declarations of internal locking functions */ +int cp_list_txunlock(cp_list *list); + +/** + * Creates an entry with the mode of the list. + * + * The new entry is not added to the list. + * If the list has copy mode, it copies the item and puts the copy into the + * new entry. + * + * @return entry object for the item. + */ +static cp_list_entry *cp_list_create_entry(cp_list *list, void *item); + +//static void cp_list_destroy_entry(cp_list *list, cp_list_entry *entry); + +/** + * Unsynchronized and unchecked insert a new element at the beginning + * of the list. + */ +static cp_list_entry *cp_list_insert_internal(cp_list *list, void *item); + +/** + * Unsynchronized and unchecked remove the entry from the list. + */ +static cp_list_entry *cp_list_remove_internal(cp_list *list, cp_list_entry *entry); + +/** + * Appends the element and returns the Entry. + */ +static cp_list_entry *cp_list_append_internal(cp_list *list, void *item); + +/** + * Removes the first entry from the list and returns it. + * + * Sets the references into a consistent state. + */ +static cp_list_entry *cp_list_remove_head_internal(cp_list *list); + +/** + * Removes the last entry from the list and returns it. + * + * Sets the references into a consistent state. + */ +static cp_list_entry *cp_list_remove_tail_internal(cp_list *list); + + +cp_list *cp_list_create_internal(int mode, + cp_compare_fn compare_fn, + cp_copy_fn copy_fn, + cp_destructor_fn item_destructor, + int is_view) +{ + cp_list *list = NULL; + + list = (cp_list *) calloc(1, sizeof(cp_list)); + if (list == NULL) + { + errno = ENOMEM; + return NULL; + } + + list->head = NULL; + list->tail = NULL; + list->compare_fn = compare_fn; + list->copy_fn = copy_fn; + list->free_fn = item_destructor; + list->mode = mode; + list->items = 0; + + list->is_view = is_view; + + if (!(mode & COLLECTION_MODE_NOSYNC) && !is_view) + { + list->lock = malloc(sizeof(cp_lock)); + if (list->lock == NULL) + { + free(list); + errno = ENOMEM; + return NULL; + } + if (cp_lock_init(list->lock, NULL)) + { + free(list->lock); + free(list); + return NULL; + } + } + + return list; +} + +cp_list *cp_list_create() +{ + return + cp_list_create_internal(COLLECTION_MODE_MULTIPLE_VALUES, + NULL, NULL, NULL, 0); +} + +cp_list *cp_list_create_nosync() +{ + return + cp_list_create_internal(COLLECTION_MODE_MULTIPLE_VALUES | + COLLECTION_MODE_NOSYNC, + NULL, NULL, NULL, 0); +} + +cp_list *cp_list_create_list(int mode, + cp_compare_fn compare_fn, + cp_copy_fn copy_fn, + cp_destructor_fn item_destructor) +{ + return + cp_list_create_internal(mode, compare_fn, copy_fn, item_destructor, 0); +} + + +cp_list *cp_list_create_view(int mode, + cp_compare_fn compare_fn, + cp_copy_fn copy_fn, + cp_destructor_fn item_destructor, + cp_lock *lock) +{ + cp_list *list = + cp_list_create_internal(mode, compare_fn, copy_fn, item_destructor, 1); + + list->lock = lock; //~~ test + + return list; +} + +/* + * locking provides some protection if the list is being destroyed while it is + * still in use. However if the lock causes a different thread to block the + * other thread is likely to crash when releasing the lock which will possibly + * have been deallocated in the meanwhile. It is the applications + * responsibility to assure the list isn't being accessed and destroyed in + * different threads simultaneously. + */ +void cp_list_destroy_internal(cp_list *list, cp_destructor_fn fn, int mode) +{ + cp_list_entry *curr, *next; + int shared_pool; + + cp_list_txlock(list, COLLECTION_LOCK_WRITE); + + shared_pool = list->mempool && list->mempool->refcount > 1; + + curr = list->head; + while (curr) + { + next = curr->next; + if ((mode & COLLECTION_MODE_DEEP) && fn) + (*fn)(curr->item); + if (list->mempool) + { + if (shared_pool) + cp_mempool_free(list->mempool, curr); + } + else + free(curr); + curr = next; + } + cp_list_txunlock(list); + + if (list->lock && !list->is_view) + { + cp_lock_destroy(list->lock); + free(list->lock); + } + + if (list->mempool) cp_mempool_destroy(list->mempool); + + free(list); +} + +void cp_list_destroy(cp_list *list) +{ + cp_list_destroy_internal(list, list->free_fn, list->mode); +} + +void cp_list_destroy_by_option(cp_list *list, int option) +{ + cp_list_destroy_internal(list, list->free_fn, option); +} + +void cp_list_destroy_custom(cp_list *list, cp_destructor_fn fn) +{ + cp_list_destroy_internal(list, fn, list->mode | COLLECTION_MODE_DEEP); +} + +long cp_list_item_count(cp_list *list) +{ + return (list == NULL) ? 0 : list->items; +} + + +static cp_list_entry **cp_list_get_entry_ref(cp_list *list, void *item) +{ + cp_list_entry **here = &list->head; + + while (*here != NULL && (*list->compare_fn)(item, (*here)->item)) + here = &(*here)-> next; + + return here; +} + +void *cp_list_insert(cp_list *list, void *item) +{ + cp_list_entry *entry, **lookup; + void *res = NULL; + + if (cp_list_txlock(list, COLLECTION_LOCK_WRITE)) return NULL; + + entry = NULL; + if (!(list->mode & COLLECTION_MODE_MULTIPLE_VALUES)) + { + lookup = cp_list_get_entry_ref(list, item); + if (lookup) entry = *lookup; + } + if (entry == NULL) entry = cp_list_insert_internal(list, item); + if (entry) res = entry->item; + + cp_list_txunlock(list); + + return res; +} + +void *cp_list_remove(cp_list *list, void *item) +{ + void *res = NULL; + cp_list_entry *here, *curr; + int mvalbit = list->mode & COLLECTION_MODE_MULTIPLE_VALUES; + int deepbit = list->mode & COLLECTION_MODE_DEEP; + + if (cp_list_txlock(list, COLLECTION_LOCK_WRITE)) return NULL; + + here = list->head; + while (here != NULL) + { + curr = here; + here = here->next; + if ((*list->compare_fn)(item, curr->item) == 0) + { + cp_list_remove_internal(list, curr); + if (deepbit && list->free_fn) (*list->free_fn)(curr->item); + if (list->mempool) + cp_mempool_free(list->mempool, curr); + else + free(curr); + + if (!mvalbit) break; + } + } + + cp_list_txunlock(list); + + return res; +} + +void *cp_list_insert_after(cp_list *list, void *item, void *existing) +{ + cp_list_entry **here, *entry; + + if (cp_list_txlock(list, COLLECTION_LOCK_WRITE)) return NULL; + + if (!(list->mode) & COLLECTION_MODE_MULTIPLE_VALUES) + { + here = cp_list_get_entry_ref(list, item); + if (*here != NULL) + { + cp_list_txunlock(list); + return (*here)->item; + } + } + + entry = cp_list_create_entry(list, item); + if (entry == NULL) + { + cp_list_txunlock(list); + return NULL; + } + + here = cp_list_get_entry_ref(list, existing); + + if (*here == NULL) /* no match - append to end of list */ + here = &list->tail; + + entry->prev = *here; + entry->next = (*here)->next; + (*here)->next = entry; + + if (entry->next) + entry->next->prev = entry; + else + list->tail = entry; + + list->items++; + + cp_list_txunlock(list); + + return entry->item; +} + +void *cp_list_insert_before(cp_list *list, void *item, void *existing) +{ + cp_list_entry **here, *entry; + + if (cp_list_txlock(list, COLLECTION_LOCK_WRITE)) return NULL; + + if (!(list->mode) & COLLECTION_MODE_MULTIPLE_VALUES) + { + here = cp_list_get_entry_ref(list, item); + if (*here != NULL) + { + cp_list_txunlock(list); + return (*here)->item; + } + } + + entry = cp_list_create_entry(list, item); + if (entry == NULL) + { + cp_list_txunlock(list); + return NULL; + } + + here = cp_list_get_entry_ref(list, existing); + + if (*here == NULL) /* no match - insert at top of list */ + here = &list->head; + + entry->next = *here; + entry->prev = (*here)->prev; + (*here)->prev = entry; + if (entry->prev) + entry->prev->next = entry; + else + list->head = entry; + + list->items++; + + cp_list_txunlock(list); + + return entry->item; +} + +void *cp_list_search(cp_list *list, void *item) +{ + cp_list_entry **here; + void *res; + + if (cp_list_txlock(list, COLLECTION_LOCK_READ)) return NULL; + + here = cp_list_get_entry_ref(list, item); + res = *here ? (*here)->item : NULL; + + cp_list_txunlock(list); + + return res; +} + +int cp_list_callback(cp_list *l, int (*item_action)(void *, void *), void *id) +{ + int rc = 0; + cp_list_entry *curr; + + if ((rc = cp_list_txlock(l, COLLECTION_LOCK_READ))) return rc; + + for (curr = l->head; curr; curr = curr->next) + if ((rc = (*item_action)(curr->item, id))) + break; + + cp_list_txunlock(l); + + return rc; +} + + +void *cp_list_append(cp_list *list, void *item) +{ + cp_list_entry **lookup, *entry; + void *res = NULL; + + if (cp_list_txlock(list, COLLECTION_LOCK_WRITE)) return NULL; + + if (!(list->mode & COLLECTION_MODE_MULTIPLE_VALUES)) + { + lookup = cp_list_get_entry_ref(list, item); + if (lookup != NULL) + { + cp_list_txunlock(list); + return (*lookup)->item; + } + } + + entry = cp_list_append_internal(list, item); + if (entry) res = entry->item; + + cp_list_txunlock(list); + + return res; +} + +void *cp_list_get_head(cp_list *list) +{ + void *item = NULL; + + if (cp_list_txlock(list, COLLECTION_LOCK_WRITE)) return NULL; + if (list->head) item = list->head->item; + cp_list_txunlock(list); + + return item; +} + +void *cp_list_get_tail(cp_list *list) +{ + void *item = NULL; + + if (cp_list_txlock(list, COLLECTION_LOCK_WRITE)) return NULL; + if (list->tail) item = list->tail->item; + cp_list_txunlock(list); + + return item; +} + + +void *cp_list_remove_head(cp_list *list) +{ + cp_list_entry *old_head; + void *res = NULL; + + if (cp_list_txlock(list, COLLECTION_LOCK_WRITE)) return NULL; + + old_head = cp_list_remove_head_internal(list); + if (old_head) + { + res = old_head->item; + if ((list->mode & COLLECTION_MODE_DEEP) && list->free_fn) + (*list->free_fn)(old_head->item); + if (list->mempool) + cp_mempool_free(list->mempool, old_head); + else + free(old_head); + } + + cp_list_txunlock(list); + + return res; +} + +void *cp_list_remove_tail(cp_list *list) +{ + cp_list_entry *old_tail; + void *res = NULL; + + if (cp_list_txlock(list, COLLECTION_LOCK_WRITE)) return NULL; + + old_tail = cp_list_remove_tail_internal(list); + if (old_tail) + { + res = old_tail->item; + if (list->mempool) + cp_mempool_free(list->mempool, old_tail); + else + free(old_tail); + } + + cp_list_txunlock(list); + + return res; +} + + +int cp_list_is_empty(cp_list *list) +{ + int empty = 0; + + cp_list_txlock(list, COLLECTION_LOCK_READ); + empty = list->head == NULL; + cp_list_txunlock(list); + + return empty; +} + +int cp_list_lock_internal(cp_list *list, int mode) +{ + int rc; + + if (mode == COLLECTION_LOCK_READ) + rc = cp_lock_rdlock(list->lock); + else + rc = cp_lock_wrlock(list->lock); + + return rc; +} + +int cp_list_unlock_internal(cp_list *list) +{ + return cp_lock_unlock(list->lock); +} + +int cp_list_txlock(cp_list *list, int type) +{ + if (list->mode & COLLECTION_MODE_NOSYNC) return 0; + if (list->mode & COLLECTION_MODE_IN_TRANSACTION && + list->txtype == COLLECTION_LOCK_WRITE) + { + cp_thread self = cp_thread_self(); + if (cp_thread_equal(self, list->txowner)) return 0; + } + return cp_list_lock_internal(list, type); +} + +int cp_list_txunlock(cp_list *list) +{ + if (list->mode & COLLECTION_MODE_NOSYNC) return 0; + if (list->mode & COLLECTION_MODE_IN_TRANSACTION && + list->txtype == COLLECTION_LOCK_WRITE) + { + cp_thread self = cp_thread_self(); + if (cp_thread_equal(self, list->txowner)) return 0; + } + return cp_list_unlock_internal(list); +} + +/* lock and set the transaction indicators */ +int cp_list_lock(cp_list *list, int type) +{ + int rc; + if ((list->mode & COLLECTION_MODE_NOSYNC)) return EINVAL; + if ((rc = cp_list_lock_internal(list, type))) return rc; + list->txtype = type; + list->txowner = cp_thread_self(); + list->mode |= COLLECTION_MODE_IN_TRANSACTION; + return 0; +} + +/* unset the transaction indicators and unlock */ +int cp_list_unlock(cp_list *list) +{ + cp_thread self = cp_thread_self(); + if (list->txowner == self) + { + list->txtype = 0; + list->txowner = 0; + list->mode ^= COLLECTION_MODE_IN_TRANSACTION; + } + else if (list->txtype == COLLECTION_LOCK_WRITE) + return -1; + + return cp_list_unlock_internal(list); +} + +/* get the current collection mode */ +int cp_list_get_mode(cp_list *list) +{ + return list->mode; +} + +/* set mode bits on the list mode indicator */ +int cp_list_set_mode(cp_list *list, int mode) +{ + int nosync; + + /* can't set NOSYNC in the middle of a transaction */ + if ((list->mode & COLLECTION_MODE_IN_TRANSACTION) && + (mode & COLLECTION_MODE_NOSYNC)) return EINVAL; + + nosync = list->mode & COLLECTION_MODE_NOSYNC; + if (!nosync) + if (cp_list_txlock(list, COLLECTION_LOCK_WRITE)) + return -1; + + list->mode |= mode; + + if (!nosync) + cp_list_txunlock(list); + + return 0; +} + +/* unset mode bits on the list mode indicator. if unsetting + * COLLECTION_MODE_NOSYNC and the list was not previously synchronized, the + * internal synchronization structure is initalized. + */ +int cp_list_unset_mode(cp_list *list, int mode) +{ + int nosync = list->mode & COLLECTION_MODE_NOSYNC; + + if (!nosync) + if (cp_list_txlock(list, COLLECTION_LOCK_WRITE)) + return -1; + + /* handle the special case of unsetting COLLECTION_MODE_NOSYNC */ + if ((mode & COLLECTION_MODE_NOSYNC) && list->lock == NULL) + { + /* list can't be locked in this case, no need to unlock on failure */ + if ((list->lock = malloc(sizeof(cp_lock))) == NULL) + return -1; + if (cp_lock_init(list->lock, NULL)) + return -1; + } + + /* unset specified bits */ + list->mode &= list->mode ^ mode; + if (!nosync) + cp_list_txunlock(list); + + return 0; +} + +/* set list to use given mempool or allocate a new one if pool is NULL */ +int cp_list_use_mempool(cp_list *list, cp_mempool *pool) +{ + int rc = 0; + + if ((rc = cp_list_txlock(list, COLLECTION_LOCK_WRITE))) return rc; + + if (pool) + { + if (pool->item_size < sizeof(cp_list_entry)) + { + rc = EINVAL; + goto DONE; + } + if (list->mempool) + { + if (list->items) + { + rc = ENOTEMPTY; + goto DONE; + } + cp_mempool_destroy(list->mempool); + } + cp_mempool_inc_refcount(pool); + list->mempool = pool; + } + else + { + list->mempool = + cp_mempool_create_by_option(COLLECTION_MODE_NOSYNC, + sizeof(cp_list_entry), 0); + if (list->mempool == NULL) + { + rc = ENOMEM; + goto DONE; + } + } + +DONE: + cp_list_txunlock(list); + return rc; +} + + +/* set list to use a shared memory pool */ +int cp_list_share_mempool(cp_list *list, cp_shared_mempool *pool) +{ + int rc; + + if ((rc = cp_list_txlock(list, COLLECTION_LOCK_WRITE))) return rc; + + if (list->mempool) + { + if (list->items) + { + rc = ENOTEMPTY; + goto DONE; + } + + cp_mempool_destroy(list->mempool); + } + + list->mempool = cp_shared_mempool_register(pool, sizeof(cp_list_entry)); + if (list->mempool == NULL) + { + rc = ENOMEM; + goto DONE; + } + +DONE: + cp_list_txunlock(list); + return rc; +} + + +/**************************************************************************** + * * + * cp_list_iterator implementation * + * * + ****************************************************************************/ + +cp_list_iterator* cp_list_create_iterator(cp_list *list, int type) +{ + int rc = - 1; + cp_list_iterator *iterator = (cp_list_iterator *) malloc(sizeof(cp_list_iterator)); + iterator->list = list; + iterator->pos = &list->head; + iterator->lock_type = type; + + rc = cp_list_txlock(list, type); + if (rc) /* locking failed */ + { + free(iterator); + iterator = NULL; + } + + return iterator; +} + +int cp_list_iterator_init(cp_list_iterator *iterator, cp_list *list, int type) +{ + iterator->list = list; + iterator->pos = &list->head; + iterator->lock_type = type; + return cp_list_txlock(list, type); +} + + +int cp_list_iterator_head(cp_list_iterator *iterator) +{ + if (iterator == NULL) return -1; + iterator->pos = &iterator->list->head; + + return 0; +} + +int cp_list_iterator_tail(cp_list_iterator *iterator) +{ + if (iterator == NULL) return -1; + iterator->pos = &iterator->list->tail; + + return 0; +} + +int cp_list_iterator_init_tail(cp_list_iterator *iterator, + cp_list *list, + int type) +{ + iterator->list = list; + iterator->pos = &list->tail; + iterator->lock_type = type; + return cp_list_txlock(list, type); +} + +int cp_list_iterator_release(cp_list_iterator *iterator) +{ + int rc = 0; + if (iterator->lock_type != COLLECTION_LOCK_NONE) + rc = cp_list_txunlock(iterator->list); + + return rc; +} + +int cp_list_iterator_destroy(cp_list_iterator *iterator) +{ + int rc = cp_list_iterator_release(iterator); + free(iterator); + + return rc; +} + +void *cp_list_iterator_next(cp_list_iterator *iterator) +{ + void *item = NULL; + + if (*(iterator->pos)) + { + item = (*iterator->pos)->item; + iterator->pos = &(*(iterator->pos))->next; + } + else if (iterator->list->head && + iterator->pos == &iterator->list->head->prev) + { + item = iterator->list->head; + iterator->pos = &iterator->list->head; + } + + return item; +} + +void *cp_list_iterator_prev(cp_list_iterator *iterator) +{ + void *item = NULL; + + if (*iterator->pos) + { + item = (*iterator->pos)->item; + iterator->pos = &(*iterator->pos)->prev; + } + else if (iterator->list->tail && + iterator->pos == &iterator->list->tail->next) + { + item = iterator->list->tail->item; + iterator->pos = &iterator->list->tail->prev; + } + + return item; +} + +void *cp_list_iterator_curr(cp_list_iterator *iterator) +{ + void *item = NULL; + + if (*iterator->pos) + item = (*iterator->pos)->item; + + return item; +} + +void *cp_list_iterator_insert(cp_list_iterator *iterator, void *item) +{ + void *new_item = NULL; + + if ((iterator->list->mode & COLLECTION_MODE_NOSYNC) || + (iterator->lock_type == COLLECTION_LOCK_WRITE)) + { + cp_list_entry *entry = cp_list_create_entry(iterator->list, item); + if (entry == NULL) return NULL; + new_item = entry->item; + + entry->next = *iterator->pos; + + if (*iterator->pos) + { + entry->prev = (*iterator->pos)->prev; + (*iterator->pos)->prev = entry; + if (entry->prev) + entry->prev->next = entry; + } + else if (iterator->list->head == NULL) /* iterator not pointing at much - list may be empty */ + iterator->list->head = iterator->list->tail = entry; + else if (iterator->pos == &iterator->list->head->prev) /* iterator moved before head */ + { + entry->prev = NULL; + entry->next = iterator->list->head; + entry->next->prev = entry; + iterator->list->head = entry; + } + else /* iterator moved after tail */ + { + entry->prev = iterator->list->tail; + entry->prev->next = entry; + iterator->list->tail = entry; + } + + iterator->pos = &entry->next; /* keep iterator at same position */ + iterator->list->items++; + } + else /* mode is not NOSYNC and no LOCK_WRITE */ + errno = EINVAL; + + return new_item; +} + +void *cp_list_iterator_append(cp_list_iterator *iterator, void *item) +{ + void *new_item = NULL; + + if ((iterator->list->mode & COLLECTION_MODE_NOSYNC) || + (iterator->lock_type == COLLECTION_LOCK_WRITE)) + { + cp_list_entry *entry = cp_list_create_entry(iterator->list, item); + if (entry == NULL) return NULL; + new_item = entry->item; + + entry->prev = *iterator->pos; + + if (*iterator->pos) + { + entry->next = (*iterator->pos)->next; + (*iterator->pos)->next = entry; + if (entry->next) + entry->next->prev = entry; + } + else if (iterator->list->tail == NULL) /* iterator not pointing at much - list may be empty */ + iterator->list->tail = iterator->list->head = entry; + else if (iterator->pos == &iterator->list->tail->next) /* iterator moved after tail */ + { + entry->next = NULL; + entry->prev = iterator->list->tail; + entry->prev->next = entry; + iterator->list->tail = entry; + } + else /* iterator moved before head */ + { + entry->next = iterator->list->head; + entry->next->prev = entry; + iterator->list->head = entry; + } + + iterator->pos = &entry->prev; /* keep iterator at same position */ + iterator->list->items++; + } + else /* mode is not NOSYNC and no LOCK_WRITE */ + errno = EINVAL; + + return new_item; +} + +void *cp_list_iterator_remove(cp_list_iterator *iterator) +{ + void *rm_item = NULL; + + if ((iterator->list->mode & COLLECTION_MODE_NOSYNC) || + (iterator->lock_type == COLLECTION_LOCK_WRITE)) + { + if (*iterator->pos) + { + cp_list_entry *curr = *iterator->pos; + if (curr->prev) + iterator->pos = &curr->prev->next; + else if (curr->prev) + iterator->pos = &curr->next->prev; + else /* removing last item */ + iterator->pos = &iterator->list->head; + + cp_list_remove_internal(iterator->list, curr); + if (iterator->list->mode & COLLECTION_MODE_DEEP && + iterator->list->free_fn) (*iterator->list->free_fn)(curr->item); + if (iterator->list->mempool) + cp_mempool_free(iterator->list->mempool, curr); + else + free(curr); + } + } + + return rm_item; +} + + + + +/* ----------------------------------------------------------------- */ +/** @} */ + +static cp_list_entry *cp_list_create_entry(cp_list *list, void *item) +{ + cp_list_entry *entry; + + if (list->mempool) + entry = (cp_list_entry *) cp_mempool_calloc(list->mempool); + else + entry = (cp_list_entry *) calloc(1, sizeof(cp_list_entry)); + + if (entry == NULL) + { + errno = ENOMEM; + return NULL; + } + entry->item = (list->mode & COLLECTION_MODE_COPY) ? (*list->copy_fn)(item) : item; + + return entry; +} + +static cp_list_entry *cp_list_insert_internal(cp_list *list, void *item) +{ + cp_list_entry *entry; + + entry = cp_list_create_entry(list, item); + if (entry == NULL) return NULL; + + entry->next = list->head; + list->head = entry; + if (entry->next) entry->next->prev = entry; + if (list->tail == NULL) list->tail = entry; + + list->items++; + + return entry; +} + +static cp_list_entry * + cp_list_remove_internal(cp_list *list, cp_list_entry *entry) +{ + if (entry->prev) + entry->prev->next = entry->next; + else + list->head = entry->next; + + if (entry->next) + entry->next->prev = entry->prev; + else + list->tail = entry->prev; + + list->items--; + + return entry; +} + +static cp_list_entry *cp_list_append_internal(cp_list *list, void *item) +{ + cp_list_entry *entry; + + entry = cp_list_create_entry(list, item); + if (entry == NULL) return NULL; + + entry->prev = list->tail; + list->tail = entry; + + if (entry->prev) entry->prev->next = entry; + + if (list->head == NULL) list->head = entry; + + list->items++; + + return entry; +} + +static cp_list_entry *cp_list_remove_head_internal(cp_list *list) +{ + cp_list_entry *old_head; + + old_head = list->head; + if (old_head) + { + list->head = list->head->next; + + if (list->head == NULL) + list->tail = NULL; + else + list->head->prev = NULL; + + list->items--; + } + + return old_head; +} + +static cp_list_entry *cp_list_remove_tail_internal(cp_list *list) +{ + cp_list_entry *old_tail; + + old_tail = list->tail; + if (old_tail) + { + list->tail = list->tail->prev; + + if (list->tail == NULL) + list->head = NULL; + else + list->tail->next = NULL; + + list->items--; + } + + return old_tail; +} + Added: branches/multicore/numpy/core/cprops_thread/linked_list.h =================================================================== --- branches/multicore/numpy/core/cprops_thread/linked_list.h 2007-04-10 15:44:17 UTC (rev 3691) +++ branches/multicore/numpy/core/cprops_thread/linked_list.h 2007-04-10 17:54:59 UTC (rev 3692) @@ -0,0 +1,364 @@ +#ifndef _CP_LINKEDLIST_H +#define _CP_LINKEDLIST_H + +/** @{ */ +/** + * @file + * + * linked list definitions + */ + +#include "common.h" + +__BEGIN_DECLS + +#include "cp_config.h" +#include "collection.h" +#include "mempool.h" + +/** + * Internal object that references the content and links to the neighbour + * entries. + */ +typedef CPROPS_DLL struct _cp_list_entry +{ + void *item; /**< stored element (content) */ + struct _cp_list_entry *next; /**< link to next entry */ + struct _cp_list_entry *prev; /**< link to previous entry */ +} cp_list_entry; + +/** + * doubly linked list type. + */ +typedef CPROPS_DLL struct _cp_list +{ + cp_list_entry *head; /**< link to beginning of list */ + cp_list_entry *tail; /**< link to end of list */ + + cp_compare_fn compare_fn; /**< comparison method */ + cp_copy_fn copy_fn; /**< copy method */ + cp_destructor_fn free_fn; /**< item destructor */ + + int mode; /**< operation mode (see collection.h) */ + cp_thread txowner; /**< current lock owner */ + + long items; /**< number of elements in list */ + + int is_view; /**< views don't have their own lock */ + cp_lock *lock; /**< lock */ + int txtype; /**< lock type */ + + cp_mempool *mempool; /**< optional memory pool */ +} cp_list; + +/** + * iterator helper-class of cp_list. + */ +typedef CPROPS_DLL struct _cp_list_iterator +{ + cp_list *list; /**< link to the list */ + cp_list_entry **pos; /**< current position */ + + int lock_type; /**< locking mode */ +} cp_list_iterator; + + +/** Default constructor */ +CPROPS_DLL +cp_list *cp_list_create(); + +CPROPS_DLL +cp_list *cp_list_create_nosync(); + +/** + * Constructor + * + * @param mode operation mode bitmap (see collection.h) + * @param compare_fn compare method + * @param copy_fn copy method + */ +CPROPS_DLL +cp_list *cp_list_create_list(int mode, + cp_compare_fn compare_fn, + cp_copy_fn copy_fn, + cp_destructor_fn item_destructor); + +CPROPS_DLL +cp_list *cp_list_create_view(int mode, + cp_compare_fn compare_fn, + cp_copy_fn copy_fn, + cp_destructor_fn item_destructor, + cp_lock *lock); + +/** + * Destroy the object with the mode stored in the list. + */ +CPROPS_DLL +void cp_list_destroy(cp_list *); + +/** + * Destroy the object with the specified mode (override default). + */ +CPROPS_DLL +void cp_list_destroy_by_option(cp_list *list, int option); + +/** + * Destroy the object and all contained elements. + * For each element the method cp_destructor_fn is called. + */ +CPROPS_DLL +void cp_list_destroy_custom(cp_list *list, cp_destructor_fn fn); + +/** + * Insert a new element at the beginning of the list. + * The operation is synchronized according to the properties of the object. + */ +CPROPS_DLL +void *cp_list_insert(cp_list *list, void *item); + +/** + * Remove the element from the list. + * The operation is synchronized according to the properties of the object. + */ +CPROPS_DLL +void *cp_list_remove(cp_list *list, void *item); + +/** + * Insert the element after an existing one. + */ +CPROPS_DLL +void *cp_list_insert_after(cp_list *list, void *item, void *existing); + +/** + * Insert the element before an existing one. + */ +CPROPS_DLL +void *cp_list_insert_before(cp_list *list, void *item, void *existing); + +/** + * Get the first element that equals the parameter. + */ +CPROPS_DLL +void *cp_list_search(cp_list *list, void *item); + +/** + * run a callback on each item. Stops if the callback function returns + * non-zero. + */ +CPROPS_DLL +int cp_list_callback(cp_list *l, int (*item_action)(void *, void *), void *id); + +/** + * Append the element at the end of the list. + * + * @retval item the appended item. + * @retval existing_item if multiple values not allowed and an equal item already exists. + */ +CPROPS_DLL +void *cp_list_append(cp_list *list, void *item); + +/** + * Returns the first element of the list. + */ +CPROPS_DLL +void *cp_list_get_head(cp_list *list); + +/** + * Returns the last element of the list. + */ +CPROPS_DLL +void *cp_list_get_tail(cp_list *list); + +/** + * remove and release first entry + * + * @return previous list head + */ +CPROPS_DLL +void *cp_list_remove_head(cp_list *list); + +/** + * remove and release last entry + * + * @return Element that was stored in the last entry. + */ +CPROPS_DLL +void *cp_list_remove_tail(cp_list *list); + +/** + * Test if object is empty. + * + * @retval true if no element contained. + * @retval false if at least one element is contained. + */ +CPROPS_DLL +int cp_list_is_empty(cp_list *list); + +/** + * Get the number of elements in the collection. + * + * @return number of elements in the list. + * @retval 0 if list is NULL + */ +CPROPS_DLL +long cp_list_item_count(cp_list *); + +/** + * Locks the collection with the specified mode. + * + * This overrides the default mode stored in the object. + */ +CPROPS_DLL +int cp_list_lock(cp_list *list, int mode); + +/** + * Set a read lock on the object. + */ +#define cp_list_rdlock(list) cp_list_lock(list, COLLECTION_LOCK_READ) + +/** + * Set a write lock on the object. + */ +#define cp_list_wrlock(list) cp_list_lock(list, COLLECTION_LOCK_WRITE) + +/** + * Unlock the object. + */ +CPROPS_DLL +int cp_list_unlock(cp_list *list); + +/* set list to use given mempool or allocate a new one if pool is NULL */ +CPROPS_DLL +int cp_list_use_mempool(cp_list *list, cp_mempool *pool); + +/* set list to use a shared memory pool */ +CPROPS_DLL +int cp_list_share_mempool(cp_list *list, cp_shared_mempool *pool); + + +/** + * Initialize the Iterator at the first position. + * + * Set the iterator at the beginning of the list and lock the list in the + * mode specified in type. + * + * @param iterator the iterator object + * @param list the list to iterate over + * @param lock_mode locking mode to use + * @retval return-code of the aquired lock + * @retval 0 if no locking + */ +CPROPS_DLL +int cp_list_iterator_init(cp_list_iterator *iterator, cp_list *list, int lock_mode); + +/** + * Initialize the Iterator at the end. + * + * Set the iterator at the end of the list and lock the list in the + * mode specified in type. + * + * @param iterator the iterator object + * @param list the list to iterate over + * @param lock_mode locking mode to use + * @retval return-code of the aquired lock + * @retval 0 if no locking + */ +CPROPS_DLL +int cp_list_iterator_init_tail(cp_list_iterator *iterator, cp_list *list, int lock_mode); + +/** + * create a new iterator and initialize it at the beginning of the list. + * + * @param list the list to iterate over + * @param lock_mode locking mode to use + * @return new iterator object + */ +CPROPS_DLL +cp_list_iterator* cp_list_create_iterator(cp_list *list, int lock_mode); + +/** + * Move the iterator to the beginning of the list. + */ +CPROPS_DLL +int cp_list_iterator_head(cp_list_iterator *iterator); + +/** + * Move the iterator to the end of the list. + */ +CPROPS_DLL +int cp_list_iterator_tail(cp_list_iterator *iterator); + +CPROPS_DLL +int cp_list_iterator_destroy(cp_list_iterator *iterator); + +/** + * unlock the list the iterator is operating on. + */ +CPROPS_DLL +int cp_list_iterator_release(cp_list_iterator *iterator); + +/** + * Go to the next entry in the list and return the content. + * + * @return object of the next entry. + * @retval NULL if reading beyond end or from empty list. + */ +CPROPS_DLL +void *cp_list_iterator_next(cp_list_iterator *iterator); + +/** + * Go to the previous entry in the list and return the content. + * + * @return object of the previous entry. + * @retval NULL if reading beyond beginning or from empty list. + */ +CPROPS_DLL +void *cp_list_iterator_prev(cp_list_iterator *iterator); + +/** + * returns the value at the current iterator position + * + * @return value at the current position. + * @retval NULL if list is empty. + */ +CPROPS_DLL +void *cp_list_iterator_curr(cp_list_iterator *iterator); + + +/** + * insert item to the list just before the current iterator position. In the + * special case that the iterator has been moved beyond the list end the new + * item is added at the end of the list. + * + * @return the added item or NULL if the list mode is not + * & COLLECTION_MODE_NOSYNC and the iterator does not own a write lock + */ +CPROPS_DLL +void *cp_list_iterator_insert(cp_list_iterator *iterator, void *item); + +/** + * append item to the list just after the current iterator position. In the + * special case that the iterator has been moved beyond the list head the new + * item is added at the head of the list. + * + * @return the added item or NULL if the list mode is not + * & COLLECTION_MODE_NOSYNC and the iterator does not own a write lock + */ +CPROPS_DLL +void *cp_list_iterator_append(cp_list_iterator *iterator, void *item); + +/** + * delete the item at the current iterator position. + * + * @return the deleted item or NULL the list is empty, if the iterator points + * beyond list limits or if the list mode is not + * & COLLECTION_MODE_NOSYNC and the iterator does not own a write lock + */ +CPROPS_DLL +void *cp_list_iterator_remove(cp_list_iterator *iterator); + +__END_DECLS + +/** @} */ + +#endif Property changes on: branches/multicore/numpy/core/cprops_thread/linked_list.h ___________________________________________________________________ Name: svn:executable + * Added: branches/multicore/numpy/core/cprops_thread/log.c =================================================================== --- branches/multicore/numpy/core/cprops_thread/log.c 2007-04-10 15:44:17 UTC (rev 3691) +++ branches/multicore/numpy/core/cprops_thread/log.c 2007-04-10 17:54:59 UTC (rev 3692) @@ -0,0 +1,115 @@ +/** @{ */ +/** + * @file + * very simple logging facilities. + */ + +#include + +#include "common.h" +#include "log.h" + +static int loglevel = LOG_LEVEL_INFO; + +typedef struct _error_code_legend +{ + int code; + char *msg; +} error_code_legend; + +error_code_legend error_messages[] = +{ + {CP_MEMORY_ALLOCATION_FAILURE, "MEMORY ALLOCATION FAILURE"}, + {CP_INVALID_FUNCTION_POINTER, "INVALID FUNCTION POINTER"}, + {CP_THREAD_CREATION_FAILURE, "THREAD CREATION FAILURE"}, + + {CP_LOADLIB_FAILED, "LOADLIB FAILED"}, + {CP_LOADFN_FAILED, "LOADFN FAILED"}, + {CP_MODULE_NOT_LOADED, "MODULE NOT LOADED"}, + + {CP_IO_ERROR, "IO ERROR"}, + {CP_OPEN_PORT_FAILED, "OPEN PORT FAILED"}, + {CP_HTTP_FETCH_FAILED, "HTTP FETCH FAILED"}, + {CP_INVALID_RESPONSE, "INVALID RESPONSE"}, + {CP_HTTP_EMPTY_REQUEST, "EMPTY HTTP REQUEST"}, + {CP_HTTP_INVALID_REQUEST_LINE, "INVALID HTTP REQUEST LINE"}, + {CP_HTTP_INVALID_STATUS_LINE, "INVALID HTTP STATUS LINE"}, + {CP_HTTP_UNKNOWN_REQUEST_TYPE, "UNKNOWN HTTP REQUEST TYPE"}, + {CP_HTTP_INVALID_URI, "INVALID URI"}, + {CP_HTTP_INVALID_URL, "INVALID URL"}, + {CP_HTTP_VERSION_NOT_SPECIFIED, "HTTP VERSION NOT SPECIFIED"}, + {CP_HTTP_1_1_HOST_NOT_SPECIFIED, "HTTP 1.1 HOST NOT SPECIFIED"}, + {CP_HTTP_INCORRECT_REQUEST_BODY_LENGTH, "INCORRECT HTTP REQUEST BODY LENGTH"}, + {CP_SSL_CTX_INITIALIZATION_ERROR, "SSL CONTEXT INITIALIZATION ERROR"}, + {CP_SSL_HANDSHAKE_FAILED, "SSL HANDSHAKE FAILED"}, + + {CP_LOG_FILE_OPEN_FAILURE, "LOG FILE OPEN FAILURE"}, + {CP_LOG_NOT_OPEN, "LOG NOT OPEN"}, + + {CP_INVALID_VALUE, "INVALID VALUE"}, + {CP_MISSING_PARAMETER, "MISSING PARAMETER"}, + {CP_BAD_PARAMETER_SET, "BAD PARAMETER SET"}, + {CP_ITEM_EXISTS, "ITEM EXISTS"}, + {CP_UNHANDLED_SIGNAL, "UNHANDLED SIGNAL"}, + {CP_FILE_NOT_FOUND, "FILE NOT FOUND"}, + {CP_METHOD_NOT_IMPLEMENTED, "METHOD NOT IMPLEMENTED"}, + + {CP_REGEX_COMPILATION_FAILURE, "INVALID REGULAR EXPRESSION"}, + {CP_COMPILATION_FAILURE, "COMPILATION FAILED"}, + + {CP_DBMS_NO_DRIVER, "NO DRIVER"}, + {CP_DBMS_CONNECTION_FAILURE, "DBMS CONNECTION FAILED"}, + {CP_DBMS_QUERY_FAILED, "DBMS QUERY FAILED"}, + {CP_DBMS_CLIENT_ERROR, "DBMS CLIENT ERROR"}, + {CP_DBMS_STATEMENT_ERROR, "DBMS STATEMENT ERROR"}, + {-1, NULL}, +}; + +char* error_message_lookup(int code) +{ + error_code_legend* entry=error_messages; + + while (entry->code != -1) + { + entry++; + } + return entry->msg; +} + +void cp_info(char *msg) +{ + if (loglevel > LOG_LEVEL_INFO) return; + + printf("%s\n", msg); +} + +void cp_warn(char *msg) +{ + if (loglevel > LOG_LEVEL_WARNING) return; + + printf("%s\n", msg); +} + +void cp_error(int code, char *msg) +{ + char *code_msg; + + if (loglevel > LOG_LEVEL_ERROR) return; + code_msg = error_message_lookup(code); + printf("%s: %s\n", code_msg, msg); +} + +void cp_fatal(int code, char *msg) +{ + char *code_msg; + + if (loglevel > LOG_LEVEL_FATAL) return; + code_msg = error_message_lookup(code); + printf("%s: %s\n", code_msg, msg); + + /* cprops has this exit, but that is a bad idea from a library, + * so we don't. + * fixme: This probably deserves some attention in the library. + */ +} + Added: branches/multicore/numpy/core/cprops_thread/log.h =================================================================== --- branches/multicore/numpy/core/cprops_thread/log.h 2007-04-10 15:44:17 UTC (rev 3691) +++ branches/multicore/numpy/core/cprops_thread/log.h 2007-04-10 17:54:59 UTC (rev 3692) @@ -0,0 +1,40 @@ +#ifndef _CP_LOG_H +#define _CP_LOG_H + +/** @{ */ +/** + * @file + * libcprops logging facilities

+ * + * All of these simply print to stdout. They should probably write to + * an thread-specific error buffer that can be retreived on failures. + * + *

    + *
  • cp_info(,sg) for printouts on LOG_LEVEL_INFO + *
  • cp_warn(msg) for warning printouts - LOG_LEVEL_WARNING or lower + *
  • cp_error(code, msg) for error messages - LOG_LEVEL_ERROR or lower + *
  • cp_fatal(code, msg) for fatal error messages (LOG_LEVEL_FATAL) + *
+ */ + + +/** debug level */ +#define LOG_LEVEL_DEBUG 0 +/** normal log level */ +#define LOG_LEVEL_INFO 1 +/** relatively quiet - warnings only */ +#define LOG_LEVEL_WARNING 2 +/** quit - severe errors only */ +#define LOG_LEVEL_ERROR 3 +/** very quiet - report fatal errors only */ +#define LOG_LEVEL_FATAL 4 +/** no logging */ +#define LOG_LEVEL_SILENT 5 + +void cp_info(char *msg); +void cp_warn(char *msg); +void cp_error(int code, char *msg); +void cp_fatal(int code, char *msg); + +#endif + Property changes on: branches/multicore/numpy/core/cprops_thread/log.h ___________________________________________________________________ Name: svn:executable + * Added: branches/multicore/numpy/core/cprops_thread/mempool.c =================================================================== --- branches/multicore/numpy/core/cprops_thread/mempool.c 2007-04-10 15:44:17 UTC (rev 3691) +++ branches/multicore/numpy/core/cprops_thread/mempool.c 2007-04-10 17:54:59 UTC (rev 3692) @@ -0,0 +1,472 @@ +#include "mempool.h" +/* #include "util.h" */ + +#include /* for calloc() and malloc() */ +#include /* for memset() */ +#include /* for errno and EINVAL */ + +#ifdef CP_HAS_GETPAGESIZE +#include /* for getpagesize() */ +#else +int getpagesize() { return 0x2000; } +#endif /* CP_HAS_GETPAGESIZE */ + +#ifndef WORD_SIZE +#define WORD_SIZE (sizeof(void *)) +#endif /* WORD_SIZE */ + +#if defined(CP_HAS_PTHREAD_MUTEX_RECURSIVE) || defined(CP_HAS_PTHREAD_MUTEX_RECURSIVE_NP) +#define CP_MEMPOOL_TXLOCK(pool, err_ret) { \ + if (!((pool)->mode & COLLECTION_MODE_NOSYNC)) \ + if (cp_mutex_lock((pool)->lock)) \ + return err_ret; \ +} +#define CP_MEMPOOL_TXUNLOCK(pool, err_ret) { \ + if (!((pool)->mode & COLLECTION_MODE_NOSYNC)) \ + if (cp_mutex_unlock((pool)->lock)) \ + return err_ret; \ +} +#else +#define CP_MEMPOOL_TXLOCK(pool, err_ret) { \ + if (!((pool)->mode & COLLECTION_MODE_NOSYNC)) \ + { \ + cp_thread self = cp_thread_self(); \ + if (!cp_thread_equal(self, (pool)->txowner) && \ + cp_mutex_lock((pool)->lock)) \ + return err_ret; \ + (pool)->txowner = self; \ + } \ +} +#define CP_MEMPOOL_TXUNLOCK(pool, err_ret) { \ + if (!((pool)->mode & COLLECTION_MODE_NOSYNC)) \ + { \ + cp_thread self = cp_thread_self(); \ + if (!cp_thread_equal(self, (pool)->txowner) && \ + cp_mutex_unlock((pool)->lock)) \ + return err_ret; \ + (pool)->txowner = 0; \ + } \ +} +#endif /* CP_HAS_PTHREAD_MUTEX_RECURSIVE */ +static size_t pagesize = 0; + +cp_mempool *cp_mempool_create_by_option(const int mode, + size_t item_size, + size_t alloc_size) +{ + cp_mempool *pool = (cp_mempool *) calloc(1, sizeof(cp_mempool)); + if (pool == NULL) return NULL; + + pool->mode = mode; + + if (!(mode & COLLECTION_MODE_NOSYNC)) + { +#if defined(PTHREAD_MUTEX_RECURSIVE) || defined(PTHREAD_MUTEX_RECURSIVE_NP) + pthread_mutexattr_t attr; +#endif /* PTHREAD_MUTEX_RECURSIVE */ + pool->lock = (cp_mutex *) malloc(sizeof(cp_mutex)); + if (pool->lock == NULL) + { + cp_mempool_destroy(pool); + return NULL; + } +#ifdef PTHREAD_MUTEX_RECURSIVE + pthread_mutexattr_init(&attr); + pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE); + cp_mutex_init(pool->lock, &attr); +#else + cp_mutex_init(pool->lock, NULL); +#endif /* PTHREAD_MUTEX_RECURSIVE */ + } + + if (pagesize == 0) pagesize = getpagesize(); + + /* first, we ensure that item_size is a multiple of WORD_SIZE, + * and also that it is at least sizeof(void*). The first + * condition may imply the second on *most* platforms, but it + * costs us very little to make sure. */ + if (item_size < sizeof(void*)) item_size = sizeof(void*); + if (item_size % WORD_SIZE) + item_size += (WORD_SIZE) - (item_size % WORD_SIZE); + pool->item_size = item_size; + /* next, we pump up the alloc_size until it is at least big enough + * to hold ten chunks plus a void pointer, or ten pages, whichever + * is bigger. The reason for doing it this way rather than simply + * adding sizeof(void*) to alloc_size is that we want alloc_size to + * be a multiple of pagesize (this makes it faster!). */ + if (alloc_size < item_size * 10 + sizeof(void *)) + alloc_size = item_size * 10 + sizeof(void *); + if (alloc_size < pagesize * 10) alloc_size = pagesize * 10; + if (alloc_size % pagesize) + alloc_size += pagesize - (alloc_size % pagesize); + pool->alloc_size = alloc_size; + + pool->items_per_alloc = (alloc_size - sizeof(void *)) / item_size; + + pool->reuse_pool = NULL; + pool->alloc_pool = (char *) malloc(alloc_size); + if (pool->alloc_pool == NULL) + { + free(pool); + return NULL; + } + *(void **) pool->alloc_pool = NULL; + + return pool; +} + + +cp_mempool *cp_mempool_create(const size_t item_size) +{ + return cp_mempool_create_by_option(COLLECTION_MODE_NOSYNC, item_size, 0); +} + + +void *cp_mempool_alloc(cp_mempool * const pool) +{ + void *p; + + CP_MEMPOOL_TXLOCK(pool, NULL); + + if (pool->reuse_pool) + { + p = pool->reuse_pool; + pool->reuse_pool = *(void **)p; + } + else + { + if (pool->alloc_pool_pos == pool->items_per_alloc) + { + p = malloc(pool->alloc_size); + if (p == NULL) return NULL; + *(void **) p = pool->alloc_pool; + pool->alloc_pool = p; + pool->alloc_pool_pos = 0; + /* if this pool is owned by a shared_mempool, report allocations */ + if (pool->alloc_callback) + (*pool->alloc_callback)(pool->callback_prm, pool, p); + } + p = pool->alloc_pool + sizeof(void *) + + pool->item_size * pool->alloc_pool_pos++; + } + + CP_MEMPOOL_TXUNLOCK(pool, NULL); + + return p; +} + +void *cp_mempool_calloc(cp_mempool * const pool) +{ + void *p = cp_mempool_alloc(pool); + if (p) + memset(p, 0, pool->item_size); + return p; +} + +int cp_mempool_free(cp_mempool * const pool, void *data) +{ + CP_MEMPOOL_TXLOCK(pool, -1); + *(void **) data = pool->reuse_pool; + pool->reuse_pool = data; + CP_MEMPOOL_TXUNLOCK(pool, -1); + return 0; +} + +/* increment refcount */ +int cp_mempool_inc_refcount(cp_mempool *pool) +{ + CP_MEMPOOL_TXLOCK(pool, -1); + pool->refcount++; + CP_MEMPOOL_TXUNLOCK(pool, -1); + return 0; +} + +void cp_mempool_destroy(cp_mempool *pool) +{ + if (pool) + { + if (pool->refcount-- <= 0) + { + void *p; + + while ((p = pool->alloc_pool)) + { + pool->alloc_pool = *(void **) pool->alloc_pool; + free(p); + } + } + } +} + +void cp_mempool_set_callback(cp_mempool *pool, void *prm, cp_mempool_callback_fn cb) + +{ + pool->alloc_callback = cb; + pool->callback_prm = prm; +} + + +/**************************************************************************** + * * + * cp_shared_mempool functions * + * * + ****************************************************************************/ + +typedef struct _chunk_track +{ + void *mem; + size_t size; +} chunk_track; + +chunk_track *get_chunk_track(void *mem, size_t size) +{ + chunk_track *t = (chunk_track *) malloc(sizeof(chunk_track)); + if (t) + { + t->mem = mem; + t->size = size; + } + return t; +} + +int compare_chunk_track(void *c1, void *c2) +{ + chunk_track *t1 = c1; + chunk_track *t2 = c2; + return (t2->size == 0 && + t2->mem >= t1->mem && + ((char *) t2->mem - (char *) t1->mem) < t1->size) || + (t1->size == 0 && + t1->mem >= t2->mem && + ((char *) t1->mem - (char *) t2->mem) < t2->size) ? 0 : + ((char *) t1->mem - (char *) t2->mem); +} + +cp_mempool *shared_mempool_entry_get(cp_shared_mempool *pool, size_t size) +{ + shared_mempool_entry *entry = pool->reg_tbl[size % pool->reg_tbl_size]; + + while (entry && entry->item_size != size) entry = entry->next; + if (entry) return entry->pool; + + return NULL; +} + +cp_mempool *shared_mempool_entry_put(cp_shared_mempool *pool, + size_t size, cp_mempool *sub) +{ + shared_mempool_entry **entry = &pool->reg_tbl[size % pool->reg_tbl_size]; + + while ((*entry) && (*entry)->item_size != size) + entry = &(*entry)->next; + + if (*entry == NULL) + { + *entry = calloc(1, sizeof(shared_mempool_entry)); + (*entry)->item_size = size; + } + + (*entry)->pool = sub; + return sub; +} + +void shared_mempool_entry_destroy(cp_shared_mempool *pool) +{ + int i; + + for (i = 0; i < pool->reg_tbl_size; i++) + { + shared_mempool_entry *curr, *tmp; + curr = pool->reg_tbl[i]; + while (curr) + { + tmp = curr; + curr = curr->next; + cp_mempool_destroy(tmp->pool); + free(tmp); + } + } + + free(pool->reg_tbl); +} + +/* cp_shared_mempool_create */ +cp_shared_mempool *cp_shared_mempool_create() +{ + return + cp_shared_mempool_create_by_option(0, CP_SHARED_MEMPOOL_TYPE_2, 0, 0); +} + +/* cp_shared_mempool_create_by_option */ +CPROPS_DLL +cp_shared_mempool * + cp_shared_mempool_create_by_option(int mode, + int arbitrary_allocation_strategy, + int size_hint, + int page_count) +{ + cp_shared_mempool *pool = + (cp_shared_mempool *) calloc(1, sizeof(cp_shared_mempool)); + if (pool == NULL) return NULL; + + if (size_hint) + size_hint = size_hint * 2 + 1; /* choose an odd number */ + else + size_hint = 211; /* 211 is a prime */ + + pool->reg_tbl = calloc(size_hint, sizeof(shared_mempool_entry *)); + if (pool->reg_tbl == NULL) goto CREATE_ERROR; + pool->reg_tbl_size = size_hint; + + pool->mode = mode; + + if ((mode & COLLECTION_MODE_NOSYNC)) + { + pool->lock = (cp_mutex *) malloc(sizeof(cp_mutex)); + if (pool->lock == NULL) goto CREATE_ERROR; + if ((cp_mutex_init(pool->lock, NULL))) goto CREATE_ERROR; + } + + if (arbitrary_allocation_strategy == 0) + pool->gm_mode = CP_SHARED_MEMPOOL_TYPE_1; + else + pool->gm_mode = arbitrary_allocation_strategy; + + pool->multiple = page_count; + + pool->chunk_tracker = + cp_rbtree_create_by_option(mode | COLLECTION_MODE_DEEP, + compare_chunk_track, NULL, free, NULL, NULL); + if (pool->chunk_tracker == NULL) goto CREATE_ERROR; + + return pool; + +CREATE_ERROR: + if (pool->lock) + { + free(pool->lock); + pool->lock = NULL; + } + cp_shared_mempool_destroy(pool); + return NULL; +} + +/* cp_shared_mempool destroy */ +CPROPS_DLL +void cp_shared_mempool_destroy(cp_shared_mempool *pool) +{ + if (pool) + { + cp_rbtree_destroy(pool->chunk_tracker); + shared_mempool_entry_destroy(pool); + if (pool->lock) + { + cp_mutex_destroy(pool->lock); + free(pool->lock); + } + free(pool); + } +} + +void cp_shared_mempool_track_alloc(cp_shared_mempool *pool, + cp_mempool *sub, void *mem) +{ + cp_rbtree_insert(pool->chunk_tracker, + get_chunk_track(mem, sub->alloc_size), sub); +} + +/* cp_shared_mempool_register */ +cp_mempool *cp_shared_mempool_register(cp_shared_mempool *pool, size_t size) +{ + cp_mempool *sub; + if (size % WORD_SIZE) size += WORD_SIZE - (size % WORD_SIZE); + sub = shared_mempool_entry_get(pool, size); + if (sub) + cp_mempool_inc_refcount(sub); + else + { + sub = cp_mempool_create_by_option(pool->mode, size, pool->multiple); + cp_mempool_set_callback(sub, pool, + (cp_mempool_callback_fn) cp_shared_mempool_track_alloc); + shared_mempool_entry_put(pool, size, sub); + } + + return sub; +} + +#if 0 +/* unregister a mempool */ +void cp_shared_mempool_unregister(cp_shared_mempool *pool, size_t size) +{ + cp_mempool *sub; + if (size % WORD_SIZE) size += WORD_SIZE - (size % WORD_SIZE); + sub = shared_mempool_entry_get(pool, size); + if (sub) + cp_mempool_destroy(sub); +} +#endif + +/* cp_shared_mempool_alloc */ +CPROPS_DLL +void *cp_shared_mempool_alloc(cp_shared_mempool *pool, size_t size) +{ + size_t actual; + cp_mempool *mempool = NULL; + + if (size % WORD_SIZE) size += WORD_SIZE - (size % WORD_SIZE); + + if ((mempool = shared_mempool_entry_get(pool, size))) + return cp_mempool_alloc(mempool); + + if ((pool->gm_mode & CP_SHARED_MEMPOOL_TYPE_2)) + actual = size; + else + { + actual = WORD_SIZE; + while (actual < size) actual <<= 1; + } + if ((mempool = cp_shared_mempool_register(pool, actual))) + return cp_mempool_alloc(mempool); + + return NULL; +} + +/* cp_shared_mempool_calloc */ +CPROPS_DLL +void *cp_shared_mempool_calloc(cp_shared_mempool *pool, size_t size) +{ + size_t actual; + cp_mempool *mempool = NULL; + + if (size % WORD_SIZE) size += WORD_SIZE - (size % WORD_SIZE); + + if ((mempool = shared_mempool_entry_get(pool, size))) + return cp_mempool_calloc(mempool); + + if ((pool->gm_mode & CP_SHARED_MEMPOOL_TYPE_2)) + actual = size; + else + { + actual = WORD_SIZE; + while (actual < size) actual <<= 1; + } + if ((mempool = cp_shared_mempool_register(pool, actual))) + return cp_mempool_calloc(mempool); + + return NULL; +} + + +/* cp_shared_mempool_free */ +CPROPS_DLL +void cp_shared_mempool_free(cp_shared_mempool *pool, void *p) +{ + cp_mempool *mempool; + chunk_track ct; + memset(&ct, 0, sizeof(chunk_track)); + ct.mem = p; + + if ((mempool = cp_rbtree_get(pool->chunk_tracker, &ct))) + cp_mempool_free(mempool, p); +} + Added: branches/multicore/numpy/core/cprops_thread/mempool.h =================================================================== --- branches/multicore/numpy/core/cprops_thread/mempool.h 2007-04-10 15:44:17 UTC (rev 3691) +++ branches/multicore/numpy/core/cprops_thread/mempool.h 2007-04-10 17:54:59 UTC (rev 3692) @@ -0,0 +1,189 @@ +/* mempool.h - a memory pool implementation + * + * cp_mempool is a memory pool for fixed allocation sizes. + * + * cp_shared_mempool is a collection of cp_mempool objects. cp_shared_mempool + * allows sharing cp_mempool instances that serve the same allocation size. + * Call cp_shared_mempool_register to request an allocation size and use the + * returned cp_mempool. + * + * cp_shared_mempool may also be used for aribitrary sizes allocations, but + * this does not necessarily improve performance. Tests on Open BSD show + * significant gains, whereas tests on Linux show a performance degradation for + * generic allocation operations. Using cp_shared_mempool to share cp_mempool + * objects between cp_* data structures does not reduce performance. The test + * results are not conclusive and performance characteristics may also be + * application specific. For best results, benchmark performance for your + * application in realistic deployment scenarios before deciding whether to use + * cp_shared_mempool. + * + * After instantiating a cp_shared_mempool, you may set one of + * CP_SHARED_MEMPOOL_TYPE_2 or CP_SHARED_MEMPOOL_TYPE_1. If TYPE_2 is set, + * requests for unregistered allocation sizes will return the requested size + * rounded up to the machine word size, after instantiating a cp_mempool + * serving the requested size if none exists. This could potentially use up + * large amounts of memory. If TYPE_1 is set, unregistered allocation sizes + * are rounded up to the next bit. E.g. a request for 513 bytes will return a + * chunk of 1024 bytes. This might also use up large amounts of memory. + * + * Both cp_mempool and cp_shared_mempool represent a trade off of memory for + * speed and should not be used if memory is tight or if the total allocation + * may exceed the amount of physical memory available to the program, so as to + * prevent swapping. Note that even if using the provided cp_mempool_free or + * cp_shared_mempool_free functions, the memory returned to the pool is kept + * for future requests and is ultimately released back to the general "malloc" + * library only when the memory pool is destroyed. + * + * AUTHOR: Kyle Wheeler, Ilan Aelion + */ +#ifndef _CP_MEMPOOL_H +#define _CP_MEMPOOL_H + +#include "common.h" +#include "collection.h" + +__BEGIN_DECLS + +struct _cp_mempool; + +typedef void (*cp_mempool_callback_fn)(void *prm, + struct _cp_mempool *pool, + void *mem); + +typedef struct _cp_mempool +{ + size_t item_size; + size_t alloc_size; + size_t items_per_alloc; + + char *reuse_pool; + char *alloc_pool; + size_t alloc_pool_pos; + + int refcount; + + cp_mempool_callback_fn alloc_callback; + void *callback_prm; + + int mode; + cp_mutex *lock; +#if !defined(CP_HAS_PTHREAD_MUTEX_RECURSIVE) && !defined(CP_HAS_PTHREAD_MUTEX_RECURSIVE_NP) + cp_thread txowner; +#endif /* CP_HAS_PTHREAD_MUTEX_RECURSIVE */ +} cp_mempool; + +#define cp_mempool_item_size(p) ((p)->item_size) + +/* cp_mempool_create_by_option */ +CPROPS_DLL +cp_mempool *cp_mempool_create_by_option(const int mode, + size_t chunksize, + size_t multiple); + +/* cp_mempool_create_by_option */ +CPROPS_DLL +cp_mempool *cp_mempool_create(const size_t chunksize); + +/* increment refcount */ +CPROPS_DLL +int cp_mempool_inc_refcount(cp_mempool *pool); + +/* cp_mempool_alloc */ +CPROPS_DLL +void *cp_mempool_alloc(cp_mempool * const pool); + +/* cp_mempool_calloc */ +CPROPS_DLL +void *cp_mempool_calloc(cp_mempool * const pool); + +/* cp_mempool_free */ +CPROPS_DLL +int cp_mempool_free(cp_mempool * const pool, void *data); + +/* cp_mempool_destroy */ +CPROPS_DLL +void cp_mempool_destroy(cp_mempool *pool); + +#include "rb.h" +#include "hashtable.h" + +typedef struct _shared_mempool_entry +{ + size_t item_size; + cp_mempool *pool; + struct _shared_mempool_entry *next; +} shared_mempool_entry; + +/* cp_shared_mempool is a generalized memory pool. It allows requesting variable + * block sizes. For best results, register the required block sizes in advance. + * requests for unregistered block sizes will return memory from a default + * internal list, which rounds up the block size to the next bit. For example + * allocating an unregisterd block of size 12 will return a 16 byte block. + * In partcular large allocations could return a lot of extra memory. + */ +typedef CPROPS_DLL struct _cp_shared_mempool +{ + unsigned int reg_tbl_size; + unsigned int reg_tbl_count; + + shared_mempool_entry **reg_tbl; + struct _cp_rbtree *chunk_tracker; + + int mode; + int gm_mode; + + /* lock for mempool lists */ + cp_mutex *lock; + + int multiple; /* number of pages to allocate in sub pools */ +} cp_shared_mempool; + +/* ``smaller'': arbitrary size allocations are rounded up to the next bit. The + * pool is ``smaller'' in that up to about WORD_SIZE internal memory pools are + * allocated to serve unregistered allocation size requests. + */ +#define CP_SHARED_MEMPOOL_TYPE_1 1 +/* ``faster'': arbitrary size allocations are rounded up to the word size. The + * pool is ``faster'' in that typically the allocation overhead is smaller, and + * the number of operations required to determine which pool to use internally + * is smaller. On the other hand, since a large number of memory pool could be + * allocated internally, this may not be usable in some circumstances. + */ +#define CP_SHARED_MEMPOOL_TYPE_2 2 + +/* cp_shared_mempool_create */ +CPROPS_DLL +cp_shared_mempool *cp_shared_mempool_create(); + +/* cp_shared_mempool_create_by_option */ +CPROPS_DLL +cp_shared_mempool * + cp_shared_mempool_create_by_option(int mode, + int arbitrary_allocation_strategy, + int size_hint, + int page_count); + +/* cp_shared_mempool destroy */ +CPROPS_DLL +void cp_shared_mempool_destroy(cp_shared_mempool *pool); + +/* cp_shared_mempool_register */ +CPROPS_DLL +cp_mempool *cp_shared_mempool_register(cp_shared_mempool *pool, size_t size); + +/* cp_shared_mempool_alloc */ +CPROPS_DLL +void *cp_shared_mempool_alloc(cp_shared_mempool *pool, size_t size); + +/* cp_shared_mempool_calloc */ +CPROPS_DLL +void *cp_shared_mempool_calloc(cp_shared_mempool *pool, size_t size); + +/* cp_shared_mempool_free */ +CPROPS_DLL +void cp_shared_mempool_free(cp_shared_mempool *pool, void *p); + +__END_DECLS + +#endif /* _CP_MEMPOOL_H */ + Added: branches/multicore/numpy/core/cprops_thread/rb.c =================================================================== --- branches/multicore/numpy/core/cprops_thread/rb.c 2007-04-10 15:44:17 UTC (rev 3691) +++ branches/multicore/numpy/core/cprops_thread/rb.c 2007-04-10 17:54:59 UTC (rev 3692) @@ -0,0 +1,969 @@ +#include +#include +#include + +#include "collection.h" +#include "vector.h" +#include "rb.h" + +cp_rbnode *cp_rbnode_create(void *key, void *value, cp_mempool *pool) +{ + cp_rbnode *node; + + if (pool) + node = (cp_rbnode *) cp_mempool_calloc(pool); + else + node = (cp_rbnode *) calloc(1, sizeof(cp_rbnode)); + + if (node == NULL) return NULL; + + node->key = key; + node->value = value; + + return node; +} + +/* implement COLLECTION_MODE_COPY if set */ +static cp_rbnode *create_rbnode(cp_rbtree *tree, void *key, void *value) +{ + if (tree->mode & COLLECTION_MODE_COPY) + { + void *k, *v; + k = tree->key_copy ? (*tree->key_copy)(key) : key; + if (k) + { + v = tree->value_copy ? (*tree->value_copy)(value) : value; + if (v) + { + if (tree->mode & COLLECTION_MODE_MULTIPLE_VALUES) + { + cp_vector *m = cp_vector_create(1); + if (m == NULL) return NULL; + cp_vector_add_element(m, v); + v = m; + } + return cp_rbnode_create(k, v, tree->mempool); + } + } + } + else if (tree->mode & COLLECTION_MODE_MULTIPLE_VALUES) + { + cp_vector *m = cp_vector_create(1); + if (m == NULL) return NULL; + cp_vector_add_element(m, value); + return cp_rbnode_create(key, m, tree->mempool); + } + else + return cp_rbnode_create(key, value, tree->mempool); + + return NULL; +} + +void cp_rbtree_destroy_node_deep(cp_rbtree *owner, cp_rbnode *node) +{ + while (node) + { + if (node->right) + { + node = node->right; + node->up->right = NULL; + } + else if (node->left) + { + node = node->left; + node->up->left = NULL; + } + else + { + cp_rbnode *tmp = node; + node = node->up; + cp_rbtree_destroy_node(owner, tmp); + } + } +} + +void cp_rbtree_destroy_node(cp_rbtree *tree, cp_rbnode *node) +{ + if (node) + { + if ((tree->mode & COLLECTION_MODE_DEEP)) + { + if (tree->key_dtr) (*tree->key_dtr)(node->key); + if ((tree->mode & COLLECTION_MODE_MULTIPLE_VALUES) && node->value) + cp_vector_destroy_custom(node->value, tree->value_dtr); + else if (tree->value_dtr) + (*tree->value_dtr)(node->value); + } + else if ((tree->mode & COLLECTION_MODE_MULTIPLE_VALUES) && node->value) + cp_vector_destroy(node->value); + if (tree->mempool) + cp_mempool_free(tree->mempool, node); + else + free(node); + } +} + + +cp_rbtree *cp_rbtree_create(cp_compare_fn cmp) +{ + cp_rbtree *tree = calloc(1, sizeof(cp_rbtree)); + if (tree == NULL) return NULL; + + tree->mode = COLLECTION_MODE_NOSYNC; + tree->cmp = cmp; + + return tree; +} + +/* + * complete parameter create function + */ +cp_rbtree * + cp_rbtree_create_by_option(int mode, cp_compare_fn cmp, + cp_copy_fn key_copy, cp_destructor_fn key_dtr, + cp_copy_fn val_copy, cp_destructor_fn val_dtr) +{ + cp_rbtree *tree = cp_rbtree_create(cmp); + if (tree == NULL) return NULL; + + tree->mode = mode; + tree->key_copy = key_copy; + tree->key_dtr = key_dtr; + tree->value_copy = val_copy; + tree->value_dtr = val_dtr; + + if (!(mode & COLLECTION_MODE_NOSYNC)) + { + tree->lock = malloc(sizeof(cp_lock)); + if (tree->lock == NULL) + { + cp_rbtree_destroy(tree); + return NULL; + } + if (cp_lock_init(tree->lock, NULL) != 0) + { + cp_rbtree_destroy(tree); + return NULL; + } + } + + return tree; +} + + +void cp_rbtree_destroy(cp_rbtree *tree) +{ + if (tree) + { + cp_rbtree_destroy_node_deep(tree, tree->root); + if (tree->lock) + { + cp_lock_destroy(tree->lock); + free(tree->lock); + } + free(tree); + } +} + +void cp_rbtree_destroy_custom(cp_rbtree *tree, + cp_destructor_fn key_dtr, + cp_destructor_fn val_dtr) +{ + tree->mode |= COLLECTION_MODE_DEEP; + tree->key_dtr = key_dtr; + tree->value_dtr = val_dtr; + cp_rbtree_destroy(tree); +} + +static int cp_rbtree_lock_internal(cp_rbtree *tree, int type) +{ + int rc; + + switch (type) + { + case COLLECTION_LOCK_READ: + rc = cp_lock_rdlock(tree->lock); + break; + + case COLLECTION_LOCK_WRITE: + rc = cp_lock_wrlock(tree->lock); + break; + + case COLLECTION_LOCK_NONE: + rc = 0; + break; + + default: + rc = EINVAL; + break; + } + + /* api functions may rely on errno to report locking failure */ + if (rc) errno = rc; + + return rc; +} + +static int cp_rbtree_unlock_internal(cp_rbtree *tree) +{ + return cp_lock_unlock(tree->lock); +} + +int cp_rbtree_txlock(cp_rbtree *tree, int type) +{ + /* clear errno to allow client code to distinguish between a NULL return + * value indicating the tree doesn't contain the requested value and NULL + * on locking failure in tree operations + */ + if (tree->mode & COLLECTION_MODE_NOSYNC) return 0; + if (tree->mode & COLLECTION_MODE_IN_TRANSACTION && + tree->txtype == COLLECTION_LOCK_WRITE) + { + cp_thread self = cp_thread_self(); + if (cp_thread_equal(self, tree->txowner)) return 0; + } + errno = 0; + return cp_rbtree_lock_internal(tree, type); +} + +int cp_rbtree_txunlock(cp_rbtree *tree) +{ + if (tree->mode & COLLECTION_MODE_NOSYNC) return 0; + if (tree->mode & COLLECTION_MODE_IN_TRANSACTION && + tree->txtype == COLLECTION_LOCK_WRITE) + { + cp_thread self = cp_thread_self(); + if (cp_thread_equal(self, tree->txowner)) return 0; + } + return cp_rbtree_unlock_internal(tree); +} + +/* lock and set the transaction indicators */ +int cp_rbtree_lock(cp_rbtree *tree, int type) +{ + int rc; + if ((tree->mode & COLLECTION_MODE_NOSYNC)) return EINVAL; + if ((rc = cp_rbtree_lock_internal(tree, type))) return rc; + tree->txtype = type; + tree->txowner = cp_thread_self(); + tree->mode |= COLLECTION_MODE_IN_TRANSACTION; + return 0; +} + +/* unset the transaction indicators and unlock */ +int cp_rbtree_unlock(cp_rbtree *tree) +{ + cp_thread self = cp_thread_self(); + if (tree->txowner == self) + { + tree->txowner = 0; + tree->txtype = 0; + tree->mode ^= COLLECTION_MODE_IN_TRANSACTION; + } + else if (tree->txtype == COLLECTION_LOCK_WRITE) + return -1; + return cp_rbtree_unlock_internal(tree); +} + +/* set mode bits on the tree mode indicator */ +int cp_rbtree_set_mode(cp_rbtree *tree, int mode) +{ + int rc; + int nosync; + + /* can't set NOSYNC in the middle of a transaction */ + if ((tree->mode & COLLECTION_MODE_IN_TRANSACTION) && + (mode & COLLECTION_MODE_NOSYNC)) return EINVAL; + /* COLLECTION_MODE_MULTIPLE_VALUES must be set at creation time */ + if (mode & COLLECTION_MODE_MULTIPLE_VALUES) return EINVAL; + + if ((rc = cp_rbtree_txlock(tree, COLLECTION_LOCK_WRITE))) return rc; + + nosync = tree->mode & COLLECTION_MODE_NOSYNC; + + tree->mode |= mode; + + if (!nosync) + cp_rbtree_txunlock(tree); + + return 0; +} + +/* unset mode bits on the tree mode indicator. if unsetting + * COLLECTION_MODE_NOSYNC and the tree was not previously synchronized, the + * internal synchronization structure is initialized. + */ +int cp_rbtree_unset_mode(cp_rbtree *tree, int mode) +{ + int rc; + int nosync; + + /* COLLECTION_MODE_MULTIPLE_VALUES can't be unset */ + if (mode & COLLECTION_MODE_MULTIPLE_VALUES) return EINVAL; + + if ((rc = cp_rbtree_txlock(tree, COLLECTION_LOCK_WRITE))) return rc; + + nosync = tree->mode & COLLECTION_MODE_NOSYNC; + + /* handle the special case of unsetting COLLECTION_MODE_NOSYNC */ + if ((mode & COLLECTION_MODE_NOSYNC) && tree->lock == NULL) + { + /* tree can't be locked in this case, no need to unlock on failure */ + if ((tree->lock = malloc(sizeof(cp_lock))) == NULL) + return -1; + if (cp_lock_init(tree->lock, NULL)) + return -1; + } + + /* unset specified bits */ + tree->mode &= tree->mode ^ mode; + if (!nosync) + cp_rbtree_txunlock(tree); + + return 0; +} + +int cp_rbtree_get_mode(cp_rbtree *tree) +{ + return tree->mode; +} + + +static cp_rbnode *sibling(cp_rbnode *node) +{ + return node == node->up->left ? node->up->right : node->up->left; +} + +static int is_right_child(cp_rbnode *node) +{ + return (node->up->right == node); +} + +static int is_left_child(cp_rbnode *node) +{ + return (node->up->left == node); +} + +/* left rotate + * + * (P) (Q) + * / \ / \ + * 1 (Q) ==> (P) 3 + * / \ / \ + * 2 3 1 2 + * + */ +static void left_rotate(cp_rbtree *tree, cp_rbnode *p) +{ + cp_rbnode *q = p->right; + cp_rbnode **sup; + + if (p->up) + sup = is_left_child(p) ? &(p->up->left) : &(p->up->right); + else + sup = &tree->root; + + p->right = q->left; + if (p->right) p->right->up = p; + q->left = p; + q->up = p->up; + p->up = q; + *sup = q; +} + +/* right rotate + * + * (P) (Q) + * / \ / \ + * (Q) 3 ==> 1 (P) + * / \ / \ + * 1 2 2 3 + * + */ +static void right_rotate(cp_rbtree *tree, cp_rbnode *p) +{ + cp_rbnode *q = p->left; + cp_rbnode **sup; + + if (p->up) + sup = is_left_child(p) ? &(p->up->left) : &(p->up->right); + else + sup = &tree->root; + + p->left = q->right; + if (p->left) p->left->up = p; + q->right = p; + q->up = p->up; + p->up = q; + *sup = q; +} + + +/* + * newly entered node is RED; check balance recursively as required + */ +static void rebalance(cp_rbtree *tree, cp_rbnode *node) +{ + cp_rbnode *up = node->up; + if (up == NULL || up->color == RB_BLACK) return; + if (sibling(up) && sibling(up)->color == RB_RED) + { + up->color = RB_BLACK; + sibling(up)->color = RB_BLACK; + if (up->up->up) + { + up->up->color = RB_RED; + rebalance(tree, up->up); + } + } + else + { + if (is_left_child(node) && is_right_child(up)) + { + right_rotate(tree, up); + node = node->right; + } + else if (is_right_child(node) && is_left_child(up)) + { + left_rotate(tree, up); + node = node->left; + } + + node->up->color = RB_BLACK; + node->up->up->color = RB_RED; + + if (is_left_child(node)) // && is_left_child(node->up) + right_rotate(tree, node->up->up); + else + left_rotate(tree, node->up->up); + } +} + +/* update_rbnode - implement COLLECTION_MODE_COPY, COLLECTION_MODE_DEEP and + * COLLECTION_MODE_MULTIPLE_VALUES when inserting a value for an existing key + */ +static void * + update_rbnode(cp_rbtree *tree, cp_rbnode *node, void *key, void *value) +{ + void *new_key = key; + void *new_value = value; + + if (tree->mode & COLLECTION_MODE_COPY) + { + if (tree->key_copy) + { + new_key = (*tree->key_copy)(key); + if (new_key == NULL) return NULL; + } + if (tree->value_copy) + { + new_value = (*tree->value_copy)(value); + if (new_value == NULL) return NULL; + } + } + + if (tree->mode & COLLECTION_MODE_DEEP) + { + if (tree->key_dtr) + (*tree->key_dtr)(node->key); + if (tree->value_dtr && !(tree->mode & COLLECTION_MODE_MULTIPLE_VALUES)) + (*tree->value_dtr)(node->value); + } + + node->key = new_key; + if (!tree->mode & COLLECTION_MODE_MULTIPLE_VALUES) + node->value = new_value; + else + { + cp_vector_add_element(node->value, new_value); + return node->value; + } + + return new_value; +} + +/* + * cp_rbtree_insert iterates through the tree, finds where the new node fits + * in, puts it there, then calls rebalance. + * + * If a mapping for the given key already exists it is replaced unless + * COLLECTION_MODE_MULTIPLE_VALUES is set, is which case a new mapping is + * added. By default COLLECTION_MODE_MULTIPLE_VALUES is not set. + */ +void *cp_rbtree_insert(cp_rbtree *tree, void *key, void *value) +{ + void *res = NULL; + + if (cp_rbtree_txlock(tree, COLLECTION_LOCK_WRITE)) return NULL; + + if (tree->root == NULL) + { + tree->root = create_rbnode(tree, key, value); + if (tree->root == NULL) goto DONE; + res = value; + tree->root->color = RB_BLACK; + tree->items++; + } + else + { + int cmp; + cp_rbnode **curr = &tree->root; + cp_rbnode *prev = NULL; + + while (*curr) + { + prev = *curr; + cmp = (*tree->cmp)((*curr)->key, key); + if (cmp < 0) + curr = &(*curr)->right; + else if (cmp > 0) + curr = &(*curr)->left; + else /* replace */ + { + res = update_rbnode(tree, *curr, key, value); + break; + } + } + + if (*curr == NULL) /* not replacing, create new node */ + { + *curr = create_rbnode(tree, key, value); + if (*curr == NULL) goto DONE; + res = (*curr)->value; + tree->items++; + (*curr)->up = prev; + rebalance(tree, *curr); + } + } + +DONE: + cp_rbtree_txunlock(tree); + return res; +} + +/* cp_rbtree_get - return the value mapped to the given key or NULL if none is + * found. If COLLECTION_MODE_MULTIPLE_VALUES is set the returned value is a + * cp_vector object or NULL if no mapping is found. + */ +void *cp_rbtree_get(cp_rbtree *tree, void *key) +{ + cp_rbnode *curr; + void *value = NULL; + + if (cp_rbtree_txlock(tree, COLLECTION_LOCK_READ)) return NULL; + + curr = tree->root; + while (curr) + { + int c = tree->cmp(curr->key, key); + if (c == 0) return curr->value; + curr = (c > 0) ? curr->left : curr ->right; + } + + if (curr) value = curr->value; + + cp_rbtree_txunlock(tree); + return value;; +} + +int cp_rbtree_contains(cp_rbtree *tree, void *key) +{ + return (cp_rbtree_get(tree, key) != NULL); +} + +/* helper function for deletion */ +static void swap_node_content(cp_rbnode *a, cp_rbnode *b) +{ + void *tmpkey, *tmpval; + + tmpkey = a->key; + a->key = b->key; + b->key = tmpkey; + + tmpval = a->value; + a->value = b->value; + b->value = tmpval; +} + +/* + * helper function for cp_rbtree_delete to remove nodes with either a left + * NULL branch or a right NULL branch + */ +static void rb_unlink(cp_rbtree *tree, cp_rbnode *node) +{ + if (node->left) + { + node->left->up = node->up; + if (node->up) + { + if (is_left_child(node)) + node->up->left = node->left; + else + node->up->right = node->left; + } + else + tree->root = node->left; + } + else + { + if (node->right) node->right->up = node->up; + if (node->up) + { + if (is_left_child(node)) + node->up->left = node->right; + else + node->up->right = node->right; + } + else + tree->root = node->right; + } +} + +/* delete_rebalance - perform rebalancing after a deletion */ +static void delete_rebalance(cp_rbtree *tree, cp_rbnode *n) +{ + if (n->up) + { + cp_rbnode *sibl = sibling(n); + + if (sibl->color == RB_RED) + { + n->up->color = RB_RED; + sibl->color = RB_BLACK; + if (is_left_child(n)) + left_rotate(tree, n->up); + else + right_rotate(tree, n->up); + sibl = sibling(n); + } + + if (n->up->color == RB_BLACK && + sibl->color == RB_BLACK && + (sibl->left == NULL || sibl->left->color == RB_BLACK) && + (sibl->right == NULL || sibl->right->color == RB_BLACK)) + { + sibl->color = RB_RED; + delete_rebalance(tree, n->up); + } + else + { + if (n->up->color == RB_RED && + sibl->color == RB_BLACK && + (sibl->left == NULL || sibl->left->color == RB_BLACK) && + (sibl->right == NULL || sibl->right->color == RB_BLACK)) + { + sibl->color = RB_RED; + n->up->color = RB_BLACK; + } + else + { + if (is_left_child(n) && + sibl->color == RB_BLACK && + sibl->left && sibl->left->color == RB_RED && + (sibl->right == NULL || sibl->right->color == RB_BLACK)) + { + sibl->color = RB_RED; + sibl->left->color = RB_BLACK; + right_rotate(tree, sibl); + + sibl = sibling(n); + } + else if (is_right_child(n) && + sibl->color == RB_BLACK && + sibl->right && sibl->right->color == RB_RED && + (sibl->left == NULL || sibl->left->color == RB_BLACK)) + { + sibl->color = RB_RED; + sibl->right->color = RB_BLACK; + left_rotate(tree, sibl); + + sibl = sibling(n); + } + + sibl->color = n->up->color; + n->up->color = RB_BLACK; + if (is_left_child(n)) + { + sibl->right->color = RB_BLACK; + left_rotate(tree, n->up); + } + else + { + sibl->left->color = RB_BLACK; + right_rotate(tree, n->up); + } + } + } + } +} + +/* cp_rbtree_delete_impl - delete one node from a red black tree */ +void *cp_rbtree_delete_impl(cp_rbtree *tree, void *key) +{ + void *res = NULL; + cp_rbnode *node; + int cmp; + + node = tree->root; + while (node) + { + cmp = (*tree->cmp)(node->key, key); + if (cmp < 0) + node = node->right; + else if (cmp > 0) + node = node->left; + else /* found */ + break; + } + + if (node) /* may be null if not found */ + { + cp_rbnode *child; + res = node->value; + tree->items--; + + if (node->right && node->left) + { + cp_rbnode *surrogate = node; + node = node->right; + while (node->left) node = node->left; + swap_node_content(node, surrogate); + } + child = node->right ? node->right : node->left; + + /* if the node was red - no rebalancing required */ + if (node->color == RB_BLACK) + { + if (child) + { + /* single red child - paint it black */ + if (child->color == RB_RED) + child->color = RB_BLACK; /* and the balance is restored */ + else + delete_rebalance(tree, child); + } + else + delete_rebalance(tree, node); + } + + rb_unlink(tree, node); + cp_rbtree_destroy_node(tree, node); + } + + return res; +} + +/* cp_rbtree_delete - deletes the value mapped to the given key from the tree + * and returns the value removed. + */ +void *cp_rbtree_delete(cp_rbtree *tree, void *key) +{ + void *res = NULL; + + if (cp_rbtree_txlock(tree, COLLECTION_LOCK_WRITE)) return NULL; + + res = cp_rbtree_delete_impl(tree, key); + + cp_rbtree_txunlock(tree); + return res; +} + +static int + rb_scan_pre_order(cp_rbnode *node, cp_callback_fn callback, void *prm) +{ + int rc; + + if (node) + { + if ((rc = (*callback)(node, prm))) return rc; + if ((rc = rb_scan_pre_order(node->left, callback, prm))) return rc; + if ((rc = rb_scan_pre_order(node->right, callback, prm))) return rc; + } + + return 0; +} + +int cp_rbtree_callback_preorder(cp_rbtree *tree, + cp_callback_fn callback, + void *prm) +{ + int rc; + + if ((rc = cp_rbtree_txlock(tree, COLLECTION_LOCK_READ))) return rc; + rc = rb_scan_pre_order(tree->root, callback, prm); + cp_rbtree_txunlock(tree); + + return rc; +} + +static int + rb_scan_in_order(cp_rbnode *node, cp_callback_fn callback, void *prm) +{ + int rc; + + if (node) + { + if ((rc = rb_scan_in_order(node->left, callback, prm))) return rc; + if ((rc = (*callback)(node, prm))) return rc; + if ((rc = rb_scan_in_order(node->right, callback, prm))) return rc; + } + + return 0; +} + +int cp_rbtree_callback(cp_rbtree *tree, cp_callback_fn callback, void *prm) +{ + int rc; + + if ((rc = cp_rbtree_txlock(tree, COLLECTION_LOCK_READ))) return rc; + rc = rb_scan_in_order(tree->root, callback, prm); + cp_rbtree_txunlock(tree); + + return rc; +} + +static int + rb_scan_post_order(cp_rbnode *node, cp_callback_fn callback, void *prm) +{ + int rc; + + if (node) + { + if ((rc = rb_scan_post_order(node->left, callback, prm))) return rc; + if ((rc = rb_scan_post_order(node->right, callback, prm))) return rc; + if ((rc = (*callback)(node, prm))) return rc; + } + + return 0; +} + +int cp_rbtree_callback_postorder(cp_rbtree *tree, + cp_callback_fn callback, + void *prm) +{ + int rc; + + if ((rc = cp_rbtree_txlock(tree, COLLECTION_LOCK_READ))) return rc; + rc = rb_scan_post_order(tree->root, callback, prm); + cp_rbtree_txunlock(tree); + + return rc; +} + +int cp_rbtree_count(cp_rbtree *tree) +{ + return tree->items; +} + + +void cp_rbnode_print(cp_rbnode *node, int level) +{ + int i; + if (node->right) cp_rbnode_print(node->right, level + 1); + for (i = 0; i < level; i++) printf(" . "); + printf("(%d) [%s => %s]\n", node->color, (char *) node->key, (char *) node->value); + if (node->left) cp_rbnode_print(node->left, level + 1); +} + +void cp_rbnode_multi_print(cp_rbnode *node, int level) +{ + int i; + cp_vector *v = node->value; + if (node->right) cp_rbnode_multi_print(node->right, level + 1); + + for (i = 0; i < level; i++) printf(" . "); + printf("(%d) [%s => ", node->color, (char *) node->key); + + for (i = 0; i < cp_vector_size(v); i++) + printf("%s; ", (char *) cp_vector_element_at(v, i)); + + printf("]\n"); + + if (node->left) cp_rbnode_multi_print(node->left, level + 1); +} + +void cp_rbtree_dump(cp_rbtree *tree) +{ + if (tree->root) + { + if (tree->mode & COLLECTION_MODE_MULTIPLE_VALUES) + cp_rbnode_multi_print(tree->root, 0); + else + cp_rbnode_print(tree->root, 0); + } +} + +/* set tree to use given mempool or allocate a new one if pool is NULL */ +int cp_rbtree_use_mempool(cp_rbtree *tree, cp_mempool *pool) +{ + int rc = 0; + + if ((rc = cp_rbtree_txlock(tree, COLLECTION_LOCK_WRITE))) return rc; + + if (pool) + { + if (pool->item_size < sizeof(cp_rbnode)) + { + rc = EINVAL; + goto DONE; + } + if (tree->mempool) + { + if (tree->items) + { + rc = ENOTEMPTY; + goto DONE; + } + cp_mempool_destroy(tree->mempool); + } + cp_mempool_inc_refcount(pool); + tree->mempool = pool; + } + else + { + tree->mempool = + cp_mempool_create_by_option(COLLECTION_MODE_NOSYNC, + sizeof(cp_rbnode), 0); + if (tree->mempool == NULL) + { + rc = ENOMEM; + goto DONE; + } + } + +DONE: + cp_rbtree_txunlock(tree); + return rc; +} + + +/* set tree to use a shared memory pool */ +int cp_rbtree_share_mempool(cp_rbtree *tree, cp_shared_mempool *pool) +{ + int rc; + + if ((rc = cp_rbtree_txlock(tree, COLLECTION_LOCK_WRITE))) return rc; + + if (tree->mempool) + { + if (tree->items) + { + rc = ENOTEMPTY; + goto DONE; + } + + cp_mempool_destroy(tree->mempool); + } + + tree->mempool = cp_shared_mempool_register(pool, sizeof(cp_rbnode)); + if (tree->mempool == NULL) + { + rc = ENOMEM; + goto DONE; + } + +DONE: + cp_rbtree_txunlock(tree); + return rc; +} + Added: branches/multicore/numpy/core/cprops_thread/rb.h =================================================================== --- branches/multicore/numpy/core/cprops_thread/rb.h 2007-04-10 15:44:17 UTC (rev 3691) +++ branches/multicore/numpy/core/cprops_thread/rb.h 2007-04-10 17:54:59 UTC (rev 3692) @@ -0,0 +1,194 @@ +#ifndef _CP_RB_H +#define _CP_RB_H + +/** @{ */ +/** + * @file + * + * red-black tree definitions. Red-black trees are self balancing binary trees. + * red-black trees guarantee a O(log n) time for tree operations. An advantage + * over AVL trees is in that insertion and deletion require a small number of + * rotations (2 or 3) at the most. + * + * First introduced by Rudolf Bayer in Symmetric Binary B-Trees: Data + * Structures and Maintenance Algorithms, 1972. + * The 'red-black' terminology is due to Leo J. Guibas and Robert Sedgewick: + * A Dichromatic Framework for Balanced Trees, 1978. + */ + +#include "common.h" + +__BEGIN_DECLS + +#include "vector.h" +#include "mempool.h" + +struct _cp_rbtree; + +#define RB_RED 0 +#define RB_BLACK 1 + +typedef CPROPS_DLL struct _cp_rbnode +{ + void *key; + void *value; + + /* balance maintainance - color is either 'red' or 'black' */ + int color; + + struct _cp_rbnode *left; + struct _cp_rbnode *right; + struct _cp_rbnode *up; +} cp_rbnode; + +/* (internal) allocate a new node */ +CPROPS_DLL +cp_rbnode *cp_rbnode_create(void *key, void *value, struct _cp_mempool *pool); +/* (internal) deallocate a node */ +CPROPS_DLL +void cp_rbtree_destroy_node(struct _cp_rbtree *owner, cp_rbnode *node); +/* (internal) deallocate a node and its subnodes */ +CPROPS_DLL +void cp_rbtree_destroy_node_deep(struct _cp_rbtree *owner, cp_rbnode *node); + +/* tree wrapper object */ +typedef CPROPS_DLL struct _cp_rbtree +{ + cp_rbnode *root; /* root node */ + + int items; /* item count */ + + int mode; /* mode flags */ + cp_compare_fn cmp; /* key comparison function */ + cp_copy_fn key_copy; /* key copy function */ + cp_destructor_fn key_dtr; /* key destructor */ + cp_copy_fn value_copy; /* value copy function */ + cp_destructor_fn value_dtr; /* value destructor */ + + cp_lock *lock; + cp_thread txowner; /* set if a transaction is in progress */ + int txtype; /* lock type */ + + cp_mempool *mempool; /* optional memory pool */ +} cp_rbtree; + +/* + * default create function - equivalent to create_by_option with mode + * COLLECTION_MODE_NOSYNC + */ +CPROPS_DLL +cp_rbtree *cp_rbtree_create(cp_compare_fn cmp); +/* + * complete parameter create function. Note that setting COLLECTION_MODE_COPY + * without specifying a copy function for either keys or values will result in + * keys or values respectively being inserted by value, with no copying + * performed. Similarly, setting COLLECTION_MODE_DEEP without specifying a + * destructor function for keys or values will result in no destructor call + * for keys or values respectively. This allows using the copy/deep mechanisms + * for keys only, values only or both. + */ +CPROPS_DLL +cp_rbtree * + cp_rbtree_create_by_option(int mode, cp_compare_fn cmp, + cp_copy_fn key_copy, cp_destructor_fn key_dtr, + cp_copy_fn val_copy, cp_destructor_fn val_dtr); +/* + * recursively destroy the tree structure + */ +CPROPS_DLL +void cp_rbtree_destroy(cp_rbtree *tree); +/* + * recursively destroy the tree structure with the given destructor functions + */ +CPROPS_DLL +void cp_rbtree_destroy_custom(cp_rbtree *tree, + cp_destructor_fn key_dtr, + cp_destructor_fn val_dtr); + +/* insertion function */ +CPROPS_DLL +void *cp_rbtree_insert(cp_rbtree *tree, void *key, void *value); +/* retrieve the value mapped to the given key */ +CPROPS_DLL +void *cp_rbtree_get(cp_rbtree *tree, void *key); +/* return non-zero if a mapping for 'key' could be found */ +CPROPS_DLL +int cp_rbtree_contains(cp_rbtree *tree, void *key); +/* delete a mapping */ +CPROPS_DLL +void *cp_rbtree_delete(cp_rbtree *tree, void *key); + +/* + * perform a pre-order iteration over the tree, calling 'callback' on each + * node + */ +CPROPS_DLL +int cp_rbtree_callback_preorder(cp_rbtree *tree, + cp_callback_fn callback, + void *prm); +/* + * perform an in-order iteration over the tree, calling 'callback' on each + * node + */ +CPROPS_DLL +int cp_rbtree_callback(cp_rbtree *tree, cp_callback_fn callback, void *prm); +/* + * perform a post-order iteration over the tree, calling 'callback' on each + * node + */ + +CPROPS_DLL +int cp_rbtree_callback_postorder(cp_rbtree *tree, + cp_callback_fn callback, + void *prm); + +/* return the number of mappings in the tree */ +CPROPS_DLL +int cp_rbtree_count(cp_rbtree *tree); + +/* + * lock tree for reading or writing as specified by type parameter. + */ +CPROPS_DLL +int cp_rbtree_lock(cp_rbtree *tree, int type); +/* read lock */ +#define cp_rbtree_rdlock(tree) (cp_rbtree_lock((tree), COLLECTION_LOCK_READ)) +/* write lock */ +#define cp_rbtree_wrlock(tree) (cp_rbtree_lock((tree), COLLECTION_LOCK_WRITE)) +/* unlock */ +CPROPS_DLL +int cp_rbtree_unlock(cp_rbtree *tree); + + +/* return the table mode indicator */ +CPROPS_DLL +int cp_rbtree_get_mode(cp_rbtree *tree); +/* set mode bits on the tree mode indicator */ +CPROPS_DLL +int cp_rbtree_set_mode(cp_rbtree *tree, int mode); +/* unset mode bits on the tree mode indicator. if unsetting + * COLLECTION_MODE_NOSYNC and the tree was not previously synchronized, the + * internal synchronization structure is initalized. + */ +CPROPS_DLL +int cp_rbtree_unset_mode(cp_rbtree *tree, int mode); + + +/** print tree to stdout */ +CPROPS_DLL +void cp_rbtree_dump(cp_rbtree *tree); + +/* set tree to use given mempool or allocate a new one if pool is NULL */ +CPROPS_DLL +int cp_rbtree_use_mempool(cp_rbtree *tree, cp_mempool *pool); + +/* set tree to use a shared memory pool */ +CPROPS_DLL +int cp_rbtree_share_mempool(cp_rbtree *tree, struct _cp_shared_mempool *pool); + +__END_DECLS + +/** @} */ + +#endif + Added: branches/multicore/numpy/core/cprops_thread/tests/main.c =================================================================== --- branches/multicore/numpy/core/cprops_thread/tests/main.c 2007-04-10 15:44:17 UTC (rev 3691) +++ branches/multicore/numpy/core/cprops_thread/tests/main.c 2007-04-10 17:54:59 UTC (rev 3692) @@ -0,0 +1,52 @@ +#include +#include + +pid_t getpid(void); + +#include "thread.h" + + +void* worker_task(void* blah) +{ + pid_t pid; + pid = getpid(); +// fixme: what is up with sleep? How do we get the unix style sleep? +#ifdef _WINDOWS + _sleep(1000); +#else + sleep(1); +#endif + printf("hello from: %d\n", pid); +} + +int main() +{ + time_t t1, t2; + float seconds; + pid_t pid; + int i; + cp_thread_pool* thread_pool; + cp_thread* thread; + + thread_pool = cp_thread_pool_create(4, 4); + + pid = getpid(); + printf("main thread id: %d\n", pid); + + t1 = clock(); + + for (i=0;i<8;i++) + { + thread = cp_thread_pool_get(thread_pool, worker_task, NULL); + printf("task %d started on thread %d.\n", i+1, thread); + } + + /* wait for all threads to finish executing */ + cp_thread_pool_wait(thread_pool); + + t2 = clock(); + + seconds = ((float)(t2-t1))/CLOCKS_PER_SEC; + printf("runtime: %d %d %d\n", t1, t2, CLOCKS_PER_SEC); + return 1; +} Property changes on: branches/multicore/numpy/core/cprops_thread/tests/main.c ___________________________________________________________________ Name: svn:executable + * Added: branches/multicore/numpy/core/cprops_thread/thread.c =================================================================== --- branches/multicore/numpy/core/cprops_thread/thread.c 2007-04-10 15:44:17 UTC (rev 3691) +++ branches/multicore/numpy/core/cprops_thread/thread.c 2007-04-10 17:54:59 UTC (rev 3692) @@ -0,0 +1,703 @@ +#include +#include "thread.h" +#include "common.h" +#include "log.h" + +/** + * @addtogroup cp_thread + */ +/** @{ */ + +#include +#include +#include + +#ifdef _WINDOWS +#define __WINDOWS_WINNT 0x0400 +#include +#endif + +/** internal function to return a cp_pooled_thread to the available pool */ +static int cp_thread_pool_set_available(cp_thread_pool *owner, cp_pooled_thread *pt); + +long cp_pooled_thread_get_id(cp_pooled_thread *pt) +{ + long id = 0; +#ifdef CP_HAS_PTHREAD_GETUNIQUE_NP + pthread_getunique_np(*pt->worker, &id); +#else + id = (long) *pt->worker; +#endif + + return id; +} + +cp_pooled_thread *cp_pooled_thread_create(cp_thread_pool *owner) +{ + int rc; + cp_pooled_thread *pt = calloc(1, sizeof(cp_pooled_thread)); + + if (pt == NULL) + { + cp_error(CP_MEMORY_ALLOCATION_FAILURE, "can\'t allocate pooled thread"); + errno = ENOMEM; + return NULL; + } + pt->worker = calloc(1, sizeof(cp_thread)); + if (pt->worker == NULL) + { + cp_error(CP_MEMORY_ALLOCATION_FAILURE, "can\'t allocate thread"); + errno = ENOMEM; + return NULL; + } + + pt->owner = owner; + + pt->suspend_lock = (cp_mutex *) malloc(sizeof(cp_mutex)); + if (pt->suspend_lock == NULL) + goto THREAD_CREATE_CANCEL; + if ((rc = cp_mutex_init(pt->suspend_lock, NULL))) + { + cp_error(rc, "starting up pooled thread"); + goto THREAD_CREATE_CANCEL; + } + + pt->suspend_cond = (cp_cond *) malloc(sizeof(cp_cond)); + if ((rc = cp_cond_init(pt->suspend_cond, NULL))) + { + cp_error(rc, "starting up pooled thread"); + cp_mutex_destroy(pt->suspend_lock); + free(pt->suspend_lock); + goto THREAD_CREATE_CANCEL; + } + + pt->done = 0; + pt->wait = 1; + + cp_thread_create(*pt->worker, NULL, cp_pooled_thread_run, pt); + + pt->id = cp_pooled_thread_get_id(pt); + cp_thread_detach(*pt->worker); //~~ check + + return pt; + +THREAD_CREATE_CANCEL: + free(pt->worker); + free(pt); + + return NULL; +} + +int cp_pooled_thread_stop(cp_pooled_thread *pt) +{ + int rc = 0; + + cp_mutex_lock(pt->suspend_lock); + pt->action = NULL; + if (pt->stop_fn) + { + rc = pt->stop_prm ? (*pt->stop_fn)(pt->stop_prm) : + (*pt->stop_fn)(pt->action_prm); + } + + pt->done = 1; + pt->wait = 0; + + cp_cond_signal(pt->suspend_cond); + cp_mutex_unlock(pt->suspend_lock); + +// cp_thread_join(*pt->worker, NULL); //~~ rc + + return rc; +} + +void cp_pooled_thread_destroy(cp_pooled_thread *t) +{ +#ifdef __TRACE__ + DEBUGMSG("destroying cp_pooled_thread %lX", t); +#endif + cp_mutex_destroy(t->suspend_lock); + free(t->suspend_lock); + cp_cond_destroy(t->suspend_cond); + free(t->suspend_cond); + free(t->worker); + free(t); +} + +int cp_pooled_thread_release(cp_pooled_thread *t) +{ + return 0; +} + +int cp_pooled_thread_run_task(cp_pooled_thread *pt, + cp_thread_action action, + void *prm) +{ +#ifdef __TRACE__ + DEBUGMSG("cp_pooled_thread_run_task: action %lx, prm %lx\n", + (long) action, (long) prm); +#endif + + pt->action = action; + pt->action_prm = prm; + + if (action == NULL) + { + cp_error(CP_INVALID_FUNCTION_POINTER, "missing thread function"); + return CP_INVALID_FUNCTION_POINTER; + } + + /* signal thread to run */ + cp_mutex_lock(pt->suspend_lock); + pt->wait = 0; + cp_cond_signal(pt->suspend_cond); + cp_mutex_unlock(pt->suspend_lock); + + return 0; +} + +int cp_pooled_thread_run_stoppable_task(cp_pooled_thread *pt, + cp_thread_action action, + void *action_prm, + cp_thread_stop_fn stop_fn, + void *stop_prm) +{ + pt->stop_fn = stop_fn; + pt->stop_prm = stop_prm; + return cp_pooled_thread_run_task(pt, action, action_prm); +} + +void *cp_pooled_thread_run(void *prm) +{ + cp_pooled_thread *pt = (cp_pooled_thread *) prm; + +#ifdef __TRACE__ + DEBUGMSG("cp_pooled_thread (%lx) starts", (long) pt); +#endif + + while (!pt->done && pt->owner->running) + { + cp_mutex_lock(pt->suspend_lock); + while (pt->wait && (!pt->done) && pt->owner->running) + cp_cond_wait(pt->suspend_cond, pt->suspend_lock); + cp_mutex_unlock(pt->suspend_lock); + + if (pt->done || !pt->owner->running) break; +#ifdef __TRACE__ + DEBUGMSG("cp_pooled_thread_run: action is %lX, action_prm is %lX", pt->action, pt->action_prm); +#endif + if (pt->action) /* run user defined function if set */ + { +#ifdef __TRACE__ + DEBUGMSG("pooled thread (%lX) handles action (%lX)", (long) pt, (long) pt->action); +#endif + (*pt->action)(pt->action_prm); + } + if (pt->done || !pt->owner->running) break; + + pt->wait = 1; + /* performed work, notify pool */ + cp_thread_pool_set_available(pt->owner, pt); + } + +#ifdef __TRACE__ + DEBUGMSG("cp_pooled_thread (%lx) exits", (long) pt); +#endif + + cp_pooled_thread_destroy(pt); + + return NULL; +} + +static int cp_thread_pool_set_available(cp_thread_pool *pool, + cp_pooled_thread *thread) +{ + cp_mutex_lock(pool->pool_lock); + cp_hashlist_remove(pool->in_use, &thread->id); + cp_list_append(pool->free_pool, thread); +// pool->size--; + cp_cond_signal(pool->pool_cond); + cp_mutex_unlock(pool->pool_lock); + + return 0; +} + + +int cp_thread_pool_wait(cp_thread_pool *pool) +{ + while (cp_hashlist_item_count(pool->in_use) && pool->running) + { + cp_mutex_lock(pool->pool_lock); + cp_cond_wait(pool->pool_cond, pool->pool_lock); + + if (pool->running && + cp_hashlist_item_count(pool->in_use)) /* wake up someone else */ + cp_cond_signal(pool->pool_cond); + cp_mutex_unlock(pool->pool_lock); + } + + return 0; +} + +int cp_thread_pool_stop(cp_thread_pool *pool) +{ + cp_hashlist_iterator *i; + cp_list_iterator *j; + cp_pooled_thread *pt; + + pool->running = 0; + + i = cp_hashlist_create_iterator(pool->in_use, COLLECTION_LOCK_READ); + while ((pt = (cp_pooled_thread *) cp_hashlist_iterator_next_value(i))) + cp_pooled_thread_stop(pt); + cp_hashlist_iterator_destroy(i); + + j = cp_list_create_iterator(pool->free_pool, COLLECTION_LOCK_READ); + while ((pt = (cp_pooled_thread *) cp_list_iterator_next(j))) + cp_pooled_thread_stop(pt); + cp_list_iterator_destroy(j); + + return 0; +} + +cp_thread_pool *cp_thread_pool_create(int min_size, int max_size) +{ + int rc; + cp_thread_pool *pool = calloc(1, sizeof(cp_thread_pool)); + if (pool == NULL) + cp_fatal(CP_MEMORY_ALLOCATION_FAILURE, "can\'t allocate thread pool structure"); + + pool->min_size = min_size; + pool->max_size = max_size; + + pool->running = 1; + + pool->free_pool = cp_list_create(); + if (pool->free_pool == NULL) + cp_fatal(CP_MEMORY_ALLOCATION_FAILURE, "can\'t allocate thread pool list"); + + pool->in_use = cp_hashlist_create(10, cp_hash_long, cp_hash_compare_long); + if (pool->in_use == NULL) + cp_fatal(CP_MEMORY_ALLOCATION_FAILURE, "can\'t allocate thread pool running list"); + + pool->pool_lock = (cp_mutex *) malloc(sizeof(cp_mutex)); + if (pool->pool_lock == NULL) + { + cp_error(CP_MEMORY_ALLOCATION_FAILURE, "can\'t create mutex"); + goto THREAD_POOL_CREATE_CANCEL; + } + if ((rc = cp_mutex_init(pool->pool_lock, NULL))) + { + cp_error(rc, "can\'t create mutex"); + goto THREAD_POOL_CREATE_CANCEL; + } + + pool->pool_cond = (cp_cond *) malloc(sizeof(cp_cond)); + if (pool->pool_cond == NULL) + { + cp_error(rc, "can\'t create condition variable"); + cp_mutex_destroy(pool->pool_lock); + free(pool->pool_lock); + goto THREAD_POOL_CREATE_CANCEL; + } + if ((rc = cp_cond_init(pool->pool_cond, NULL))) + { + cp_error(rc, "can\'t create condition variable"); + free(pool->pool_cond); + cp_mutex_destroy(pool->pool_lock); + free(pool->pool_lock); + goto THREAD_POOL_CREATE_CANCEL; + } + + for ( ; pool->size < pool->min_size; pool->size++) + { + cp_pooled_thread *pt = cp_pooled_thread_create(pool); + if (pt == NULL) + { + char msg[1000]; + sprintf(msg, "can\'t create thread pool (created %d threads, minimum pool size is %d", pool->size, pool->min_size); + cp_fatal(CP_THREAD_CREATION_FAILURE, msg); + } + cp_list_append(pool->free_pool, pt); + } + + return pool; + +THREAD_POOL_CREATE_CANCEL: + cp_list_destroy_custom(pool->free_pool, + (cp_destructor_fn) cp_pooled_thread_destroy); + cp_hashlist_destroy_custom(pool->in_use, NULL, + (cp_destructor_fn) cp_pooled_thread_destroy); + free(pool); + return NULL; +} + +cp_thread *cp_thread_pool_get_impl(cp_thread_pool *pool, + cp_thread_action action, + void *action_prm, + cp_thread_stop_fn stop_fn, + void *stop_prm, + int block) +{ + cp_pooled_thread *pt = NULL; + cp_mutex_lock(pool->pool_lock); + +#ifdef __TRACE__ + DEBUGMSG("cp_thread_pool_get_impl (%d) pool size = %d max size = %d\n", block, pool->size, pool->max_size); +#endif + + pt = cp_list_remove_head(pool->free_pool); + if (pt == NULL) + { + if (pool->size < pool->max_size) + { + pt = cp_pooled_thread_create(pool); + if (pt) + pool->size++; + } + + if (pt == NULL) /* no thread available and poolsize == max */ + { + if (!block) /* asked not to block, return NULL */ + { + cp_mutex_unlock(pool->pool_lock); + return NULL; + } + + /* wait for a thread to be released to the pool */ +#ifdef _WINDOWS + cp_mutex_unlock(pool->pool_lock); +#endif + while (pool->running && cp_list_is_empty(pool->free_pool)) + cp_cond_wait(pool->pool_cond, pool->pool_lock); + + if (pool->running) + pt = cp_list_remove_head(pool->free_pool); + + if (pt == NULL) /* shouldn't be happening except for shutdown */ + { + cp_mutex_unlock(pool->pool_lock); + return NULL; + } + } + } + + cp_hashlist_append(pool->in_use, &pt->id, pt); + cp_mutex_unlock(pool->pool_lock); + + cp_pooled_thread_run_stoppable_task(pt, action, action_prm, stop_fn, stop_prm); + + return pt->worker; +} + +cp_thread *cp_thread_pool_get(cp_thread_pool *pool, + cp_thread_action action, + void *prm) +{ + return cp_thread_pool_get_impl(pool, action, prm, NULL, NULL, 1); +} + +cp_thread *cp_thread_pool_get_stoppable(cp_thread_pool *pool, + cp_thread_action action, + void *action_prm, + cp_thread_stop_fn stop_fn, + void *stop_prm) +{ + return cp_thread_pool_get_impl(pool, action, action_prm, stop_fn, stop_prm, 1); +} + +cp_thread *cp_thread_pool_get_nb(cp_thread_pool *pool, + cp_thread_action action, + void *prm) +{ + return cp_thread_pool_get_impl(pool, action, prm, NULL, NULL, 0); +} + +cp_thread *cp_thread_pool_get_stoppable_nb(cp_thread_pool *pool, + cp_thread_action action, + void *action_prm, + cp_thread_stop_fn stop_fn, + void *stop_prm) +{ + return cp_thread_pool_get_impl(pool, action, action_prm, stop_fn, stop_prm, 0); +} + +void cp_thread_pool_destroy(cp_thread_pool *pool) +{ +#ifdef __TRACE__ + DEBUGMSG("stopping cp_thread_pool %lX", pool); +#endif + + if (pool->running) cp_thread_pool_stop(pool); + + cp_list_destroy(pool->free_pool); +// cp_list_destroy_custom(pool->free_pool, +// (cp_destructor_fn) cp_pooled_thread_destroy); + cp_hashlist_destroy(pool->in_use); +// cp_hashlist_destroy_custom(pool->in_use, NULL, +// (cp_destructor_fn) cp_pooled_thread_destroy); + cp_mutex_destroy(pool->pool_lock); + free(pool->pool_lock); + cp_cond_destroy(pool->pool_cond); + free(pool->pool_cond); + + free(pool); +} + +int cp_thread_pool_count_available(cp_thread_pool *pool) +{ + return (pool->max_size - pool->size) + + cp_list_item_count(pool->free_pool); +} + + +/* ************************************************************************** + * * + * thread management framework * + * * + ************************************************************************** */ + +cp_pooled_thread_client_interface * + cp_pooled_thread_client_interface_create + (cp_pooled_thread_scheduler *owner, + void *client, + int min_threads, + int max_threads, + cp_pooled_thread_report_load report_load, + cp_pooled_thread_shrink shrink, + cp_thread_action action, + void *action_prm, + cp_thread_stop_fn stop_fn, + void *stop_prm) +{ + cp_pooled_thread_client_interface *ci = + calloc(1, sizeof(cp_pooled_thread_client_interface)); + if (client == NULL) + cp_fatal(CP_MEMORY_ALLOCATION_FAILURE, "can\'t allocate thread pool client interface"); + + ci->owner = owner; + ci->client = client; + ci->min = min_threads; + ci->max = max_threads; + ci->report_load = report_load; + ci->shrink = shrink; + ci->action = action; + ci->action_prm = action_prm; + ci->stop_fn = stop_fn; + ci->stop_prm = stop_prm; + + cp_pooled_thread_scheduler_register_client(owner, ci); + + return ci; +} + + +void cp_pooled_thread_client_interface_destroy + (cp_pooled_thread_client_interface *client) +{ + free(client); +} + +cp_pooled_thread_scheduler *cp_pooled_thread_scheduler_create(cp_thread_pool *pool) +{ + cp_pooled_thread_scheduler *scheduler = + calloc(1, sizeof(cp_pooled_thread_scheduler)); + if (scheduler == NULL) + cp_fatal(CP_MEMORY_ALLOCATION_FAILURE, "can\'t allocate thread manager"); + + scheduler->pool = pool; + scheduler->client_list = cp_vector_create(20); + +#ifdef CP_HAS_SRANDOM + srandom(time(NULL)); +#else + srand(time(NULL)); +#endif + + return scheduler; +} + +void cp_pooled_thread_scheduler_destroy(cp_pooled_thread_scheduler *scheduler) +{ + cp_vector_destroy(scheduler->client_list); + free(scheduler); +} + +void cp_pooled_thread_scheduler_register_client + (cp_pooled_thread_scheduler *scheduler, + cp_pooled_thread_client_interface *client) +{ + cp_vector_add_element(scheduler->client_list, client); +} + +cp_pooled_thread_client_interface * + choose_random_client(cp_pooled_thread_scheduler *scheduler) +{ + int index = +#ifdef CP_HAS_RANDOM + random() +#else + rand() +#endif + % (cp_vector_size(scheduler->client_list)); + return (cp_pooled_thread_client_interface *) + cp_vector_element_at(scheduler->client_list, index); +} + +#define SCHEDULER_THRESHOLD 1 + +void cp_pooled_thread_client_get_nb(cp_pooled_thread_client_interface *c) +{ + if (cp_thread_pool_get_nb(c->owner->pool, c->action, c->action_prm)) + c->count++; +} + +void cp_pooled_thread_client_get(cp_pooled_thread_client_interface *c) +{ + c->count++; + cp_thread_pool_get(c->owner->pool, c->action, c->action_prm); +} + +void cp_pooled_thread_client_get_stoppable_nb(cp_pooled_thread_client_interface *c) +{ + if (cp_thread_pool_get_stoppable_nb(c->owner->pool, c->action, c->action_prm, c->stop_fn, c->stop_prm)) + c->count++; +} + +void cp_pooled_thread_client_get_stoppable(cp_pooled_thread_client_interface *c) +{ + c->count++; + cp_thread_pool_get_stoppable(c->owner->pool, c->action, c->action_prm, c->stop_fn, c->stop_prm); +} + +#if 0 //~~ for future optimization +void cp_pooled_thread_client_negociate(cp_pooled_thread_client_interface *c) +{ + int curr_load = (*c->report_load)(c); + cp_pooled_thread_scheduler *scheduler = c->owner; + Vector *clients = scheduler->client_list; + int i, min, imin, max, imax, cval, max_count; + cp_pooled_thread_client_interface *other; + + int clen = cp_vector_size(clients); + + if (clen == 0) return; //~~ warning for bad usage + + min = INT_MAX; + max = -1; + max_count = -1; + + for (i = 0; i < clen; i++) + { + other = (cp_pooled_thread_client_interface *) cp_vector_element_at(clients, i); + cval = (*other->report_load)(other); + + if (other->count < other->min) //~~ what's with the switching + cp_thread_pool_get_nb(other->owner->pool, other->action, other->prm); + + DEBUGMSG("negociate: pool %d: load = %d, %d <= %d <= %d", i, cval, other->min, other->count, other->max); + if (cval > max) { max = cval; imax = i; } + if (cval < min || (cval == min && other->count > max_count)) { min = cval; imin = i; max_count = other->count; } + } + DEBUGMSG("negociate: min = %d, max = %d", min, max); + if (abs(max - min) > SCHEDULER_THRESHOLD) + { + cp_pooled_thread_client_interface *maxc = cp_vector_element_at(clients, imax); + cp_pooled_thread_client_interface *minc = cp_vector_element_at(clients, imin); + + if (cp_thread_pool_count_available(scheduler->pool) == 0 && + minc->count > minc->min) + { + DEBUGMSG("negociate: shrinking min pool (%d)", imin); + (*minc->shrink)(minc); + } + + DEBUGMSG("negociate: get_nb for max pool (%d)", imax); + if (cp_thread_pool_get_nb(maxc->owner->pool, maxc->action, maxc->prm)) + maxc->count++; + } +} + +#endif + +void cp_pooled_thread_client_negociate(cp_pooled_thread_client_interface *c) +{ + int curr_load; + if (c->owner->bypass) return; + + curr_load = (*c->report_load)(c); + +#ifdef __TRACE__ + DEBUGMSG("negociate for client %lx - load == %d\n", (long) c, curr_load); +#endif + /* if needed, try get idle thread from pool */ + if (curr_load > SCHEDULER_THRESHOLD && c->count < c->max) + { + cp_thread *t = + cp_thread_pool_get_nb(c->owner->pool, c->action, c->action_prm); + if (t) /* got a thread, return */ + { +#ifdef __TRACE__ + DEBUGMSG("negociate: got thread from pool"); +#endif + c->count++; + return; + } + } + + /* + * following code runs if + * + * (1) no threads needed - check if someone else (other client) needs one + * + * or + * + * (2) thread needed but no idle threads in pool, ask someone else + */ + { + int other_load; + int *inc; /* the thread count to be incremented on switch */ + cp_thread *t; + cp_pooled_thread_client_interface *load, *unload; + cp_pooled_thread_client_interface *other = + choose_random_client(c->owner); + + other_load = (*other->report_load)(other); + if (abs(curr_load - other_load) < SCHEDULER_THRESHOLD) return; + if (curr_load > other_load) /* other releases thread */ + { + if (c->count >= c->max || + other->count <= other->min) return; /* no switch */ +#ifdef __TRACE__ + DEBUGMSG("negociate: switching a thread to this pool"); +#endif + inc = &c->count; + other->count--; + load = c; + unload = other; + } + else /* client releases thread */ + { + if (c->count <= c->min || + other->count >= other->max) return; /* no switch */ +#ifdef __TRACE__ + DEBUGMSG("negociate: switching a thread to other pool"); +#endif + inc = &other->count; + c->count--; + load = other; + unload = c; + } +#ifdef __TRACE__ + DEBUGMSG("negociate: shrinking unload pool"); +#endif + (*unload->shrink)(unload); + t = cp_thread_pool_get_nb(load->owner->pool, //~~ get_nb? + load->action, load->action_prm); + + if (t) (*inc)++; //~~ maybe better to get blocking and be sure? + } +} + +/** @} */ + Added: branches/multicore/numpy/core/cprops_thread/thread.h =================================================================== --- branches/multicore/numpy/core/cprops_thread/thread.h 2007-04-10 15:44:17 UTC (rev 3691) +++ branches/multicore/numpy/core/cprops_thread/thread.h 2007-04-10 17:54:59 UTC (rev 3692) @@ -0,0 +1,374 @@ +#ifndef _CP_THREAD_H +#define _CP_THREAD_H + +/** + * @addtogroup cp_thread + */ +/** @{ */ +/** + * @file + * definitions for the thread management framework. the + * current implementation is based on the POSIX thread api. + */ + +#include "common.h" + +__BEGIN_DECLS + +#include "cp_config.h" +/* synchronization api abstraction (a bunch of pthread-like macros basically) + * is in collection.h + */ +#include "collection.h" +#include "linked_list.h" +#include "hashlist.h" +#include "vector.h" + +/** a thread function */ +typedef void *(*cp_thread_action) (void *); + + +/** a stop function for client threads */ +typedef int (*cp_thread_stop_fn)(void *); + +/** + * cp_pooled_thread is a thread that lives in a thread_pool. The struct holds + * synchronization elements used to control the thread and actuation settings, + * i.e. a thread function and a parameter to be passed for the next starting + * thread. The pool initializes a bunch of threads and sets them in 'wait'. + * + * When a client requests threads from the pool, the next available thread is + * signalled out of 'wait', and runs the thread function requested by the + * client (see cp_thread_pool_get_impl). When the client thread function is + * done, the cp_pooled_thread returns to the thread pool and becomes available + * to pool clients. The cp_pooled_thread only exits when the pool exits, unless + * explicitly stopped (eg pthread_exit) by client code. + */ +typedef CPROPS_DLL struct _cp_pooled_thread +{ + long id; ///< integral (implementation specific) thread id + struct _cp_thread_pool *owner; ///< the pool this thread belongs to + cp_thread *worker; ///< the actual thread + cp_thread_action action; ///< thread function for the next assignment + void *action_prm; ///< parameter for the next assignment + cp_thread_stop_fn stop_fn; ///< called on cp_pooled_thread_stop + void *stop_prm; ///< if not set, stop_fn invoked w/ action_prm + + cp_mutex *suspend_lock; ///< lock for framework scheduling + cp_cond *suspend_cond; ///< condition variable for framework scheduling + + int done; ///< done flag + int wait; ///< wait flag +} cp_pooled_thread; + +/** return a thread id for this thread */ +CPROPS_DLL +long cp_pooled_thread_get_id(cp_pooled_thread *thread); + +/** thread constructor function */ +CPROPS_DLL +cp_pooled_thread *cp_pooled_thread_create(struct _cp_thread_pool *owner); + +/** thread destructor */ +CPROPS_DLL +void cp_pooled_thread_destroy(cp_pooled_thread *t); + +/** signal a thread to stop */ +CPROPS_DLL +int cp_pooled_thread_stop(cp_pooled_thread *t); + +/** retrieve an integer type thread id for this thread */ +CPROPS_DLL +long cp_pooled_thread_get_id(cp_pooled_thread *t); + +/** sets the action and prm for this thread, then invokes 'action' */ +CPROPS_DLL +int cp_pooled_thread_run_task(cp_pooled_thread *pt, + cp_thread_action action, + void *prm); + +/** perform action with stop function */ +CPROPS_DLL +int cp_pooled_thread_run_stoppable_task(cp_pooled_thread *pt, + cp_thread_action action, + void *action_prm, + cp_thread_stop_fn stop_fn, + void *stop_prm); + +/** framework thread function */ +CPROPS_DLL +void *cp_pooled_thread_run(void *prm); + + +/** + * cp_thread_pool holds a list of free threads (in wait mode). The list grows + * up to max_size, after which subsequent calls to cp_thread_pool_get will + * block, and calls to cp_thread_pool_get_nb will return NULL - until clients + * return their threads to the pool. + */ +typedef CPROPS_DLL struct _cp_thread_pool +{ + int size; ///< current size + + int min_size; ///< initial size + int max_size; ///< size limit + + int running; + + cp_mutex *pool_lock; ///< to sync thread assignment and release + cp_cond *pool_cond; ///< to sync thread assignment and release + + cp_list *free_pool; ///< holder for unused threads + cp_hashlist *in_use; ///< holder for running threads +} cp_thread_pool; + +/** cp_thread_pool constructor */ +CPROPS_DLL +cp_thread_pool *cp_thread_pool_create(int min_size, int max_size); + +/** cp_thread_pool destructor */ +CPROPS_DLL +void cp_thread_pool_destroy(cp_thread_pool *pool); + +/** wait for threads to finish processing client requests */ +CPROPS_DLL +int cp_thread_pool_wait(cp_thread_pool *pool); + +/** signal all threads in this pool to stop */ +CPROPS_DLL +int cp_thread_pool_stop(cp_thread_pool *pool); + +/** + * request a thread from the pool. If no threads are available, this function + * will block until a thread becomes available. + */ +CPROPS_DLL +cp_thread *cp_thread_pool_get(cp_thread_pool *pool, + cp_thread_action action, + void *prm); + +/** + * request a thread from the pool. If no threads are available, this function + * will block until a thread becomes available. + */ +CPROPS_DLL +cp_thread *cp_thread_pool_get_stoppable(cp_thread_pool *pool, + cp_thread_action action, + void *action_prm, + cp_thread_stop_fn stop_fn, + void *stop_prm); + +/** + * request a thread from the pool - non-blocking version. Returns a pointer + * to the requested thread if one is available or NULL if the pool is empty. + */ +CPROPS_DLL +cp_thread *cp_thread_pool_get_nb(cp_thread_pool *pool, + cp_thread_action action, + void *prm); +/** + * request a thread from the pool - non-blocking version. Returns a pointer + * to the requested thread if one is available or NULL if the pool is empty. + */ +CPROPS_DLL +cp_thread *cp_thread_pool_get_stoppable_nb(cp_thread_pool *pool, + cp_thread_action action, + void *action_prm, + cp_thread_stop_fn stop_fn, + void *stop_prm); + +/** returns the number of available threads in the pool. */ +CPROPS_DLL +int cp_thread_pool_count_available(cp_thread_pool *pool); + +/* ************************************************************************** + * * + * thread management framework * + * * + ************************************************************************** */ + + +/** + * Definitions for thread management framework follow. The framework is based + * on the cp_thread_pool and cp_pooled_thread types. + *
+ * The pooled thread scheduler interface is meant for use by clients who + * require a variable number of threads. Each such component should create + * an instance of cp_pooled_thread_client_interface and use the api functions + * to get threads from the underlying cp_thread_pool. Here is some example + * code. + *

+ * cp_pooled_thread_scheduler *main_scheduler; 
+ * 
+ * ...
+ *
+ * component_a_start(component_a *a, ...)
+ * {
+ *     a->scheduler_interface = 
+ *         cp_pooled_thread_client_interface_create(main_scheduler, a, 2, 10, 
+ *             component_a_report_load, component_a_stop_thread, 
+ *             component_a_thread_run, a);
+ * 
+ *     ...
+ * 
+ *     for (i = 0; i < a->scheduler_interface->min; i++)
+ *         cp_pooled_thread_client_get(a->scheduler_interface);
+ * }
+ *
+ * component_b_start(component_b *b, ...)
+ * {
+ *     b->scheduler_interface = 
+ *         cp_pooled_thread_client_interface_create(main_scheduler, b, 2, 10, 
+ *             component_a_report_load, component_a_stop_thread, 
+ *             component_a_thread_run, b);
+ * 
+ *     ...
+ * 
+ *     for (i = 0; i < b->scheduler_interface->min; i++)
+ *         cp_pooled_thread_client_get(b->scheduler_interface);
+ * }
+ * 
+ * 

+ * In this example, the threads for component_a and component_b will be + * managed jointly, since their cp_pooled_thread_client_interface *'s have the + * same cp_pooled_thread_scheduler *.

+ * + * + * See cp_pooled_thread_client_negociate for details. + */ +typedef CPROPS_DLL struct cp_pooled_thread_scheduler +{ + cp_thread_pool *pool; ///< pool to operate on + cp_vector *client_list; ///< list of clients + int bypass; ///< when bypass flag set 'negociate' function becomes nop +} cp_pooled_thread_scheduler; + +CPROPS_DLL struct _cp_pooled_thread_client_interface; + +typedef int (*cp_pooled_thread_report_load) //~~ change prm to void *client + (struct _cp_pooled_thread_client_interface *s); +typedef void (*cp_pooled_thread_shrink) //~~ change prm to void *client + (struct _cp_pooled_thread_client_interface *); + +/** + * cp_pooled_thread_client_interface acts as the link to the + * cp_pooled_thread_scheduler for clients that require a variable number of + * threads. This interface holds 3 functions pointers that must be supplied + * by a client:
+ *

  • report_load - should return the number of open requests the client has + * to handle + *
  • shrink - will be called by the framework to stop one client thread + *
  • action - the thread function for this client + */ +typedef CPROPS_DLL struct _cp_pooled_thread_client_interface +{ + int max; ///< thread count upper limit + int min; ///< thread count bottom limit + + int count; ///< actual number of threads serving this client + + void *client; ///< pointer to client + cp_pooled_thread_scheduler *owner; ///< pointer to thread_pool_scheduler + cp_pooled_thread_report_load report_load; ///< client function to report load + cp_pooled_thread_shrink shrink; ///< client function to stop 1 thread + cp_thread_action action; ///< client thread function + void *action_prm; ///< parameter to client thread function (usually == client) + cp_thread_stop_fn stop_fn; ///< stop callback + void *stop_prm; ///< parameter to stop callback - if NULL action_prm will be used +} cp_pooled_thread_client_interface; + +/** cp_pooled_thread_client_interface constructor */ +CPROPS_DLL +cp_pooled_thread_client_interface * + cp_pooled_thread_client_interface_create + (cp_pooled_thread_scheduler *owner, + void *client, + int min_threads, + int max_threads, + cp_pooled_thread_report_load report_load, + cp_pooled_thread_shrink shrink, + cp_thread_action action, + void *action_prm, + cp_thread_stop_fn stop_fn, + void *stop_prm); + +/** cp_pooled_thread_client_interface destructor */ +CPROPS_DLL +void cp_pooled_thread_client_interface_destroy + (cp_pooled_thread_client_interface *client); + +/** + * threads should call negociate when a change in the number of threads a + * client owns is required. + * Two possible scheduling approaches are - + * + * (1) centralized: + * Clients report their load factor to the thread manager. The thread + * manager grants requests for new threads to clients with higher loads + * first. + * + * (2) distributed: + * clients negociate with other clients requesting a thread based on their + * load factors. The client with the lower load factor releases a thread + * to the client with the higher load factor. + * + * The distributed approach saves some bookkeeping over head in the thread + * manager, reduces the number steps involved in acquiring a new thread or + * releasing an unused one, and makes a dedicated synchronization thread + * unnecessary.

    + * + * In the current implementation, the scheduler will randomly choose one + * other client to negociate with. If the load factors are different enough, + * one thread will be switched to the busier client. + */ +CPROPS_DLL +void cp_pooled_thread_client_negociate(cp_pooled_thread_client_interface *c); + +/** cp_pooled_thread_scheduler constructor */ +CPROPS_DLL +cp_pooled_thread_scheduler *cp_pooled_thread_scheduler_create(cp_thread_pool *pool); + +/** cp_pooled_thread_scheduler destructor */ +CPROPS_DLL +void cp_pooled_thread_scheduler_destroy(cp_pooled_thread_scheduler *scheduler); + +/** register client as a client of this scheduler */ +CPROPS_DLL +void cp_pooled_thread_scheduler_register_client + (cp_pooled_thread_scheduler *scheduler, + cp_pooled_thread_client_interface *client); + +/** + * convenience to abstract cp_thread_pool based implementation, see + * cp_pooled_thread_get and cp_pooled_thread_get_nb + */ +CPROPS_DLL +void cp_pooled_thread_client_get(cp_pooled_thread_client_interface *c); + +/** + * convenience to abstract cp_thread_pool based implementation, see + * cp_pooled_thread_get and cp_pooled_thread_get_nb + */ +CPROPS_DLL +void cp_pooled_thread_client_get_stoppable(cp_pooled_thread_client_interface *c); + +/** + * convenience to abstract cp_thread_pool based implementation, see + * cp_pooled_thread_get and cp_pooled_thread_get_nb + */ +CPROPS_DLL +void cp_pooled_thread_client_get_nb(cp_pooled_thread_client_interface *c); + +/** + * convenience to abstract cp_thread_pool based implementation, see + * cp_pooled_thread_get and cp_pooled_thread_get_nb + */ +CPROPS_DLL +void cp_pooled_thread_client_get_stoppable_nb(cp_pooled_thread_client_interface *c); + +__END_DECLS + +/** @} */ + +#endif /* _CP_THREAD */ + Property changes on: branches/multicore/numpy/core/cprops_thread/thread.h ___________________________________________________________________ Name: svn:executable + * Added: branches/multicore/numpy/core/cprops_thread/vector.c =================================================================== --- branches/multicore/numpy/core/cprops_thread/vector.c 2007-04-10 15:44:17 UTC (rev 3691) +++ branches/multicore/numpy/core/cprops_thread/vector.c 2007-04-10 17:54:59 UTC (rev 3692) @@ -0,0 +1,164 @@ +/** + * cp_vector is a 'safe array' implementation + */ + +#include +#include +#include + +#include "log.h" +#include "common.h" + +#include "vector.h" + +cp_vector *cp_vector_create_by_option(int size, + int mode, + cp_copy_fn copy_item, + cp_destructor_fn free_item) +{ + cp_vector *v = calloc(1, sizeof(cp_vector)); + if (v == NULL) + { + errno = ENOMEM; + return NULL; + } + + v->mem = calloc(size, sizeof(void *)); + if (v->mem == NULL) + { + errno = ENOMEM; + return NULL; + } + + v->size = size; + v->mode = mode; + v->copy_item = copy_item; + v->free_item = free_item; + v->head = v->tail = 0; + + return v; +} + +cp_vector *cp_vector_create(int size) +{ + return cp_vector_create_by_option(size, 0, NULL, NULL); +} + +cp_vector *cp_vector_wrap(void **data, int len, int mode) +{ + cp_vector *v = calloc(1, sizeof(cp_vector)); + if (v == NULL) return NULL; + + v->mem = data; + v->size = len; + v->mode = mode; + v->head = len; + v->tail = 0; + + return v; +} + +void cp_vector_destroy(cp_vector *v) +{ + if (v) + { + if ((v->mode & COLLECTION_MODE_DEEP) && v->free_item != NULL) + { + int i; + int n = cp_vector_size(v); + void *item; + for (i = 0; i < n; i++) + { + item = cp_vector_element_at(v, i); + if (item) (*v->free_item)(item); + } + } + free(v->mem); + free(v); + } +} + +void cp_vector_destroy_custom(cp_vector *v, cp_destructor_fn dtr) +{ + if (v) + { + int i; + int n = cp_vector_size(v); + + if (dtr) + { + for (i = 0; i < n; i++) + if (v->mem[i]) (*dtr)(v->mem[i]); + } + + free(v->mem); + free(v); + } +} + +void *cp_vector_element_at(cp_vector *v, int index) +{ + return index >= 0 && index <= cp_vector_size(v) ? v->mem[index] : NULL; +} + +void *cp_vector_set_element(cp_vector *v, int index, void *element) +{ + if (index < 0) + { + errno = EINVAL; + return NULL; + } + + if (index >= v->head) + v->head = index + 1; + + if (v->head >= v->size) + { + v->size = index + 2; + v->mem = realloc(v->mem, v->size * sizeof(void *)); + } + + if ((v->mode & COLLECTION_MODE_DEEP) && + v->mem[index] != NULL && v->free_item != NULL) + (*v->free_item)(v->mem[index]); + + if ((v->mode & COLLECTION_MODE_COPY) && element != NULL && v->copy_item != NULL) + v->mem[index] = (*v->copy_item)(element); + else + v->mem[index] = element; + + return element; +} + +void *cp_vector_add_element(cp_vector *v, void *element) +{ + void *addr = NULL; + + if (v->head + 1 >= v->tail + v->size) + { + void **newptr = realloc(v->mem, 2 * v->size * sizeof(void *)); + if (newptr == NULL) return NULL; + v->mem = newptr; + if (v->head < v->tail) + { + memcpy(v->mem, &v->mem[v->size], v->head * sizeof(void *)); + v->head += v->size; + } + v->size *= 2; + } + + if (v->mode & COLLECTION_MODE_COPY) + v->mem[v->head] = (*v->copy_item)(element); + else + v->mem[v->head] = element; + addr = v->mem[v->head]; + v->head = (v->head + 1) % v->size; + + return addr; +} + +int cp_vector_size(cp_vector *v) +{ + return (v->head - v->tail + v->size) % v->size; +} + Added: branches/multicore/numpy/core/cprops_thread/vector.h =================================================================== --- branches/multicore/numpy/core/cprops_thread/vector.h 2007-04-10 15:44:17 UTC (rev 3691) +++ branches/multicore/numpy/core/cprops_thread/vector.h 2007-04-10 17:54:59 UTC (rev 3692) @@ -0,0 +1,58 @@ +#ifndef _CP_VECTOR_H +#define _CP_VECTOR_H + +#include "common.h" + +__BEGIN_DECLS + +#include "cp_config.h" +#include "collection.h" + +/** + * A simple 'safe array' implementation. + */ +typedef CPROPS_DLL struct _cp_vector +{ + void **mem; /**< Pointer to memory */ + int size; /**< size of vector (element count) */ + int head; /**< index of 1st element */ + int tail; /**< index of Nth element */ + + int mode; /**< collection mode */ + cp_copy_fn copy_item; /**< item copy function */ + cp_destructor_fn free_item; /**< item destructor function */ + cp_lock *lock; /**< rwlock */ +} cp_vector; + +CPROPS_DLL +cp_vector *cp_vector_create_by_option(int size, + int mode, + cp_copy_fn copy_item, + cp_destructor_fn free_item); +CPROPS_DLL +cp_vector *cp_vector_create(int size); +CPROPS_DLL +cp_vector *cp_vector_wrap(void **data, int len, int mode); +CPROPS_DLL +void cp_vector_destroy(cp_vector *v); +CPROPS_DLL +void cp_vector_destroy_custom(cp_vector *v, cp_destructor_fn dtr); +CPROPS_DLL +void *cp_vector_add_element(cp_vector *v, void *element); +CPROPS_DLL +void *cp_vector_element_at(cp_vector *v, int index); +CPROPS_DLL +void *cp_vector_set_element(cp_vector *v, int index, void *element); +CPROPS_DLL +void cp_vector_remove_element(cp_vector *v, int index); +CPROPS_DLL +int cp_vector_size(cp_vector *v); + +/* ----------------------------------------------------------------- */ + +__END_DECLS + +/** @} */ + +#endif /* _COLLECTION_VECTOR_H */ + Property changes on: branches/multicore/numpy/core/cprops_thread/vector.h ___________________________________________________________________ Name: svn:executable + * Modified: branches/multicore/numpy/core/include/numpy/ndarrayobject.h =================================================================== --- branches/multicore/numpy/core/include/numpy/ndarrayobject.h 2007-04-10 15:44:17 UTC (rev 3691) +++ branches/multicore/numpy/core/include/numpy/ndarrayobject.h 2007-04-10 17:54:59 UTC (rev 3692) @@ -91,8 +91,12 @@ #error Must use Python with unicode enabled. #endif - -typedef signed char npy_byte; +/* FIXME: changed npy_byte from signed to unsigned to get it to compile on windows... + * This is JUST FOR TESTING AS IT ISN'T REALLY WHAT WE WANT. Figure out + * how deal with noprefix.h declaring bytes as a signed byte where a windows.h + * header has declared it as a unsigned byte later... + */ +typedef unsigned char npy_byte; typedef unsigned char npy_ubyte; typedef unsigned short npy_ushort; typedef unsigned int npy_uint; Added: branches/multicore/numpy/core/include/numpy/ufuncthreadapi.h =================================================================== --- branches/multicore/numpy/core/include/numpy/ufuncthreadapi.h 2007-04-10 15:44:17 UTC (rev 3691) +++ branches/multicore/numpy/core/include/numpy/ufuncthreadapi.h 2007-04-10 17:54:59 UTC (rev 3692) @@ -0,0 +1,23 @@ +#ifndef ufuncthreadapi_h +#define ufuncthreadapi_h + +/* Data structure to hold information about thread settings. */ + +typedef struct { + + /* Should ufuncs divide their work between multiple threads */ + int use_threads; + + /* Number of threads to use in threaded operations */ + int thread_count; + + /* Minimum number of elements in an array before threading is used */ + int element_threshold; + +} UFuncThreadSettings; + + +static PyObject * +ufunc_setthreading(PyObject *dummy, PyObject *args); + +#endif Modified: branches/multicore/numpy/core/setup.py =================================================================== --- branches/multicore/numpy/core/setup.py 2007-04-10 15:44:17 UTC (rev 3691) +++ branches/multicore/numpy/core/setup.py 2007-04-10 17:54:59 UTC (rev 3692) @@ -129,7 +129,7 @@ incl_dir = os.path.dirname(target) if incl_dir not in config.numpy_include_dirs: config.numpy_include_dirs.append(incl_dir) - + config.add_data_files((header_dir,target)) return target @@ -196,18 +196,47 @@ depends = deps, ) + # fixme: later, get this from the configuration. + vector_threads = 1 + + umath_include_dirs = [] + umath_library_dirs = [] + umath_libraries = [] + + if vector_threads==1: + cprops_macros = [] + + # update the umath includes/libraries to use the threading library. + umath_include_dirs.append('cprops_thread') + umath_library_dirs.append('cprops_thread') + umath_libraries.append('cprops') + + if sys.platform == 'win32': + # fixme: is this only for gcc, or does msvc need it as well? + umath_libraries.append('iberty') # needed for random, srandom + umath_libraries.append('wsock32') # needed for select + + config.add_library('cprops', join('cprops_thread', '*.c'), + macros=cprops_macros, + include_dirs='cprops_thread') + config.add_extension('umath', sources = [generate_config_h, + join('src','umathmodule.c.src'), generate_umath_c, generate_ufunc_api, join('src','scalartypes.inc.src'), join('src','arraytypes.inc.src'), ], - depends = [join('src','ufuncobject.c'), + depends = [join('src','ufuncthreadapi.c'), + join('src','ufuncobject.c'), generate_umath_py, join(codegen_dir,'generate_ufunc_api.py'), ]+deps, + include_dirs = umath_include_dirs, + library_dirs = umath_library_dirs, + libraries = umath_libraries, ) config.add_extension('_sort', Modified: branches/multicore/numpy/core/src/ufuncobject.c =================================================================== --- branches/multicore/numpy/core/src/ufuncobject.c 2007-04-10 15:44:17 UTC (rev 3691) +++ branches/multicore/numpy/core/src/ufuncobject.c 2007-04-10 17:54:59 UTC (rev 3692) @@ -24,6 +24,7 @@ */ +#include "thread.h" typedef double (DoubleBinaryFunc)(double x, double y); typedef float (FloatBinaryFunc)(float x, float y); @@ -32,7 +33,7 @@ typedef void (CdoubleBinaryFunc)(cdouble *x, cdouble *y, cdouble *res); typedef void (CfloatBinaryFunc)(cfloat *x, cfloat *y, cfloat *res); typedef void (ClongdoubleBinaryFunc)(clongdouble *x, clongdouble *y, \ - clongdouble *res); + clongdouble *res); #define USE_USE_DEFAULTS 1 @@ -41,59 +42,59 @@ static void PyUFunc_ff_f_As_dd_d(char **args, intp *dimensions, intp *steps, void *func) { - register intp i, n=dimensions[0]; - register intp is1=steps[0],is2=steps[1],os=steps[2]; - char *ip1=args[0], *ip2=args[1], *op=args[2]; + register intp i, n=dimensions[0]; + register intp is1=steps[0],is2=steps[1],os=steps[2]; + char *ip1=args[0], *ip2=args[1], *op=args[2]; - for(i=0; inin, nout=data->nout; int ntot; @@ -416,9 +417,9 @@ ntot = nin+nout; for (j=0; j < ntot; j++) ptrs[j] = args[j]; - for(i=0; i> UFUNC_SHIFT_##NAME, \ - errobj, str, retstatus, first) < 0) \ - return -1; \ - }} + handle = errmask & UFUNC_MASK_##NAME;\ + if (handle && \ + _error_handler(handle >> UFUNC_SHIFT_##NAME, \ + errobj, str, retstatus, first) < 0) \ + return -1; \ + }} /*UFUNC_API*/ static int PyUFunc_handlefperr(int errmask, PyObject *errobj, int retstatus, int *first) { - int handle; - if (errmask && retstatus) { - HANDLEIT(DIVIDEBYZERO, "divide by zero"); - HANDLEIT(OVERFLOW, "overflow"); - HANDLEIT(UNDERFLOW, "underflow"); - HANDLEIT(INVALID, "invalid value"); - } - return 0; + int handle; + if (errmask && retstatus) { + HANDLEIT(DIVIDEBYZERO, "divide by zero"); + HANDLEIT(OVERFLOW, "overflow"); + HANDLEIT(UNDERFLOW, "underflow"); + HANDLEIT(INVALID, "invalid value"); + } + return 0; } #undef HANDLEIT @@ -583,11 +584,11 @@ static int PyUFunc_checkfperr(int errmask, PyObject *errobj, int *first) { - int retstatus; + int retstatus; - /* 1. check hardware flag --- this is platform dependent code */ - retstatus = PyUFunc_getfperr(); - return PyUFunc_handlefperr(errmask, errobj, retstatus, first); + /* 1. check hardware flag --- this is platform dependent code */ + retstatus = PyUFunc_getfperr(); + return PyUFunc_handlefperr(errmask, errobj, retstatus, first); } @@ -596,7 +597,7 @@ static void PyUFunc_clearfperr() { - PyUFunc_getfperr(); + PyUFunc_getfperr(); } @@ -614,26 +615,26 @@ _lowest_type(char intype) { switch(intype) { - /* case PyArray_BYTE */ - case PyArray_SHORT: + /* case PyArray_BYTE */ + case PyArray_SHORT: case PyArray_INT: case PyArray_LONG: - case PyArray_LONGLONG: - return PyArray_BYTE; - /* case PyArray_UBYTE */ + case PyArray_LONGLONG: + return PyArray_BYTE; + /* case PyArray_UBYTE */ case PyArray_USHORT: case PyArray_UINT: - case PyArray_ULONG: - case PyArray_ULONGLONG: - return PyArray_UBYTE; - /* case PyArray_FLOAT:*/ + case PyArray_ULONG: + case PyArray_ULONGLONG: + return PyArray_UBYTE; + /* case PyArray_FLOAT:*/ case PyArray_DOUBLE: - case PyArray_LONGDOUBLE: - return PyArray_FLOAT; - /* case PyArray_CFLOAT:*/ + case PyArray_LONGDOUBLE: + return PyArray_FLOAT; + /* case PyArray_CFLOAT:*/ case PyArray_CDOUBLE: - case PyArray_CLONGDOUBLE: - return PyArray_CFLOAT; + case PyArray_CLONGDOUBLE: + return PyArray_CFLOAT; default: return intype; } @@ -654,14 +655,15 @@ PyUFuncGenericFunction *function, void **data, int nargs, int nin) { + PyUFunc_Loop1d *funcdata; int i; funcdata = (PyUFunc_Loop1d *)PyCObject_AsVoidPtr(obj); while (funcdata != NULL) { for (i=0; iarg_types[i], - scalars[i])) + if (!PyArray_CanCoerceScalar(arg_types[i], + funcdata->arg_types[i], + scalars[i])) break; } if (i==nin) { /* match found */ @@ -776,19 +778,19 @@ } if (userdef > 0) { /* search in the user-defined functions */ - PyObject *key, *obj; + PyObject *key, *obj; PyUFunc_Loop1d *funcdata; - obj = NULL; - key = PyInt_FromLong((long) userdef); - if (key == NULL) goto fail; - obj = PyDict_GetItem(self->userloops, key); - Py_DECREF(key); - if (obj == NULL) { - PyErr_SetString(PyExc_TypeError, - "user-defined type used in ufunc" \ - " with no registered loops"); + obj = NULL; + key = PyInt_FromLong((long) userdef); + if (key == NULL) goto fail; + obj = PyDict_GetItem(self->userloops, key); + Py_DECREF(key); + if (obj == NULL) { + PyErr_SetString(PyExc_TypeError, + "user-defined type used in ufunc" \ + " with no registered loops"); goto fail; - } + } /* extract the correct function data and argtypes */ @@ -803,7 +805,7 @@ else if (rtypenums[0] == funcdata->arg_types[self->nin]) { i = nargs; } - else i = -1; + else i = -1; if (i == nargs) { *function = funcdata->func; *data = funcdata->data; @@ -831,7 +833,7 @@ else if (rtypenums[0] == self->types[j*nargs+self->nin]) { i = nargs; } - else i = -1; + else i = -1; if (i == nargs) { *function = self->functions[j]; *data = self->data[j]; @@ -862,40 +864,40 @@ static int select_types(PyUFuncObject *self, int *arg_types, PyUFuncGenericFunction *function, void **data, - PyArray_SCALARKIND *scalars, + PyArray_SCALARKIND *scalars, PyObject *typetup) { - int i, j; - char start_type; - int userdef=-1; + int i, j; + char start_type; + int userdef=-1; - if (self->userloops) { - for (i=0; inin; i++) { - if (PyTypeNum_ISUSERDEF(arg_types[i])) { - userdef = arg_types[i]; - break; - } - } - } + if (self->userloops) { + for (i=0; inin; i++) { + if (PyTypeNum_ISUSERDEF(arg_types[i])) { + userdef = arg_types[i]; + break; + } + } + } if (typetup != NULL) return extract_specified_loop(self, arg_types, function, data, typetup, userdef); - if (userdef > 0) { - PyObject *key, *obj; + if (userdef > 0) { + PyObject *key, *obj; int ret; - obj = NULL; - key = PyInt_FromLong((long) userdef); - if (key == NULL) return -1; - obj = PyDict_GetItem(self->userloops, key); - Py_DECREF(key); - if (obj == NULL) { - PyErr_SetString(PyExc_TypeError, - "user-defined type used in ufunc" \ - " with no registered loops"); - return -1; - } + obj = NULL; + key = PyInt_FromLong((long) userdef); + if (key == NULL) return -1; + obj = PyDict_GetItem(self->userloops, key); + Py_DECREF(key); + if (obj == NULL) { + PyErr_SetString(PyExc_TypeError, + "user-defined type used in ufunc" \ + " with no registered loops"); + return -1; + } /* extract the correct function data and argtypes */ @@ -904,43 +906,43 @@ self->nin); Py_DECREF(obj); return ret; - } + } - start_type = arg_types[0]; - /* If the first argument is a scalar we need to place - the start type as the lowest type in the class - */ - if (scalars[0] != PyArray_NOSCALAR) { - start_type = _lowest_type(start_type); - } + start_type = arg_types[0]; + /* If the first argument is a scalar we need to place + the start type as the lowest type in the class + */ + if (scalars[0] != PyArray_NOSCALAR) { + start_type = _lowest_type(start_type); + } - i = 0; - while (intypes && start_type > self->types[i*self->nargs]) - i++; + i = 0; + while (intypes && start_type > self->types[i*self->nargs]) + i++; - for(;intypes; i++) { - for(j=0; jnin; j++) { - if (!PyArray_CanCoerceScalar(arg_types[j], - self->types[i*self->nargs+j], - scalars[j])) - break; - } - if (j == self->nin) break; - } - if(i>=self->ntypes) { - PyErr_SetString(PyExc_TypeError, _types_msg); - return -1; - } - for(j=0; jnargs; j++) - arg_types[j] = self->types[i*self->nargs+j]; + for(;intypes; i++) { + for(j=0; jnin; j++) { + if (!PyArray_CanCoerceScalar(arg_types[j], + self->types[i*self->nargs+j], + scalars[j])) + break; + } + if (j == self->nin) break; + } + if(i>=self->ntypes) { + PyErr_SetString(PyExc_TypeError, _types_msg); + return -1; + } + for(j=0; jnargs; j++) + arg_types[j] = self->types[i*self->nargs+j]; if (self->data) *data = self->data[i]; else *data = NULL; - *function = self->functions[i]; + *function = self->functions[i]; - return 0; + return 0; } #if USE_USE_DEFAULTS==1 @@ -955,37 +957,37 @@ { PyObject *retval; - *errobj = NULL; - if (!PyList_Check(ref) || (PyList_GET_SIZE(ref)!=3)) { - PyErr_Format(PyExc_TypeError, "%s must be a length 3 list.", - UFUNC_PYVALS_NAME); - return -1; - } + *errobj = NULL; + if (!PyList_Check(ref) || (PyList_GET_SIZE(ref)!=3)) { + PyErr_Format(PyExc_TypeError, "%s must be a length 3 list.", + UFUNC_PYVALS_NAME); + return -1; + } - *bufsize = PyInt_AsLong(PyList_GET_ITEM(ref, 0)); - if ((*bufsize == -1) && PyErr_Occurred()) return -1; - if ((*bufsize < PyArray_MIN_BUFSIZE) || \ - (*bufsize > PyArray_MAX_BUFSIZE) || \ - (*bufsize % 16 != 0)) { - PyErr_Format(PyExc_ValueError, - "buffer size (%d) is not in range " + *bufsize = PyInt_AsLong(PyList_GET_ITEM(ref, 0)); + if ((*bufsize == -1) && PyErr_Occurred()) return -1; + if ((*bufsize < PyArray_MIN_BUFSIZE) || \ + (*bufsize > PyArray_MAX_BUFSIZE) || \ + (*bufsize % 16 != 0)) { + PyErr_Format(PyExc_ValueError, + "buffer size (%d) is not in range " "(%"INTP_FMT" - %"INTP_FMT") or not a multiple of 16", - *bufsize, (intp) PyArray_MIN_BUFSIZE, - (intp) PyArray_MAX_BUFSIZE); - return -1; - } + *bufsize, (intp) PyArray_MIN_BUFSIZE, + (intp) PyArray_MAX_BUFSIZE); + return -1; + } - *errmask = PyInt_AsLong(PyList_GET_ITEM(ref, 1)); - if (*errmask < 0) { - if (PyErr_Occurred()) return -1; - PyErr_Format(PyExc_ValueError, \ - "invalid error mask (%d)", - *errmask); - return -1; - } + *errmask = PyInt_AsLong(PyList_GET_ITEM(ref, 1)); + if (*errmask < 0) { + if (PyErr_Occurred()) return -1; + PyErr_Format(PyExc_ValueError, \ + "invalid error mask (%d)", + *errmask); + return -1; + } - retval = PyList_GET_ITEM(ref, 2); - if (retval != Py_None && !PyCallable_Check(retval)) { + retval = PyList_GET_ITEM(ref, 2); + if (retval != Py_None && !PyCallable_Check(retval)) { PyObject *temp; temp = PyObject_GetAttrString(retval, "write"); if (temp == NULL || !PyCallable_Check(temp)) { @@ -996,14 +998,14 @@ return -1; } Py_DECREF(temp); - } + } - *errobj = Py_BuildValue("NO", - PyString_FromString(name), - retval); - if (*errobj == NULL) return -1; + *errobj = Py_BuildValue("NO", + PyString_FromString(name), + retval); + if (*errobj == NULL) return -1; - return 0; + return 0; } @@ -1016,28 +1018,28 @@ PyObject *ref=NULL; #if USE_USE_DEFAULTS==1 - if (PyUFunc_NUM_NODEFAULTS != 0) { + if (PyUFunc_NUM_NODEFAULTS != 0) { #endif - if (PyUFunc_PYVALS_NAME == NULL) { - PyUFunc_PYVALS_NAME = \ - PyString_InternFromString(UFUNC_PYVALS_NAME); - } - thedict = PyThreadState_GetDict(); - if (thedict == NULL) { - thedict = PyEval_GetBuiltins(); - } - ref = PyDict_GetItem(thedict, PyUFunc_PYVALS_NAME); + if (PyUFunc_PYVALS_NAME == NULL) { + PyUFunc_PYVALS_NAME = \ + PyString_InternFromString(UFUNC_PYVALS_NAME); + } + thedict = PyThreadState_GetDict(); + if (thedict == NULL) { + thedict = PyEval_GetBuiltins(); + } + ref = PyDict_GetItem(thedict, PyUFunc_PYVALS_NAME); #if USE_USE_DEFAULTS==1 - } + } #endif - if (ref == NULL) { - *errmask = UFUNC_ERR_DEFAULT; - *errobj = Py_BuildValue("NO", - PyString_FromString(name), - Py_None); - *bufsize = PyArray_BUFSIZE; - return 0; - } + if (ref == NULL) { + *errmask = UFUNC_ERR_DEFAULT; + *errobj = Py_BuildValue("NO", + PyString_FromString(name), + Py_None); + *bufsize = PyArray_BUFSIZE; + return 0; + } return _extract_pyvals(ref, name, bufsize, errmask, errobj); } @@ -1049,42 +1051,42 @@ static int _create_copies(PyUFuncLoopObject *loop, int *arg_types, PyArrayObject **mps) { - int nin = loop->ufunc->nin; - int i; - intp size; - PyObject *new; - PyArray_Descr *ntype; - PyArray_Descr *atype; + int nin = loop->ufunc->nin; + int i; + intp size; + PyObject *new; + PyArray_Descr *ntype; + PyArray_Descr *atype; - for (i=0; idescr; - atype = PyArray_DescrFromType(arg_types[i]); - if (PyArray_EquivTypes(atype, ntype)) { - arg_types[i] = ntype->type_num; - } - Py_DECREF(atype); - } - if (size < loop->bufsize) { - if (!(PyArray_ISBEHAVED_RO(mps[i])) || \ - PyArray_TYPE(mps[i]) != arg_types[i]) { - ntype = PyArray_DescrFromType(arg_types[i]); - new = PyArray_FromAny((PyObject *)mps[i], - ntype, 0, 0, - FORCECAST | ALIGNED, NULL); - if (new == NULL) return -1; - Py_DECREF(mps[i]); - mps[i] = (PyArrayObject *)new; - } - } - } + for (i=0; idescr; + atype = PyArray_DescrFromType(arg_types[i]); + if (PyArray_EquivTypes(atype, ntype)) { + arg_types[i] = ntype->type_num; + } + Py_DECREF(atype); + } + if (size < loop->bufsize) { + if (!(PyArray_ISBEHAVED_RO(mps[i])) || \ + PyArray_TYPE(mps[i]) != arg_types[i]) { + ntype = PyArray_DescrFromType(arg_types[i]); + new = PyArray_FromAny((PyObject *)mps[i], + ntype, 0, 0, + FORCECAST | ALIGNED, NULL); + if (new == NULL) return -1; + Py_DECREF(mps[i]); + mps[i] = (PyArrayObject *)new; + } + } + } - return 0; + return 0; } #define _GETATTR_(str, rstr) if (strcmp(name, #str) == 0) { \ @@ -1117,11 +1119,11 @@ { int nargs, i; int arg_types[NPY_MAXARGS]; - PyArray_SCALARKIND scalars[NPY_MAXARGS]; + PyArray_SCALARKIND scalars[NPY_MAXARGS]; PyArray_SCALARKIND maxarrkind, maxsckind, new; - PyUFuncObject *self=loop->ufunc; - Bool allscalars=TRUE; - PyTypeObject *subtype=&PyArray_Type; + PyUFuncObject *self=loop->ufunc; + Bool allscalars=TRUE; + PyTypeObject *subtype=&PyArray_Type; PyObject *context=NULL; PyObject *obj; int flexible=0; @@ -1131,7 +1133,7 @@ nargs = PyTuple_Size(args); if ((nargs < self->nin) || (nargs > self->nargs)) { PyErr_SetString(PyExc_ValueError, - "invalid number of arguments"); + "invalid number of arguments"); return -1; } @@ -1154,26 +1156,26 @@ if (!object && PyTypeNum_ISOBJECT(arg_types[i])) { object = 1; } - /* - fprintf(stderr, "array %d has reference %d\n", i, - (mps[i])->ob_refcnt); - */ + /* + fprintf(stderr, "array %d has reference %d\n", i, + (mps[i])->ob_refcnt); + */ - /* Scalars are 0-dimensional arrays - at this point - */ + /* Scalars are 0-dimensional arrays + at this point + */ /* We need to keep track of whether or not scalars are mixed with arrays of different kinds. */ - if (mps[i]->nd > 0) { + if (mps[i]->nd > 0) { scalars[i] = PyArray_NOSCALAR; - allscalars=FALSE; + allscalars=FALSE; new = PyArray_ScalarKind(arg_types[i], NULL); maxarrkind = NPY_MAX(new, maxarrkind); - } - else { + } + else { scalars[i] = PyArray_ScalarKind(arg_types[i], &(mps[i])); maxsckind = NPY_MAX(scalars[i], maxsckind); } @@ -1184,50 +1186,50 @@ return nargs; } - /* If everything is a scalar, or scalars mixed with arrays of + /* If everything is a scalar, or scalars mixed with arrays of different kinds of lesser types then use normal coercion rules */ - if (allscalars || (maxsckind > maxarrkind)) { - for (i=0; inin; i++) { - scalars[i] = PyArray_NOSCALAR; - } - } + if (allscalars || (maxsckind > maxarrkind)) { + for (i=0; inin; i++) { + scalars[i] = PyArray_NOSCALAR; + } + } /* Select an appropriate function for these argument types. */ if (select_types(loop->ufunc, arg_types, &(loop->function), &(loop->funcdata), scalars, typetup) == -1) - return -1; + return -1; /* FAIL with NotImplemented if the other object has - the __r__ method and has __array_priority__ as - an attribute (signalling it can handle ndarray's) - and is not already an ndarray - */ - if ((arg_types[1] == PyArray_OBJECT) && \ + the __r__ method and has __array_priority__ as + an attribute (signalling it can handle ndarray's) + and is not already an ndarray + */ + if ((arg_types[1] == PyArray_OBJECT) && \ (loop->ufunc->nin==2) && (loop->ufunc->nout == 1)) { - PyObject *_obj = PyTuple_GET_ITEM(args, 1); - if (!PyArray_CheckExact(_obj) && \ - PyObject_HasAttrString(_obj, "__array_priority__") && \ - _has_reflected_op(_obj, loop->ufunc->name)) { + PyObject *_obj = PyTuple_GET_ITEM(args, 1); + if (!PyArray_CheckExact(_obj) && \ + PyObject_HasAttrString(_obj, "__array_priority__") && \ + _has_reflected_op(_obj, loop->ufunc->name)) { loop->notimplemented = 1; return nargs; } } - /* Create copies for some of the arrays if they are small + /* Create copies for some of the arrays if they are small enough and not already contiguous */ - if (_create_copies(loop, arg_types, mps) < 0) return -1; + if (_create_copies(loop, arg_types, mps) < 0) return -1; - /* Create Iterators for the Inputs */ - for (i=0; inin; i++) { - loop->iters[i] = (PyArrayIterObject *) \ - PyArray_IterNew((PyObject *)mps[i]); + /* Create Iterators for the Inputs */ + for (i=0; inin; i++) { + loop->iters[i] = (PyArrayIterObject *) \ + PyArray_IterNew((PyObject *)mps[i]); if (loop->iters[i] == NULL) return -1; - } + } /* Broadcast the result */ loop->numiter = self->nin; if (PyArray_Broadcast((PyArrayMultiIterObject *)loop) < 0) - return -1; + return -1; /* Get any return arguments */ for (i=self->nin; ind != loop->nd || - !PyArray_CompareLists(mps[i]->dimensions, - loop->dimensions, loop->nd)) { + !PyArray_CompareLists(mps[i]->dimensions, + loop->dimensions, loop->nd)) { PyErr_SetString(PyExc_ValueError, "invalid return array shape"); - Py_DECREF(mps[i]); + Py_DECREF(mps[i]); mps[i] = NULL; return -1; } if (!PyArray_ISWRITEABLE(mps[i])) { PyErr_SetString(PyExc_ValueError, "return array is not writeable"); - Py_DECREF(mps[i]); + Py_DECREF(mps[i]); mps[i] = NULL; return -1; } @@ -1275,7 +1277,7 @@ /* construct any missing return arrays and make output iterators */ for (i=self->nin; inargs; i++) { - PyArray_Descr *ntype; + PyArray_Descr *ntype; if (mps[i] == NULL) { mps[i] = (PyArrayObject *)PyArray_New(subtype, @@ -1287,42 +1289,42 @@ if (mps[i] == NULL) return -1; } - /* reset types for outputs that are equivalent - -- no sense casting uselessly - */ - else { - if (mps[i]->descr->type_num != arg_types[i]) { - PyArray_Descr *atype; - ntype = mps[i]->descr; - atype = PyArray_DescrFromType(arg_types[i]); - if (PyArray_EquivTypes(atype, ntype)) { - arg_types[i] = ntype->type_num; - } - Py_DECREF(atype); - } + /* reset types for outputs that are equivalent + -- no sense casting uselessly + */ + else { + if (mps[i]->descr->type_num != arg_types[i]) { + PyArray_Descr *atype; + ntype = mps[i]->descr; + atype = PyArray_DescrFromType(arg_types[i]); + if (PyArray_EquivTypes(atype, ntype)) { + arg_types[i] = ntype->type_num; + } + Py_DECREF(atype); + } - /* still not the same -- or will we have to use buffers?*/ - if (mps[i]->descr->type_num != arg_types[i] || - !PyArray_ISBEHAVED_RO(mps[i])) { - if (loop->size < loop->bufsize) { - PyObject *new; - /* Copy the array to a temporary copy - and set the UPDATEIFCOPY flag - */ - ntype = PyArray_DescrFromType(arg_types[i]); - new = PyArray_FromAny((PyObject *)mps[i], - ntype, 0, 0, - FORCECAST | ALIGNED | - UPDATEIFCOPY, NULL); - if (new == NULL) return -1; - Py_DECREF(mps[i]); - mps[i] = (PyArrayObject *)new; - } - } - } + /* still not the same -- or will we have to use buffers?*/ + if (mps[i]->descr->type_num != arg_types[i] || + !PyArray_ISBEHAVED_RO(mps[i])) { + if (loop->size < loop->bufsize) { + PyObject *new; + /* Copy the array to a temporary copy + and set the UPDATEIFCOPY flag + */ + ntype = PyArray_DescrFromType(arg_types[i]); + new = PyArray_FromAny((PyObject *)mps[i], + ntype, 0, 0, + FORCECAST | ALIGNED | + UPDATEIFCOPY, NULL); + if (new == NULL) return -1; + Py_DECREF(mps[i]); + mps[i] = (PyArrayObject *)new; + } + } + } - loop->iters[i] = (PyArrayIterObject *) \ - PyArray_IterNew((PyObject *)mps[i]); + loop->iters[i] = (PyArrayIterObject *) \ + PyArray_IterNew((PyObject *)mps[i]); if (loop->iters[i] == NULL) return -1; } @@ -1336,20 +1338,20 @@ /* Determine looping method needed */ loop->meth = NO_UFUNCLOOP; - if (loop->size == 0) return nargs; + if (loop->size == 0) return nargs; for (i=0; inargs; i++) { - loop->needbuffer[i] = 0; + loop->needbuffer[i] = 0; if (arg_types[i] != mps[i]->descr->type_num || - !PyArray_ISBEHAVED_RO(mps[i])) { + !PyArray_ISBEHAVED_RO(mps[i])) { loop->meth = BUFFER_UFUNCLOOP; - loop->needbuffer[i] = 1; + loop->needbuffer[i] = 1; } if (!loop->obj && mps[i]->descr->type_num == PyArray_OBJECT) { - loop->obj = 1; - } + loop->obj = 1; } + } if (loop->meth == NO_UFUNCLOOP) { @@ -1360,201 +1362,201 @@ for (i=0; inargs; i++) { if (!(loop->iters[i]->contiguous)) { - /* may still have uniform stride - if (broadcated result) <= 1-d */ - if (mps[i]->nd != 0 && \ - (loop->iters[i]->nd_m1 > 0)) { - loop->meth = NOBUFFER_UFUNCLOOP; - break; - } - } + /* may still have uniform stride + if (broadcated result) <= 1-d */ + if (mps[i]->nd != 0 && \ + (loop->iters[i]->nd_m1 > 0)) { + loop->meth = NOBUFFER_UFUNCLOOP; + break; } - if (loop->meth == ONE_UFUNCLOOP) { - for (i=0; inargs; i++) { - loop->bufptr[i] = mps[i]->data; - } - } + } + } + if (loop->meth == ONE_UFUNCLOOP) { + for (i=0; inargs; i++) { + loop->bufptr[i] = mps[i]->data; + } } + } loop->numiter = self->nargs; - /* Fill in steps */ - if (loop->meth != ONE_UFUNCLOOP) { - int ldim; - intp minsum; - intp maxdim; - PyArrayIterObject *it; - intp stride_sum[NPY_MAXDIMS]; - int j; + /* Fill in steps */ + if (loop->meth != ONE_UFUNCLOOP) { + int ldim; + intp minsum; + intp maxdim; + PyArrayIterObject *it; + intp stride_sum[NPY_MAXDIMS]; + int j; - /* Fix iterators */ + /* Fix iterators */ - /* Optimize axis the iteration takes place over + /* Optimize axis the iteration takes place over - The first thought was to have the loop go - over the largest dimension to minimize the number of loops - - However, on processors with slow memory bus and cache, - the slowest loops occur when the memory access occurs for - large strides. - - Thus, choose the axis for which strides of the last iterator is - smallest but non-zero. - */ + The first thought was to have the loop go + over the largest dimension to minimize the number of loops + + However, on processors with slow memory bus and cache, + the slowest loops occur when the memory access occurs for + large strides. + + Thus, choose the axis for which strides of the last iterator is + smallest but non-zero. + */ - for (i=0; ind; i++) { - stride_sum[i] = 0; - for (j=0; jnumiter; j++) { - stride_sum[i] += loop->iters[j]->strides[i]; - } - } + for (i=0; ind; i++) { + stride_sum[i] = 0; + for (j=0; jnumiter; j++) { + stride_sum[i] += loop->iters[j]->strides[i]; + } + } - ldim = loop->nd - 1; - minsum = stride_sum[loop->nd-1]; - for (i=loop->nd - 2; i>=0; i--) { - if (stride_sum[i] < minsum ) { - ldim = i; - minsum = stride_sum[i]; - } - } + ldim = loop->nd - 1; + minsum = stride_sum[loop->nd-1]; + for (i=loop->nd - 2; i>=0; i--) { + if (stride_sum[i] < minsum ) { + ldim = i; + minsum = stride_sum[i]; + } + } - maxdim = loop->dimensions[ldim]; - loop->size /= maxdim; - loop->bufcnt = maxdim; - loop->lastdim = ldim; + maxdim = loop->dimensions[ldim]; + loop->size /= maxdim; + loop->bufcnt = maxdim; + loop->lastdim = ldim; - /* Fix the iterators so the inner loop occurs over the - largest dimensions -- This can be done by - setting the size to 1 in that dimension - (just in the iterators) - */ + /* Fix the iterators so the inner loop occurs over the + largest dimensions -- This can be done by + setting the size to 1 in that dimension + (just in the iterators) + */ - for (i=0; inumiter; i++) { - it = loop->iters[i]; - it->contiguous = 0; - it->size /= (it->dims_m1[ldim]+1); - it->dims_m1[ldim] = 0; - it->backstrides[ldim] = 0; + for (i=0; inumiter; i++) { + it = loop->iters[i]; + it->contiguous = 0; + it->size /= (it->dims_m1[ldim]+1); + it->dims_m1[ldim] = 0; + it->backstrides[ldim] = 0; - /* (won't fix factors because we - don't use PyArray_ITER_GOTO1D - so don't change them) */ + /* (won't fix factors because we + don't use PyArray_ITER_GOTO1D + so don't change them) */ - /* Set the steps to the strides in that dimension */ - loop->steps[i] = it->strides[ldim]; - } + /* Set the steps to the strides in that dimension */ + loop->steps[i] = it->strides[ldim]; + } - /* fix up steps where we will be copying data to - buffers and calculate the ninnerloops and leftover - values -- if step size is already zero that is not changed... - */ - if (loop->meth == BUFFER_UFUNCLOOP) { - loop->leftover = maxdim % loop->bufsize; - loop->ninnerloops = (maxdim / loop->bufsize) + 1; - for (i=0; inargs; i++) { - if (loop->needbuffer[i] && loop->steps[i]) { - loop->steps[i] = mps[i]->descr->elsize; - } - /* These are changed later if casting is needed */ - } - } - } - else { /* uniformly-strided case ONE_UFUNCLOOP */ - for (i=0; inargs; i++) { - if (PyArray_SIZE(mps[i]) == 1) - loop->steps[i] = 0; - else - loop->steps[i] = mps[i]->strides[mps[i]->nd-1]; - } - } + /* fix up steps where we will be copying data to + buffers and calculate the ninnerloops and leftover + values -- if step size is already zero that is not changed... + */ + if (loop->meth == BUFFER_UFUNCLOOP) { + loop->leftover = maxdim % loop->bufsize; + loop->ninnerloops = (maxdim / loop->bufsize) + 1; + for (i=0; inargs; i++) { + if (loop->needbuffer[i] && loop->steps[i]) { + loop->steps[i] = mps[i]->descr->elsize; + } + /* These are changed later if casting is needed */ + } + } + } + else { /* uniformly-strided case ONE_UFUNCLOOP */ + for (i=0; inargs; i++) { + if (PyArray_SIZE(mps[i]) == 1) + loop->steps[i] = 0; + else + loop->steps[i] = mps[i]->strides[mps[i]->nd-1]; + } + } - /* Finally, create memory for buffers if we need them */ + /* Finally, create memory for buffers if we need them */ - /* buffers for scalars are specially made small -- scalars are - not copied multiple times */ - if (loop->meth == BUFFER_UFUNCLOOP) { - int cnt = 0, cntcast = 0; /* keeps track of bytes to allocate */ - int scnt = 0, scntcast = 0; - char *castptr; - char *bufptr; - int last_was_scalar=0; - int last_cast_was_scalar=0; - int oldbufsize=0; - int oldsize=0; - int scbufsize = 4*sizeof(double); - int memsize; + /* buffers for scalars are specially made small -- scalars are + not copied multiple times */ + if (loop->meth == BUFFER_UFUNCLOOP) { + int cnt = 0, cntcast = 0; /* keeps track of bytes to allocate */ + int scnt = 0, scntcast = 0; + char *castptr; + char *bufptr; + int last_was_scalar=0; + int last_cast_was_scalar=0; + int oldbufsize=0; + int oldsize=0; + int scbufsize = 4*sizeof(double); + int memsize; PyArray_Descr *descr; - /* compute the element size */ - for (i=0; inargs;i++) { - if (!loop->needbuffer) continue; - if (arg_types[i] != mps[i]->descr->type_num) { - descr = PyArray_DescrFromType(arg_types[i]); - if (loop->steps[i]) - cntcast += descr->elsize; - else - scntcast += descr->elsize; - if (i < self->nin) { - loop->cast[i] = \ - PyArray_GetCastFunc(mps[i]->descr, - arg_types[i]); - } - else { - loop->cast[i] = PyArray_GetCastFunc \ - (descr, mps[i]->descr->type_num); - } - Py_DECREF(descr); - if (!loop->cast[i]) return -1; - } - loop->swap[i] = !(PyArray_ISNOTSWAPPED(mps[i])); - if (loop->steps[i]) - cnt += mps[i]->descr->elsize; - else - scnt += mps[i]->descr->elsize; - } - memsize = loop->bufsize*(cnt+cntcast) + scbufsize*(scnt+scntcast); - loop->buffer[0] = PyDataMem_NEW(memsize); + /* compute the element size */ + for (i=0; inargs;i++) { + if (!loop->needbuffer) continue; + if (arg_types[i] != mps[i]->descr->type_num) { + descr = PyArray_DescrFromType(arg_types[i]); + if (loop->steps[i]) + cntcast += descr->elsize; + else + scntcast += descr->elsize; + if (i < self->nin) { + loop->cast[i] = \ + PyArray_GetCastFunc(mps[i]->descr, + arg_types[i]); + } + else { + loop->cast[i] = PyArray_GetCastFunc \ + (descr, mps[i]->descr->type_num); + } + Py_DECREF(descr); + if (!loop->cast[i]) return -1; + } + loop->swap[i] = !(PyArray_ISNOTSWAPPED(mps[i])); + if (loop->steps[i]) + cnt += mps[i]->descr->elsize; + else + scnt += mps[i]->descr->elsize; + } + memsize = loop->bufsize*(cnt+cntcast) + scbufsize*(scnt+scntcast); + loop->buffer[0] = PyDataMem_NEW(memsize); - /* fprintf(stderr, "Allocated buffer at %p of size %d, cnt=%d, cntcast=%d\n", loop->buffer[0], loop->bufsize * (cnt + cntcast), cnt, cntcast); */ + /* fprintf(stderr, "Allocated buffer at %p of size %d, cnt=%d, cntcast=%d\n", loop->buffer[0], loop->bufsize * (cnt + cntcast), cnt, cntcast); */ - if (loop->buffer[0] == NULL) {PyErr_NoMemory(); return -1;} - if (loop->obj) memset(loop->buffer[0], 0, memsize); - castptr = loop->buffer[0] + loop->bufsize*cnt + scbufsize*scnt; - bufptr = loop->buffer[0]; + if (loop->buffer[0] == NULL) {PyErr_NoMemory(); return -1;} + if (loop->obj) memset(loop->buffer[0], 0, memsize); + castptr = loop->buffer[0] + loop->bufsize*cnt + scbufsize*scnt; + bufptr = loop->buffer[0]; loop->objfunc = 0; - for (i=0; inargs; i++) { - if (!loop->needbuffer[i]) continue; - loop->buffer[i] = bufptr + (last_was_scalar ? scbufsize : \ - loop->bufsize)*oldbufsize; - last_was_scalar = (loop->steps[i] == 0); - bufptr = loop->buffer[i]; - oldbufsize = mps[i]->descr->elsize; - /* fprintf(stderr, "buffer[%d] = %p\n", i, loop->buffer[i]); */ - if (loop->cast[i]) { - PyArray_Descr *descr; - loop->castbuf[i] = castptr + (last_cast_was_scalar ? scbufsize : \ - loop->bufsize)*oldsize; - last_cast_was_scalar = last_was_scalar; - /* fprintf(stderr, "castbuf[%d] = %p\n", i, loop->castbuf[i]); */ - descr = PyArray_DescrFromType(arg_types[i]); - oldsize = descr->elsize; - Py_DECREF(descr); - loop->bufptr[i] = loop->castbuf[i]; - castptr = loop->castbuf[i]; - if (loop->steps[i]) - loop->steps[i] = oldsize; - } - else { - loop->bufptr[i] = loop->buffer[i]; - } + for (i=0; inargs; i++) { + if (!loop->needbuffer[i]) continue; + loop->buffer[i] = bufptr + (last_was_scalar ? scbufsize : \ + loop->bufsize)*oldbufsize; + last_was_scalar = (loop->steps[i] == 0); + bufptr = loop->buffer[i]; + oldbufsize = mps[i]->descr->elsize; + /* fprintf(stderr, "buffer[%d] = %p\n", i, loop->buffer[i]); */ + if (loop->cast[i]) { + PyArray_Descr *descr; + loop->castbuf[i] = castptr + (last_cast_was_scalar ? scbufsize : \ + loop->bufsize)*oldsize; + last_cast_was_scalar = last_was_scalar; + /* fprintf(stderr, "castbuf[%d] = %p\n", i, loop->castbuf[i]); */ + descr = PyArray_DescrFromType(arg_types[i]); + oldsize = descr->elsize; + Py_DECREF(descr); + loop->bufptr[i] = loop->castbuf[i]; + castptr = loop->castbuf[i]; + if (loop->steps[i]) + loop->steps[i] = oldsize; + } + else { + loop->bufptr[i] = loop->buffer[i]; + } if (!loop->objfunc && loop->obj) { if (arg_types[i] == PyArray_OBJECT) { loop->objfunc = 1; } } - } - } + } + } return nargs; } @@ -1563,10 +1565,10 @@ { if (self->ufunc) { Py_XDECREF(self->it); - Py_XDECREF(self->rit); + Py_XDECREF(self->rit); Py_XDECREF(self->ret); - Py_XDECREF(self->errobj); - Py_XDECREF(self->decref); + Py_XDECREF(self->errobj); + Py_XDECREF(self->decref); if (self->buffer) PyDataMem_FREE(self->buffer); Py_DECREF(self->ufunc); } @@ -1576,44 +1578,44 @@ static void ufuncloop_dealloc(PyUFuncLoopObject *self) { - int i; + int i; - if (self->ufunc != NULL) { - for (i=0; iufunc->nargs; i++) - Py_XDECREF(self->iters[i]); - if (self->buffer[0]) PyDataMem_FREE(self->buffer[0]); - Py_XDECREF(self->errobj); - Py_DECREF(self->ufunc); - } + if (self->ufunc != NULL) { + for (i=0; iufunc->nargs; i++) + Py_XDECREF(self->iters[i]); + if (self->buffer[0]) PyDataMem_FREE(self->buffer[0]); + Py_XDECREF(self->errobj); + Py_DECREF(self->ufunc); + } _pya_free(self); } static PyUFuncLoopObject * construct_loop(PyUFuncObject *self, PyObject *args, PyObject *kwds, PyArrayObject **mps) { - PyUFuncLoopObject *loop; - int i; + PyUFuncLoopObject *loop; + int i; PyObject *typetup=NULL; PyObject *extobj=NULL; char *name; - if (self == NULL) { - PyErr_SetString(PyExc_ValueError, "function not supported"); - return NULL; - } + if (self == NULL) { + PyErr_SetString(PyExc_ValueError, "function not supported"); + return NULL; + } if ((loop = _pya_malloc(sizeof(PyUFuncLoopObject)))==NULL) { PyErr_NoMemory(); return loop; } - loop->index = 0; - loop->ufunc = self; + loop->index = 0; + loop->ufunc = self; Py_INCREF(self); - loop->buffer[0] = NULL; + loop->buffer[0] = NULL; for (i=0; inargs; i++) { loop->iters[i] = NULL; loop->cast[i] = NULL; } - loop->errobj = NULL; + loop->errobj = NULL; loop->notimplemented = 0; loop->first = 1; @@ -1659,16 +1661,16 @@ &(loop->errobj)) < 0) goto fail; } - /* Setup the arrays */ - if (construct_arrays(loop, args, mps, typetup) < 0) goto fail; + /* Setup the arrays */ + if (construct_arrays(loop, args, mps, typetup) < 0) goto fail; - PyUFunc_clearfperr(); + PyUFunc_clearfperr(); - return loop; + return loop; fail: ufuncloop_dealloc(loop); - return NULL; + return NULL; } @@ -1676,34 +1678,34 @@ static void _printbytebuf(PyUFuncLoopObject *loop, int bufnum) { - int i; + int i; - fprintf(stderr, "Printing byte buffer %d\n", bufnum); + fprintf(stderr, "Printing byte buffer %d\n", bufnum); for (i=0; ibufcnt; i++) { - fprintf(stderr, " %d\n", *(((byte *)(loop->buffer[bufnum]))+i)); - } + fprintf(stderr, " %d\n", *(((byte *)(loop->buffer[bufnum]))+i)); + } } static void _printlongbuf(PyUFuncLoopObject *loop, int bufnum) { - int i; + int i; - fprintf(stderr, "Printing long buffer %d\n", bufnum); + fprintf(stderr, "Printing long buffer %d\n", bufnum); for (i=0; ibufcnt; i++) { - fprintf(stderr, " %ld\n", *(((long *)(loop->buffer[bufnum]))+i)); - } + fprintf(stderr, " %ld\n", *(((long *)(loop->buffer[bufnum]))+i)); + } } static void _printlongbufptr(PyUFuncLoopObject *loop, int bufnum) { - int i; + int i; - fprintf(stderr, "Printing long buffer %d\n", bufnum); + fprintf(stderr, "Printing long buffer %d\n", bufnum); for (i=0; ibufcnt; i++) { - fprintf(stderr, " %ld\n", *(((long *)(loop->bufptr[bufnum]))+i)); - } + fprintf(stderr, " %ld\n", *(((long *)(loop->bufptr[bufnum]))+i)); + } } @@ -1711,12 +1713,12 @@ static void _printcastbuf(PyUFuncLoopObject *loop, int bufnum) { - int i; + int i; - fprintf(stderr, "Printing long buffer %d\n", bufnum); + fprintf(stderr, "Printing long buffer %d\n", bufnum); for (i=0; ibufcnt; i++) { - fprintf(stderr, " %ld\n", *(((long *)(loop->castbuf[bufnum]))+i)); - } + fprintf(stderr, " %ld\n", *(((long *)(loop->castbuf[bufnum]))+i)); + } } */ @@ -1739,267 +1741,386 @@ arguments are parsed and placed in mps in construct_loop (construct_arrays) */ +typedef struct +{ + PyUFuncLoopObject* loop; + int total_threads; + int id; +} thread_parm; + +void *ufunc_thread(void *arg) +{ + int i; + thread_parm *p = (thread_parm*) arg; + PyUFuncLoopObject *loop = p->loop; + char *args[3]; + + /* Calculate the number of elements each thread should do */ + intp size = loop->size/p->total_threads; + + /* offset the starting point of this computation loop in each + of the arrays involved in the operation. + */ + for (i=0; i<3;i++) + { + args[i] = (char**) (loop->bufptr[i] + + p->id * size * loop->steps[i]); + /*printf("%u, %u\n", loop->bufptr[i], args[i]);*/ + } + + /* If this is the last computational thread, it may have a + few extra elements at the end of the array to clean up. + Set the size to take care of these last elements. + */ + if (p->id+1 == p->total_threads) + { + size = (loop->size - p->id*size) ; + } + /* + printf("thread,size,step: %d %d\n", p->id, size); + printf("thread,size,step: %d %d %d\n", loop->steps[0], loop->steps[1], loop->steps[2]); + */ + loop->function(args, &size, loop->steps, loop->funcdata); + return (NULL); +} + /*UFUNC_API*/ static int PyUFunc_GenericFunction(PyUFuncObject *self, PyObject *args, PyObject *kwds, - PyArrayObject **mps) + PyArrayObject **mps) { - PyUFuncLoopObject *loop; - int i; - NPY_BEGIN_THREADS_DEF + /* thread pool for used for caluclations. */ - if (!(loop = construct_loop(self, args, kwds, mps))) return -1; - if (loop->notimplemented) {ufuncloop_dealloc(loop); return -2;} + thread_parm *thread_parms; + PyUFuncLoopObject *loop; + int i; - NPY_LOOP_BEGIN_THREADS + /* Get the global thread count setting */ + int use_threads=thread_settings.use_threads; + int thread_count=thread_settings.thread_count; + int element_threshold=thread_settings.element_threshold; + - switch(loop->meth) { - case ONE_UFUNCLOOP: - /* Everything is contiguous, notswapped, aligned, - and of the right type. -- Fastest. - Or if not contiguous, then a single-stride - increment moves through the entire array. - */ - /*fprintf(stderr, "ONE...%d\n", loop->size);*/ - loop->function((char **)loop->bufptr, &(loop->size), - loop->steps, loop->funcdata); - UFUNC_CHECK_ERROR(loop); - break; - case NOBUFFER_UFUNCLOOP: - /* Everything is notswapped, aligned and of the - right type but not contiguous. -- Almost as fast. - */ - /*fprintf(stderr, "NOBUFFER...%d\n", loop->size);*/ - while (loop->index < loop->size) { - for (i=0; inargs; i++) - loop->bufptr[i] = loop->iters[i]->dataptr; - - loop->function((char **)loop->bufptr, &(loop->bufcnt), - loop->steps, loop->funcdata); - UFUNC_CHECK_ERROR(loop); + static cp_thread_pool* thread_pool=NULL; + cp_pooled_thread* thread; + + if (thread_pool == NULL) + { + /* create a thread pool if it doesn't already exist. + fixme: This should actually be quite a bit larger than thread_count + to accomodate mutliple "high level" calling threads. + */ + thread_pool = cp_thread_pool_create(1, 20); + } - /* Adjust loop pointers */ - - for (i=0; inargs; i++) { - PyArray_ITER_NEXT(loop->iters[i]); - } - loop->index++; - } - break; - case BUFFER_UFUNCLOOP: { - PyArray_CopySwapNFunc *copyswapn[NPY_MAXARGS]; - PyArrayIterObject **iters=loop->iters; - int *swap=loop->swap; - char **dptr=loop->dptr; - int mpselsize[NPY_MAXARGS]; - intp laststrides[NPY_MAXARGS]; - int fastmemcpy[NPY_MAXARGS]; - int *needbuffer=loop->needbuffer; - intp index=loop->index, size=loop->size; - int bufsize; - intp bufcnt; - int copysizes[NPY_MAXARGS]; - char **bufptr = loop->bufptr; - char **buffer = loop->buffer; - char **castbuf = loop->castbuf; - intp *steps = loop->steps; - char *tptr[NPY_MAXARGS]; - int ninnerloops = loop->ninnerloops; - Bool pyobject[NPY_MAXARGS]; - int datasize[NPY_MAXARGS]; + NPY_BEGIN_THREADS_DEF + + if (!(loop = construct_loop(self, args, kwds, mps))) return -1; + if (loop->notimplemented) {ufuncloop_dealloc(loop); return -2;} + + //printf("%u, %u, %u\n", loop->bufptr[0], loop->bufptr[1], loop->bufptr[2]); + NPY_LOOP_BEGIN_THREADS + + switch(loop->meth) { + case ONE_UFUNCLOOP: + /* Everything is contiguous, notswapped, aligned, + and of the right type. -- Fastest. + Or if not contiguous, then a single-stride + increment moves through the entire array. + */ + + /* Only vectorize if threading is enabled and loop includes enough + elemnts. + fixme: This should be a more interesting check + */ + if (use_threads && loop->size > element_threshold) + { + use_threads = 1; + } + else + { + use_threads = 0; + } + + if (use_threads) + { + /* fprintf(stderr, "using %d threads\n", thread_count); */ + thread_parms = (thread_parm *) malloc(thread_count * sizeof(*thread_parms)); + for (i=0;iin_use) && thread_pool->running) + { + /* + cp_mutex_lock(pool->pool_lock); + cp_cond_wait(pool->pool_cond, pool->pool_lock); + + if (pool->running && + cp_hashlist_item_count(pool->in_use)) + cp_cond_signal(pool->pool_cond); + cp_mutex_unlock(pool->pool_lock); + */ + } + + //fprintf(stderr, "threads finished\n"); + } + else + { + loop->function((char **)loop->bufptr, &(loop->size), + loop->steps, loop->funcdata); + } + UFUNC_CHECK_ERROR(loop); + break; + case NOBUFFER_UFUNCLOOP: + /* Everything is notswapped, aligned and of the + right type but not contiguous. -- Almost as fast. + */ + /*fprintf(stderr, "NOBUFFER...%d\n", loop->size);*/ + while (loop->index < loop->size) { + for (i=0; inargs; i++) + loop->bufptr[i] = loop->iters[i]->dataptr; + + loop->function((char **)loop->bufptr, &(loop->bufcnt), + loop->steps, loop->funcdata); + UFUNC_CHECK_ERROR(loop); + + /* Adjust loop pointers */ + + for (i=0; inargs; i++) { + PyArray_ITER_NEXT(loop->iters[i]); + } + loop->index++; + } + break; + case BUFFER_UFUNCLOOP: { + PyArray_CopySwapNFunc *copyswapn[NPY_MAXARGS]; + PyArrayIterObject **iters=loop->iters; + int *swap=loop->swap; + char **dptr=loop->dptr; + int mpselsize[NPY_MAXARGS]; + intp laststrides[NPY_MAXARGS]; + int fastmemcpy[NPY_MAXARGS]; + int *needbuffer=loop->needbuffer; + intp index=loop->index, size=loop->size; + int bufsize; + intp bufcnt; + int copysizes[NPY_MAXARGS]; + char **bufptr = loop->bufptr; + char **buffer = loop->buffer; + char **castbuf = loop->castbuf; + intp *steps = loop->steps; + char *tptr[NPY_MAXARGS]; + int ninnerloops = loop->ninnerloops; + Bool pyobject[NPY_MAXARGS]; + int datasize[NPY_MAXARGS]; int j, k, stopcondition; - char *myptr1, *myptr2; + char *myptr1, *myptr2; - for (i=0; inargs; i++) { - copyswapn[i] = mps[i]->descr->f->copyswapn; - mpselsize[i] = mps[i]->descr->elsize; - pyobject[i] = (loop->obj && \ + for (i=0; inargs; i++) { + copyswapn[i] = mps[i]->descr->f->copyswapn; + mpselsize[i] = mps[i]->descr->elsize; + pyobject[i] = (loop->obj && \ (mps[i]->descr->type_num == PyArray_OBJECT)); - laststrides[i] = iters[i]->strides[loop->lastdim]; - if (steps[i] && laststrides[i] != mpselsize[i]) fastmemcpy[i] = 0; - else fastmemcpy[i] = 1; - } - /* Do generic buffered looping here (works for any kind of - arrays -- some need buffers, some don't. - */ + laststrides[i] = iters[i]->strides[loop->lastdim]; + if (steps[i] && laststrides[i] != mpselsize[i]) fastmemcpy[i] = 0; + else fastmemcpy[i] = 1; + } + /* Do generic buffered looping here (works for any kind of + arrays -- some need buffers, some don't. + */ - /* New algorithm: N is the largest dimension. B is the buffer-size. - quotient is loop->ninnerloops-1 - remainder is loop->leftover + /* New algorithm: N is the largest dimension. B is the buffer-size. + quotient is loop->ninnerloops-1 + remainder is loop->leftover - Compute N = quotient * B + remainder. - quotient = N / B # integer math - (store quotient + 1) as the number of innerloops - remainder = N % B # integer remainder + Compute N = quotient * B + remainder. + quotient = N / B # integer math + (store quotient + 1) as the number of innerloops + remainder = N % B # integer remainder - On the inner-dimension we will have (quotient + 1) loops where - the size of the inner function is B for all but the last when the niter size is - remainder. + On the inner-dimension we will have (quotient + 1) loops where + the size of the inner function is B for all but the last when the niter size is + remainder. - So, the code looks very similar to NOBUFFER_LOOP except the inner-most loop is - replaced with... + So, the code looks very similar to NOBUFFER_LOOP except the inner-most loop is + replaced with... - for(i=0; isize, - loop->ninnerloops, loop->leftover); - */ - /* - for (i=0; inargs; i++) { - fprintf(stderr, "iters[%d]->dataptr = %p, %p of size %d\n", i, - iters[i], iters[i]->ao->data, PyArray_NBYTES(iters[i]->ao)); - } - */ + /* fprintf(stderr, "BUFFER...%d,%d,%d\n", loop->size, + loop->ninnerloops, loop->leftover); + */ + /* + for (i=0; inargs; i++) { + fprintf(stderr, "iters[%d]->dataptr = %p, %p of size %d\n", i, + iters[i], iters[i]->ao->data, PyArray_NBYTES(iters[i]->ao)); + } + */ - stopcondition = ninnerloops; - if (loop->leftover == 0) stopcondition--; - while (index < size) { - bufsize=loop->bufsize; - for (i=0; inargs; i++) { - tptr[i] = loop->iters[i]->dataptr; - if (needbuffer[i]) { - dptr[i] = bufptr[i]; - datasize[i] = (steps[i] ? bufsize : 1); - copysizes[i] = datasize[i] * mpselsize[i]; - } - else { - dptr[i] = tptr[i]; - } - } + stopcondition = ninnerloops; + if (loop->leftover == 0) stopcondition--; + while (index < size) { + bufsize=loop->bufsize; + for (i=0; inargs; i++) { + tptr[i] = loop->iters[i]->dataptr; + if (needbuffer[i]) { + dptr[i] = bufptr[i]; + datasize[i] = (steps[i] ? bufsize : 1); + copysizes[i] = datasize[i] * mpselsize[i]; + } + else { + dptr[i] = tptr[i]; + } + } - /* This is the inner function over the last dimension */ - for (k=1; k<=stopcondition; k++) { - if (k==ninnerloops) { + /* This is the inner function over the last dimension */ + for (k=1; k<=stopcondition; k++) { + if (k==ninnerloops) { bufsize = loop->leftover; for (i=0; inargs;i++) { - if (!needbuffer[i]) continue; + if (!needbuffer[i]) continue; datasize[i] = (steps[i] ? bufsize : 1); - copysizes[i] = datasize[i] * mpselsize[i]; + copysizes[i] = datasize[i] * mpselsize[i]; } } - for (i=0; inin; i++) { - if (!needbuffer[i]) continue; - if (fastmemcpy[i]) - memcpy(buffer[i], tptr[i], - copysizes[i]); - else { - myptr1 = buffer[i]; - myptr2 = tptr[i]; - for (j=0; jnin; i++) { + if (!needbuffer[i]) continue; + if (fastmemcpy[i]) + memcpy(buffer[i], tptr[i], + copysizes[i]); + else { + myptr1 = buffer[i]; + myptr2 = tptr[i]; + for (j=0; jcast[i]) { - loop->cast[i](buffer[i], - castbuf[i], - (intp) datasize[i], - NULL, NULL); - } - } + /* swap the buffer if necessary */ + if (swap[i]) { + /* fprintf(stderr, "swapping...\n");*/ + copyswapn[i](buffer[i], mpselsize[i], NULL, -1, + (intp) datasize[i], 1, + mps[i]); + } + /* cast to the other buffer if necessary */ + if (loop->cast[i]) { + loop->cast[i](buffer[i], + castbuf[i], + (intp) datasize[i], + NULL, NULL); + } + } - bufcnt = (intp) bufsize; - loop->function((char **)dptr, &bufcnt, steps, loop->funcdata); + bufcnt = (intp) bufsize; + loop->function((char **)dptr, &bufcnt, steps, loop->funcdata); - for (i=self->nin; inargs; i++) { - if (!needbuffer[i]) continue; - if (loop->cast[i]) { - loop->cast[i](castbuf[i], - buffer[i], - (intp) datasize[i], - NULL, NULL); - } - if (swap[i]) { - copyswapn[i](buffer[i], mpselsize[i], NULL, -1, - (intp) datasize[i], 1, - mps[i]); - } - /* copy back to output arrays */ - /* decref what's already there for object arrays */ - if (pyobject[i]) { - myptr1 = tptr[i]; - for (j=0; jnin; inargs; i++) { + if (!needbuffer[i]) continue; + if (loop->cast[i]) { + loop->cast[i](castbuf[i], + buffer[i], + (intp) datasize[i], + NULL, NULL); + } + if (swap[i]) { + copyswapn[i](buffer[i], mpselsize[i], NULL, -1, + (intp) datasize[i], 1, + mps[i]); + } + /* copy back to output arrays */ + /* decref what's already there for object arrays */ + if (pyobject[i]) { + myptr1 = tptr[i]; + for (j=0; jnargs; i++) { - tptr[i] += bufsize * laststrides[i]; - if (!needbuffer[i]) dptr[i] = tptr[i]; - } - } + if (k == stopcondition) continue; + for (i=0; inargs; i++) { + tptr[i] += bufsize * laststrides[i]; + if (!needbuffer[i]) dptr[i] = tptr[i]; + } + } /* end inner function over last dimension */ - if (loop->objfunc) { /* DECREF castbuf when underlying function used object arrays + if (loop->objfunc) { /* DECREF castbuf when underlying function used object arrays and casting was needed to get to object arrays */ - for (i=0; inargs; i++) { - if (loop->cast[i]) { - if (steps[i] == 0) { - Py_XDECREF(*((PyObject **)castbuf[i])); - } - else { - int size = loop->bufsize; - PyObject **objptr = (PyObject **)castbuf[i]; - /* size is loop->bufsize unless there - was only one loop */ - if (ninnerloops == 1) \ - size = loop->leftover; + for (i=0; inargs; i++) { + if (loop->cast[i]) { + if (steps[i] == 0) { + Py_XDECREF(*((PyObject **)castbuf[i])); + } + else { + int size = loop->bufsize; + PyObject **objptr = (PyObject **)castbuf[i]; + /* size is loop->bufsize unless there + was only one loop */ + if (ninnerloops == 1) \ + size = loop->leftover; - for (j=0; jnargs; i++) { - PyArray_ITER_NEXT(loop->iters[i]); - } - index++; + for (i=0; inargs; i++) { + PyArray_ITER_NEXT(loop->iters[i]); + } + index++; } } } @@ -2007,13 +2128,13 @@ NPY_LOOP_END_THREADS ufuncloop_dealloc(loop); - return 0; + return 0; fail: NPY_LOOP_END_THREADS - if (loop) ufuncloop_dealloc(loop); - return -1; + if (loop) ufuncloop_dealloc(loop); + return -1; } static PyArrayObject * @@ -2034,7 +2155,7 @@ obj = PyInt_FromLong((long) 0); } - typecode = PyArray_DescrFromType(otype); + typecode = PyArray_DescrFromType(otype); arr = PyArray_FromAny(obj, typecode, 0, 0, CARRAY, NULL); Py_DECREF(obj); return (PyArrayObject *)arr; @@ -2043,34 +2164,34 @@ static int _create_reduce_copy(PyUFuncReduceObject *loop, PyArrayObject **arr, int rtype) { - intp maxsize; - PyObject *new; - PyArray_Descr *ntype; + intp maxsize; + PyObject *new; + PyArray_Descr *ntype; - maxsize = PyArray_SIZE(*arr); + maxsize = PyArray_SIZE(*arr); - if (maxsize < loop->bufsize) { - if (!(PyArray_ISBEHAVED_RO(*arr)) || \ - PyArray_TYPE(*arr) != rtype) { - ntype = PyArray_DescrFromType(rtype); - new = PyArray_FromAny((PyObject *)(*arr), - ntype, 0, 0, - FORCECAST | ALIGNED, NULL); - if (new == NULL) return -1; - *arr = (PyArrayObject *)new; - loop->decref = new; - } - } + if (maxsize < loop->bufsize) { + if (!(PyArray_ISBEHAVED_RO(*arr)) || \ + PyArray_TYPE(*arr) != rtype) { + ntype = PyArray_DescrFromType(rtype); + new = PyArray_FromAny((PyObject *)(*arr), + ntype, 0, 0, + FORCECAST | ALIGNED, NULL); + if (new == NULL) return -1; + *arr = (PyArrayObject *)new; + loop->decref = new; + } + } - /* Don't decref *arr before re-assigning - because it was not going to be DECREF'd anyway. + /* Don't decref *arr before re-assigning + because it was not going to be DECREF'd anyway. - If a copy is made, then the copy will be removed - on deallocation of the loop structure by setting - loop->decref. - */ + If a copy is made, then the copy will be removed + on deallocation of the loop structure by setting + loop->decref. + */ - return 0; + return 0; } static PyUFuncReduceObject * @@ -2079,79 +2200,76 @@ { PyUFuncReduceObject *loop; PyArrayObject *idarr; - PyArrayObject *aar; + PyArrayObject *aar; intp loop_i[MAX_DIMS], outsize=0; - int arg_types[3]; - PyArray_SCALARKIND scalars[3] = {PyArray_NOSCALAR, PyArray_NOSCALAR, - PyArray_NOSCALAR}; - int i, j, nd; + int arg_types[3] = {otype, otype, otype}; + PyArray_SCALARKIND scalars[3] = {PyArray_NOSCALAR, PyArray_NOSCALAR, + PyArray_NOSCALAR}; + int i, j; + int nd = (*arr)->nd; int flags; - /* Reduce type is the type requested of the input - during reduction */ + /* Reduce type is the type requested of the input + during reduction */ - nd = (*arr)->nd; - arg_types[0] = otype; - arg_types[1] = otype; - arg_types[2] = otype; if ((loop = _pya_malloc(sizeof(PyUFuncReduceObject)))==NULL) { PyErr_NoMemory(); return loop; } loop->retbase=0; loop->swap = 0; - loop->index = 0; - loop->ufunc = self; + loop->index = 0; + loop->ufunc = self; Py_INCREF(self); loop->cast = NULL; loop->buffer = NULL; loop->ret = NULL; - loop->it = NULL; - loop->rit = NULL; - loop->errobj = NULL; + loop->it = NULL; + loop->rit = NULL; + loop->errobj = NULL; loop->first = 1; - loop->decref=NULL; + loop->decref=NULL; loop->N = (*arr)->dimensions[axis]; - loop->instrides = (*arr)->strides[axis]; + loop->instrides = (*arr)->strides[axis]; - if (select_types(loop->ufunc, arg_types, &(loop->function), - &(loop->funcdata), scalars, NULL) == -1) goto fail; + if (select_types(loop->ufunc, arg_types, &(loop->function), + &(loop->funcdata), scalars, NULL) == -1) goto fail; - /* output type may change -- if it does - reduction is forced into that type - and we need to select the reduction function again - */ - if (otype != arg_types[2]) { - otype = arg_types[2]; - arg_types[0] = otype; - arg_types[1] = otype; - if (select_types(loop->ufunc, arg_types, &(loop->function), - &(loop->funcdata), scalars, NULL) == -1) - goto fail; - } + /* output type may change -- if it does + reduction is forced into that type + and we need to select the reduction function again + */ + if (otype != arg_types[2]) { + otype = arg_types[2]; + arg_types[0] = otype; + arg_types[1] = otype; + if (select_types(loop->ufunc, arg_types, &(loop->function), + &(loop->funcdata), scalars, NULL) == -1) + goto fail; + } - /* get looping parameters from Python */ - if (PyUFunc_GetPyValues(str, &(loop->bufsize), &(loop->errormask), - &(loop->errobj)) < 0) goto fail; + /* get looping parameters from Python */ + if (PyUFunc_GetPyValues(str, &(loop->bufsize), &(loop->errormask), + &(loop->errobj)) < 0) goto fail; - /* Make copy if misbehaved or not otype for small arrays */ - if (_create_reduce_copy(loop, arr, otype) < 0) goto fail; - aar = *arr; + /* Make copy if misbehaved or not otype for small arrays */ + if (_create_reduce_copy(loop, arr, otype) < 0) goto fail; + aar = *arr; if (loop->N == 0) { loop->meth = ZERO_EL_REDUCELOOP; } - else if (PyArray_ISBEHAVED_RO(aar) && \ + else if (PyArray_ISBEHAVED_RO(aar) && \ otype == (aar)->descr->type_num) { - if (loop->N == 1) { - loop->meth = ONE_EL_REDUCELOOP; - } - else { - loop->meth = NOBUFFER_UFUNCLOOP; - loop->steps[1] = (aar)->strides[axis]; - loop->N -= 1; - } + if (loop->N == 1) { + loop->meth = ONE_EL_REDUCELOOP; } else { + loop->meth = NOBUFFER_UFUNCLOOP; + loop->steps[1] = (aar)->strides[axis]; + loop->N -= 1; + } + } + else { loop->meth = BUFFER_UFUNCLOOP; loop->swap = !(PyArray_ISNOTSWAPPED(aar)); } @@ -2167,7 +2285,7 @@ if (idarr == NULL) goto fail; if (idarr->descr->elsize > UFUNC_MAXIDENTITY) { PyErr_Format(PyExc_RuntimeError, - "UFUNC_MAXIDENTITY (%d)" \ + "UFUNC_MAXIDENTITY (%d)" \ " is too small (needs to be at least %d)", UFUNC_MAXIDENTITY, idarr->descr->elsize); Py_DECREF(idarr); @@ -2179,13 +2297,13 @@ /* Construct return array */ flags = NPY_CARRAY | NPY_UPDATEIFCOPY | NPY_FORCECAST; - switch(operation) { - case UFUNC_REDUCE: - for (j=0, i=0; idimensions[i]; + switch(operation) { + case UFUNC_REDUCE: + for (j=0, i=0; idimensions[i]; - } + } if (out == NULL) { loop->ret = (PyArrayObject *) \ PyArray_New(aar->ob_type, aar->nd-1, loop_i, @@ -2195,8 +2313,8 @@ else { outsize = PyArray_MultiplyList(loop_i, aar->nd-1); } - break; - case UFUNC_ACCUMULATE: + break; + case UFUNC_ACCUMULATE: if (out == NULL) { loop->ret = (PyArrayObject *) \ PyArray_New(aar->ob_type, aar->nd, aar->dimensions, @@ -2205,11 +2323,11 @@ else { outsize = PyArray_MultiplyList(aar->dimensions, aar->nd); } - break; - case UFUNC_REDUCEAT: - memcpy(loop_i, aar->dimensions, nd*sizeof(intp)); - /* Index is 1-d array */ - loop_i[axis] = ind_size; + break; + case UFUNC_REDUCEAT: + memcpy(loop_i, aar->dimensions, nd*sizeof(intp)); + /* Index is 1-d array */ + loop_i[axis] = ind_size; if (out == NULL) { loop->ret = (PyArrayObject *) \ PyArray_New(aar->ob_type, aar->nd, loop_i, otype, @@ -2218,14 +2336,14 @@ else { outsize = PyArray_MultiplyList(loop_i, aar->nd); } - if (ind_size == 0) { - loop->meth = ZERO_EL_REDUCELOOP; - return loop; - } - if (loop->meth == ONE_EL_REDUCELOOP) - loop->meth = NOBUFFER_REDUCELOOP; - break; - } + if (ind_size == 0) { + loop->meth = ZERO_EL_REDUCELOOP; + return loop; + } + if (loop->meth == ONE_EL_REDUCELOOP) + loop->meth = NOBUFFER_REDUCELOOP; + break; + } if (out) { if (PyArray_SIZE(out) != outsize) { PyErr_SetString(PyExc_ValueError, @@ -2244,21 +2362,21 @@ loop->outsize = loop->ret->descr->elsize; loop->bufptr[0] = loop->ret->data; - if (loop->meth == ZERO_EL_REDUCELOOP) { - loop->size = PyArray_SIZE(loop->ret); - return loop; - } + if (loop->meth == ZERO_EL_REDUCELOOP) { + loop->size = PyArray_SIZE(loop->ret); + return loop; + } - loop->it = (PyArrayIterObject *)PyArray_IterNew((PyObject *)aar); + loop->it = (PyArrayIterObject *)PyArray_IterNew((PyObject *)aar); if (loop->it == NULL) return NULL; - if (loop->meth == ONE_EL_REDUCELOOP) { - loop->size = loop->it->size; - return loop; - } + if (loop->meth == ONE_EL_REDUCELOOP) { + loop->size = loop->it->size; + return loop; + } /* Fix iterator to loop over correct dimension */ - /* Set size in axis dimension to 1 */ + /* Set size in axis dimension to 1 */ loop->it->contiguous = 0; loop->it->size /= (loop->it->dims_m1[axis]+1); @@ -2268,62 +2386,62 @@ loop->size = loop->it->size; - if (operation == UFUNC_REDUCE) { - loop->steps[0] = 0; - } - else { - loop->rit = (PyArrayIterObject *) \ - PyArray_IterNew((PyObject *)(loop->ret)); - if (loop->rit == NULL) return NULL; + if (operation == UFUNC_REDUCE) { + loop->steps[0] = 0; + } + else { + loop->rit = (PyArrayIterObject *) \ + PyArray_IterNew((PyObject *)(loop->ret)); + if (loop->rit == NULL) return NULL; - /* Fix iterator to loop over correct dimension */ - /* Set size in axis dimension to 1 */ + /* Fix iterator to loop over correct dimension */ + /* Set size in axis dimension to 1 */ - loop->rit->contiguous = 0; - loop->rit->size /= (loop->rit->dims_m1[axis]+1); - loop->rit->dims_m1[axis] = 0; - loop->rit->backstrides[axis] = 0; + loop->rit->contiguous = 0; + loop->rit->size /= (loop->rit->dims_m1[axis]+1); + loop->rit->dims_m1[axis] = 0; + loop->rit->backstrides[axis] = 0; - if (operation == UFUNC_ACCUMULATE) - loop->steps[0] = loop->ret->strides[axis]; - else - loop->steps[0] = 0; - } - loop->steps[2] = loop->steps[0]; - loop->bufptr[2] = loop->bufptr[0] + loop->steps[2]; + if (operation == UFUNC_ACCUMULATE) + loop->steps[0] = loop->ret->strides[axis]; + else + loop->steps[0] = 0; + } + loop->steps[2] = loop->steps[0]; + loop->bufptr[2] = loop->bufptr[0] + loop->steps[2]; - if (loop->meth == BUFFER_UFUNCLOOP) { - int _size; - loop->steps[1] = loop->outsize; + if (loop->meth == BUFFER_UFUNCLOOP) { + int _size; + loop->steps[1] = loop->outsize; if (otype != aar->descr->type_num) { - _size=loop->bufsize*(loop->outsize + \ - aar->descr->elsize); + _size=loop->bufsize*(loop->outsize + \ + aar->descr->elsize); loop->buffer = PyDataMem_NEW(_size); if (loop->buffer == NULL) goto fail; - if (loop->obj) memset(loop->buffer, 0, _size); + if (loop->obj) memset(loop->buffer, 0, _size); loop->castbuf = loop->buffer + \ loop->bufsize*aar->descr->elsize; loop->bufptr[1] = loop->castbuf; loop->cast = PyArray_GetCastFunc(aar->descr, otype); - if (loop->cast == NULL) goto fail; + if (loop->cast == NULL) goto fail; } else { - _size = loop->bufsize * loop->outsize; + _size = loop->bufsize * loop->outsize; loop->buffer = PyDataMem_NEW(_size); if (loop->buffer == NULL) goto fail; - if (loop->obj) memset(loop->buffer, 0, _size); + if (loop->obj) memset(loop->buffer, 0, _size); loop->bufptr[1] = loop->buffer; } - } + } - PyUFunc_clearfperr(); - return loop; + PyUFunc_clearfperr(); + return loop; fail: ufuncreduce_dealloc(loop); - return NULL; + return NULL; } @@ -2347,45 +2465,45 @@ /* Construct loop object */ loop = construct_reduce(self, &arr, out, axis, otype, UFUNC_REDUCE, 0, - "reduce"); - if (!loop) return NULL; + "reduce"); + if (!loop) return NULL; NPY_LOOP_BEGIN_THREADS switch(loop->meth) { case ZERO_EL_REDUCELOOP: - /* fprintf(stderr, "ZERO..%d\n", loop->size); */ - for(i=0; isize; i++) { - if (loop->obj) Py_INCREF(*((PyObject **)loop->idptr)); - memmove(loop->bufptr[0], loop->idptr, loop->outsize); - loop->bufptr[0] += loop->outsize; - } + /* fprintf(stderr, "ZERO..%d\n", loop->size); */ + for(i=0; isize; i++) { + if (loop->obj) Py_INCREF(*((PyObject **)loop->idptr)); + memmove(loop->bufptr[0], loop->idptr, loop->outsize); + loop->bufptr[0] += loop->outsize; + } break; case ONE_EL_REDUCELOOP: - /*fprintf(stderr, "ONEDIM..%d\n", loop->size); */ + /*fprintf(stderr, "ONEDIM..%d\n", loop->size); */ while(loop->index < loop->size) { - if (loop->obj) - Py_INCREF(*((PyObject **)loop->it->dataptr)); + if (loop->obj) + Py_INCREF(*((PyObject **)loop->it->dataptr)); memmove(loop->bufptr[0], loop->it->dataptr, loop->outsize); - PyArray_ITER_NEXT(loop->it); - loop->bufptr[0] += loop->outsize; - loop->index++; - } - break; + PyArray_ITER_NEXT(loop->it); + loop->bufptr[0] += loop->outsize; + loop->index++; + } + break; case NOBUFFER_UFUNCLOOP: - /*fprintf(stderr, "NOBUFFER..%d\n", loop->size); */ + /*fprintf(stderr, "NOBUFFER..%d\n", loop->size); */ while(loop->index < loop->size) { - /* Copy first element to output */ - if (loop->obj) - Py_INCREF(*((PyObject **)loop->it->dataptr)); + /* Copy first element to output */ + if (loop->obj) + Py_INCREF(*((PyObject **)loop->it->dataptr)); memmove(loop->bufptr[0], loop->it->dataptr, loop->outsize); - /* Adjust input pointer */ + /* Adjust input pointer */ loop->bufptr[1] = loop->it->dataptr+loop->steps[1]; loop->function((char **)loop->bufptr, - &(loop->N), + &(loop->N), loop->steps, loop->funcdata); - UFUNC_CHECK_ERROR(loop); + UFUNC_CHECK_ERROR(loop); PyArray_ITER_NEXT(loop->it) loop->bufptr[0] += loop->outsize; @@ -2404,31 +2522,31 @@ b. Call inner function. 4. Repeat 2 until row is done. */ - /* fprintf(stderr, "BUFFERED..%d %d\n", loop->size, - loop->swap); */ + /* fprintf(stderr, "BUFFERED..%d %d\n", loop->size, + loop->swap); */ while(loop->index < loop->size) { loop->inptr = loop->it->dataptr; - /* Copy (cast) First term over to output */ - if (loop->cast) { - /* A little tricky because we need to - cast it first */ - arr->descr->f->copyswap(loop->buffer, - loop->inptr, - loop->swap, - NULL); - loop->cast(loop->buffer, loop->castbuf, - 1, NULL, NULL); - if (loop->obj) - Py_INCREF(*((PyObject **)loop->castbuf)); - memcpy(loop->bufptr[0], loop->castbuf, - loop->outsize); - } - else { /* Simple copy */ - arr->descr->f->copyswap(loop->bufptr[0], - loop->inptr, - loop->swap, NULL); - } - loop->inptr += loop->instrides; + /* Copy (cast) First term over to output */ + if (loop->cast) { + /* A little tricky because we need to + cast it first */ + arr->descr->f->copyswap(loop->buffer, + loop->inptr, + loop->swap, + NULL); + loop->cast(loop->buffer, loop->castbuf, + 1, NULL, NULL); + if (loop->obj) + Py_INCREF(*((PyObject **)loop->castbuf)); + memcpy(loop->bufptr[0], loop->castbuf, + loop->outsize); + } + else { /* Simple copy */ + arr->descr->f->copyswap(loop->bufptr[0], + loop->inptr, + loop->swap, NULL); + } + loop->inptr += loop->instrides; n = 1; while(n < loop->N) { /* Copy up to loop->bufsize elements to @@ -2437,9 +2555,9 @@ for (i=0; ibufsize; i++, n++) { if (n == loop->N) break; arr->descr->f->copyswap(dptr, - loop->inptr, - loop->swap, - NULL); + loop->inptr, + loop->swap, + NULL); loop->inptr += loop->instrides; dptr += loop->insize; } @@ -2449,10 +2567,10 @@ i, NULL, NULL); loop->function((char **)loop->bufptr, &i, - loop->steps, loop->funcdata); - loop->bufptr[0] += loop->steps[0]*i; - loop->bufptr[2] += loop->steps[2]*i; - UFUNC_CHECK_ERROR(loop); + loop->steps, loop->funcdata); + loop->bufptr[0] += loop->steps[0]*i; + loop->bufptr[2] += loop->steps[2]*i; + UFUNC_CHECK_ERROR(loop); } PyArray_ITER_NEXT(loop->it); loop->bufptr[0] += loop->outsize; @@ -2463,7 +2581,7 @@ NPY_LOOP_END_THREADS - /* Hang on to this reference -- will be decref'd with loop */ + /* Hang on to this reference -- will be decref'd with loop */ if (loop->retbase) ret = (PyArrayObject *)loop->ret->base; else ret = loop->ret; Py_INCREF(ret); @@ -2486,55 +2604,55 @@ PyUFuncReduceObject *loop; intp i, n; char *dptr; - NPY_BEGIN_THREADS_DEF + NPY_BEGIN_THREADS_DEF /* Construct loop object */ loop = construct_reduce(self, &arr, out, axis, otype, UFUNC_ACCUMULATE, 0, - "accumulate"); - if (!loop) return NULL; + "accumulate"); + if (!loop) return NULL; - NPY_LOOP_BEGIN_THREADS + NPY_LOOP_BEGIN_THREADS switch(loop->meth) { case ZERO_EL_REDUCELOOP: /* Accumulate */ - /* fprintf(stderr, "ZERO..%d\n", loop->size); */ - for(i=0; isize; i++) { - if (loop->obj) - Py_INCREF(*((PyObject **)loop->idptr)); - memcpy(loop->bufptr[0], loop->idptr, loop->outsize); - loop->bufptr[0] += loop->outsize; - } + /* fprintf(stderr, "ZERO..%d\n", loop->size); */ + for(i=0; isize; i++) { + if (loop->obj) + Py_INCREF(*((PyObject **)loop->idptr)); + memcpy(loop->bufptr[0], loop->idptr, loop->outsize); + loop->bufptr[0] += loop->outsize; + } break; case ONE_EL_REDUCELOOP: /* Accumulate */ - /* fprintf(stderr, "ONEDIM..%d\n", loop->size); */ + /* fprintf(stderr, "ONEDIM..%d\n", loop->size); */ while(loop->index < loop->size) { - if (loop->obj) - Py_INCREF(*((PyObject **)loop->it->dataptr)); + if (loop->obj) + Py_INCREF(*((PyObject **)loop->it->dataptr)); memcpy(loop->bufptr[0], loop->it->dataptr, loop->outsize); - PyArray_ITER_NEXT(loop->it); - loop->bufptr[0] += loop->outsize; - loop->index++; - } - break; + PyArray_ITER_NEXT(loop->it); + loop->bufptr[0] += loop->outsize; + loop->index++; + } + break; case NOBUFFER_UFUNCLOOP: /* Accumulate */ - /* fprintf(stderr, "NOBUFFER..%d\n", loop->size); */ + /* fprintf(stderr, "NOBUFFER..%d\n", loop->size); */ while(loop->index < loop->size) { - /* Copy first element to output */ - if (loop->obj) - Py_INCREF(*((PyObject **)loop->it->dataptr)); + /* Copy first element to output */ + if (loop->obj) + Py_INCREF(*((PyObject **)loop->it->dataptr)); memcpy(loop->bufptr[0], loop->it->dataptr, loop->outsize); - /* Adjust input pointer */ + /* Adjust input pointer */ loop->bufptr[1] = loop->it->dataptr+loop->steps[1]; loop->function((char **)loop->bufptr, - &(loop->N), + &(loop->N), loop->steps, loop->funcdata); - UFUNC_CHECK_ERROR(loop); + UFUNC_CHECK_ERROR(loop); PyArray_ITER_NEXT(loop->it); - PyArray_ITER_NEXT(loop->rit); + PyArray_ITER_NEXT(loop->rit); loop->bufptr[0] = loop->rit->dataptr; - loop->bufptr[2] = loop->bufptr[0] + loop->steps[0]; + loop->bufptr[2] = loop->bufptr[0] + loop->steps[0]; loop->index++; } break; @@ -2549,32 +2667,32 @@ b. Call inner function. 4. Repeat 2 until row is done. */ - /* fprintf(stderr, "BUFFERED..%d %p\n", loop->size, - loop->cast); */ + /* fprintf(stderr, "BUFFERED..%d %p\n", loop->size, + loop->cast); */ while(loop->index < loop->size) { loop->inptr = loop->it->dataptr; - /* Copy (cast) First term over to output */ - if (loop->cast) { - /* A little tricky because we need to - cast it first */ - arr->descr->f->copyswap(loop->buffer, - loop->inptr, - loop->swap, - NULL); - loop->cast(loop->buffer, loop->castbuf, - 1, NULL, NULL); - if (loop->obj) - Py_INCREF(*((PyObject **)loop->castbuf)); - memcpy(loop->bufptr[0], loop->castbuf, - loop->outsize); - } - else { /* Simple copy */ - arr->descr->f->copyswap(loop->bufptr[0], - loop->inptr, - loop->swap, - NULL); - } - loop->inptr += loop->instrides; + /* Copy (cast) First term over to output */ + if (loop->cast) { + /* A little tricky because we need to + cast it first */ + arr->descr->f->copyswap(loop->buffer, + loop->inptr, + loop->swap, + NULL); + loop->cast(loop->buffer, loop->castbuf, + 1, NULL, NULL); + if (loop->obj) + Py_INCREF(*((PyObject **)loop->castbuf)); + memcpy(loop->bufptr[0], loop->castbuf, + loop->outsize); + } + else { /* Simple copy */ + arr->descr->f->copyswap(loop->bufptr[0], + loop->inptr, + loop->swap, + NULL); + } + loop->inptr += loop->instrides; n = 1; while(n < loop->N) { /* Copy up to loop->bufsize elements to @@ -2583,9 +2701,9 @@ for (i=0; ibufsize; i++, n++) { if (n == loop->N) break; arr->descr->f->copyswap(dptr, - loop->inptr, - loop->swap, - NULL); + loop->inptr, + loop->swap, + NULL); loop->inptr += loop->instrides; dptr += loop->insize; } @@ -2595,22 +2713,22 @@ i, NULL, NULL); loop->function((char **)loop->bufptr, &i, - loop->steps, loop->funcdata); - loop->bufptr[0] += loop->steps[0]*i; - loop->bufptr[2] += loop->steps[2]*i; - UFUNC_CHECK_ERROR(loop); + loop->steps, loop->funcdata); + loop->bufptr[0] += loop->steps[0]*i; + loop->bufptr[2] += loop->steps[2]*i; + UFUNC_CHECK_ERROR(loop); } PyArray_ITER_NEXT(loop->it); - PyArray_ITER_NEXT(loop->rit); + PyArray_ITER_NEXT(loop->rit); loop->bufptr[0] = loop->rit->dataptr; - loop->bufptr[2] = loop->bufptr[0] + loop->steps[0]; + loop->bufptr[2] = loop->bufptr[0] + loop->steps[0]; loop->index++; } } - NPY_LOOP_END_THREADS + NPY_LOOP_END_THREADS - /* Hang on to this reference -- will be decref'd with loop */ + /* Hang on to this reference -- will be decref'd with loop */ if (loop->retbase) ret = (PyArrayObject *)loop->ret->base; else ret = loop->ret; Py_INCREF(ret); @@ -2618,7 +2736,7 @@ return (PyObject *)ret; fail: - NPY_LOOP_END_THREADS + NPY_LOOP_END_THREADS if (loop) ufuncreduce_dealloc(loop); return NULL; @@ -2647,121 +2765,121 @@ PyUFunc_Reduceat(PyUFuncObject *self, PyArrayObject *arr, PyArrayObject *ind, PyArrayObject *out, int axis, int otype) { - PyArrayObject *ret; + PyArrayObject *ret; PyUFuncReduceObject *loop; - intp *ptr=(intp *)ind->data; - intp nn=ind->dimensions[0]; - intp mm=arr->dimensions[axis]-1; - intp n, i, j; - char *dptr; - NPY_BEGIN_THREADS_DEF + intp *ptr=(intp *)ind->data; + intp nn=ind->dimensions[0]; + intp mm=arr->dimensions[axis]-1; + intp n, i, j; + char *dptr; + NPY_BEGIN_THREADS_DEF - /* Check for out-of-bounds values in indices array */ - for (i=0; i mm)) { - PyErr_Format(PyExc_IndexError, - "index out-of-bounds (0, %d)", (int) mm); - return NULL; - } - ptr++; - } + /* Check for out-of-bounds values in indices array */ + for (i=0; i mm)) { + PyErr_Format(PyExc_IndexError, + "index out-of-bounds (0, %d)", (int) mm); + return NULL; + } + ptr++; + } - ptr = (intp *)ind->data; + ptr = (intp *)ind->data; /* Construct loop object */ loop = construct_reduce(self, &arr, out, axis, otype, UFUNC_REDUCEAT, nn, - "reduceat"); - if (!loop) return NULL; + "reduceat"); + if (!loop) return NULL; - NPY_LOOP_BEGIN_THREADS - switch(loop->meth) { - /* zero-length index -- return array immediately */ - case ZERO_EL_REDUCELOOP: - /* fprintf(stderr, "ZERO..\n"); */ - break; - /* NOBUFFER -- behaved array and same type */ - case NOBUFFER_UFUNCLOOP: /* Reduceat */ - /* fprintf(stderr, "NOBUFFER..%d\n", loop->size); */ - while(loop->index < loop->size) { - ptr = (intp *)ind->data; - for (i=0; ibufptr[1] = loop->it->dataptr + \ - (*ptr)*loop->instrides; - if (loop->obj) - Py_INCREF(*((PyObject **)loop->bufptr[1])); - memcpy(loop->bufptr[0], loop->bufptr[1], - loop->outsize); - mm = (i==nn-1 ? arr->dimensions[axis]-*ptr : \ - *(ptr+1) - *ptr) - 1; - if (mm > 0) { - loop->bufptr[1] += loop->instrides; - loop->bufptr[2] = loop->bufptr[0]; - loop->function((char **)loop->bufptr, - &mm, loop->steps, - loop->funcdata); - UFUNC_CHECK_ERROR(loop); - } - loop->bufptr[0] += loop->ret->strides[axis]; - ptr++; - } - PyArray_ITER_NEXT(loop->it); - PyArray_ITER_NEXT(loop->rit); - loop->bufptr[0] = loop->rit->dataptr; - loop->index++; - } - break; + NPY_LOOP_BEGIN_THREADS + switch(loop->meth) { + /* zero-length index -- return array immediately */ + case ZERO_EL_REDUCELOOP: + /* fprintf(stderr, "ZERO..\n"); */ + break; + /* NOBUFFER -- behaved array and same type */ + case NOBUFFER_UFUNCLOOP: /* Reduceat */ + /* fprintf(stderr, "NOBUFFER..%d\n", loop->size); */ + while(loop->index < loop->size) { + ptr = (intp *)ind->data; + for (i=0; ibufptr[1] = loop->it->dataptr + \ + (*ptr)*loop->instrides; + if (loop->obj) + Py_INCREF(*((PyObject **)loop->bufptr[1])); + memcpy(loop->bufptr[0], loop->bufptr[1], + loop->outsize); + mm = (i==nn-1 ? arr->dimensions[axis]-*ptr : \ + *(ptr+1) - *ptr) - 1; + if (mm > 0) { + loop->bufptr[1] += loop->instrides; + loop->bufptr[2] = loop->bufptr[0]; + loop->function((char **)loop->bufptr, + &mm, loop->steps, + loop->funcdata); + UFUNC_CHECK_ERROR(loop); + } + loop->bufptr[0] += loop->ret->strides[axis]; + ptr++; + } + PyArray_ITER_NEXT(loop->it); + PyArray_ITER_NEXT(loop->rit); + loop->bufptr[0] = loop->rit->dataptr; + loop->index++; + } + break; - /* BUFFER -- misbehaved array or different types */ - case BUFFER_UFUNCLOOP: /* Reduceat */ - /* fprintf(stderr, "BUFFERED..%d\n", loop->size); */ - while(loop->index < loop->size) { - ptr = (intp *)ind->data; - for (i=0; iobj) - Py_INCREF(*((PyObject **)loop->idptr)); - memcpy(loop->bufptr[0], loop->idptr, - loop->outsize); - n = 0; - mm = (i==nn-1 ? arr->dimensions[axis] - *ptr :\ - *(ptr+1) - *ptr); - if (mm < 1) mm = 1; - loop->inptr = loop->it->dataptr + \ - (*ptr)*loop->instrides; - while (n < mm) { - /* Copy up to loop->bufsize elements - to buffer */ - dptr = loop->buffer; - for (j=0; jbufsize; j++, n++) { - if (n == mm) break; - arr->descr->f->copyswap\ - (dptr, - loop->inptr, - loop->swap, NULL); - loop->inptr += loop->instrides; - dptr += loop->insize; - } - if (loop->cast) - loop->cast(loop->buffer, - loop->castbuf, - j, NULL, NULL); - loop->bufptr[2] = loop->bufptr[0]; - loop->function((char **)loop->bufptr, - &j, loop->steps, - loop->funcdata); - UFUNC_CHECK_ERROR(loop); - loop->bufptr[0] += j*loop->steps[0]; - } - loop->bufptr[0] += loop->ret->strides[axis]; - ptr++; - } - PyArray_ITER_NEXT(loop->it); - PyArray_ITER_NEXT(loop->rit); - loop->bufptr[0] = loop->rit->dataptr; - loop->index++; - } - break; - } + /* BUFFER -- misbehaved array or different types */ + case BUFFER_UFUNCLOOP: /* Reduceat */ + /* fprintf(stderr, "BUFFERED..%d\n", loop->size); */ + while(loop->index < loop->size) { + ptr = (intp *)ind->data; + for (i=0; iobj) + Py_INCREF(*((PyObject **)loop->idptr)); + memcpy(loop->bufptr[0], loop->idptr, + loop->outsize); + n = 0; + mm = (i==nn-1 ? arr->dimensions[axis] - *ptr :\ + *(ptr+1) - *ptr); + if (mm < 1) mm = 1; + loop->inptr = loop->it->dataptr + \ + (*ptr)*loop->instrides; + while (n < mm) { + /* Copy up to loop->bufsize elements + to buffer */ + dptr = loop->buffer; + for (j=0; jbufsize; j++, n++) { + if (n == mm) break; + arr->descr->f->copyswap\ + (dptr, + loop->inptr, + loop->swap, NULL); + loop->inptr += loop->instrides; + dptr += loop->insize; + } + if (loop->cast) + loop->cast(loop->buffer, + loop->castbuf, + j, NULL, NULL); + loop->bufptr[2] = loop->bufptr[0]; + loop->function((char **)loop->bufptr, + &j, loop->steps, + loop->funcdata); + UFUNC_CHECK_ERROR(loop); + loop->bufptr[0] += j*loop->steps[0]; + } + loop->bufptr[0] += loop->ret->strides[axis]; + ptr++; + } + PyArray_ITER_NEXT(loop->it); + PyArray_ITER_NEXT(loop->rit); + loop->bufptr[0] = loop->rit->dataptr; + loop->index++; + } + break; + } - NPY_LOOP_END_THREADS + NPY_LOOP_END_THREADS /* Hang on to this reference -- will be decref'd with loop */ if (loop->retbase) ret = (PyArrayObject *)loop->ret->base; @@ -2771,10 +2889,10 @@ return (PyObject *)ret; fail: - NPY_LOOP_END_THREADS + NPY_LOOP_END_THREADS if (loop) ufuncreduce_dealloc(loop); - return NULL; + return NULL; } @@ -2787,68 +2905,68 @@ PyUFunc_GenericReduction(PyUFuncObject *self, PyObject *args, PyObject *kwds, int operation) { - int axis=0; - PyArrayObject *mp, *ret = NULL; - PyObject *op, *res=NULL; - PyObject *obj_ind, *context; - PyArrayObject *indices = NULL; - PyArray_Descr *otype=NULL; + int axis=0; + PyArrayObject *mp, *ret = NULL; + PyObject *op, *res=NULL; + PyObject *obj_ind, *context; + PyArrayObject *indices = NULL; + PyArray_Descr *otype=NULL; PyArrayObject *out=NULL; - static char *kwlist1[] = {"array", "axis", "dtype", "out", NULL}; - static char *kwlist2[] = {"array", "indices", "axis", "dtype", "out", NULL}; + static char *kwlist1[] = {"array", "axis", "dtype", "out", NULL}; + static char *kwlist2[] = {"array", "indices", "axis", "dtype", "out", NULL}; static char *_reduce_type[] = {"reduce", "accumulate", \ - "reduceat", NULL}; - if (self == NULL) { - PyErr_SetString(PyExc_ValueError, "function not supported"); - return NULL; - } + "reduceat", NULL}; + if (self == NULL) { + PyErr_SetString(PyExc_ValueError, "function not supported"); + return NULL; + } - if (self->nin != 2) { - PyErr_Format(PyExc_ValueError, + if (self->nin != 2) { + PyErr_Format(PyExc_ValueError, "%s only supported for binary functions", _reduce_type[operation]); - return NULL; - } - if (self->nout != 1) { - PyErr_Format(PyExc_ValueError, + return NULL; + } + if (self->nout != 1) { + PyErr_Format(PyExc_ValueError, "%s only supported for functions " \ "returning a single value", _reduce_type[operation]); - return NULL; - } + return NULL; + } - if (operation == UFUNC_REDUCEAT) { - PyArray_Descr *indtype; - indtype = PyArray_DescrFromType(PyArray_INTP); - if(!PyArg_ParseTupleAndKeywords(args, kwds, "OO|iO&O&", kwlist2, - &op, &obj_ind, &axis, - PyArray_DescrConverter2, - &otype, + if (operation == UFUNC_REDUCEAT) { + PyArray_Descr *indtype; + indtype = PyArray_DescrFromType(PyArray_INTP); + if(!PyArg_ParseTupleAndKeywords(args, kwds, "OO|iO&O&", kwlist2, + &op, &obj_ind, &axis, + PyArray_DescrConverter2, + &otype, PyArray_OutputConverter, &out)) return NULL; indices = (PyArrayObject *)PyArray_FromAny(obj_ind, indtype, - 1, 1, CARRAY, NULL); + 1, 1, CARRAY, NULL); if (indices == NULL) return NULL; - } - else { - if(!PyArg_ParseTupleAndKeywords(args, kwds, "O|iO&O&", kwlist1, - &op, &axis, - PyArray_DescrConverter2, - &otype, + } + else { + if(!PyArg_ParseTupleAndKeywords(args, kwds, "O|iO&O&", kwlist1, + &op, &axis, + PyArray_DescrConverter2, + &otype, PyArray_OutputConverter, &out)) return NULL; - } + } - /* Ensure input is an array */ + /* Ensure input is an array */ if (!PyArray_Check(op) && !PyArray_IsScalar(op, Generic)) { context = Py_BuildValue("O(O)i", self, op, 0); } else { context = NULL; } - mp = (PyArrayObject *)PyArray_FromAny(op, NULL, 0, 0, 0, context); + mp = (PyArrayObject *)PyArray_FromAny(op, NULL, 0, 0, 0, context); Py_XDECREF(context); - if (mp == NULL) return NULL; + if (mp == NULL) return NULL; /* Check to see if input is zero-dimensional */ if (mp->nd == 0) { @@ -2859,23 +2977,23 @@ } /* Check to see that type (and otype) is not FLEXIBLE */ - if (PyArray_ISFLEXIBLE(mp) || - (otype && PyTypeNum_ISFLEXIBLE(otype->type_num))) { + if (PyArray_ISFLEXIBLE(mp) || + (otype && PyTypeNum_ISFLEXIBLE(otype->type_num))) { PyErr_Format(PyExc_TypeError, - "cannot perform %s with flexible type", + "cannot perform %s with flexible type", _reduce_type[operation]); Py_DECREF(mp); return NULL; } - if (axis < 0) axis += mp->nd; - if (axis < 0 || axis >= mp->nd) { - PyErr_SetString(PyExc_ValueError, "axis not in array"); + if (axis < 0) axis += mp->nd; + if (axis < 0 || axis >= mp->nd) { + PyErr_SetString(PyExc_ValueError, "axis not in array"); Py_DECREF(mp); - return NULL; - } + return NULL; + } - /* If out is specified it determines otype unless otype + /* If out is specified it determines otype unless otype already specified. */ if (otype == NULL && out != NULL) { @@ -2884,10 +3002,10 @@ } if (otype == NULL) { - /* For integer types --- make sure at - least a long is used for add and multiply + /* For integer types --- make sure at + least a long is used for add and multiply reduction --- to avoid overflow */ - int typenum = PyArray_TYPE(mp); + int typenum = PyArray_TYPE(mp); if ((typenum < NPY_FLOAT) && \ ((strcmp(self->name,"add")==0) || \ (strcmp(self->name,"multiply")==0))) { @@ -2908,30 +3026,30 @@ case UFUNC_REDUCE: ret = (PyArrayObject *)PyUFunc_Reduce(self, mp, out, axis, otype->type_num); - break; + break; case UFUNC_ACCUMULATE: ret = (PyArrayObject *)PyUFunc_Accumulate(self, mp, out, axis, otype->type_num); - break; + break; case UFUNC_REDUCEAT: ret = (PyArrayObject *)PyUFunc_Reduceat(self, mp, indices, out, axis, otype->type_num); Py_DECREF(indices); - break; + break; } Py_DECREF(mp); - Py_DECREF(otype); - if (ret==NULL) return NULL; - if (op->ob_type != ret->ob_type) { - res = PyObject_CallMethod(op, "__array_wrap__", "O", ret); - if (res == NULL) PyErr_Clear(); - else if (res == Py_None) Py_DECREF(res); - else { - Py_DECREF(ret); - return res; - } - } - return PyArray_Return(ret); + Py_DECREF(otype); + if (ret==NULL) return NULL; + if (op->ob_type != ret->ob_type) { + res = PyObject_CallMethod(op, "__array_wrap__", "O", ret); + if (res == NULL) PyErr_Clear(); + else if (res == Py_None) Py_DECREF(res); + else { + Py_DECREF(ret); + return res; + } + } + return PyArray_Return(ret); } @@ -2954,35 +3072,35 @@ static void _find_array_wrap(PyObject *args, PyObject **output_wrap, int nin, int nout) { - int nargs, i; - int np = 0; - double priority, maxpriority; - PyObject *with_wrap[NPY_MAXARGS], *wraps[NPY_MAXARGS]; - PyObject *obj, *wrap = NULL; + int nargs, i; + int np = 0; + double priority, maxpriority; + PyObject *with_wrap[NPY_MAXARGS], *wraps[NPY_MAXARGS]; + PyObject *obj, *wrap = NULL; - nargs = PyTuple_GET_SIZE(args); - for (i=0; i= 2) { + nargs = PyTuple_GET_SIZE(args); + for (i=0; i= 2) { wrap = wraps[0]; maxpriority = PyArray_GetPriority(with_wrap[0], PyArray_SUBTYPE_PRIORITY); @@ -3045,47 +3163,47 @@ } } - Py_XDECREF(wrap); - return; + Py_XDECREF(wrap); + return; } static PyObject * ufunc_generic_call(PyUFuncObject *self, PyObject *args, PyObject *kwds) { - int i; - PyTupleObject *ret; - PyArrayObject *mps[NPY_MAXARGS]; - PyObject *retobj[NPY_MAXARGS]; + int i; + PyTupleObject *ret; + PyArrayObject *mps[NPY_MAXARGS]; + PyObject *retobj[NPY_MAXARGS]; PyObject *wraparr[NPY_MAXARGS]; - PyObject *res; + PyObject *res; int errval; - /* Initialize all array objects to NULL to make cleanup easier - if something goes wrong. */ - for(i=0; inargs; i++) mps[i] = NULL; + /* Initialize all array objects to NULL to make cleanup easier + if something goes wrong. */ + for(i=0; inargs; i++) mps[i] = NULL; errval = PyUFunc_GenericFunction(self, args, kwds, mps); if (errval < 0) { - for(i=0; inargs; i++) { - PyArray_XDECREF_ERR(mps[i]); - } - if (errval == -1) - return NULL; - else { - Py_INCREF(Py_NotImplemented); - return Py_NotImplemented; - } + for(i=0; inargs; i++) { + PyArray_XDECREF_ERR(mps[i]); } + if (errval == -1) + return NULL; + else { + Py_INCREF(Py_NotImplemented); + return Py_NotImplemented; + } + } - for(i=0; inin; i++) Py_DECREF(mps[i]); + for(i=0; inin; i++) Py_DECREF(mps[i]); - /* Use __array_wrap__ on all outputs - if present on one of the input arguments. - If present for multiple inputs: - use __array_wrap__ of input object with largest - __array_priority__ (default = 0.0) - */ + /* Use __array_wrap__ on all outputs + if present on one of the input arguments. + If present for multiple inputs: + use __array_wrap__ of input object with largest + __array_priority__ (default = 0.0) + */ /* Exception: we should not wrap outputs for items already passed in as output-arguments. These items should either @@ -3099,90 +3217,90 @@ */ _find_array_wrap(args, wraparr, self->nin, self->nout); - /* wrap outputs */ - for (i=0; inout; i++) { - int j=self->nin+i; + /* wrap outputs */ + for (i=0; inout; i++) { + int j=self->nin+i; PyObject *wrap; - /* check to see if any UPDATEIFCOPY flags are set - which meant that a temporary output was generated - */ - if (mps[j]->flags & UPDATEIFCOPY) { - PyObject *old = mps[j]->base; - Py_INCREF(old); /* we want to hang on to this */ - Py_DECREF(mps[j]); /* should trigger the copy - back into old */ - mps[j] = (PyArrayObject *)old; - } + /* check to see if any UPDATEIFCOPY flags are set + which meant that a temporary output was generated + */ + if (mps[j]->flags & UPDATEIFCOPY) { + PyObject *old = mps[j]->base; + Py_INCREF(old); /* we want to hang on to this */ + Py_DECREF(mps[j]); /* should trigger the copy + back into old */ + mps[j] = (PyArrayObject *)old; + } wrap = wraparr[i]; - if (wrap != NULL) { + if (wrap != NULL) { if (wrap == Py_None) { Py_DECREF(wrap); retobj[i] = (PyObject *)mps[j]; continue; } - res = PyObject_CallFunction(wrap, "O(OOi)", - mps[j], self, args, i); - if (res == NULL && \ - PyErr_ExceptionMatches(PyExc_TypeError)) { - PyErr_Clear(); - res = PyObject_CallFunctionObjArgs(wrap, - mps[j], - NULL); - } - Py_DECREF(wrap); - if (res == NULL) goto fail; - else if (res == Py_None) Py_DECREF(res); - else { - Py_DECREF(mps[j]); - retobj[i] = res; - continue; - } - } + res = PyObject_CallFunction(wrap, "O(OOi)", + mps[j], self, args, i); + if (res == NULL && \ + PyErr_ExceptionMatches(PyExc_TypeError)) { + PyErr_Clear(); + res = PyObject_CallFunctionObjArgs(wrap, + mps[j], + NULL); + } + Py_DECREF(wrap); + if (res == NULL) goto fail; + else if (res == Py_None) Py_DECREF(res); + else { + Py_DECREF(mps[j]); + retobj[i] = res; + continue; + } + } /* default behavior */ - retobj[i] = PyArray_Return(mps[j]); - } + retobj[i] = PyArray_Return(mps[j]); + } - if (self->nout == 1) { - return retobj[0]; - } else { - ret = (PyTupleObject *)PyTuple_New(self->nout); - for(i=0; inout; i++) { - PyTuple_SET_ITEM(ret, i, retobj[i]); - } - return (PyObject *)ret; - } + if (self->nout == 1) { + return retobj[0]; + } else { + ret = (PyTupleObject *)PyTuple_New(self->nout); + for(i=0; inout; i++) { + PyTuple_SET_ITEM(ret, i, retobj[i]); + } + return (PyObject *)ret; + } fail: - for(i=self->nin; inargs; i++) Py_XDECREF(mps[i]); - return NULL; + for(i=self->nin; inargs; i++) Py_XDECREF(mps[i]); + return NULL; } static PyObject * ufunc_geterr(PyObject *dummy, PyObject *args) { - PyObject *thedict; - PyObject *res; + PyObject *thedict; + PyObject *res; - if (!PyArg_ParseTuple(args, "")) return NULL; + if (!PyArg_ParseTuple(args, "")) return NULL; - if (PyUFunc_PYVALS_NAME == NULL) { - PyUFunc_PYVALS_NAME = PyString_InternFromString(UFUNC_PYVALS_NAME); - } - thedict = PyThreadState_GetDict(); - if (thedict == NULL) { - thedict = PyEval_GetBuiltins(); - } - res = PyDict_GetItem(thedict, PyUFunc_PYVALS_NAME); - if (res != NULL) { - Py_INCREF(res); - return res; - } - /* Construct list of defaults */ - res = PyList_New(3); - if (res == NULL) return NULL; - PyList_SET_ITEM(res, 0, PyInt_FromLong(PyArray_BUFSIZE)); - PyList_SET_ITEM(res, 1, PyInt_FromLong(UFUNC_ERR_DEFAULT)); - PyList_SET_ITEM(res, 2, Py_None); Py_INCREF(Py_None); - return res; + if (PyUFunc_PYVALS_NAME == NULL) { + PyUFunc_PYVALS_NAME = PyString_InternFromString(UFUNC_PYVALS_NAME); + } + thedict = PyThreadState_GetDict(); + if (thedict == NULL) { + thedict = PyEval_GetBuiltins(); + } + res = PyDict_GetItem(thedict, PyUFunc_PYVALS_NAME); + if (res != NULL) { + Py_INCREF(res); + return res; + } + /* Construct list of defaults */ + res = PyList_New(3); + if (res == NULL) return NULL; + PyList_SET_ITEM(res, 0, PyInt_FromLong(PyArray_BUFSIZE)); + PyList_SET_ITEM(res, 1, PyInt_FromLong(UFUNC_ERR_DEFAULT)); + PyList_SET_ITEM(res, 2, Py_None); Py_INCREF(Py_None); + return res; } #if USE_USE_DEFAULTS==1 @@ -3195,57 +3313,57 @@ static int ufunc_update_use_defaults(void) { - PyObject *errobj; - int errmask, bufsize; - int res; + PyObject *errobj; + int errmask, bufsize; + int res; - PyUFunc_NUM_NODEFAULTS += 1; + PyUFunc_NUM_NODEFAULTS += 1; res = PyUFunc_GetPyValues("test", &bufsize, &errmask, - &errobj); - PyUFunc_NUM_NODEFAULTS -= 1; + &errobj); + PyUFunc_NUM_NODEFAULTS -= 1; - if (res < 0) return -1; + if (res < 0) return -1; - if ((errmask != UFUNC_ERR_DEFAULT) || \ - (bufsize != PyArray_BUFSIZE) || \ - (PyTuple_GET_ITEM(errobj, 1) != Py_None)) { - PyUFunc_NUM_NODEFAULTS += 1; - } - else if (PyUFunc_NUM_NODEFAULTS > 0) { - PyUFunc_NUM_NODEFAULTS -= 1; - } - return 0; + if ((errmask != UFUNC_ERR_DEFAULT) || \ + (bufsize != PyArray_BUFSIZE) || \ + (PyTuple_GET_ITEM(errobj, 1) != Py_None)) { + PyUFunc_NUM_NODEFAULTS += 1; + } + else if (PyUFunc_NUM_NODEFAULTS > 0) { + PyUFunc_NUM_NODEFAULTS -= 1; + } + return 0; } #endif static PyObject * ufunc_seterr(PyObject *dummy, PyObject *args) { - PyObject *thedict; - int res; - PyObject *val; - static char *msg = "Error object must be a list of length 3"; + PyObject *thedict; + int res; + PyObject *val; + static char *msg = "Error object must be a list of length 3"; - if (!PyArg_ParseTuple(args, "O", &val)) return NULL; + if (!PyArg_ParseTuple(args, "O", &val)) return NULL; - if (!PyList_CheckExact(val) || PyList_GET_SIZE(val) != 3) { - PyErr_SetString(PyExc_ValueError, msg); - return NULL; - } - if (PyUFunc_PYVALS_NAME == NULL) { - PyUFunc_PYVALS_NAME = PyString_InternFromString(UFUNC_PYVALS_NAME); - } - thedict = PyThreadState_GetDict(); - if (thedict == NULL) { - thedict = PyEval_GetBuiltins(); - } - res = PyDict_SetItem(thedict, PyUFunc_PYVALS_NAME, val); - if (res < 0) return NULL; + if (!PyList_CheckExact(val) || PyList_GET_SIZE(val) != 3) { + PyErr_SetString(PyExc_ValueError, msg); + return NULL; + } + if (PyUFunc_PYVALS_NAME == NULL) { + PyUFunc_PYVALS_NAME = PyString_InternFromString(UFUNC_PYVALS_NAME); + } + thedict = PyThreadState_GetDict(); + if (thedict == NULL) { + thedict = PyEval_GetBuiltins(); + } + res = PyDict_SetItem(thedict, PyUFunc_PYVALS_NAME, val); + if (res < 0) return NULL; #if USE_USE_DEFAULTS==1 - if (ufunc_update_use_defaults() < 0) return NULL; + if (ufunc_update_use_defaults() < 0) return NULL; #endif - Py_INCREF(Py_None); - return Py_None; + Py_INCREF(Py_None); + return Py_None; } @@ -3265,7 +3383,7 @@ PyUFuncObject *self; char *fname, *str; Py_ssize_t fname_len=-1; - int offset[2]; + int offset[2]; if (!PyArg_ParseTuple(args, "Oii", &function, &nin, &nout)) return NULL; @@ -3278,15 +3396,15 @@ if (self == NULL) return NULL; PyObject_Init((PyObject *)self, &PyUFunc_Type); - self->userloops = NULL; - self->nin = nin; - self->nout = nout; - self->nargs = nin+nout; - self->identity = PyUFunc_None; - self->functions = pyfunc_functions; + self->userloops = NULL; + self->nin = nin; + self->nout = nout; + self->nargs = nin+nout; + self->identity = PyUFunc_None; + self->functions = pyfunc_functions; - self->ntypes = 1; - self->check_return = 0; + self->ntypes = 1; + self->check_return = 0; pyname = PyObject_GetAttrString(function, "__name__"); if (pyname) @@ -3301,29 +3419,29 @@ - /* self->ptr holds a pointer for enough memory for - self->data[0] (fdata) - self->data - self->name - self->types + /* self->ptr holds a pointer for enough memory for + self->data[0] (fdata) + self->data + self->name + self->types - To be safest, all of these need their memory aligned on void * pointers - Therefore, we may need to allocate extra space. - */ - offset[0] = sizeof(PyUFunc_PyFuncData); - i = (sizeof(PyUFunc_PyFuncData) % sizeof(void *)); - if (i) offset[0] += (sizeof(void *) - i); - offset[1] = self->nargs; - i = (self->nargs % sizeof(void *)); - if (i) offset[1] += (sizeof(void *)-i); + To be safest, all of these need their memory aligned on void * pointers + Therefore, we may need to allocate extra space. + */ + offset[0] = sizeof(PyUFunc_PyFuncData); + i = (sizeof(PyUFunc_PyFuncData) % sizeof(void *)); + if (i) offset[0] += (sizeof(void *) - i); + offset[1] = self->nargs; + i = (self->nargs % sizeof(void *)); + if (i) offset[1] += (sizeof(void *)-i); self->ptr = _pya_malloc(offset[0] + offset[1] + sizeof(void *) + \ - (fname_len+14)); + (fname_len+14)); - if (self->ptr == NULL) return PyErr_NoMemory(); + if (self->ptr == NULL) return PyErr_NoMemory(); Py_INCREF(function); self->obj = function; - fdata = (PyUFunc_PyFuncData *)(self->ptr); + fdata = (PyUFunc_PyFuncData *)(self->ptr); fdata->nin = nin; fdata->nout = nout; fdata->callable = function; @@ -3331,7 +3449,7 @@ self->data = (void **)(((char *)self->ptr) + offset[0]); self->data[0] = (void *)fdata; - self->types = (char *)self->data + sizeof(void *); + self->types = (char *)self->data + sizeof(void *); for (i=0; inargs; i++) self->types[i] = PyArray_OBJECT; str = self->types + offset[1]; @@ -3344,70 +3462,70 @@ self->doc = "dynamic ufunc based on a python function"; - return (PyObject *)self; + return (PyObject *)self; } /*UFUNC_API*/ static int PyUFunc_ReplaceLoopBySignature(PyUFuncObject *func, - PyUFuncGenericFunction newfunc, - int *signature, - PyUFuncGenericFunction *oldfunc) + PyUFuncGenericFunction newfunc, + int *signature, + PyUFuncGenericFunction *oldfunc) { - int i,j; + int i,j; int res = -1; - /* Find the location of the matching signature */ - for (i=0; intypes; i++) { - for (j=0; jnargs; j++) { - if (signature[j] != func->types[i*func->nargs+j]) - break; - } - if (j < func->nargs) continue; - - if (oldfunc != NULL) { - *oldfunc = func->functions[i]; - } - func->functions[i] = newfunc; + /* Find the location of the matching signature */ + for (i=0; intypes; i++) { + for (j=0; jnargs; j++) { + if (signature[j] != func->types[i*func->nargs+j]) + break; + } + if (j < func->nargs) continue; + + if (oldfunc != NULL) { + *oldfunc = func->functions[i]; + } + func->functions[i] = newfunc; res = 0; break; - } - return res; + } + return res; } /*UFUNC_API*/ static PyObject * PyUFunc_FromFuncAndData(PyUFuncGenericFunction *func, void **data, - char *types, int ntypes, - int nin, int nout, int identity, - char *name, char *doc, int check_return) + char *types, int ntypes, + int nin, int nout, int identity, + char *name, char *doc, int check_return) { - PyUFuncObject *self; + PyUFuncObject *self; self = _pya_malloc(sizeof(PyUFuncObject)); if (self == NULL) return NULL; PyObject_Init((PyObject *)self, &PyUFunc_Type); - self->nin = nin; - self->nout = nout; - self->nargs = nin+nout; - self->identity = identity; + self->nin = nin; + self->nout = nout; + self->nargs = nin+nout; + self->identity = identity; - self->functions = func; - self->data = data; - self->types = types; - self->ntypes = ntypes; - self->check_return = check_return; + self->functions = func; + self->data = data; + self->types = types; + self->ntypes = ntypes; + self->check_return = check_return; self->ptr = NULL; self->obj = NULL; - self->userloops=NULL; + self->userloops=NULL; - if (name == NULL) self->name = "?"; - else self->name = name; + if (name == NULL) self->name = "?"; + else self->name = name; if (doc == NULL) self->doc = "NULL"; - else self->doc = doc; + else self->doc = doc; - return (PyObject *)self; + return (PyObject *)self; } /* This is the first-part of the CObject structure. @@ -3460,30 +3578,30 @@ /*UFUNC_API*/ static int PyUFunc_RegisterLoopForType(PyUFuncObject *ufunc, - int usertype, - PyUFuncGenericFunction function, - int *arg_types, - void *data) + int usertype, + PyUFuncGenericFunction function, + int *arg_types, + void *data) { - PyArray_Descr *descr; + PyArray_Descr *descr; PyUFunc_Loop1d *funcdata; - PyObject *key, *cobj; - int i; + PyObject *key, *cobj; + int i; int *newtypes=NULL; - descr=PyArray_DescrFromType(usertype); - if ((usertype < PyArray_USERDEF) || (descr==NULL)) { - PyErr_SetString(PyExc_TypeError, - "unknown user-defined type"); - return -1; - } - Py_DECREF(descr); + descr=PyArray_DescrFromType(usertype); + if ((usertype < PyArray_USERDEF) || (descr==NULL)) { + PyErr_SetString(PyExc_TypeError, + "unknown user-defined type"); + return -1; + } + Py_DECREF(descr); - if (ufunc->userloops == NULL) { - ufunc->userloops = PyDict_New(); - } - key = PyInt_FromLong((long) usertype); - if (key == NULL) return -1; + if (ufunc->userloops == NULL) { + ufunc->userloops = PyDict_New(); + } + key = PyInt_FromLong((long) usertype); + if (key == NULL) return -1; funcdata = _pya_malloc(sizeof(PyUFunc_Loop1d)); if (funcdata == NULL) goto fail; newtypes = _pya_malloc(sizeof(int)*ufunc->nargs); @@ -3572,7 +3690,7 @@ ufunc_dealloc(PyUFuncObject *self) { if (self->ptr) _pya_free(self->ptr); - Py_XDECREF(self->userloops); + Py_XDECREF(self->userloops); Py_XDECREF(self->obj); _pya_free(self); } @@ -3580,11 +3698,11 @@ static PyObject * ufunc_repr(PyUFuncObject *self) { - char buf[100]; + char buf[100]; - sprintf(buf, "", self->name); + sprintf(buf, "", self->name); - return PyString_FromString(buf); + return PyString_FromString(buf); } @@ -3599,72 +3717,72 @@ static PyObject * ufunc_outer(PyUFuncObject *self, PyObject *args, PyObject *kwds) { - int i; - PyObject *ret; - PyArrayObject *ap1=NULL, *ap2=NULL, *ap_new=NULL; - PyObject *new_args, *tmp; - PyObject *shape1, *shape2, *newshape; + int i; + PyObject *ret; + PyArrayObject *ap1=NULL, *ap2=NULL, *ap_new=NULL; + PyObject *new_args, *tmp; + PyObject *shape1, *shape2, *newshape; - if(self->nin != 2) { - PyErr_SetString(PyExc_ValueError, - "outer product only supported "\ - "for binary functions"); - return NULL; - } + if(self->nin != 2) { + PyErr_SetString(PyExc_ValueError, + "outer product only supported "\ + "for binary functions"); + return NULL; + } - if (PySequence_Length(args) != 2) { - PyErr_SetString(PyExc_TypeError, - "exactly two arguments expected"); - return NULL; - } + if (PySequence_Length(args) != 2) { + PyErr_SetString(PyExc_TypeError, + "exactly two arguments expected"); + return NULL; + } - tmp = PySequence_GetItem(args, 0); - if (tmp == NULL) return NULL; - ap1 = (PyArrayObject *) \ - PyArray_FromObject(tmp, PyArray_NOTYPE, 0, 0); - Py_DECREF(tmp); - if (ap1 == NULL) return NULL; + tmp = PySequence_GetItem(args, 0); + if (tmp == NULL) return NULL; + ap1 = (PyArrayObject *) \ + PyArray_FromObject(tmp, PyArray_NOTYPE, 0, 0); + Py_DECREF(tmp); + if (ap1 == NULL) return NULL; - tmp = PySequence_GetItem(args, 1); - if (tmp == NULL) return NULL; - ap2 = (PyArrayObject *)PyArray_FromObject(tmp, PyArray_NOTYPE, 0, 0); - Py_DECREF(tmp); - if (ap2 == NULL) {Py_DECREF(ap1); return NULL;} + tmp = PySequence_GetItem(args, 1); + if (tmp == NULL) return NULL; + ap2 = (PyArrayObject *)PyArray_FromObject(tmp, PyArray_NOTYPE, 0, 0); + Py_DECREF(tmp); + if (ap2 == NULL) {Py_DECREF(ap1); return NULL;} - /* Construct new shape tuple */ - shape1 = PyTuple_New(ap1->nd); - if (shape1 == NULL) goto fail; - for (i=0; ind; i++) - PyTuple_SET_ITEM(shape1, i, - PyLong_FromLongLong((longlong)ap1-> \ - dimensions[i])); + /* Construct new shape tuple */ + shape1 = PyTuple_New(ap1->nd); + if (shape1 == NULL) goto fail; + for (i=0; ind; i++) + PyTuple_SET_ITEM(shape1, i, + PyLong_FromLongLong((longlong)ap1-> \ + dimensions[i])); - shape2 = PyTuple_New(ap2->nd); - for (i=0; ind; i++) - PyTuple_SET_ITEM(shape2, i, PyInt_FromLong((long) 1)); - if (shape2 == NULL) {Py_DECREF(shape1); goto fail;} - newshape = PyNumber_Add(shape1, shape2); - Py_DECREF(shape1); - Py_DECREF(shape2); - if (newshape == NULL) goto fail; + shape2 = PyTuple_New(ap2->nd); + for (i=0; ind; i++) + PyTuple_SET_ITEM(shape2, i, PyInt_FromLong((long) 1)); + if (shape2 == NULL) {Py_DECREF(shape1); goto fail;} + newshape = PyNumber_Add(shape1, shape2); + Py_DECREF(shape1); + Py_DECREF(shape2); + if (newshape == NULL) goto fail; - ap_new = (PyArrayObject *)PyArray_Reshape(ap1, newshape); - Py_DECREF(newshape); - if (ap_new == NULL) goto fail; + ap_new = (PyArrayObject *)PyArray_Reshape(ap1, newshape); + Py_DECREF(newshape); + if (ap_new == NULL) goto fail; - new_args = Py_BuildValue("(OO)", ap_new, ap2); - Py_DECREF(ap1); - Py_DECREF(ap2); - Py_DECREF(ap_new); - ret = ufunc_generic_call(self, new_args, kwds); - Py_DECREF(new_args); - return ret; + new_args = Py_BuildValue("(OO)", ap_new, ap2); + Py_DECREF(ap1); + Py_DECREF(ap2); + Py_DECREF(ap_new); + ret = ufunc_generic_call(self, new_args, kwds); + Py_DECREF(new_args); + return ret; fail: - Py_XDECREF(ap1); - Py_XDECREF(ap2); - Py_XDECREF(ap_new); - return NULL; + Py_XDECREF(ap1); + Py_XDECREF(ap2); + Py_XDECREF(ap_new); + return NULL; } @@ -3672,31 +3790,31 @@ ufunc_reduce(PyUFuncObject *self, PyObject *args, PyObject *kwds) { - return PyUFunc_GenericReduction(self, args, kwds, UFUNC_REDUCE); + return PyUFunc_GenericReduction(self, args, kwds, UFUNC_REDUCE); } static PyObject * ufunc_accumulate(PyUFuncObject *self, PyObject *args, PyObject *kwds) { - return PyUFunc_GenericReduction(self, args, kwds, UFUNC_ACCUMULATE); + return PyUFunc_GenericReduction(self, args, kwds, UFUNC_ACCUMULATE); } static PyObject * ufunc_reduceat(PyUFuncObject *self, PyObject *args, PyObject *kwds) { - return PyUFunc_GenericReduction(self, args, kwds, UFUNC_REDUCEAT); + return PyUFunc_GenericReduction(self, args, kwds, UFUNC_REDUCEAT); } static struct PyMethodDef ufunc_methods[] = { - {"reduce", (PyCFunction)ufunc_reduce, METH_VARARGS | METH_KEYWORDS}, - {"accumulate", (PyCFunction)ufunc_accumulate, - METH_VARARGS | METH_KEYWORDS}, - {"reduceat", (PyCFunction)ufunc_reduceat, - METH_VARARGS | METH_KEYWORDS}, - {"outer", (PyCFunction)ufunc_outer, METH_VARARGS | METH_KEYWORDS}, - {NULL, NULL} /* sentinel */ + {"reduce", (PyCFunction)ufunc_reduce, METH_VARARGS | METH_KEYWORDS}, + {"accumulate", (PyCFunction)ufunc_accumulate, + METH_VARARGS | METH_KEYWORDS}, + {"reduceat", (PyCFunction)ufunc_reduceat, + METH_VARARGS | METH_KEYWORDS}, + {"outer", (PyCFunction)ufunc_outer, METH_VARARGS | METH_KEYWORDS}, + {NULL, NULL} /* sentinel */ }; @@ -3707,184 +3825,184 @@ static PyObject * _makeargs(int num, char *ltr) { - PyObject *str; - int i; - switch (num) { - case 0: - return PyString_FromString(""); - case 1: - return PyString_FromString(ltr); - } - str = PyString_FromFormat("%s1,%s2", ltr, ltr); - for(i = 3; i <= num; ++i) { - PyString_ConcatAndDel(&str, PyString_FromFormat(",%s%d", ltr, i)); - } - return str; + PyObject *str; + int i; + switch (num) { + case 0: + return PyString_FromString(""); + case 1: + return PyString_FromString(ltr); + } + str = PyString_FromFormat("%s1,%s2", ltr, ltr); + for(i = 3; i <= num; ++i) { + PyString_ConcatAndDel(&str, PyString_FromFormat(",%s%d", ltr, i)); + } + return str; } static char _typecharfromnum(int num) { - PyArray_Descr *descr; - char ret; + PyArray_Descr *descr; + char ret; - descr = PyArray_DescrFromType(num); - ret = descr->type; - Py_DECREF(descr); - return ret; + descr = PyArray_DescrFromType(num); + ret = descr->type; + Py_DECREF(descr); + return ret; } static PyObject * ufunc_get_doc(PyUFuncObject *self) { - /* Put docstring first or FindMethod finds it...*/ - /* could so some introspection on name and nin + nout */ - /* to automate the first part of it */ - /* the doc string shouldn't need the calling convention */ - /* construct - y1,y2,,... = name(x1,x2,...) __doc__ - */ - PyObject *outargs, *inargs, *doc; - outargs = _makeargs(self->nout, "y"); - inargs = _makeargs(self->nin, "x"); - doc = PyString_FromFormat("%s = %s(%s) %s", - PyString_AS_STRING(outargs), - self->name, - PyString_AS_STRING(inargs), - self->doc); - Py_DECREF(outargs); - Py_DECREF(inargs); - return doc; + /* Put docstring first or FindMethod finds it...*/ + /* could so some introspection on name and nin + nout */ + /* to automate the first part of it */ + /* the doc string shouldn't need the calling convention */ + /* construct + y1,y2,,... = name(x1,x2,...) __doc__ + */ + PyObject *outargs, *inargs, *doc; + outargs = _makeargs(self->nout, "y"); + inargs = _makeargs(self->nin, "x"); + doc = PyString_FromFormat("%s = %s(%s) %s", + PyString_AS_STRING(outargs), + self->name, + PyString_AS_STRING(inargs), + self->doc); + Py_DECREF(outargs); + Py_DECREF(inargs); + return doc; } static PyObject * ufunc_get_nin(PyUFuncObject *self) { - return PyInt_FromLong(self->nin); + return PyInt_FromLong(self->nin); } static PyObject * ufunc_get_nout(PyUFuncObject *self) { - return PyInt_FromLong(self->nout); + return PyInt_FromLong(self->nout); } static PyObject * ufunc_get_nargs(PyUFuncObject *self) { - return PyInt_FromLong(self->nargs); + return PyInt_FromLong(self->nargs); } static PyObject * ufunc_get_ntypes(PyUFuncObject *self) { - return PyInt_FromLong(self->ntypes); + return PyInt_FromLong(self->ntypes); } static PyObject * ufunc_get_types(PyUFuncObject *self) { - /* return a list with types grouped - input->output */ - PyObject *list; - PyObject *str; - int k, j, n, nt=self->ntypes; - int ni = self->nin; - int no = self->nout; - char *t; - list = PyList_New(nt); - if (list == NULL) return NULL; - t = _pya_malloc(no+ni+2); - n = 0; - for (k=0; ktypes[n]); - n++; - } - t[ni] = '-'; - t[ni+1] = '>'; - for (j=0; jtypes[n]); - n++; - } - str = PyString_FromStringAndSize(t, no+ni+2); - PyList_SET_ITEM(list, k, str); - } - _pya_free(t); - return list; + /* return a list with types grouped + input->output */ + PyObject *list; + PyObject *str; + int k, j, n, nt=self->ntypes; + int ni = self->nin; + int no = self->nout; + char *t; + list = PyList_New(nt); + if (list == NULL) return NULL; + t = _pya_malloc(no+ni+2); + n = 0; + for (k=0; ktypes[n]); + n++; + } + t[ni] = '-'; + t[ni+1] = '>'; + for (j=0; jtypes[n]); + n++; + } + str = PyString_FromStringAndSize(t, no+ni+2); + PyList_SET_ITEM(list, k, str); + } + _pya_free(t); + return list; } static PyObject * ufunc_get_name(PyUFuncObject *self) { - return PyString_FromString(self->name); + return PyString_FromString(self->name); } static PyObject * ufunc_get_identity(PyUFuncObject *self) { - switch(self->identity) { - case PyUFunc_One: - return PyInt_FromLong(1); - case PyUFunc_Zero: - return PyInt_FromLong(0); - } - return Py_None; + switch(self->identity) { + case PyUFunc_One: + return PyInt_FromLong(1); + case PyUFunc_Zero: + return PyInt_FromLong(0); + } + return Py_None; } #undef _typecharfromnum static char Ufunctype__doc__[] = - "Optimized functions make it possible to implement arithmetic "\ - "with arrays efficiently"; + "Optimized functions make it possible to implement arithmetic "\ + "with arrays efficiently"; static PyGetSetDef ufunc_getset[] = { - {"__doc__", (getter)ufunc_get_doc, NULL, "documentation string"}, - {"nin", (getter)ufunc_get_nin, NULL, "number of inputs"}, - {"nout", (getter)ufunc_get_nout, NULL, "number of outputs"}, - {"nargs", (getter)ufunc_get_nargs, NULL, "number of arguments"}, - {"ntypes", (getter)ufunc_get_ntypes, NULL, "number of types"}, - {"types", (getter)ufunc_get_types, NULL, "return a list with types grouped input->output"}, - {"__name__", (getter)ufunc_get_name, NULL, "function name"}, - {"identity", (getter)ufunc_get_identity, NULL, "identity value"}, - {NULL, NULL, NULL, NULL}, /* Sentinel */ + {"__doc__", (getter)ufunc_get_doc, NULL, "documentation string"}, + {"nin", (getter)ufunc_get_nin, NULL, "number of inputs"}, + {"nout", (getter)ufunc_get_nout, NULL, "number of outputs"}, + {"nargs", (getter)ufunc_get_nargs, NULL, "number of arguments"}, + {"ntypes", (getter)ufunc_get_ntypes, NULL, "number of types"}, + {"types", (getter)ufunc_get_types, NULL, "return a list with types grouped input->output"}, + {"__name__", (getter)ufunc_get_name, NULL, "function name"}, + {"identity", (getter)ufunc_get_identity, NULL, "identity value"}, + {NULL, NULL, NULL, NULL}, /* Sentinel */ }; static PyTypeObject PyUFunc_Type = { - PyObject_HEAD_INIT(0) - 0, /*ob_size*/ - "numpy.ufunc", /*tp_name*/ - sizeof(PyUFuncObject), /*tp_basicsize*/ - 0, /*tp_itemsize*/ - /* methods */ - (destructor)ufunc_dealloc, /*tp_dealloc*/ - (printfunc)0, /*tp_print*/ - (getattrfunc)0, /*tp_getattr*/ - (setattrfunc)0, /*tp_setattr*/ - (cmpfunc)0, /*tp_compare*/ - (reprfunc)ufunc_repr, /*tp_repr*/ - 0, /*tp_as_number*/ - 0, /*tp_as_sequence*/ - 0, /*tp_as_mapping*/ - (hashfunc)0, /*tp_hash*/ - (ternaryfunc)ufunc_generic_call, /*tp_call*/ - (reprfunc)ufunc_repr, /*tp_str*/ - 0, /* tp_getattro */ - 0, /* tp_setattro */ - 0, /* tp_as_buffer */ + PyObject_HEAD_INIT(0) + 0, /*ob_size*/ + "numpy.ufunc", /*tp_name*/ + sizeof(PyUFuncObject), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + /* methods */ + (destructor)ufunc_dealloc, /*tp_dealloc*/ + (printfunc)0, /*tp_print*/ + (getattrfunc)0, /*tp_getattr*/ + (setattrfunc)0, /*tp_setattr*/ + (cmpfunc)0, /*tp_compare*/ + (reprfunc)ufunc_repr, /*tp_repr*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + (hashfunc)0, /*tp_hash*/ + (ternaryfunc)ufunc_generic_call, /*tp_call*/ + (reprfunc)ufunc_repr, /*tp_str*/ + 0, /* tp_getattro */ + 0, /* tp_setattro */ + 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT, /* tp_flags */ - Ufunctype__doc__, /* tp_doc */ - 0, /* tp_traverse */ - 0, /* tp_clear */ - 0, /* tp_richcompare */ - 0, /* tp_weaklistoffset */ - 0, /* tp_iter */ - 0, /* tp_iternext */ - ufunc_methods, /* tp_methods */ - 0, /* tp_members */ - ufunc_getset, /* tp_getset */ + Ufunctype__doc__, /* tp_doc */ + 0, /* tp_traverse */ + 0, /* tp_clear */ + 0, /* tp_richcompare */ + 0, /* tp_weaklistoffset */ + 0, /* tp_iter */ + 0, /* tp_iternext */ + ufunc_methods, /* tp_methods */ + 0, /* tp_members */ + ufunc_getset, /* tp_getset */ }; /* End of code for ufunc objects */ Added: branches/multicore/numpy/core/src/ufuncthreadapi.c =================================================================== --- branches/multicore/numpy/core/src/ufuncthreadapi.c 2007-04-10 15:44:17 UTC (rev 3691) +++ branches/multicore/numpy/core/src/ufuncthreadapi.c 2007-04-10 17:54:59 UTC (rev 3692) @@ -0,0 +1,95 @@ +#include +#include "numpy/ufuncthreadapi.h" + +#ifdef WIN32 + /* fixme: npy_byte conflicts with a definition in the windows headers. + */ + #undef npy_byte + #include + +#endif + +/* Global object that stores how ufunc operations are threaded. + fixme: This is potentially a bad idea. At the minimum, we should + store this on a per-thread basis. +*/ + +UFuncThreadSettings thread_settings; + +/* Determine the number of processors on this machine. + Return 1 if it is not possible to determine the value. +*/ + +int number_of_processors() +{ + /* default the number of processors to 1.*/ + int number_of_processors=1; + +#ifdef WIN32 + /* determine the number of processors */ + SYSTEM_INFO siSysInfo; + GetSystemInfo(&siSysInfo); + number_of_processors = (int) siSysInfo.dwNumberOfProcessors; +#endif + + return number_of_processors; +} + +void init_thread_settings(UFuncThreadSettings* settings) +{ + /* default the number of processors to 1.*/ + int processor_count=number_of_processors(); + + /* default to using one thread per processor. + fixme: We probably want to throttle this back on machines with + more than 4 processors unless we figure out better + scaling. + */ + settings->thread_count = processor_count; + settings->use_threads = processor_count > 1; + settings->element_threshold=20000; +} + +/* Python UFunc Threading API */ + +/* Set the parameters that control how ufuncs operations are threaded. */ +static char +doc_setthreading[] = "_setthreading(use_threads, thread_count, element_threshold) determines how numpy threads vector operations.\nIt returns a list of the old settings.\nSee setthreading() for more information on these parameters."; + +static PyObject * +ufunc_setthreading(PyObject *dummy, PyObject *args) +{ + + int use_threads, thread_count, element_threshold; + + if (!PyArg_ParseTuple(args, "iii", &use_threads, &thread_count, &element_threshold)) + return NULL; + + thread_settings.use_threads = use_threads; + thread_settings.thread_count = thread_count; + thread_settings.element_threshold = element_threshold; + + Py_INCREF(Py_None); + return Py_None; +} + +static char +doc_getthreading[] = "_getthreading() returns a list of the form [use_threads, thread_count, element_threshold].\nSee setthreading() for more information on these parameters."; + +static PyObject * +ufunc_getthreading(PyObject *dummy, PyObject *args) +{ + PyObject *res; + + /* Construct list of defaults */ + res = PyList_New(3); + if (res == NULL) + return NULL; + + PyList_SET_ITEM(res, 0, PyInt_FromLong(thread_settings.use_threads)); + PyList_SET_ITEM(res, 1, PyInt_FromLong(thread_settings.thread_count)); + PyList_SET_ITEM(res, 2, PyInt_FromLong(thread_settings.element_threshold)); + + return res; + +} Modified: branches/multicore/numpy/core/src/umathmodule.c.src =================================================================== --- branches/multicore/numpy/core/src/umathmodule.c.src 2007-04-10 15:44:17 UTC (rev 3691) +++ branches/multicore/numpy/core/src/umathmodule.c.src 2007-04-10 17:54:59 UTC (rev 3692) @@ -6,6 +6,7 @@ #include "numpy/ufuncobject.h" #include "abstract.h" #include +#include "numpy/ufuncthreadapi.h" /* A whole slew of basic math functions are provided originally by Konrad Hinsen. */ @@ -2046,6 +2047,7 @@ #include "__umath_generated.c" +#include "ufuncthreadapi.c" #include "ufuncobject.c" @@ -2119,6 +2121,10 @@ METH_VARARGS, NULL}, {"geterrobj", (PyCFunction) ufunc_geterr, METH_VARARGS, NULL}, + {"_setthreading", (PyCFunction) ufunc_setthreading, + METH_VARARGS, doc_setthreading}, + {"_getthreading", (PyCFunction) ufunc_getthreading, + METH_NOARGS, doc_getthreading}, {NULL, NULL, 0} /* sentinel */ }; @@ -2218,6 +2224,9 @@ PyDict_SetItemString(d, "conj", s); PyDict_SetItemString(d, "mod", s2); + /* initialize the default thread settings for the ufuncs. */ + init_thread_settings(&thread_settings); + return; err: /* Check for errors */ Added: branches/multicore/numpy/core/tests/test_threadapi.py =================================================================== --- branches/multicore/numpy/core/tests/test_threadapi.py 2007-04-10 15:44:17 UTC (rev 3691) +++ branches/multicore/numpy/core/tests/test_threadapi.py 2007-04-10 17:54:59 UTC (rev 3692) @@ -0,0 +1,98 @@ +from numpy.testing import * +set_package_path() +from numpy.core.umath import _setthreading, _getthreading +from numpy.core import setthreading, getthreading +restore_path() + +class test_threading_state(NumpyTestCase): + + def check__getthreading(self): + """ Check "low level" _getthreading() api for getting threading info. + """ + use_threads, thread_count, element_threshold = _getthreading() + + # It is impossible to tell what the defaults should be. + # They will vary from machine to machine. Simply check that + # they are sane. + self.assertTrue(use_threads in [0,1]) + self.assertTrue(thread_count>0) + self.assertTrue(element_threshold>0) + + def check__setthreading(self): + """ Check "low level" _setthreading() api for setting threading info. + """ + + _setthreading(1, 4, 100000) + + use_threads, thread_count, element_threshold = _getthreading() + + self.assertEqual(use_threads, 1) + self.assertEqual(thread_count, 4) + self.assertEqual(element_threshold, 100000) + + def check_setthreading(self): + + default = getthreading() + old = setthreading(use_threads=1, thread_count=4, + element_threshold=100000) + + # ensure the returned value from setthreading was the previous state. + self.assertEqual(default, old) + + use_threads, thread_count, element_threshold = getthreading() + + self.assertEqual(use_threads, 1) + self.assertEqual(thread_count, 4) + self.assertEqual(element_threshold, 100000) + + def check_setthreading_use_threads(self): + + default = getthreading() + old = setthreading(use_threads=0) + + # ensure the returned value from setthreading was the previous state. + self.assertEqual(default, old) + + use_threads, thread_count, element_threshold = getthreading() + + self.assertEqual(use_threads, 0) + self.assertEqual(thread_count, default[1]) + self.assertEqual(element_threshold, default[2]) + + def check_setthreading_thread_count(self): + + default = getthreading() + old = setthreading(thread_count=20) + + # ensure the returned value from setthreading was the previous state. + self.assertEqual(default, old) + + use_threads, thread_count, element_threshold = getthreading() + + self.assertEqual(use_threads, default[0]) + self.assertEqual(thread_count, 20) + self.assertEqual(element_threshold, default[2]) + + def check_setthreading_element_threshold(self): + + default = getthreading() + old = setthreading(element_threshold=1e6) + + # ensure the returned value from setthreading was the previous state. + self.assertEqual(default, old) + + use_threads, thread_count, element_threshold = getthreading() + + self.assertEqual(use_threads, default[0]) + self.assertEqual(thread_count, default[1]) + self.assertEqual(element_threshold, 1e6) + + def check_docstrings(self): + self.assertTrue(len(_setthreading.__doc__) > 0) + self.assertTrue(len(_getthreading.__doc__) > 0) + self.assertTrue(len(setthreading.__doc__) > 0) + self.assertTrue(len(getthreading.__doc__) > 0) + + +if __name__ == "__main__": + NumpyTest().run() Added: branches/multicore/numpy/core/threadapi.py =================================================================== --- branches/multicore/numpy/core/threadapi.py 2007-04-10 15:44:17 UTC (rev 3691) +++ branches/multicore/numpy/core/threadapi.py 2007-04-10 17:54:59 UTC (rev 3692) @@ -0,0 +1,44 @@ +""" API for setting/getting the parameters that determine how numpy threads + vector operations. +""" + +__all__ = ['setthreading', 'getthreading'] + +import umath + +def setthreading(use_threads=None, thread_count=None, element_threshold=None): + """ Settings that determine how numpy uses threads on vector operations. + + use_threads -- None, leaves value unaltered. + 0 tells numpy not to use threads on vector operations. + 1 numpy uses threads on vector operations if appropriate. + thread_count -- Number of threads to use for vector operations. + element_threshold -- numpy will only thread vector operations that + have more than this number of elements in the + arrays. + + fixme: In many cases, the thread_count and element_threshold values + might be better as "suggestions" instead of exact values. + We may want to add another thread state value that allows + numpy to pick the best thread settings. + """ + old_settings = umath._getthreading() + + settings = old_settings[:] + if use_threads is not None: + if use_threads: + settings[0] = 1 + else: + settings[0] = 0 + + if thread_count is not None: + settings[1] = int(thread_count) + + if element_threshold is not None: + settings[2] = int(element_threshold) + + umath._setthreading(*settings) + + return old_settings + +getthreading = umath._getthreading \ No newline at end of file From numpy-svn at scipy.org Tue Apr 10 14:23:02 2007 From: numpy-svn at scipy.org (numpy-svn at scipy.org) Date: Tue, 10 Apr 2007 13:23:02 -0500 (CDT) Subject: [Numpy-svn] r3693 - trunk Message-ID: <20070410182302.BB25A39C072@new.scipy.org> Author: eric Date: 2007-04-10 13:22:31 -0500 (Tue, 10 Apr 2007) New Revision: 3693 Modified: trunk/ Log: Initialized merge tracking via "svnmerge" with revisions "1-3687" from http://svn.scipy.org/svn/numpy/branches/multicore Property changes on: trunk ___________________________________________________________________ Name: svnmerge-integrated - /branches/distutils-revamp:1-2752 /trunk:1-2871 + /branches/distutils-revamp:1-2752 /branches/multicore:1-3687 /trunk:1-2871 From numpy-svn at scipy.org Tue Apr 10 14:26:52 2007 From: numpy-svn at scipy.org (numpy-svn at scipy.org) Date: Tue, 10 Apr 2007 13:26:52 -0500 (CDT) Subject: [Numpy-svn] r3694 - branches/multicore Message-ID: <20070410182652.407D139C0FC@new.scipy.org> Author: eric Date: 2007-04-10 13:26:51 -0500 (Tue, 10 Apr 2007) New Revision: 3694 Modified: branches/multicore/ Log: trying to clean up props for svnmerge to work correctly. (Don't hit me... Robert made me do it...) Property changes on: branches/multicore ___________________________________________________________________ Name: svnmerge-integrated - /branches/distutils-revamp:1-2752 /trunk:1-2871 + /branches/distutils-revamp:1-2752 From numpy-svn at scipy.org Tue Apr 10 14:30:09 2007 From: numpy-svn at scipy.org (numpy-svn at scipy.org) Date: Tue, 10 Apr 2007 13:30:09 -0500 (CDT) Subject: [Numpy-svn] r3695 - branches/multicore Message-ID: <20070410183009.63BAE39C0FC@new.scipy.org> Author: eric Date: 2007-04-10 13:30:08 -0500 (Tue, 10 Apr 2007) New Revision: 3695 Modified: branches/multicore/ Log: hand editing merge revision for svnmerge to reflect actual branch revision Property changes on: branches/multicore ___________________________________________________________________ Name: svnmerge-integrated - /branches/distutils-revamp:1-2752 + /branches/distutils-revamp:1-2752 /trunk:1-3687 From numpy-svn at scipy.org Tue Apr 10 14:35:30 2007 From: numpy-svn at scipy.org (numpy-svn at scipy.org) Date: Tue, 10 Apr 2007 13:35:30 -0500 (CDT) Subject: [Numpy-svn] r3696 - in branches/multicore: . numpy/doc/swig Message-ID: <20070410183530.D065E39C072@new.scipy.org> Author: eric Date: 2007-04-10 13:35:30 -0500 (Tue, 10 Apr 2007) New Revision: 3696 Modified: branches/multicore/ branches/multicore/numpy/doc/swig/numpy.i branches/multicore/numpy/doc/swig/numpy_swig.html branches/multicore/numpy/doc/swig/numpy_swig.pdf branches/multicore/numpy/doc/swig/numpy_swig.txt Log: Merged revisions 3688-3695 via svnmerge from http://svn.scipy.org/svn/numpy/trunk ........ r3690 | wfspotz at sandia.gov | 2007-04-10 10:21:28 -0500 (Tue, 10 Apr 2007) | 1 line Added 'array_data()' macros and used it in the typemaps; added new macro to the documentation ........ r3691 | wfspotz at sandia.gov | 2007-04-10 10:44:17 -0500 (Tue, 10 Apr 2007) | 1 line Changed remaining ->nd struct accesses to use array_numdims() macro ........ r3693 | eric | 2007-04-10 13:22:31 -0500 (Tue, 10 Apr 2007) | 3 lines Initialized merge tracking via "svnmerge" with revisions "1-3687" from http://svn.scipy.org/svn/numpy/branches/multicore ........ Property changes on: branches/multicore ___________________________________________________________________ Name: svnmerge-integrated - /branches/distutils-revamp:1-2752 /trunk:1-3687 + /branches/distutils-revamp:1-2752 /trunk:1-3695 Modified: branches/multicore/numpy/doc/swig/numpy.i =================================================================== --- branches/multicore/numpy/doc/swig/numpy.i 2007-04-10 18:30:08 UTC (rev 3695) +++ branches/multicore/numpy/doc/swig/numpy.i 2007-04-10 18:35:30 UTC (rev 3696) @@ -22,6 +22,7 @@ #define array_numdims(a) (((PyArrayObject *)a)->nd) #define array_dimensions(a) (((PyArrayObject *)a)->dimensions) #define array_size(a,i) (((PyArrayObject *)a)->dimensions[i]) +#define array_data(a) (((PyArrayObject *)a)->data) #define array_is_contiguous(a) (PyArray_ISCONTIGUOUS(a)) #define array_is_native(a) (PyArray_ISNOTSWAPPED(a)) @@ -453,7 +454,7 @@ array = obj_to_array_contiguous_allow_conversion($input, DATA_TYPECODE, &is_new_object); npy_intp size[1] = { $1_dim0 }; if (!array || !require_dimensions(array, 1) || !require_size(array, size, 1)) SWIG_fail; - $1 = ($1_ltype) array->data; + $1 = ($1_ltype) array_data(array); } %typemap(freearg) (DATA_TYPE IN_ARRAY1[ANY]) @@ -475,7 +476,7 @@ array = obj_to_array_contiguous_allow_conversion($input, DATA_TYPECODE, &is_new_object); npy_intp size[1] = { -1 }; if (!array || !require_dimensions(array, 1) || !require_size(array, size, 1)) SWIG_fail; - $1 = (DATA_TYPE*) array->data; + $1 = (DATA_TYPE*) array_data(array); $2 = (DIM_TYPE) array_size(array,0); } %typemap(freearg) @@ -499,7 +500,7 @@ npy_intp size[1] = {-1}; if (!array || !require_dimensions(array, 1) || !require_size(array, size, 1)) SWIG_fail; $1 = (DIM_TYPE) array_size(array,0); - $2 = (DATA_TYPE*) array->data; + $2 = (DATA_TYPE*) array_data(array); } %typemap(freearg) (DIM_TYPE DIM1, DATA_TYPE* IN_ARRAY1) @@ -521,7 +522,7 @@ array = obj_to_array_contiguous_allow_conversion($input, DATA_TYPECODE, &is_new_object); npy_intp size[2] = { $1_dim0, $1_dim1 }; if (!array || !require_dimensions(array, 2) || !require_size(array, size, 2)) SWIG_fail; - $1 = ($1_ltype) array->data; + $1 = ($1_ltype) array_data(array); } %typemap(freearg) (DATA_TYPE IN_ARRAY2[ANY][ANY]) @@ -543,7 +544,7 @@ array = obj_to_array_contiguous_allow_conversion($input, DATA_TYPECODE, &is_new_object); npy_intp size[2] = { -1, -1 }; if (!array || !require_dimensions(array, 2) || !require_size(array, size, 2)) SWIG_fail; - $1 = (DATA_TYPE*) array->data; + $1 = (DATA_TYPE*) array_data(array); $2 = (DIM_TYPE) array_size(array,0); $3 = (DIM_TYPE) array_size(array,1); } @@ -569,7 +570,7 @@ if (!array || !require_dimensions(array, 2) || !require_size(array, size, 2)) SWIG_fail; $1 = (DIM_TYPE) array_size(array,0); $2 = (DIM_TYPE) array_size(array,1); - $3 = (DATA_TYPE*) array->data; + $3 = (DATA_TYPE*) array_data(array); } %typemap(freearg) (DIM_TYPE DIM1, DIM_TYPE DIM2, DATA_TYPE* IN_ARRAY2) @@ -591,7 +592,7 @@ array = obj_to_array_contiguous_allow_conversion($input, DATA_TYPECODE, &is_new_object); npy_intp size[3] = { $1_dim0, $1_dim1, $1_dim2 }; if (!array || !require_dimensions(array, 3) || !require_size(array, size, 3)) SWIG_fail; - $1 = ($1_ltype) array->data; + $1 = ($1_ltype) array_data(array); } %typemap(freearg) (DATA_TYPE IN_ARRAY3[ANY][ANY][ANY]) @@ -614,7 +615,7 @@ array = obj_to_array_contiguous_allow_conversion($input, DATA_TYPECODE, &is_new_object); npy_intp size[3] = { -1, -1, -1 }; if (!array || !require_dimensions(array, 3) || !require_size(array, size, 3)) SWIG_fail; - $1 = (DATA_TYPE*) array->data; + $1 = (DATA_TYPE*) array_data(array); $2 = (DIM_TYPE) array_size(array,0); $3 = (DIM_TYPE) array_size(array,1); $4 = (DIM_TYPE) array_size(array,2); @@ -643,7 +644,7 @@ $1 = (DIM_TYPE) array_size(array,0); $2 = (DIM_TYPE) array_size(array,1); $3 = (DIM_TYPE) array_size(array,2); - $4 = (DATA_TYPE*) array->data; + $4 = (DATA_TYPE*) array_data(array); } %typemap(freearg) (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DATA_TYPE* IN_ARRAY3) @@ -670,7 +671,7 @@ npy_intp size[1] = { $1_dim0 }; if (!array || !require_dimensions(array,1) || !require_size(array, size, 1) || !require_contiguous(array) || !require_native(array)) SWIG_fail; - $1 = ($1_ltype) array->data; + $1 = ($1_ltype) array_data(array); } /* Typemap suite for (DATA_TYPE* INPLACE_ARRAY1, DIM_TYPE DIM1) @@ -687,9 +688,9 @@ array = obj_to_array_no_conversion($input, DATA_TYPECODE); if (!array || !require_dimensions(array,1) || !require_contiguous(array) || !require_native(array)) SWIG_fail; - $1 = (DATA_TYPE*) array->data; + $1 = (DATA_TYPE*) array_data(array); $2 = 1; - for (int i=0; ind; ++i) $2 *= array_size(array,i); + for (int i=0; i < array_numdims(array); ++i) $2 *= array_size(array,i); } /* Typemap suite for (DIM_TYPE DIM1, DATA_TYPE* INPLACE_ARRAY1) @@ -707,8 +708,8 @@ if (!array || !require_dimensions(array,1) || !require_contiguous(array) || !require_native(array)) SWIG_fail; $1 = 1; - for (int i=0; ind; ++i) $1 *= array_size(array,i); - $2 = (DATA_TYPE*) array->data; + for (int i=0; i < array_numdims(array); ++i) $1 *= array_size(array,i); + $2 = (DATA_TYPE*) array_data(array); } /* Typemap suite for (DATA_TYPE INPLACE_ARRAY2[ANY][ANY]) @@ -726,7 +727,7 @@ npy_intp size[2] = { $1_dim0, $1_dim1 }; if (!array || !require_dimensions(array,2) || !require_size(array, size, 2) || !require_contiguous(array) || !require_native(array)) SWIG_fail; - $1 = ($1_ltype) array->data; + $1 = ($1_ltype) array_data(array); } /* Typemap suite for (DATA_TYPE* INPLACE_ARRAY2, DIM_TYPE DIM1, DIM_TYPE DIM2) @@ -743,7 +744,7 @@ array = obj_to_array_no_conversion($input, DATA_TYPECODE); if (!array || !require_dimensions(array,2) || !require_contiguous(array) || !require_native(array)) SWIG_fail; - $1 = (DATA_TYPE*) array->data; + $1 = (DATA_TYPE*) array_data(array); $2 = (DIM_TYPE) array_size(array,0); $3 = (DIM_TYPE) array_size(array,1); } @@ -764,7 +765,7 @@ || !require_native(array)) SWIG_fail; $1 = (DIM_TYPE) array_size(array,0); $2 = (DIM_TYPE) array_size(array,1); - $3 = (DATA_TYPE*) array->data; + $3 = (DATA_TYPE*) array_data(array); } /* Typemap suite for (DATA_TYPE INPLACE_ARRAY3[ANY][ANY][ANY]) @@ -782,7 +783,7 @@ npy_intp size[3] = { $1_dim0, $1_dim1, $1_dim2 }; if (!array || !require_dimensions(array,3) || !require_size(array, size, 3) || !require_contiguous(array) || !require_native(array)) SWIG_fail; - $1 = ($1_ltype) array->data; + $1 = ($1_ltype) array_data(array); } /* Typemap suite for (DATA_TYPE* INPLACE_ARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, @@ -800,7 +801,7 @@ array = obj_to_array_no_conversion($input, DATA_TYPECODE); if (!array || !require_dimensions(array,3) || !require_contiguous(array) || !require_native(array)) SWIG_fail; - $1 = (DATA_TYPE*) array->data; + $1 = (DATA_TYPE*) array_data(array); $2 = (DIM_TYPE) array_size(array,0); $3 = (DIM_TYPE) array_size(array,1); $4 = (DIM_TYPE) array_size(array,2); @@ -824,7 +825,7 @@ $1 = (DIM_TYPE) array_size(array,0); $2 = (DIM_TYPE) array_size(array,1); $3 = (DIM_TYPE) array_size(array,2); - $4 = (DATA_TYPE*) array->data; + $4 = (DATA_TYPE*) array_data(array); } /*************************/ @@ -839,7 +840,7 @@ { npy_intp dims[1] = { $1_dim0 }; array = PyArray_SimpleNew(1, dims, DATA_TYPECODE); - $1 = ($1_ltype)((PyArrayObject*)array)->data; + $1 = ($1_ltype) array_data(array); } %typemap(argout) (DATA_TYPE ARGOUT_ARRAY1[ANY]) @@ -863,7 +864,7 @@ $2 = (DIM_TYPE) PyInt_AsLong($input); npy_intp dims[1] = { (npy_intp) $2 }; array = PyArray_SimpleNew(1, dims, DATA_TYPECODE); - $1 = (DATA_TYPE*)((PyArrayObject*)array)->data; + $1 = (DATA_TYPE*) array_data(array); } %typemap(argout) (DATA_TYPE* ARGOUT_ARRAY1, DIM_TYPE DIM1) @@ -887,7 +888,7 @@ $1 = (DIM_TYPE) PyInt_AsLong($input); npy_intp dims[1] = { (npy_intp) $1 }; array = PyArray_SimpleNew(1, dims, DATA_TYPECODE); - $2 = (DATA_TYPE*)((PyArrayObject*)array)->data; + $2 = (DATA_TYPE*) array_data(array); } %typemap(argout) (DIM_TYPE DIM1, DATA_TYPE* ARGOUT_ARRAY1) @@ -903,7 +904,7 @@ { npy_intp dims[2] = { $1_dim0, $1_dim1 }; array = PyArray_SimpleNew(2, dims, DATA_TYPECODE); - $1 = ($1_ltype)((PyArrayObject*)array)->data; + $1 = ($1_ltype) array_data(array); } %typemap(argout) (DATA_TYPE ARGOUT_ARRAY2[ANY][ANY]) @@ -919,7 +920,7 @@ { npy_intp dims[3] = { $1_dim0, $1_dim1, $1_dim2 }; array = PyArray_SimpleNew(3, dims, DATA_TYPECODE); - $1 = ($1_ltype)((PyArrayObject*)array)->data; + $1 = ($1_ltype) array_data(array); } %typemap(argout) (DATA_TYPE ARGOUT_ARRAY3[ANY][ANY][ANY]) Modified: branches/multicore/numpy/doc/swig/numpy_swig.html =================================================================== --- branches/multicore/numpy/doc/swig/numpy_swig.html 2007-04-10 18:30:08 UTC (rev 3695) +++ branches/multicore/numpy/doc/swig/numpy_swig.html 2007-04-10 18:35:30 UTC (rev 3696) @@ -730,6 +730,9 @@

    array_size(a,i)
    Evaluates to the i-th dimension size of a, assuming a can be cast to a PyArrayObject*.
    +
    array_data(a)
    +
    Evaluates to a pointer of type void* that points to the data +buffer of a, assuming a can be cast to a PyArrayObject*.
    array_is_contiguous(a)
    Evaluates as true if a is a contiguous array. Equivalent to (PyArray_ISCONTIGUOUS(a)).
    @@ -945,7 +948,7 @@ Modified: branches/multicore/numpy/doc/swig/numpy_swig.pdf =================================================================== --- branches/multicore/numpy/doc/swig/numpy_swig.pdf 2007-04-10 18:30:08 UTC (rev 3695) +++ branches/multicore/numpy/doc/swig/numpy_swig.pdf 2007-04-10 18:35:30 UTC (rev 3696) @@ -783,29 +783,31 @@ /ProcSet [ /PDF /Text ] >> endobj 218 0 obj << -/Length 3503 +/Length 3653 /Filter /FlateDecode >> stream -x??[?s????B_:????~r\;?I??V'?I2??e????R?????xp?r?t????.4^?2??|? ????8;?l?]??C?? ?_ -7?tl??=?(87??]?L?????????is5 ???"{\??4V6?? ????3i[ ?|^??0=d?????I?7?D?? Xj]=:ZPg3?U??B??*+$??w[??????=U????/?d?p=??'?????t??:#v/?K??&L0 ?DY??Rv????6=>K?.??N???j?? !?????A??? ??7?y?I???i??Rb4??;??D??$B?[,Y???? 4?fX7N?)??\??A? -??>????V?}???a?{cA{p? ?????????)k(4?"?E|???????e?q?{?????E?F??hp????)rA????Wqd?x???y???IA?? T?????? ???????????6???\j??????4y[??A?~??cv? -??l?X??7RE??vI?i?Jva?x?H????t?h??_?w??1??? >?Z???`?????(???;?hDr2??????9b -?=?r??O? ?aD2'?.N?KV??J9R>?T??g ???a?`??|?=????0e??Yw@?3?????V.U]^???W???eX5Z?#??kq=4{???m???,.d?>?,*g7???>???q?^F????-?v}2(D(??40?f???j?%Q????r???FV?O?I ?`????????@?b5? ??????T??0??\ ? ??c?(u{?u???!?S??l ??, ????%r??? eX?T???T?e??q`?6???6?1?#?n???? ?`m&??Xu <4?E?T pr?? -oq??X?a???;>R??? ?9??????#e ?cT/d???7\?\???+?%??C???W??>?>_LXc??k]??-?!j_?????^bU?v?? & ?6???XW?z/?t??p'u]=???!N???6^??&+????o??????8u????A*?8.^??????OId R?;?qH?u?????cz?8?s?"`h?(U???Ax,X???vx,??? C??(`bxH@???'?2?L??/#Z??@?(?S?u?d???TC??8? b???v ?Z?TQ??W?: u??F?w?Y]??c?????:?l? -?^~?$??si%c=T?H??8?W??[T?z>??????u?t!???? ??s??#??TP??5P,??i'??{7~?pWR5?@?z?(X??h -?9?R??x,;'?0;?R??{????eE? ??????j(I]?@AhO?VY?? :????x?eU?N{?E??N???L?e??E??Xs???3;?'~??G/?S??3??t@???##??26??}?Y9??~1????? ??????U????????x???)??/I'k?qe??mL4??h??8E?4]??t????b???c??@u????????I?-.sD+;???d????? ?|^?7?7L??27?:&GR?U9Q?g??ZW??4??j????>????YP?Z?a?Gp??vu?w?9I?7V?????????F?ul?+?7??"??Kx????2???=????~?"?#i?4?~?]?? ?Q1^?qd?x????:J????&F?i?????_E?5h??/???m??l????0??[???s?A???~1?D??,n??eL???PP$|???Y\??? ^1?"???zAK?z??7)?5D;??g&???B%?y??M????P???????P??/E?,?2?D +???,?.??)l?E- +??7???Y?_? ?@PfL?J??2?;??:?yh??m}?tF?g?= k2Z?w?,?u??[ ?? ??Qr??t|?~a???X?2?xH?s??G????2W'$k??L??F?$l(mC{??I_7??Ef????>j@??C??????<?Dn?q?#?*????J|?p??????oR?Q?/???Q?U??L + u???0#B?8?1 +???@??y(IN?!'?! ???|{ST8o??1?[V8 ?? ???????????J???A??J??6?Y0?La?DH??y$xb?u???Q???<3y>?qbv{uvs???N?hB*?\???!?\B??EN3?????Z+?J?5?L6g2????&k???m??8f???Z?V?3??F?h|?&-c???]?%?'R???Aa"]?\?k????;?*??oa????ke[y??%A?5????J=???UJ?]5????M?W1a??_?*????? >?Z???`?????(??v8??Dr2?? +=???:b ?5Z???z??l( #?9yp?pw??d??????L?{?H ???????9???%`!???#?????#A?U????????11?#c?@???E?&~??fu?jU???@???<??T?Zib$?,??????"D?\??eU(?? ?d-,?I5?Ek|,`?$?s9?????vZ?Tuy?_?????k? G????jh????8? )$X\?Q}?I\?Mt??c}-????>?f?? -?>i? +B)" ??[n/?:xITS??T???J?_??p?? ?\9.kio??(&P???5az??e?V? +??,?v?2S??%???e_? ?J????x????'p????0?b?%???Ru??yV+?E??><:??/w|??;?? ?9?????e ?c?(d???7\?\??+?$?????8??dR?/vXc??k]??-?!j_?????^`U?6??5??uO?MJ??w#=K?wXB? UH~S?3?pl??B?u#?$???6/?t???p'u]=??!N???>^??&+??O??~Y??'q? I???TqX??oM'%?????(?p? ????bw$?3:???CK?/@)?:xLT??c?????v?c)m?k?T?2%????Zj4b?M?Z?iN??v???? ?{Iy8????D ?ER?w?4}6e?a?I ????!??j?P?RQ??s*?O?(?4!??Bpv?%????k?j???8?\9?W;????~?# ????;b?? ?-tx?Y> endobj 138 0 obj << -/D [217 0 R /XYZ 74.4095 191.8727 null] +/D [217 0 R /XYZ 74.4095 163.9773 null] >> endobj 54 0 obj << -/D [217 0 R /XYZ 74.4095 191.8727 null] +/D [217 0 R /XYZ 74.4095 163.9773 null] >> endobj 216 0 obj << /Font << /F51 119 0 R /F8 95 0 R /F56 126 0 R /F44 92 0 R >> @@ -1057,24 +1059,28 @@ /ProcSet [ /PDF /Text ] >> endobj 254 0 obj << -/Length 3929 +/Length 3928 /Filter /FlateDecode >> stream -x??ko???{~?Q ?\?6?7?~J/Mr?@?EP4E??i?!?u??\????3;;?].E:??(rvfvv????? o?i:{??N8g??v?Asq ?>?@Fc?0?y?1?tm??6p??h;k&??Nh???;)??????S????BJ)???"?]]?{?}#????????F)?PV?+? ????daJ??$??ekV?K?z???}?????:????#?~{?Vn??7o?? ?????.^?CZ???W )????.?H?aD?'|???ug??? -}???"??6??GP?u??mH?????7R?OL#pw?!????*:kU???i???a;?A?:?Jc?????6?|??????Uh?????w?y?y?F?'??R?1??Z ?!u?J?g?A?nu??=??RF ??T?$?y?j???Wx??o????oE?];/??@?B?????G!=?I,?xI??C E??n???>?.#?6B5?[??.??>?^?3A'???7??N5&.D?"?OxO'w}?&nG3?-x??\??]?v8???^?`?k?W`??Q??%??i??N?h?ckp`=????i?M[C?s????>{s????]}??{??j?????1?E-?????????H2t]?{mr??m??C?!s{?^ednF??????o???A7v?9?wCB??? ???%B???????6G?I???-?????p?=????..??8? ?{????O:?(????X?Q -???;N?????j7??H????Li?A??z?"??B?\?'??~m?I~????????UvN!?p?????>??^? >>????=???|??P at O??_???O??s??T?,W???~???,??+???SL+?^g?|??1??g*??3? ????????%?!?@z?\?@^???c?? :???ls`?"] -???*?r??FmG?Ap??w?u?????i??%?x7?K????K[r??[??O?????O"???? -? ???? ??i?n ~??0?9????O`????)?9jr?|???J=NVJ???,??(?{J?7??%=?36?P>?????<86?????M|.A??c=P#??? ,ef?s???????M?! j??U?m0r??????Nj??-`?u???Th???M????N?VH??V0??ld4? ?a?o??(6y6jr?:G???N`???9~?VuEw?U]??TY???RY?~?L&?]????q?J?#9*rm??D?=.???8?k?????? ?????6`???!N?w? ??2? w?????z???rV/4??^gQ????@??A?&X?s?4?'?? ??????????^C:Pa?V??????? 1p/?????E??wt???????/$%2???S??aG?I???d?+M?{?|9(?2???w??c????Y(6??)??Yv??= -E???8?????I?? H\?j?1=?P????K?b^2?o??Tt'????'?'????????w? ?@?B?????wp???P ??RvmI|???j??3?????u?T5|5kl??D??????????"[>??85???????L??s/G????p?b?????cu?x???!??????^?O??F??????&??-??n??"??8???!?m?.??6??bSf?????.%?}??$ `:?x]3???&_@?W????~?u????&?\??[????]}???????`?%?!??m????L.??_?&??????k?????????a#??. at T???!?????i?1??E???O22?m(???$>=??\'?o??w?? ,Th"?n?????????X???&??I-, P?R?????@xNCR??'??? -,?/0]??W#[aZ??????cGJ?NM*L?C?QZ????s?????3??7?*??? I??????;z??C? #?z??o? ??`?c '2?C??y?/Y~i* ??8$??B ?????}uU?5??:?=;???|??}:?j????K??????A`!E=?Q?ip????"F?\?k???{?M????6 ????+????C???\????b?>??????~O???|EG??^l?]?V??BB"????:'V?^????@???d????(????x????k?e?7?c ?M???Ltm?kG+?c???????sA??(2?Q?Db?pnr?R??-?_G?%?)u???n???9??D???? ~?? +-{?w(??uF_??j?Z??!A?3???C????o???%??Z??tP?N"j6F??Vo?z??j?????@????7w?????Wx??}????[?[Y?bI +?~ +xC???B?k?k?o??|B ????P?*#s3B7 ???M??~[?5p???? ?6$$? ??6?D(p{??????)r??S[??N???p?????????wo"?;???????.{????~?#??!#WJhU??p|???xAajM' ???+a[?.??????Uh/HMC?2bc?jj?8????? ?j??'???x?:??????;?$?? `8=???(?*?*G)???`?AK?tJ??@`?U7Q???v?a??e?????Q`?T2?[+?>???uH?6l?E625?y??jTe???????H??f??P??!?????@??N???T??l$??!3#?~??????Q?4F??j[A~?x???[??J???'???c:?M?M?????q????[8)?{??P??5???0'?&?K@??4???p^s??8S???L@?x?y`w??:aTx? o???j[xz?4&????n??` ;^???2??????B?J????.????U??]?L???"?5Nf!f%??p3u?V4?=%?D.n???Gbe8??y????/?x???T??IjBS?w}?A???>??;?? ?|?_[p??7??d}%?~???_?\b~??>???????????3eouO??b??? +?Iz?+?=???8Gq?KE?r??????????>???????1??u?????? |?????1??p??(?Z?:\b???G?? ???n?;v;???? ??60??a!???\??#??v^?{{?^??????O?f?\"?w?????t?%w???X??? x?$??]?P? ????????F??`??3 +????? ???X@????&????>???d??h???????T?pC??oc???s8????cs????4????m??.? ???h???w?|? )?y???B?8?? ;2O?Ol&+\i??????A??????I?!????t?????U??k??TL?? ?1v? ??Bu?]?\?`??p1G6 c???"'????g2|???RN???|??1B?\??lJ??????????\?????p????:???3Hg??yd`s??` ?1Kt8?1????I????? ?u? ???Y??w??????:?;?V????.????"u? Yw???!?`3BN`?B?'??\?rA?? ???v??cV????;??????_??J?m???pwRRgZ E?7??C??o=?h????|?2C?"?m???+?6W???Ae????? O/e???K?? ?>9???nhf?u:??l????(Pl?S?Z?:?b?{??)q!?s? +?????Fczj??26G???$???d??,/??N?%?OjO?!Ck????0~?z?v???? ??o???;+?????~?%?^g??[[!~?p?j?0j????????=??OE"?|?'qj???7??L??sG????p?b?????cu???????R??B?F???RO??\?i?j[???K??A?H?cr +??6?R?r^F?)?zNykB??c?iy? +??;(?=D? ?J????L?_? ??]?v?sh:?@?S?1?F??VC%????$??Lmp???Q??S(e??>Q?????>?IG?lL?^??s?P?!???=[L???R N;??s? ?????fN{Lw?i?d_????.???????(C??"???E??? M??D??n'^?n'#3??R?7??j?-r? ??eX=???T?>??s?6?<;??P]ry???Q??.???????c?w1???le?9?'???x?= C?D???>?|?0?O??~RF?????VA]y??:??mh?Z?~???????? ?n?O3??(|Ir??hf??6?K+??|H51n?????????-gu}=E??? ?pfy?7??s?z?p?t>EQ?0+&??? ?@???-?OOt*? ?[???3? ????????@??uc?,?? ?iR ???{25?y???T?h'?????K? LWh???V???y?%?y???R?S? +??{?V&??_???g??-?|O?J +?q???0??s??? +????? ??q1? 5O?F?#j?E&zV[z:$'???U??bJ?3?VqM?< ?^???c?INq$5X("?i_????(?S???>?={ ]jB?x??#???v????j{V?Gg?Tm???k????bR? ??P???s?4O]?g???????7??Q??X?h???5G?kNML;??#??#a?g?? ??re:??o???|2t??>????????????x????_?????????J(u N??y?|?????uv???? ?J{?w!)y???~Go?x??aa?\?>???????r,?$C?r?????O`?O?ZM??_???a?????oXH?F????48?w?? #y??5?Q???!????6 ????+????C???\????b?>??????~O????DG??'}??????l???D??????Xz???v?? ??N;?D????}.{?i????!|0\6????`?k?e?+???J5?b?q?xQ"?Rwy????]??N4???8a?%N???????xauL???k?}?8~?? +/2q?_F)???? ???%XI??}=??E?d7/???(?h?V???xD???4#??]+???$)7???b?S?Y7`B????8??5A??Z??Lendstream endobj 253 0 obj << /Type /Page @@ -1215,36 +1221,42 @@ /ProcSet [ /PDF /Text ] >> endobj 274 0 obj << -/Length1 1211 -/Length2 5695 +/Length1 1212 +/Length2 5717 /Length3 532 -/Length 6468 +/Length 6490 /Filter /FlateDecode >> stream -x???yv???mBvcLf 3cKv?E???%$KHv!b?K)?C${ew??w~O???y?_?u??g????????^????p?QsF;????8 Q @?"H??S]????Aq??&S$??%5/8 )H?(??????h? ???j?Z$ ??`??0??\a(?? ?B;!`8?Q@ ? ??????9?RIH?'??#???~??uwA?? -;{y?;? ?` ???????3??8?\?? ??Z0??? S???B" ??_??=?oY( -????<????a?3 ?????a??fsFx?????A?'5w8??+??j#|a????+?Eba?a???4A???,??i?PW???4?JC?8S???E???%~3ao0_?Z\T\\???p?????Ji?;????? -@1??\H????0_?K?+&???n[??1T??)% ???y???????<CB;??bwa???< ?v????????w^ZsA{a~?1,????P ????4???????4~!??7?Jb:?????L????D8?b??D?t?M????& qBO? ?"????H??? ????????e?????? ?1???? ?????~?~#?? ???????~>?????"`y at D?0= q? +-?_:ya00w?_?>????]?g??9Q}x?vR ???2?4P?`??L?X^?hX?>?B6??Y???)4????Y?E?e???>?????{&??!???&N???3?6?[?d?-y?? ?J??r|o]??ht_?bY?&g??k??UM??????^[{??? -?????D?E???????,??????OI"? - ?I????6??????"/???'S?S?e0dAYQY/)????>?z[???oa?e???>?????9w???G?X?? ?7??-?O?????_?w-??,?J*@??7d?x2??y2j`s0cz/?t]!;1????#c j'iF?A?xb??/??\1??P?s?LH???+???8'?-??g?F]]?Z???e?(U??}3?HJE)j???H?U????[sH>????FN?-?_we??S?S2? =????i'?L ?}Ia?zTV?S^?*??^)??h???p?M?l????L?&,?(G&K4O??3/?G?|oH??9?v?l??UJ}?(?????kO??/? ???:?? \???)???re??G/????2??5mY??'_???!??B?????u???X??[??S?????Fh9????K?C????%uS??I??w?X?oh$&?????&??m?UQ??????Mh`?/Hd?O?????$T}????X??&??jG?h??r?hH?M??7tnG???????#?G?^???D_?Wy???Ta{c8??U=+ K >?????`?a?z U?X??x?,?s??H??EL?T???3?nI%?w8?78Zq?_??:!????M?7n?46??x???/?\?n?K?:?@??OT+??$N????c?*??]b-???~IH??? ?w@??0?H?Rl??9???Yqf???m?????????????;?????u$o??s???i?SZ?@?Q???`? ?jI??H???K2X?=r?h??m6???!?+|<3hY(??x?S?UY??????^?i?Z,?IgF???O??yO?eD????$?????????u_?~???3J???q???????2???.?~???????.??9?[+?x???ih)?"???????s2????0????c???????*??{??TYWj?X?MwSH>?B+????f_gV -(???????p?????@t????????}'!NJ?x??M+?&?Q?M???U??b??x?[,??h 8>?Q??"?9??? ?????????9_>U*F??w5//?G???O???Q??6??Q -??????tU???/??;D??>A?*?w?????r??-????e1???SG?r???>4q?Nr?? -????g!??/?|??/???E^lc?????????.?????????='???!?<$k???,?o????ym\1?? ??f r??$Y#?B?J??Bg??(?????}-?Y???? =Fz)p?r ]1I??|???????!??5I@\?j??Vt??????HC? ??_N?T? ->?~V??j) -?????#Yq???;Y~??3 at g#????Px???}?? z!?)QyQ?R*?F?????C???z??N??\???[@_~#cX??8???n??????E(?|??c?????&Z>`gd2??v???L????~??szNW???]?A?)J6???/?Y???P2???????? P?N??n????? ?? ???[Tq?`s`?I??~??j/???)5?e??n?=?`???25D??Iv?P$%(??????73?J?]????QNF?9???1? ????NEj?? -?>W?????Y06??`?xo???Ov}? ??vQa'??*T?~??4\5??Y?a?T9j?s~?F|+k???~???5?\???r???)?B??????4?)?)?I???"??TS?B7?m?5?fMkv Xc?????{*cS????Q??u|4?}?U?TL?.??WL???Pxl????n??^g9tE?&9??(x?????= "????]:JDw?Co???E??^??????^???xJCX?F[??9>?zO+1-?Y???'?$ -??w(?3??A????? ???v?????N{nM}?&??W?3R???A?s??T??|]@u?v?x????9??#?^Z?l?'g1???u?Y???3?A???g?? &????B[+?v?Y?l??.sGI???O??q????????tb??|X??????TH^?h.wO]???Xp??{R??b?p???f????YWm??????DK????L???t?!j}???L????@?:(???????){??rM_???Vm?????I??c[???z?Q??^4??ku????????eD???????'W?r???`?8?"zc?.Bj???^?41???~4???\?J~?(?Ov??q= ??H???R(?H -'?}Z??8??a"???????@?(->e#?@?????i???)n??? -?!FL3?/~??h?c7??1?|~???e\-???\?L??'? ?qf????U???4wl??ixajB???ml>??N?j??L???a?????h?o`?D?`????n???r?D5???r7?[Kz?DK?f??Eb???-p?????B U????????B2???E?Q??c?.yb3JW?e:?y??rFL?[???.???V??u??^??+?8?,?"^?7?"?w??A???'?kb???HJdp\?^?????F ?w?????O?h9 ????,??/Yh(?".?fXO??1???y?" .}???V?c?b?????=????2???????????????????&??bm?4{Xa*??=????x3????T?W9?????n?' -z5???)v???w?L????y?.???T?>ujp?V?????j???%??\?#??-??g ?X????8???\?GD????D?????c?yD?Y??&7?&Y80?????S\?K?U??Caq??~?}UF??????NH?C??7??1?#endstream +x???g\S[??A)JG!?* B??I?????@?Ho??WA??^??R?R?*]D????{u?|??4?9?r?k???g??O??????[?? ???*w ??`!arnn,?Cb??PB??????"?@??4DJZL????q??"?p@^?_E@%g ???w?8?3^E?00$?-TB????V? n?.D?Hh??G??A??h??0@????.?Ny ?nxS@^?I> ?"?Fy?;r?.? ?w??a???j?(?.???q??a????r?l/???? ?Q?U[???1B????????}9;?[?????kWf? ^????*.a???2?????R???F?F?yR''^?{?A?|{f??N???4/????!???1\??7\S?RRAMUs???J1 ho??$5? yB^???|?zt???????-?f?g??V?E??!?? +??? ?$`?7z?3k==?oa?1a??? ??M|?K*&?#~??Q????Gt?u6FAn?a?a????"D?1U?5???Y????s ???;?X?f?*?Q? '\&'2?uf???jb??[,n?$?K???P???7p?+??Nh?t??8??h2U\~? ~???.?Td8?*%_w?????(}w-??S??,??p? ?????t????G?MP??%?????f?d?d?@??j/]?%????????&???13 +E$?j4Oj? *?3??U???O5??I"_C?????;??2wd?g??xo????a$?r\*;????K<2.i?9L ???????JB?T?Z?}?G?m? +2?Z,??O?[h???s??I?r?Y at h???????O???$Q???????????4?7!C2RL ??w7??????:mK$??a?9?c?`????-1???>???B4???o8???w?.M!C??-??V??Q-E)????S??????B??????h???+0'?pS???A=??4?%@O??t?3?M??????????K??$??3??x ? KrRC???#?t^???%W??mqor?b??S?f?????????=?!??3.r??~E?(???-z??I1??u??g ???????%r"F????y?g??0??U??ihW7?????????E???.?8oI??xpi?X??x?yr`??2?+??R)UD?]I?'????????x????<]???????:?e +??"?,????/?????Sp??????ld?O?????}:?{???-??c? ????j?7?,???????+4???_.???!?Zue???v?Y???#D?????3?????1'??#?wA?DU???+5??K?,iG? +???Yl?0???!Z+_?? +?????-Ea????d??????i?????C:??{???mC?????0Vd???H??//6,??-pEg????]?6??&N ?0e?4p> =??} ?X?2??v?. "?L??#?!?Z???{??d???p???U??? ??H?7???}?p?k?.y?H6[?|2???nCC.?~?IW`?i????J?"?i7??V?Mu????OK?? ??x~L????mm????x?yb????h?e???Zx?&??o?^?ct:?B??U ?d=???F+?p? {??+?"?f?7??<O?????,9????e??Z!? ??B???GK3?mF +???DN???????m??i???Oh???W?v?!? ??h?$#? +???*????(?R$??5:???H'f?)?w????c?M??SH? ?fC?_?a?!~????~????0? '????????|?JG?3QT?X}??????m?J[o??6?i!z?E?H?Gf???S? 4?|"Qs%q?o????Uy?\??O?"?\???????R2?"?@n??Gd??(p*5?o??LgM7}???]?!???+??$Y?1sU,???$????L(?L??????VK|??}?n??????I?btu?3?Q???G?a?$$??I?#?3??,K??Q7?*z????????8?,?????XE|??W?|??B???;'???q?4?R???`>?$???????]??h?^=???_?;?E '?u?r???l+??3?+ MAx~h?>L?hJ?D}j????W?'?????VSy?]??]g=?????[g? ???e????9????fY.,[????C??3#?]`_Y????e]?d?N?o??g?Yo?cCN?M????i??????v?L??? ?6/?: uH?G???$????L?R??U?? +P?!K ?O???(???>?bK?,???&6??@?7??T?V????}1?]? ]??=??5y?4+??T??qL??(+e ????JU)Hf9??i ?lD?&S~?p?`?b`???Se53??VC?{??D??s?|7;???)!G#(??}u??m?f3izg??h?r?/#???#? ???M?cS?U??q????e???L??"K?l???8??|J?;qt?>????,?????????7????IX?%?J&????#/@???r???t????~??+v????H?>_4?U???9??Q9?x??n?+???+/}?5??f?[?f??????u???F??????s???Ke ??A??fM??%?k????I?????X e??_E??H?????m?|????z?\4Msg?#tbp??JI?K? ??{????>y???G??!?,??H???[???k(R/?o??????????p;??\?1??:????I?????w?H +??J)m,??????j???????????i?w??7??#?)?)?]?^7??W ??|q?7???P???m!;Z/????j????I???)YXOOE? 5?}?{?????????+??Er ??????G?????E*?????I@?C7????^?.????????, q?9 +7.R???F?z?fj???KwQo?L??? +?,???] +?{9A???^?M????*?'n?f???}??:??| ?2?w9???X?p??d?.?????ny}??)xh ;????????9?3F +???????\???? +?F?Q! s???????8????M?W??4H?? x??$?U????> endobj 273 0 obj << /Ascent 694 /CapHeight 683 /Descent -194 -/FontName /PUEHBA+CMR9 +/FontName /OAPZRV+CMR9 /ItalicAngle 0 /StemV 74 /XHeight 431 /FontBBox [-39 -250 1036 750] /Flags 4 -/CharSet (/hyphen/period/zero/one/two/four/six/seven/colon/C/D/G/S/T/U/a/b/c/d/e/f/i/l/m/n/o/r/s/t/u/x/y) +/CharSet (/hyphen/period/zero/one/two/four/five/seven/colon/C/D/G/S/T/U/a/b/c/d/e/f/i/l/m/n/o/r/s/t/u/x/y) /FontFile 274 0 R >> endobj 279 0 obj -[343 285 0 514 514 514 0 514 0 514 514 0 0 285 0 0 0 0 0 0 0 0 742 785 0 0 806 0 0 0 0 0 0 0 0 0 0 0 571 742 771 0 0 0 0 0 0 0 0 0 0 0 514 571 457 571 457 314 0 0 285 0 0 285 856 571 514 0 0 402 405 400 571 0 0 542 542 ] +[343 285 0 514 514 514 0 514 514 0 514 0 0 285 0 0 0 0 0 0 0 0 742 785 0 0 806 0 0 0 0 0 0 0 0 0 0 0 571 742 771 0 0 0 0 0 0 0 0 0 0 0 514 571 457 571 457 314 0 0 285 0 0 285 856 571 514 0 0 402 405 400 571 0 0 542 542 ] endobj 278 0 obj << /Type /Encoding -/Differences [ 0 /.notdef 45/hyphen/period 47/.notdef 48/zero/one/two 51/.notdef 52/four 53/.notdef 54/six/seven 56/.notdef 58/colon 59/.notdef 67/C/D 69/.notdef 71/G 72/.notdef 83/S/T/U 86/.notdef 97/a/b/c/d/e/f 103/.notdef 105/i 106/.notdef 108/l/m/n/o 112/.notdef 114/r/s/t/u 118/.notdef 120/x/y 122/.notdef] +/Differences [ 0 /.notdef 45/hyphen/period 47/.notdef 48/zero/one/two 51/.notdef 52/four/five 54/.notdef 55/seven 56/.notdef 58/colon 59/.notdef 67/C/D 69/.notdef 71/G 72/.notdef 83/S/T/U 86/.notdef 97/a/b/c/d/e/f 103/.notdef 105/i 106/.notdef 108/l/m/n/o 112/.notdef 114/r/s/t/u 118/.notdef 120/x/y 122/.notdef] >> endobj 190 0 obj << /Length1 750 @@ -1286,11 +1298,11 @@ stream x?SU ?uL?OJu??+?5?3?Rp? ?44P0?3?RUu.JM,???sI,I?R0??4Tp,MW04U00?22?25?RUp?/?,?L?(Q?p?)2Wp?M-?LN?S?M,?H??????????ZR???????Q??Z?ZT????eh????\????????r?g^Z??9D8??&U?ZT t????? @'????T*???q????J???B7??4'?/1d<8?0?s3s*?*?s JKR?|?SR??????B????Y??.?Y???????????kh?g`l -??,v??HM ?,I?PHK?)N?????;|`???9?GziC?,???WRY??`?P ?"??P*??P?6?300*B+?2???????t#S3?????J.` +??,v??HM ?,I?PHK?)N?????;|`??G?E?8iC?,???WRY??`?P ?"??P*??P?6?300*B+?2???????t#S3?????J.` ?L? 2?RR+R+?.????/jQM?BZ~(Z??I? ??% q.L?89?WT?Y*?Z? 644S077?EQ?\ZT??WN+?????2?A??Z???u?Z~?uK??mm+?\_X????????7?D?????Rl:/P1?d????????(??l=U?h?d?_O??E?k?v-X1??t???`????i????_y. ?1?????????:?un~Q???3/??S??}??]?? ???$e~s?]F1????/??Q???m????|<?????/??q'}I???+6???E??g???xT.??G??gt???v??G??U|?????~??]?R????_k?9???:?{?p??G?? ??d}dN<6??-uB?o?H??=c?M?vH??z?q?a???RK?~,K???}????????m??????yo??~?????v? ?_????s>???.#????????{?/?????k????\m?|??r???X???????ad?j|?????R/?,2?p?0, H?IM,*??M,??A/r?endstream +??-??????W???d?????_?~?+ ????i?s?s?`??C???u?I^>??\m?|??r???X???????ad?j|?????R/?,2?p?0, H?IM,*??M,??\Jr?endstream endobj 191 0 obj << /Type /Font @@ -1299,14 +1311,14 @@ /FirstChar 15 /LastChar 15 /Widths 281 0 R -/BaseFont /NBUSYJ+CMSY10 +/BaseFont /YSNXLB+CMSY10 /FontDescriptor 189 0 R >> endobj 189 0 obj << /Ascent 750 /CapHeight 683 /Descent -194 -/FontName /NBUSYJ+CMSY10 +/FontName /YSNXLB+CMSY10 /ItalicAngle -14.035 /StemV 85 /XHeight 431 @@ -1333,15 +1345,15 @@ x???WXS???)?E)K??iH??J??7?!Y?P?[?"E?wDP?^E? ?$?? H? nt??m??????????????c???aJ56?????Am?E??j??\??0B"-?&? ?D?K?????. E*??? ?gL?`?Cw ?I??^???D???+?5p???OB"? "8? ??? +???'$?$H&?.????!?#x??>?K?????. E*??? ?gL?`?Cw ?I??^???D???+?5p???OB"? "8? ??? ??A?????"'??t??/??)? ???O??Rjj?|??H??T???X PUR????XO2$R~?WzG?f??,?p??>B?H?IN$@?2k ?A?????M?R6?????m?*?.U???.?A?d?;?????????}???d??8?*CUg??l??(????8???K97???W?????_9?(M ??Ai~j^? ?k ??y??/?????Z?H+m?6??U?N?af???)?l??fG>o????aQ????H???j=s?U????|????]??????jy?D?-a??<^?????kj?>m?$?w]?o?o????Y|?W?? ;=v??Z????y]u? m?f^?@H??T?E????D(?O??`?_G??Z????K?d`?\bI???a??????G??-?( B????}?O??}?:???,'~???:???f???in?1????P?Ki????w?r?A?V?21?+?"58???^????1??>>?y4d????T?Y??j?????-_j?6?????nO H???}?g(????5?gE?3 ?K???G$p}???Q???z???????\????P?4?????????????*W?I???????O??$?B?5gV???(?[L|????c??c?;??&A=;?}6??j??0????L??? @??:?s?{vu????up?C?2l???"M@?*?'~???O{`?}-??Bd???IX*m?@ ????N??S??&??nv??R??&????6 o?j??p(??`?r??H????o? ??~14?Z???_??:t?*{????7??Dk*???hE??O?6???6t[,??-????T?^(*?????x???LN???/?wt??????z??J/??7?[-Z3,B??O???JK?6?3??$?{?DW??j???{??m??N??F?,d?.??D??]6???????T??c????2Y????A?*Q?{?|????e-??Z???*?????????-;? _]???v?F????u?R?"?1???iI???;?????)?%(??8J???m??????????2??????????/??Tj M??x????2[????L??????uJZv~40?Jp? ?-???e???9??H[?7?3????PW-???g???!??%K??????????l???<?o????\???=yN??^Qe?|????A?4cv?T?????????l?-???~???????#P?b?w? ?? d??|4?/??I?`M????r??+o]???t?/???9R?t}?}e?"?T?b???9???}??b_?}5y??????V?????%w?H at F?????????K????e???7"?~??pFZ?[/??CG U?"?2e?\g??????>Z?????&{??J ?{??h?I?????^??hh9Iv?"V??p?{????:Q7?q?n#?XLmcR? ???[?????_P!?v??? ?????8(??Z???`?e??&g???R#[3??71?k6?0?2n????3??R??? %?J???" ?5??F?v?k!?Nz???m j?????r ????E??E???5V???????9$?[??9-j??n??j ????!??"?????????_??&?p???C)?(Q?6?V?6?????3?X??n?G?5????,A????? P??N?k??s??;?y_?iJ???L?;?_???Q$?_???? ??eb0?0aEl$? -???2Cy??a?>?%lyZi??C?W?`I'_?&?u???4TIK??sb??????B??i}? ?'?N??4???x?vw ?;??p?S??i??}????p|sL?=?+?^?-?|????P[?X???????;?_?V?,?pF?)h?????p??wgj1???x4??w?&??j????????@??w3?D??Z`??,F?U?m?ckz???quq?zw??rH?;?m!??!?uz???] u?UbhC???1[??????f?0F?U? J?R.u?_)?sP?4?v?&?U+0?^?O%?????, ?%??z????ze,???????@?7%:*U?j??p??R???x??ik?:??$Y????Re??^?"?F??WN?k?)?9b?_? ??W?????n???u?91Q~?>K?T?wx+????P~?q?{Y????m?????0???"?7|????? 4z?????7?!?=??i?????\B??a?/?|aK:?T??c,g?J?K@?/pwG?T,r??T|-5???qe????)???h7#?????#??%lyZi??C?W?`I'_?&?u???4TIK??sb??????B??i}? ?'?N??4???x?vw ?;??p?S??i??}????p|sL?=?+?^?-?|????P[?X???????;?_?V?,?pF?)h?????p??wgj1???x4??w?&??j????????@??w3?D??Z`??,F?U?m?ckz???quq?zw??rH?;?m!??!?uz???] u?UbhC???1[??????f?0F?U? J?R.u?_)?sP?4?v?&?U+0?^?O%?????, ?%??z????ze,???????@?7%:*U?j??p??R???x??ik?:??$Y????Re??^?"?F??WN?k?)?9b?_? ??W?????n???u?91Q~?>K?T?wx+????P~?q?{Y????m?????0???"?7|????? 4z?????7?!?=??i?????\B??a?/?|aK:?T??c,g?J?K@?/pwG?T,r??T|-5???qe????)???h7#?????#?> endobj 152 0 obj << /Ascent 694 /CapHeight 683 /Descent -194 -/FontName /XCHJEO+CMTI10 +/FontName /FNUPCO+CMTI10 /ItalicAngle -14.04 /StemV 68 /XHeight 431 @@ -1384,7 +1396,7 @@ x???UX???p?w'H?????????[pww ,??[pw???!k??????s??s? ????U????)H??D??L-$??XYxb ??,?FffQx -1??????????/???? ? ?rX?y?YA?1'go?????Z???$.????????`?fm???????dfc?????????+@????aa???0?1s?ZX?8?3??$?h????????? yX]AR?i?@??N???s Kx&E'P5 ???Z?{rIw{{E????N?_?&6?????????f(8?[?w????)X???;??Q7{3G+{ ??l\%m?,??m???n at w??-???h??e?$*/?+?L??M????????????g?'?_???A????1???????? ?W1 G3'sG++'?4??q|Y6??^ /?0????hO??N@?:??` ??8???;??????????O?????`?O?????L?@3 G??1n??(?j?????3?2M????r?Y?;?_??aV???????? ????L?D at R??????9?%d??We?????????????'?`rr??7s?d??,?;???/i8?? ??????4?????/i?????q? AV!????????B???_??? ??I??:V????_~????????%.*?????``]\l,?????if?@?????$?E??lizkXXxY???-;??}??h ? ?(?????jMTl??????n_>!?B????R???| }L????5??OeZ?{?Kb??????q?O?G??l?#g??? ?????Kp?????T???????"ejq??M?~=????O?\????a??l$???.???[????P[????mt?N]??/%??)?F`?fbBXE?W[gm"?????????b ?`M??L?9u?Yu1??k????s{j ??`?o?p???x'???0s??|6????3?Q???Xm?N?X?%;?'??_cnU??*x????7????`?t0?B?w?X?T?:O??&s ? a?7?????f?H{?jL??|???%$???4???@??1xL?u??????????-;?v????)?\?????sD??RH?8V???KX5????^j?T??z!_q?]?s?b?AjH?????????%????~Z?d(L?6??????By???t[Z???(j?7???7^m?)Ot???s)?I????????j?9?3 ???????<~^??,I?yp8?W???].??Q????F?edL???l?}/?? ?l ?????bF??WLoNI?D?H?  ???9???r ?&Q?"????????v?/ ??i??#?+D????=C?v?u4cU???&??3????Wt?z(???I?6??T?????z_??b4???g?/r?Q????N?NK?_n???\?y???A??????=?????FZ0??a?*? ?nE:???E:?gm8=qw?}?????l?????pl???`?????\?? m_?wU??????????t?????????*?? @@ -1431,7 +1443,7 @@ ?l?????;&???????&~?{?^`?Cr9u\?????5?{??0s+{D(??2?3???N$?J?"?? {???l?&}?r???S??*TA?6?????\????Hb??m??1B??9???3?X?by????,45?S?l3?* ?&?.ba??@f??:???|0?`???_5C?'???l?????Q/?2+?}D??;???^?u3#t?X?F?w?VuO????e?$????O"h{?B?u}?D7?Q??D????0?U???>F?+?????7????,)uS??????{???fb???? ????+X??I5??l/A?s? ????[Sw????z???5?^?9???????:;2?XUi=?? lgLug?[embZF ?g??M??{?tv?>2?`& h???J??Uz??? ?V?^????>???y.X!#[H??0???L?y?F?????x???(???:J! ?0\??t??b??=aK???}?K/?????n^m???:"?????"?^?a????4?!l??B?*??FF??? ???????'Z??????WQ??????(n?Q?S??z??67($???+%????c]?_;?d?????'?????W?{z??,w??T?????F????x??+??z????bP?e??1?5??????????Lv~?[?????????????d$?)??Kg??V@??????`???L??(:t'm?m.?N9HY??#C?Ia??M??P?!?=Y7????P?#??tC_/6?? E.?q????}?&???L?H1r?>X?i??G7??{\&?W????V?/?c????s? ?_yx.nl????,?U7?FlI?????Z@=???$?_????G????9L ^??DB| y G`w??'?s?c??~?3?????.??+WhO????8???|?? ?????-?M??5U ??? <9X'^??????PK??J?mm~?D 8?{?j??Q?y?]5!??Mi?2^??4??3???nya???+???????+??B_{?YT&?-? kR?B_D ?{e???X??????T???RK2q??????ZEyIMT?w0??]?^&??e?1??????e|??h?B??G?f??"-K??????"?^?o$??g?R?P-?P{????c?N????A??P???!pM8??jg?)?p? ?O????????N? ?@2???,??sh?>8j?*ia{xGI?Q?k???????q??]B E+<????C?T?????>U??+#? ?T????4?g?5j0?y$? *D^???o???(???2+?? Mrfk|?)?u?>??v?}Y|C?9?i3? ?c?* o?%??I???? ?r`?I??l>a????P??{? ?y3??G??LTX?|??1??_E???????:?$fn?_10?@}4}???`Op ?.???????? ??????j?[D?-???[)p???N?Q???jkzP??2?????A?P??I???j8?? e?Y???-??????bv??j?$y$?^?x1a?_??????HD? ?}]Zb`?.??O UH????? 0},?????????Y? ?h?4??E ???i??u3?k-?d?????A *???????OL`foatsr0???? ??endstream + [p3??>x1a?_??????HD? ?}]Zb`?.??O UH????? 0},?????????Y? ?h?4??E ???i??u3?k-?d?????A *???????OL`foatsr0???.??endstream endobj 126 0 obj << /Type /Font @@ -1440,14 +1452,14 @@ /FirstChar 33 /LastChar 125 /Widths 285 0 R -/BaseFont /BLCZKP+CMTT10 +/BaseFont /BOOWHV+CMTT10 /FontDescriptor 124 0 R >> endobj 124 0 obj << /Ascent 611 /CapHeight 611 /Descent -222 -/FontName /BLCZKP+CMTT10 +/FontName /BOOWHV+CMTT10 /ItalicAngle 0 /StemV 69 /XHeight 431 @@ -1471,39 +1483,36 @@ /Filter /FlateDecode >> stream -x???e\????A???????;?{???CR:?%%?C iAP?????3????????s^???y3?{?????Z????N?%????T???????[ ?*???????db??A????N2`w?0?[H? ?a ??p? ????@?Lig????;?E???&??#f ;T??6PG??x? ????p$Z?phA??0O?%'&77?????Z?:a?J??d? ?W?????C?P?<???h??????Za???^Px????S\???A ???????_?`G[???pvt?p?????P????A?N????l???I'k(??_%[79[o????;?`vp??]?:Y?g???????????????????]???????f?? _??7??????????????:A?-m??/? ??}0?o??~?['K?7? O ?trv?O????????v??@??_???@?69[?S?!???????$|??o??(? p?r??T?M???o????&x???T????? ??????/??M?g????o'???~? ???????? 7???? ????????pW??n???}#7?????:???w?????????w???????1v??a?N?At(Pve[?????$??@?????r?n???!w???1???i????L??????B????0v????>?0X?bP??s?u7_?EF{m??????+?5???\??NDX3/?~?kY$(b? ?% y~(4?.??}????????]????]?K??4?U???????A&????T??W?Y??fs9??f?=;}?n????e?z,???Z?T.?$?c????N?6??9p?q?????P???{??Se??O??"?K?????;? ?????5,Y???J??a? a??U??oi?kq?????DZu??k0???s(.|??L?? -????)Jt????]5??%????X.????L??*?_aL????_4?V*???S]/???<;_??????ZY???Y???X??Q_/:j?????w?????gCR????zb?T?f?J???8?9L????Q??A?T???^])?jU??ag????O?????p???& Jao[?s?&????uWQ??????(?\??????&fL{M?(G? ???,???k????O*?n? [\a&????? f!y??zG~????WqGwq??z??J?o@ - ?????\?\??L?w?????? ?????K??????'???CXuGf??S_Wn{N???|7v?g??Er?C??A?X?????n?{?)TZ8??K??V43?3??SA@??c?1?????TC????????>?5?????O?@T??M??^?w?G??#?>9t??u???????x?sCV%'?k~?o?R/\??uJ?W?i ???1????<[? (?O??c?:?]{??l?P!?? ?????????,??|mms?I?X?ZZ??|???????@?????>K???Q????7"?' ?=???@?W.I3ou??? ?a.???????JH???Ac^V??D??O?H?A?v1 -???5?#?]-?b`?k???R!l?2?}????????>?&,M???T????E.???>??X =??????g??B??BZ@??Zi?C??S!??p?&W???h?-%S???ewy~???"}>?lA?E??K+V?p#rl???gy? ?z??rQng~?_?_?$?????W9W@??p?'@?=?>& 1?+?>%?B??`I???6??H)?Y???@?H????????u?&`???(k???o?????gy?=?rJ}???`??jl[6?l??[? ???iU??G?7??!???5?G??>?I?$ ?>Ke?W???Uaf?@ m~vl\??BV&#?qG?3?? ???'!nO |?>"u1???????"'pfR??e??=c?E]??Ld???fD???? -???}y?kd?D?K'?O??.???V??????)??n=/????{u??E??2????J)??7Fz??????p????~1sv?AW,?????h??0CV>}-?L?? ?x|s?o1??r\[pi?:\???ma???9?????ma??O???? -?????|!??~|?#?z^pr?????2?To?I$I=Ib??]_n=vH?V2??=K?}?#??????8FCq0?????V\?`?????I?[j???{???????Z?l??@????\?p?\???n'= -HeznF???D???1?bm~?UW%z???*A?2.?Z}c ????J??!^??z?jkJ???)???? ?8?ON???F??{?4??t?`}=7|h?8?cv9#?$$6? L?9??W???5?Y??KP>???0e???!?t???u8:??\= ?????."? ?q?_h?)$????*???V!?I?????? ?W?????{?GC???J}2xJ(?Q???????m?g?|??????1??t?-N?9??B?G?5??GP9??X???._?;?|.??????TQ?s6f??6??S??:?Q??v???? -??s??vo??T_?2745?&??v??????e???WL??+??????cb$F???s1??0? z?^????a????XhS????W?RY????0C?_?t?{q???.$?} -??F\? -X?/?fs??M??'P#??g?????? ?`???I?e9%??!K?4x'?d???} iF ??l*%A??#?h??W???x????W*??????? -e???t?K?-??A?!5?u!???????Y?K0??n????7???? ??ry&;?7???-??????g '??!n?:???kq???2?]?lw??z?\?S????8I?l???9??$/ -E/?Y?-BvY? ?????\?n??;?kT??~??3???c?????D\?>???????9?<3????3??}?4??u? -??o}?????[??I? Q??>???????z????????6????e?????P??-?  2RT??}7?C?I ?????6??? dR????7?Rx*???u??j????4?t?;??Dh?h? ???,??q?h.?+???~Hd9???>AdU?@?|$????v[??Q|???[Q ????x?? ???w{?? ?????~X 0???/_x? ?8?? ????>F$L?r C[?:?? .>9???m?? A??u??\36????t^i??--????rR)?/x?<9?s??-?z??\??? ???x?TN???3X?.????G?6??????????? ???0?-e??r??i??]??U??zVrU5???U~?9UK???n??="T????-?[????v2????ZD?v at q ??B?G?i?X*??7?A3>?Y?6T??????l??O* -s?\fr<:??q?? b??i -\&?/z?+?8.???Me????&eD?;?V?q8[?'???????g???7?G????b???'???BJQ???????? m?3?>`X?? -?,)????? v??? Y??*??/?Dey??'s&? -?Q????F??l??9?C??Ry7'r`??]M??F_???$?,?9?i?????T???????&?V -|o??G??????0s?K??-??>??????C?:??%C=;3:???P?+aY???dg?ff!r???poU;???????6???B ?3dvb?#?bL l??6??AQ?W?8_!_??? p?vX?????~ ?X??6O???h??8?&O???????nI?(`F-??$????????? ?}R?v`|1C?z ?????wa?-d3f?D??v!dYC??????~?T9???&?oH+~?????c?????i??E;???V0??2??1GJH?B???%??0?57?{??QY?r???Fo?????6J?S?????T?o??T??GH?-?X~|??#?/_????h,Q?!W??A???QVH??y?XF????? -?u?[&R? * ?1???Y?????/BH.h??\?I?????uO??df?B5#??????K??N?h??s]?????-Im???????0???}??d????D?????rE??l?H??jQ??a-??3 |?????^???g??A?M? ?? ? `??T?%?i{?DW?xb?+?H??e?O?????? -?????S2?<??n?Ny???{?r"'?*???X??P?A??? ???dN4?????*?cb?5???|lF?n????i?7????G"(??l?:??y6v?;???? ?MN?'a? -? ???L?S??????zN????/?0???rT?????-?NR??l?(:(??0d??-G??????k?????O?'?????=?G?B? -`V? ~bU5\~?%9 ?????a9?|?C9w????=?Ty#??9ks????U?d?w8i??H?????G?V??;AO\?p1? 7??zF???^??2???Wv??G??;???????A_? ?l????x?DG-?Z?1?@ydI?[??MK?q??? ?7*A???\? >????"???/C?[7??b.????????x????3@.????}-?t??~?9???i???/o?8??DA???"??????k?8=\w?59C? Z9?G???>??GB??wT?~?? ????k???g?k??Xoh??;f?y????????"??G[Y_??]???= ?^??????S{???R??M? y??o????z;\??w4?)????7?) -"?{???~???g??B???m?X??4???E>????b3?2?\L4K?,?{???BT?C??????`{5M???4> -?PN??k????? r??!?X??y?;??R?U 6S???`?z???/??-#??q -;??$> $??????i?^q?u???????@RT??Qde???z?N?m??sDPA?,??l??I???,Fbq??{??6? H????????X?p???d???n`b???e???}??9;?>>,?3??????3?Z~[UT?Mu??7?:??????B?????0{????m?endstream +x???e\????A???????A???s?.?????A$?AE?????g??|?u???~k??&:?W?N?P9'G7nNna????7??? ??I??89?????n!!n????? ??/? ?a2????a6V?ni????P? ?P?YC??=?????? ???h?5?? u??_?? ?????????P????*????mr????'B???~7???I?&???$J?&!P???~???x@??WQ?M??? ??? ?5?\S?7?5_?&?????????N ?7?????qs? -?@n??-??@???7????v ?????:?Fn????u?????}a ???????????cx?????~???@x ??????????//????.?+?????!?0????~????6???zA!??N???? ?e????Q???U?v??a?N?A?/Pra[?????$??@?????r?n???!w???1???a????L?w?????L????0v????6?0X??_??s?u7_?EFkm??????+?5???\??vDX3/?&~?KY$(b??% y~(4?6??}????????]??)???K??4o?U???????A??????T???W????fs???f?=;}?f????y?z,???Z ?T.?R?&?s[?6Bmb s?P?|A???????????J???"}D???Gq??w2????wqkX?X_?*?M'L???W???qM?????{_i??O??8?????ijo0uZ*??_??(?EF?Ht? C? ???c?l2?*?2??R? +c2@????????R1^???z??F????wo??VJ???N?HV?>???v???{?|4?T??V????a??%??5???g??J?P??? ;?=F?~x???8?g????5YP +{???k9?O????*?????@???????gy41c?kBF?8??vX?4(/`???_?ltRYuc/?? +3???nL0 ? ,`??=??W?[?m?????%?+??)???KW?r??s?2 ?i~C7-?Pgo?/??s?KZ???a?]?i??O}\??8??V?]?????? ????l??8????5????0???o?:?$??wB??USa?{?d?????I2p]_K|?,??? ;P??s??5'?7??j??guy?Z?@v??\$?i?2^???#?????????B???? f?b1V???Ek???Pi?D%Q??7?.z???B? ?w;]?X_? ?9?|?????> ??3S?F???D6?.D n?F??????-2H??x&E?36D?v>WK?4?!???Hc d???k +??p???????A?t'???Y?I!l????t,WO??.??Gm"!5??DiPE??n??E?Y?????U?????N7??I`f?????tCF????V}??JI??????C?:??%C=;3:?K???&??C?????B???????v???Q?'?m???Hg?l???G???@??Wm?a?????8_!_????q?vX?^????*x?0?y??%W?U)enX?7?y?A?6??wd[?d;??a.]?G? +y??]c?'?4a?W???v[hJB?)??8!e^?a?0 +???H<&?"?8?tK?Y2????`??%?d????%?F???/se???T{>?a}#h???? B?(S?I??]?F4????h?f??0v=9k?E ?q{???\O???1uG??B?{j??am?a? ????_m?ou2K?f?++????f?b]-????[?M?A9???-?????c,??V;-?=#?}?????>??;?(< +#2W?;?#:?u????Ba ?9_X&ij?r????0? +?|m?h????{?g???w g^??????e?8|?-?L|s????,?y??????`?XlxU?????\?????;????? +? ????v? ?;k?0??"S?F6?L??????4??Fu?a??#?Zm6XG?<;???gzn??t'???0`??]\]??)d????|y=?XD????YwM9*?r?z??r'?lq?e??I?????#??????%T?l??'??B??????#Z?o0??_??._?????N???^??????tVV??????C???klD?*p2??;??Av?hY???Z??????+.N???`f5?mP?d'??c?????m??????"?7!???sP??M7????????B?8?(??, ~ 6?qci=n?"!??F%H?r?+???z??S$`R"Z?U?|?F?Z?sx?!????????Q z??9Z??????v6?O6??'8?31z???0?(S??Y[???7?????? +P??_????U?Om???f5kd????xj?w{????-?o????? wj???????U%En??{x_??yM?P?????V??D??O-???????q@9|7?Rr????R?"??p??????E(????KMA?:?H?JBl?d???2?b???vY??P8Sz5/?n"??????@???????J????hW???_??b1C??7??6???????1x#??5~??v??#?,]m?wa.???L???????>@|=? ???n G?g??????'?8{???m????Bq+?UV?qa????JtY??F?jn????5~b{?W?j?7??H?'k??K?> endobj 117 0 obj << /Ascent 694 /CapHeight 686 /Descent -194 -/FontName /JUXUWI+CMBX12 +/FontName /UXRLUO+CMBX12 /ItalicAngle 0 /StemV 109 /XHeight 444 @@ -1545,7 +1554,7 @@ stream x???eT\????[?{???]????qw??????? ??$Xpr???|;9??????f0??5W????UtS?*?1????%?A.??L?|1UV+ ?(%??????$n??????$?&?7?_>N>N6$J????????? ?F???$n??????P0v????05????Z]):?=????????????F??????N?SA?Q%%? 1??????K]?kd???I?Yd???DH?Z~GB{?n#u:????P??YU????(wf??D?M??n?72G&????\?r &??F*6?+.????t?9<>???????BM????-???_???{i?#??2l??g7?iD?????:;-?K[?????V5?????? ???????4??TR?-?t??? ? ???`B;????Wn\?T?)O9 =!????????wOc??????t? ???K7??????=??E???'?f???l????????jQ4?!N?S??Mx??y_ %?Q??%?>???g????????u3?0A?w???????/\)C?h??@*Y????????U???k?ap?p??]???l} ?\\P?D??????K?~&?C?4=??????Ox:}k? ?????^???R'p???????V[??3~?????pop |??]??5&Ti?2?A???z??C??Y?w?|?T}>h*??`Q??2T??A??hFi&???\V??|Nu?o&a??H? ?S`/?{ }?oh??E???_???vZ??#}e?HSp?|\i??E?K?~ -??SxtA?9???h???2;rR??????? ?:G9/??+?k??~^????'=?|\5?????? ?Qd?????????{?UZ?'???&l?KU;m?\o?????p???`????@%+&???????OL`j 4vr??3v?A?_?i??endstream +??SxtA?9???h???2;rR??????? ?:G9/??+?k??~^????'=?|\5?????? ?Qd?????????{?UZ?'???&l?KU;m?\o?????p???`????@%+&???????OL`j 4vr??3v?A?_M???endstream endobj 95 0 obj << /Type /Font @@ -1598,14 +1607,14 @@ /FirstChar 11 /LastChar 122 /Widths 289 0 R -/BaseFont /FILEFM+CMR10 +/BaseFont /LIXKSM+CMR10 /FontDescriptor 93 0 R >> endobj 93 0 obj << /Ascent 694 /CapHeight 683 /Descent -194 -/FontName /FILEFM+CMR10 +/FontName /LIXKSM+CMR10 /ItalicAngle 0 /StemV 69 /XHeight 431 @@ -1629,43 +1638,31 @@ /Filter /FlateDecode >> stream -x???UT???qw?P?????S?C?`A??(-??x?bE???-V????????{?y?????|s?5???V2F?i4u???!V y?3????[ ?&m???????????qYB?gYK(H?-,??Y???^"?|"\?????? -`?a?#I ?r-?j?P;??????AP???#@???m?;??d???? ??+?-???'%g@????????$???C}?=??(???rZ??qU???U?/(`:??eB?k ?:?V????q??hf???K u????M???????N?????)?????4?&j?Fl{tU?Q+'r -?~B?%n?? -?Z.??-?A"o??9?/??-???Wgj??e_???? ?&{?'pHw]?#?/`Z?????3???Fly??????(P???%W??/??+???\FB????d:?>?Y ?????H? ?) -?D????0q??r????y??_t?????)B ?&??j??$?c%??8?WHx?dm:?????;W?>|U?F=??>M?C/????0?q?.?j?y'??BM{eo??-??B???????U?/?f?"?ov'????A?'l ??G?x?o{N?e????B??,??z>?V|??@N9??s????????LV???W?+?U???C????w???9?.???6t????-o???-???j?+??`?e??8\?5????????19??vv?a??e?J?G%?-????Y??V*???1?Yyr#??4g??d?4??CfMU?hov|?F??B???]?&?@?k?'H?\#X???H???G?7d???0ktV??VMR???r?Sp?\K?3?tAgNlt?'t????(?B?\?????^?????{1U??r??+???-?|tt??????Ar?BKp???L?f?+Q?d???6????$_?q?8Pl*????&??z5Z?Pe?,??_ LX?Rk?d??3?\?UQ@????(=??????j-??u?F?Q??}?????U?{&??,??????????|[?}????4eH?MZ???;?????/~?z?M?x=????Q?????J??:?}ZS9?????4K?f??|??9? o??????b??j??? -?7??}??????6Q?E??=?h??e?8???tx?C^* G??%? ?|?+8}kU>;u???????"???9?????c??\rG'EN????X??_Hf@????????J??????2jb9?????w?FA??;??HY?=?(s??j?U?NC?VGL??i???>??~????(?7?U?H??']?A?;6??|F'?I2&?1??????*?? +.?U???d?#Y?^?Y????????eC?g?=?????\???:?? ;????c????+?????E?\????E???-???????l~^?I%?y???2D??f????O?5?????????BU??]???`5?;????????)?EA?k?4?????? r??????J~?!???I?%?m?????I?-????F??FQ??H??|?Z???\M"8? -?kM ?m%5??????????}z?h???,?,j????y????y?l?????ro???_AzvW??y??? ???c?]f?????????{.n?fd -????>??????u?C?%????RRh?"x8???0????????%?Mt????"????2|K?i2??Ks?Ndlf?????@?p??A`_E?h?t?|???>=gnL? 9??T-???h???%??l??u)y??:???c&?f? ?S;????????????w????&l?? ???6?5????? -[m??:???? ?9?w?K#3?P?}???Ic????^???x???>??V g?d?F??V?Y?'?? ?gP 7?/?????;???w???Z??-??w?To??`c?????9e????????$? -t???????? ??????R??vrx????????c?}?d???b??l??F???N??????I?R|q?i????M??? ???6?????? ????C??Q?g5???????d?3I|N8???R? -?6Ux????|H?y? ??Z??K??(a?W????O?H%?????UN???G???????5)[?>X$n???dD???? dRg??#\?q??*??9z?d?????Jo+????Lp??)?0??x??+>?????o/??B???VB?@?}o`[? /`?W+????nU??Pb2?Y?x???wV? a??K????\????????H??L?R?3??M???y?4???J???;&;?~?7_??)q |?: ? -VYwd-VQ??(I@?????TI=???C?#0"???Z?@?b&KL?????x????g?????? ?????????e?????5? 5'?Z[V:?{?F?#??;?C?t????05?X??uIt????O????X?$g:??/N6??????!?'??[?#\??v?n?\1?Z?"?????q?,??R?&??E?J?YW?1)?'?;???_S?~?C?? -???'W,m??9X\n?]^????z?B????O? -?b????+?g??????4?OWs?? ?Q????????#,2???????}??OM?U??b?I?*?&l?S??m?`?\??f???#???|??d?HD?Bn???J???????6_??S?_?G?j,E???y??V???????>?g>??????l????Q+h?h??7?[ -???ub??]?R?nsA??D????fF??\|????4???1?s<*"q??`r_?+?????t?i??a?X?G??no?@Q??B???.??|f?G???FP6TJ???l@?`????]???,SQf%ke??e -V? ????>??F?4Q?k]n?&&?S???} ??d????N?w????????????[??^?p?T,??'??F?_???U?z-b9Q???&.????%??h?X|?+??n^???qm??Ku?h??????%!z??o??;y ???`???B&z6???v??tJ??????*]?Y???I??],?P??&?t"?????A]b?????y?D?o?h? 4????}?=h6?7~g?;?6l???^?o???r?c ???????7(^?d?0????%??a|?#>R0??wV??R?MC?????u$?uQI?3}N?Yz3zlZ????A????`U?Ip6?/?*???{??????25R????\ ??U??Z?kk???|9?W3pi?w?_Hky?T????????o>??m???u?>???v?Ep????&?i?? l{?ae{???/???t??,??~?;?????????HL??;?x????C )yC?3?? ?????|???-???????w?jF????{????K??????#??k??\?$?@"? ?????A~h]??1?[??y?no?B?~????XV7?_?+?>?????ZqFL??z?? -??404.????b?ePy??d??A?I????,;?6?E?????3??c????d?l?x?"'?n?????|???p??dB???f???'???t????JU.R?6m?R??sJ?????VZQ??hMf??KX?!?c]z???7"???????"%n???)?????7.? -??????s?k?h???O???)??&S]-?9\r?mol???6b&m)?????HxF?F?gk???????6c?h?p/y-dw??xD????_c?/??t?,1?g -?4?~5?U?2A???3?*?f??E5e?LI???n%?lK?L?V?????k?u?R?ye?*Wx?`???? yGT????3??_????D??????tys?.%7/? =?6?PHe??.?4??>?+???0???o?t|?K???%?????#d#?@x?6X??1?@;? -????%?n??1?????}???o?x??JG??v?HJ???fZp?????~?n???????v,?????1WI???k??F?/?e??{wpDN?5?5?????????????9??+D??\%??/i???D?k=I???4??u ?->????5??;?#????x??Y??m??OG?????'ob???Gl? Y???6?$??&???X??Y;??i??Gk???+?>HI^??m?.XI????T?:S??/??b??????bjaj???????'??'?4????e???U?i#?p??V??x??????1????????????/!?????????D??g?J*?h?W?$?]???e??m????w?Z%AF?????????M??W?????x?b?>H??!?????`JcHv?!J??2?Z0?]?A? ?Y?i??D???.pk?Z??????2?(???x? SQ?s????Y?r[?E?????`b?(F?D???d?=?F???9?brb+_???7#'>f}??),a??0??D??{??e????+0LVy??o????]y? ???????e9????E W]?zH?|?_\?!? f?m??????????7F."???M??nj;O?VH?JCd<9YL??I?t?8??!?l???7 )? ?d?V|x?????w??&?t!F???ce??:??!l????Q>X?e?,????W?6H???????7??Q?b??D?6? -???????]?{\?3?rRsI??v??D??.r?%N??G???V-V?)E?w??p??~e?6?{d???????? -/??9???_??h?5!??q}b?????=???:?|??Q?7?S??pr??r?_?f8(e?pi]?[?I}?YQ?L??b?yA?$??L?g?o?Pz??[f|??]Z??]q????}U ???"?=Q????2|??|???Y?+?y??S?WQ?_?zk??k?$M??pM????}????/{| ?????==??? y?_?JA ?|??1?Taiz??Ur?&??r??Moo"qJ? ?????C?)?*e???}qmw?G1i??????D?_A??>N??????w>:~~??????`8??>Z[ #?gLc:?c? A?Yi??\???26S}??8~?G?????'Q))R*??Rj???p??????oR????_?\?.?'?I9b0#?????$?????afZ??p??AV?????M[.?Wa??m?3????+?e?F??9??Z?rz;??i?zL<z??? 2_FE?1??????????Z??KMFZ? ??Bkf[:??{???????Q???V9-m??j?d?*?0?q?2#??K?lkL?????8gz43?q???:?_??%D?????D'??xN??p??BrJz?R#?=?????????~B?%a?? +?Z.??-?A"???9??(??-????`n??X?????&{?'p?t_u ,`Z?????7???Fl??JG?~Y?aT??+???W??U{q.+??k?\*?{?<??hSi,?????u2oD__?8?_%?@?????/N?X?B???F?S`6?.j??????>???+$<|?v]?S&??+W?*W?^13A???? +????8_.?k5?&??B???n??-M?C????;?GT?/?f?"Env??M$@?'??C?G,x?o{Ox?????C??,??{??U|??@N9?w?????????LV??WP?+?U???C???p???9?.???6r????-o???-???j?+??d?e??8\?5????????15??vv?a??e?J?O%?-???? Y??Q.?????Yyr#???`??d? 4??CfMU?ho~|?N??B???]?&?P?{? 'H?\#X???H???G?7d????hvU?VOQ*??rIPp?^K??tCgNl??'?????>??B?\????Q?????{??????]w???[>?????{-?????????l}???3W? +???;m??II>S??q??TB??cM_??i????[? ?@?????,~??]g?????????gQz?}s?[=?^?O?????????/2Ho?????L?_Ev??7??;FaCLs??nf???5U?????^?w`7??;g_??????z?;??A?%???5?u???&?J(??Y?Y?&n?V??(6?s"?!??UI?Y??:W'??x??????bt??uV???]9)?o?b ??~!?-?f;??"?*??3R?????9?[bB???l??\2"????,???EW????Zi0???n?{???^?97???FT["???r?9???4???&??????Z??9?V;????W?;?????pf????????,?>?? 8??[?7???5_8??D-K??? ^9n??????(????u?.(rB?m ?,??5?f???M*a??U?a2v?l????|?QT???dU?^???????e- W?y? +? KR?;L???*?awM?F???y?t?\???m.?R?u?iT?qJqTYx?&?8?~J?r ???????6?q]4?J???m9w?(???ZKg[Y?"?a.sdq?~e?4Vo?=?!??I$~??p??`?h W6??3????z??_?????-B?z??.?????k??syFV??#???????????d24??qbf???DB???:?????{??x))?k<?Ma????Z?a????&??TqL ? +qTI?%??4?????h26??????@C?p??!`E?X?L?B??>?gn?? 92T-?r?h\:?%??? +?u)y?????cf?f? ?S;?????r??*??cwJ"????r ?/7??????? [m ???????d??w?K#3?Q?}???Ic$???^????^H?Jq???T6d'???o????5??v??3)F????D???e+8???????H?;?n??|???mh????fQ?p?T?n +???i!???dC?'???????IO?_y?)|??j_? ?!??Xq>???Q?u?-??9u7i????GGv?5zz??8y??y???CM(??????T?;x?:?J +l?????M?h%??I??p??,???V?????v?V?C?-?O????_p]F?? ???~??D*?????rrV?s8??q??Ol?I????"ph??????"0???U?????'?7w???Hf[???4e?+d\?)/???8 ]?Yo???@Gy?4?????0???{C?ZLxA??Z???tt?R~????:??=v????a???_:F]??????<>d??8F??l????]l??z?????D*?@??f?:`????????}??&D?T??rD(???k ??m'??9?nX?P??`???8?0???????K???a ?~?Zae?$?^??Q?v?A?E??OS?:,\X?????H#S??????D?Y? ??)O????0W??G?H7??I}?|5qL??????4?S???#WYk?d?????p?8j?P?-??j2(F???@t?b?R?U`???a?Gi?ZR?7???????|0?????8j})Zl? ??4?j??cy????\?(Y?+???`/_%b8??K???u\???HBc1???J??j?K:???-mXg#V??k??[*PTj_??@?? ?0???w? ??? ?V??? h??y????E?c.??d??L:?L?j???N???oME????nb";u ???oHh?)??x'?~<8A_?+*?~??%??Si?J???z ql ?e?q?????3????Q?x?F??#???????9??:???EN1?d?ID:b?]?+???0s??o?t~?K???%?????'b'?@x?6T??1??p;?????%?n??1????6}1??o?t??JO??v?HJ???nVp?????~??K???m?Y?Xx????c???7y??'??t ^\?H'?4??8???{k4 ?'?/c?%?Os??W???-??>??q??vk?2<"??z &? +??il???Z|X"??k??w?G?+?*?????(R?.-??2?u?CO??< ???V????'DmHIT?K??o?t'?v c?>[????u?W?c??????]?D?#f??s????"?[:_}?: ?g???u???? +?|#?:?9n??????????n/??Q?k?Q?????SB?bj? E;& ???\?p? ??Pr?p???I,?,?5???F?r???/??+D?h.? ??}?&?j ???????????????p?Y??s#??<)???E?8k?WC?aK??oK?V?>?- at +?Fj>P5g^?????)}?m???`K???4?_(?? ;:???U??cz???????Fk3?[??Gc??-'h???C?0OW????J?]?? ???CB??n???4M=?? ?d?D???????i???>`?C]?bSJU???*s?7?6R? ???n?+?x?s???????7Z?O?X?^????D>Irq$?{?F???m?????i?i^?+???e oM?Q???*??k???>??????M4M?w?~_8y a?mn? ??38?9M?Q>???'??>#8G$b%tE????J8?2? ??q?F'[(F?D???T?=?F???9????V$?d?oF^b??~95 RX?^+i???>??4\9?b?[9Wd???? ?V0?a?????s????qF!??Gy???? A/?21??r?s25??????e?[D???n}??????n???^?#*e?m?????????0A."???M??ij?O?QL?JC?:9YL??I?t??wS???]F? &????%I3?l.?W?5)????)???o?7??\?]??1??Q??y'1??-???d??b?!?( ???[???(>?l?3|-N???s?w????5' ????2??"?RL(]???/?~? ?=j?X??D???????EK??/?zw;% ??@?]???Q?p??7i?????i.???????1X?@u????1????? ????c?flo#??Bu ZDq,??tG?~?FY2????2\??z???WUMX[?????vG???$???c??$??????S?? +?(?????>?Y???P??????JB.N?`?cn?.?? qh?N?i??#$|]5???4??>?(h???&sO?????+q8?a[???> endobj 90 0 obj << /Ascent 694 /CapHeight 686 /Descent -194 -/FontName /JFGVEE+CMBX10 +/FontName /NRMOAC+CMBX10 /ItalicAngle 0 /StemV 114 /XHeight 444 @@ -1705,20 +1702,19 @@ /Filter /FlateDecode >> stream -x???e\T{??I?A?8(?0? !?)?? ?#0?P????? %?C????H?t?????;z?^??/w_?g?ys?O???aa?OHT?D?}?K???#1?~3?B??6????phl? z?P??????K??/g[?Y????\?6?R7FG??@?o??@=??#N`?d?H? ?|???????H2???4 ??HMV???????JK????'?????0}?????????{????19???????NjF??k???YW&_ivs?v?/????????*????????x??c?i??????????U? ?(?9JO???,N8 ?:?1?:0ff??I?` ????o?%,??(??????8Y?)l?Z??7?!??????q?;/v????v???i?????{??"?q(^?9?y??Zv???_b?dT?l5??SN????k??????er???=]??f gL??/???A???x?:w??9)??U?Ryt?,??x???0?b?$???Q???-?3^?J??P??Z"s?[???4??Xz?y??K??&_?7Eb'??????Do?G???3?? Ny??????~?Q$-g;??M?M:%?V{???qI??zqy?X?D????)?~??+??FC??cF??*7CJl?n?+??M?R*?????&Yd?X6$J]"?J??S?v? ?~?u???(??k?"r"????e??????9??(?]?Sp??^?zt8?#??YW???Hk?m?k?q?W.Go????s?N????Pi[??\?! ????????3?? -?`??w??S ?FO%?r??lD??????B?2?????O$?l>a? ??,=\??yA?F?G???h?P?????y???0}?M? ??????S???. b:?4k[8r??pU? }???4(?:???t v? -??Z???N??#????9??EsY???,|?n?aM2K??oe??t??+$?iMc???U???? @??o>?T??0=???HZ?Tl?3???\????\????????% 4?? ???m????:,?k?Gc$^e??|O"???>_/?1??bO????@??g??Fk?Kx???????x???T??????iEK8?y??6?&??VO?c? -??~?????K ????q????H?X??7??B??Fc?_??gw???]]2$??????s???l??K?v???-[A??A/??????u???9?G??Z .?6f???NQg??F?>??r?ix?#?????????W?e????? ??6{??ko??G}?W?????????NKdt?s?????bO|E????6??H?XM?;>???????Y??U??~x[? -?51??UNs;y?lK ??G%????^??????m??\?.a??;??q?)?j??? I???,,j? Suz?d?J?E??T -???9?&?? - O??\?n???2?FTl?<$3?N?HF?q,???$7?q?h!Ho???q~!fGA]W?8?D??x?? ???W1sz?)??G??#h?????Pv?x?z?????7?~K?n -E???a.@????H?2p?+?8????.?':?9.O??~I??W ???_?? ?@|???m?L??>???????7??U? ?????J??3??)$4?1????~?????,jx +???\1?????{j?*?!%????|??????5IX[???4 ???????L???t???B?????9?????}We??:??????o??Mi??VV?-?0???s3?r?_ej74'?D`??q:?7 f??3?7???{#?9;???\7h???Amy???i??O?????R?>|.?d?>??R?MsCJ?5????{??F???] ??cls? ??Z????I,T)h.U?zI?+N??????xvRE?O?/^?????~???%D@|?s?????]+?3K????{k_??&???DS"???r???R?E?Q?/???w?h@Z??k??]X b(m%&?bK?H?m?????e?JP6)??U???Q??3lb??a^???_5?????x|yLM?]m`??????#f?????/|??I??Y??!D?5??e??e\???Fy??+????5If|?T/$8?`=e5??xZ?~`?? ?1S????????U q?[n=*t?6X_???????????? $?k?33??-+}????Eg???BR??`[??i????[W/?:F???^??Z?~??T2+Ld????),F???? ???4L? -?????*???+D_%v?~x???Q8?h??lNQ????/??????????3C^9?5i/???r"e1?o??%? =A>?4?????;?????|^????H? ??cKYg?R?J?A'b?9??=q?R[z??? T???????q??Ws8;??j???h??????????????Mq?? .???????<`??p?????????x?k?|,=??q??????j???G$?M??X???q??K??)?<]O?(?:^??__??p7>???Yn}???q.?:??????????? ??+yz??k1??????7?kG]JC?7'I8?3??&?m>????lR??1/???m p???N??.Z%?F\?x#[??[??f?C??s#???????O?U ????cl|nW? ?y=~|???7-?k???2&S??????G??H???*/?????6??u?;?=?l3:??D}"???!q?U7e?(g????x????S?Q? ?;??W(?????|???W?x8{??t8?M???I?!?????(?mD?b???D?Ye??P?w?3?:??(?[???x=??h?B??d???],???8S?".~3C1[e?k???X???u?+1?!????zI?????9??z??????7??????U??I??Q??d???x>?R??w9?9??!?Lx? ?N?a????N?Z??VE??X?I\??y4UN??)????W?????Al?A?#I?T???7?r?7|j????/z???b? ???vcD???j?^?sp????A?9?Lf??? ?Z????p???P?9?????? ?*F?? ? L?"???={z?'????3>&????&???]?Ih???? I?,!E??;V???T?/????????????+d?Z&???>?4M?v??H|?~?[?Wi??|??c??-,?q??E?-3i?.'??,l??'x u{?D???0???tRYo+??dv>_;_t?3nHI???L?????????`?x7?LP?wU??T(?u ?????6?Z?xu~-kF??^]????`???T>}K?dC&?F???`?JW????J*?O?r'?YhJ?y??< -?Q?mf??L!??K??+????.$L??|4|? ?7>?N??P?J???W>3??*Y\??Q ???????B?.P?`??| -9???*?{??B?????lk{?m? ?I??H3????G?Xr:???????G???%??Z?????M8?g???$?F?Ddu/ ?/?? ???9??h ??????5?endstream +x???e\T{??I?A?8(?0? !?)?? ?#0?P????? %?C????H?t?????;z?^??/w_?g?ys?O???????F???_?n??fn??p8 46??I=L?x??U???%???????,k?\G8??!?C??g???8/??r?x???)???Zo?n?????C??n??I????&ix.9?8 \????????????d??l\???R??B2???????????b?JI!?????????P??)w?????@??!?U?;?ZW??L????$??3@??7??S?X?J?/2{????? +<??B?\?Q?@v????}_?#??b??dR????? f????\Z?R0??j???????!W;?:I???~??]??P???7??=2?S??jU???????X?^Rn????$VuEVG?)??zc???? )?"o???{h????"??a??*??^I????!???*???????9Hez r??????!?.J?f at O??M?:????????????c???r&??U?????M???U?#?? .#????_???XR??*?BY??F?|3}?#DF?????5C?7?????????2P?[??????? M?????>S??|#$?VK?-?L[sW????????a(f????>l?????.?@????????>?ZO]??0???J8????#?SQ????\????0J??f???m??!O?u ?P???Uhv???a?F??????uP?????,u????yLU?F?t??????0/.`~??#?z ??VV ?{?'?H?`$?e >?|L?w?P|$?? _l???a?&+f?dGH?U?%?????????????????aj?c?]????F????b?W???Y'5#???rK??+??4??[;??S?fJ???G`? K??AM?A??????w`?~??LK?_?*m?v??'\?b'?_??q33@???r??S?g?7??k?sw|?x]???? ?V?S??????`?}????;EX??M??e?4H??y???_??8/?????Eg-??R?/?i2?h????)?? +~???`??????2???????.?y??3?y???v??^Sy?N????????????a)?)?v?"a???????k?????qHR????6)]???}?=?j?>]??S?{?W?"S????E?<: M?{UJ??????????2|??]?????1????g?d??Y?7W*n?? ?? E ?l$?e*???ksK?q??l.?^\?r??Z???????K????eks?????1?2?f?'j?d?????w?????Zs???3dw???%???s???? +?????v*?iD?[???%??_\?r?c????1YAW??k?s??R???8]C_g$s?r?_V??b?1?/????????.sTXX??9?qs6??%M??[??-??|???RkAC ?:?e?????D-I3?Aq??3JX?n?l9?4???AO??$??cHQXq?????a???e:????x???????(W???d9!? ???M??=?S?Q??O???# +?^?[XI???????{????q]ZdZ4? ???Xx?????[??'T~l?A?????m??(?Z??????j?Q?!}~??)W?.X?Q?"??/???KS? ??=????k??d?_X????? O~???2?c??J?????7^????G???J??r ???c???2???T"0M?8????????OV??????~???f???<^N ?4F????{X??t?>?G2D {?[????!%????Y?@??kj#???.??1?9??? V-Qq??$?4?*K?$????{?ui<;????????P?k??g?" ??9?R???????????????XUH?G?)b@@9T?^)?"???????? ?;?4 ?M??Q?.?1???g1??O??6??^??????d%(??w??????U?61???0?mO??J?}KK???y?,C?"?????p?2?xl`? +H* ??t????^/?tocp$|??????3v) %??1?????C?-?d???????l??????9??^y5]?q4??a????FG? [????8???Duc????g?i_?l?Y??g??R????AajJTk5[??#??&?N,`@?8???% ??w???]R?E??/}??????,?>?{?8Rf?W?\i?E???[??<=l???v??w??????.??????$???O?6?nQ?d6?????? ??68?LJ'?J-??q#.G??????-g}3?????????????'?*??R??16>????i?Hg??>??$???s?O'???????z? ??????]?P???I????4??m??? ?n???o???????1??? ??eI?dF? ???S? ??9P,t??m??Ei?u??gi??!5{Az_???=?U?9???????????5~?d?)??_?????E$?x? ?????n?????????k??}????h??8?*??2T?3??CF??|t?)???????+{???aL ?AK??G? ?=k[:?Z??&?????[IL H~??6??f?C?p???~}(?;????FF??? T?B?nL?Nn?=??Z1?^E??1??]_5?`/??98??J?? ??Y&?d?l?L-?]?Z???HF? ??????????E?????&v?m??=???V?????goe??_???$??????$r??"g???F?u?????????R@?k???2`-??s? ??b;PG? ?f??????dd>??1s????a?????????????w????I??N'nq(W?^???+??i\?,????oxM[YLG?i?X0~G>??DHq???e~!R??EQ??=?6m??$c?D???}??},9?t??\Oa???V?W???_-??v??&???Lgt??t#f"????????O??P4?E?????5?endstream endobj 89 0 obj << /Type /Font @@ -1727,14 +1723,14 @@ /FirstChar 46 /LastChar 121 /Widths 293 0 R -/BaseFont /JDQMXL+CMR17 +/BaseFont /ZCYARN+CMR17 /FontDescriptor 87 0 R >> endobj 87 0 obj << /Ascent 694 /CapHeight 683 /Descent -195 -/FontName /JDQMXL+CMR17 +/FontName /ZCYARN+CMR17 /ItalicAngle 0 /StemV 53 /XHeight 430 @@ -1927,7 +1923,7 @@ >> endobj 300 0 obj << /Author(Bill Spotz)/Title(numpy.i: a SWIG Interface File for NumPy)/Subject()/Creator(LaTeX with hyperref package)/Producer(pdfeTeX-1.21a)/Keywords() -/CreationDate (D:20070406141204-06'00') +/CreationDate (D:20070410092024-06'00') /PTEX.Fullbanner (This is pdfeTeX, Version 3.141592-1.21a-2.2 (Web2C 7.5.4) kpathsea version 3.5.4) >> endobj xref @@ -1939,79 +1935,79 @@ 0000000000 00000 f 0000000009 00000 n 0000007627 00000 n -0000129806 00000 n +0000129979 00000 n 0000000055 00000 n 0000000081 00000 n 0000007810 00000 n -0000129720 00000 n +0000129893 00000 n 0000000131 00000 n 0000000162 00000 n 0000024122 00000 n -0000129632 00000 n +0000129805 00000 n 0000000214 00000 n 0000000246 00000 n 0000024309 00000 n -0000129507 00000 n +0000129680 00000 n 0000000303 00000 n 0000000340 00000 n 0000028031 00000 n -0000129433 00000 n +0000129606 00000 n 0000000391 00000 n 0000000422 00000 n 0000028219 00000 n -0000129346 00000 n +0000129519 00000 n 0000000476 00000 n 0000000510 00000 n 0000028407 00000 n -0000129259 00000 n +0000129432 00000 n 0000000562 00000 n 0000000594 00000 n 0000033800 00000 n -0000129172 00000 n +0000129345 00000 n 0000000646 00000 n 0000000678 00000 n 0000033988 00000 n -0000129085 00000 n +0000129258 00000 n 0000000740 00000 n 0000000783 00000 n 0000034176 00000 n -0000129011 00000 n +0000129184 00000 n 0000000848 00000 n 0000000894 00000 n -0000039880 00000 n -0000128886 00000 n +0000040030 00000 n +0000129059 00000 n 0000000949 00000 n 0000000984 00000 n -0000040068 00000 n -0000128812 00000 n +0000040218 00000 n +0000128985 00000 n 0000001029 00000 n 0000001054 00000 n -0000040256 00000 n -0000128738 00000 n +0000040406 00000 n +0000128911 00000 n 0000001101 00000 n 0000001128 00000 n -0000045530 00000 n -0000128613 00000 n +0000045680 00000 n +0000128786 00000 n 0000001195 00000 n 0000001242 00000 n -0000045718 00000 n -0000128539 00000 n +0000045868 00000 n +0000128712 00000 n 0000001297 00000 n 0000001332 00000 n -0000049892 00000 n -0000128452 00000 n +0000050042 00000 n +0000128625 00000 n 0000001387 00000 n 0000001422 00000 n -0000057346 00000 n -0000128378 00000 n +0000057495 00000 n +0000128551 00000 n 0000001473 00000 n 0000001504 00000 n -0000057534 00000 n -0000128290 00000 n +0000057683 00000 n +0000128463 00000 n 0000001550 00000 n 0000001576 00000 n -0000057722 00000 n -0000128215 00000 n +0000057871 00000 n +0000128388 00000 n 0000001631 00000 n 0000001666 00000 n 0000003729 00000 n @@ -2019,15 +2015,15 @@ 0000001716 00000 n 0000007444 00000 n 0000007505 00000 n -0000127031 00000 n -0000121725 00000 n -0000126872 00000 n -0000120878 00000 n -0000112468 00000 n -0000120718 00000 n -0000111216 00000 n -0000096466 00000 n -0000111057 00000 n +0000127204 00000 n +0000121898 00000 n +0000127045 00000 n +0000121051 00000 n +0000112641 00000 n +0000120891 00000 n +0000111389 00000 n +0000096639 00000 n +0000111230 00000 n 0000007566 00000 n 0000007687 00000 n 0000004026 00000 n @@ -2049,17 +2045,17 @@ 0000006618 00000 n 0000006771 00000 n 0000007748 00000 n -0000095599 00000 n -0000087649 00000 n -0000095437 00000 n +0000095772 00000 n +0000087822 00000 n +0000095610 00000 n 0000007871 00000 n 0000006933 00000 n 0000007103 00000 n 0000007273 00000 n -0000086160 00000 n -0000071828 00000 n -0000085998 00000 n -0000127854 00000 n +0000086333 00000 n +0000072001 00000 n +0000086171 00000 n +0000128027 00000 n 0000024060 00000 n 0000024246 00000 n 0000027968 00000 n @@ -2068,15 +2064,15 @@ 0000033737 00000 n 0000033925 00000 n 0000034113 00000 n -0000039817 00000 n -0000040005 00000 n -0000040193 00000 n -0000045467 00000 n -0000045655 00000 n -0000049829 00000 n -0000057283 00000 n -0000057471 00000 n -0000057659 00000 n +0000039967 00000 n +0000040155 00000 n +0000040343 00000 n +0000045617 00000 n +0000045805 00000 n +0000049979 00000 n +0000057432 00000 n +0000057620 00000 n +0000057808 00000 n 0000015161 00000 n 0000012268 00000 n 0000008052 00000 n @@ -2084,9 +2080,9 @@ 0000012522 00000 n 0000012693 00000 n 0000012863 00000 n -0000071344 00000 n -0000067317 00000 n -0000071182 00000 n +0000071517 00000 n +0000067490 00000 n +0000071355 00000 n 0000013036 00000 n 0000013210 00000 n 0000013383 00000 n @@ -2121,9 +2117,9 @@ 0000023653 00000 n 0000024371 00000 n 0000023824 00000 n -0000066997 00000 n -0000065607 00000 n -0000066836 00000 n +0000067170 00000 n +0000065780 00000 n +0000067009 00000 n 0000028469 00000 n 0000027050 00000 n 0000024543 00000 n @@ -2148,98 +2144,98 @@ 0000033126 00000 n 0000033291 00000 n 0000033450 00000 n -0000040318 00000 n -0000037930 00000 n +0000040468 00000 n +0000038080 00000 n 0000034347 00000 n -0000039691 00000 n -0000039754 00000 n -0000038136 00000 n -0000038309 00000 n -0000038483 00000 n -0000038656 00000 n -0000038828 00000 n -0000039000 00000 n -0000039173 00000 n -0000039344 00000 n -0000039517 00000 n -0000039942 00000 n -0000040130 00000 n -0000127970 00000 n -0000045780 00000 n -0000044481 00000 n -0000040426 00000 n -0000045341 00000 n -0000045404 00000 n -0000044647 00000 n -0000044821 00000 n -0000044993 00000 n -0000045592 00000 n -0000045167 00000 n -0000050017 00000 n -0000049032 00000 n -0000045888 00000 n -0000049703 00000 n -0000049766 00000 n -0000049190 00000 n -0000049954 00000 n -0000049361 00000 n -0000049530 00000 n -0000057847 00000 n -0000054135 00000 n -0000050126 00000 n -0000057220 00000 n -0000054397 00000 n -0000054568 00000 n -0000054742 00000 n -0000054927 00000 n -0000055112 00000 n -0000057408 00000 n -0000055302 00000 n -0000057596 00000 n -0000055473 00000 n -0000055646 00000 n -0000055817 00000 n -0000057784 00000 n -0000055990 00000 n -0000056161 00000 n -0000056335 00000 n -0000056506 00000 n -0000056679 00000 n -0000064730 00000 n -0000057981 00000 n -0000064570 00000 n -0000056846 00000 n -0000057029 00000 n -0000065256 00000 n -0000065018 00000 n -0000067230 00000 n -0000067206 00000 n -0000071648 00000 n -0000071566 00000 n -0000087050 00000 n -0000086688 00000 n -0000096145 00000 n -0000095890 00000 n -0000112028 00000 n -0000111643 00000 n -0000121439 00000 n -0000121179 00000 n -0000127496 00000 n -0000127278 00000 n -0000128071 00000 n -0000128141 00000 n -0000129878 00000 n -0000131538 00000 n -0000131577 00000 n -0000131615 00000 n -0000131744 00000 n +0000039841 00000 n +0000039904 00000 n +0000038286 00000 n +0000038459 00000 n +0000038633 00000 n +0000038806 00000 n +0000038978 00000 n +0000039150 00000 n +0000039323 00000 n +0000039494 00000 n +0000039667 00000 n +0000040092 00000 n +0000040280 00000 n +0000128143 00000 n +0000045930 00000 n +0000044631 00000 n +0000040576 00000 n +0000045491 00000 n +0000045554 00000 n +0000044797 00000 n +0000044971 00000 n +0000045143 00000 n +0000045742 00000 n +0000045317 00000 n +0000050167 00000 n +0000049182 00000 n +0000046038 00000 n +0000049853 00000 n +0000049916 00000 n +0000049340 00000 n +0000050104 00000 n +0000049511 00000 n +0000049680 00000 n +0000057996 00000 n +0000054284 00000 n +0000050276 00000 n +0000057369 00000 n +0000054546 00000 n +0000054717 00000 n +0000054891 00000 n +0000055076 00000 n +0000055261 00000 n +0000057557 00000 n +0000055451 00000 n +0000057745 00000 n +0000055622 00000 n +0000055795 00000 n +0000055966 00000 n +0000057933 00000 n +0000056139 00000 n +0000056310 00000 n +0000056484 00000 n +0000056655 00000 n +0000056828 00000 n +0000064901 00000 n +0000058130 00000 n +0000064741 00000 n +0000056995 00000 n +0000057178 00000 n +0000065428 00000 n +0000065190 00000 n +0000067403 00000 n +0000067379 00000 n +0000071821 00000 n +0000071739 00000 n +0000087223 00000 n +0000086861 00000 n +0000096318 00000 n +0000096063 00000 n +0000112201 00000 n +0000111816 00000 n +0000121612 00000 n +0000121352 00000 n +0000127669 00000 n +0000127451 00000 n +0000128244 00000 n +0000128314 00000 n +0000130051 00000 n +0000131711 00000 n +0000131750 00000 n +0000131788 00000 n +0000131917 00000 n trailer << /Size 301 /Root 299 0 R /Info 300 0 R -/ID [ ] +/ID [<8AEBC1FCCADD8D71CBEF5E0E60CFF503> <8AEBC1FCCADD8D71CBEF5E0E60CFF503>] >> startxref -132057 +132230 %%EOF Modified: branches/multicore/numpy/doc/swig/numpy_swig.txt =================================================================== --- branches/multicore/numpy/doc/swig/numpy_swig.txt 2007-04-10 18:30:08 UTC (rev 3695) +++ branches/multicore/numpy/doc/swig/numpy_swig.txt 2007-04-10 18:35:30 UTC (rev 3696) @@ -421,6 +421,10 @@ Evaluates to the ``i``-th dimension size of ``a``, assuming ``a`` can be cast to a ``PyArrayObject*``. + **array_data(a)** + Evaluates to a pointer of type ``void*`` that points to the data + buffer of ``a``, assuming ``a`` can be cast to a ``PyArrayObject*``. + **array_is_contiguous(a)** Evaluates as true if ``a`` is a contiguous array. Equivalent to ``(PyArray_ISCONTIGUOUS(a))``. From numpy-svn at scipy.org Tue Apr 10 16:21:49 2007 From: numpy-svn at scipy.org (numpy-svn at scipy.org) Date: Tue, 10 Apr 2007 15:21:49 -0500 (CDT) Subject: [Numpy-svn] r3697 - branches/multicore/numpy/core/cprops_thread Message-ID: <20070410202149.4763239C03A@new.scipy.org> Author: eric Date: 2007-04-10 15:21:39 -0500 (Tue, 10 Apr 2007) New Revision: 3697 Modified: branches/multicore/numpy/core/cprops_thread/cp_config.h branches/multicore/numpy/core/cprops_thread/mempool.h Log: various include/define macros to allows cprops_thread to compile with mingw32 Modified: branches/multicore/numpy/core/cprops_thread/cp_config.h =================================================================== --- branches/multicore/numpy/core/cprops_thread/cp_config.h 2007-04-10 18:35:30 UTC (rev 3696) +++ branches/multicore/numpy/core/cprops_thread/cp_config.h 2007-04-10 20:21:39 UTC (rev 3697) @@ -20,6 +20,10 @@ /* eric: used in mempool.c. Not valid on windows. */ /* Define to 1 if you have the `getpagesize' function. */ #define CP_HAS_GETPAGESIZE 1 + +#else +/* eric: used internally by cprops_thread to turn on windows features */ +#define _WINDOWS #endif /* eric: This is used in mempool.c, but I don't know how important it is... */ Modified: branches/multicore/numpy/core/cprops_thread/mempool.h =================================================================== --- branches/multicore/numpy/core/cprops_thread/mempool.h 2007-04-10 18:35:30 UTC (rev 3696) +++ branches/multicore/numpy/core/cprops_thread/mempool.h 2007-04-10 20:21:39 UTC (rev 3697) @@ -39,6 +39,11 @@ #ifndef _CP_MEMPOOL_H #define _CP_MEMPOOL_H +#ifdef _WIN32 +/* needed on minw32 for size_t */ +#include +#endif + #include "common.h" #include "collection.h" From numpy-svn at scipy.org Tue Apr 10 18:16:22 2007 From: numpy-svn at scipy.org (numpy-svn at scipy.org) Date: Tue, 10 Apr 2007 17:16:22 -0500 (CDT) Subject: [Numpy-svn] r3698 - in branches/multicore/numpy/core: . cprops_thread src Message-ID: <20070410221622.5B1E239C044@new.scipy.org> Author: eric Date: 2007-04-10 17:16:10 -0500 (Tue, 10 Apr 2007) New Revision: 3698 Modified: branches/multicore/numpy/core/cprops_thread/cp_config.h branches/multicore/numpy/core/cprops_thread/hashtable.c branches/multicore/numpy/core/setup.py branches/multicore/numpy/core/src/ufuncobject.c Log: fixes for msvc on windows. It now compiles with mingw, msvc, and linux gcc Modified: branches/multicore/numpy/core/cprops_thread/cp_config.h =================================================================== --- branches/multicore/numpy/core/cprops_thread/cp_config.h 2007-04-10 20:21:39 UTC (rev 3697) +++ branches/multicore/numpy/core/cprops_thread/cp_config.h 2007-04-10 22:16:10 UTC (rev 3698) @@ -21,6 +21,19 @@ /* Define to 1 if you have the `getpagesize' function. */ #define CP_HAS_GETPAGESIZE 1 +/* eric: used in thread.c + * Define to 1 if you have the `random' function. + * Note: Even on win32, we can use this with mingw32, but + * I don't think it is crictical, so for simplicity, just use + * the alternative when building on windows. + */ +#define CP_HAS_RANDOM 1 + +/* eric: used in thread.c */ +/* Define to 1 if you have the `srandom' function. */ +/* Note: same comment as above for CP_HAS_RANDOM */ +#define CP_HAS_SRANDOM 1 + #else /* eric: used internally by cprops_thread to turn on windows features */ #define _WINDOWS @@ -31,14 +44,7 @@ #define CP_HAS_PTHREAD_MUTEX_RECURSIVE 1 -/* eric: used in thread.c */ -/* Define to 1 if you have the `random' function. */ -#define CP_HAS_RANDOM 1 -/* eric: used in thread.c */ -/* Define to 1 if you have the `srandom' function. */ -#define CP_HAS_SRANDOM 1 - /* eric: what system doesn't have this??? */ /* Define to 1 if you have the `read' function. */ #define CP_HAS_READ 1 Modified: branches/multicore/numpy/core/cprops_thread/hashtable.c =================================================================== --- branches/multicore/numpy/core/cprops_thread/hashtable.c 2007-04-10 20:21:39 UTC (rev 3697) +++ branches/multicore/numpy/core/cprops_thread/hashtable.c 2007-04-10 22:16:10 UTC (rev 3698) @@ -41,6 +41,13 @@ #define CP_HASHTABLE_MULTIPLE_VALUES 1 #endif +/* Microsoft's compiler uses stricmp for strcasecmp + * MSVC defines this macro (version number) and mingw32 does not. + */ +#ifdef _MSC_VER +#define strcasecmp stricmp +#endif + static int table_sizes[] = { 5, 7, 11, 23, 47, Modified: branches/multicore/numpy/core/setup.py =================================================================== --- branches/multicore/numpy/core/setup.py 2007-04-10 20:21:39 UTC (rev 3697) +++ branches/multicore/numpy/core/setup.py 2007-04-10 22:16:10 UTC (rev 3698) @@ -212,8 +212,6 @@ umath_libraries.append('cprops') if sys.platform == 'win32': - # fixme: is this only for gcc, or does msvc need it as well? - umath_libraries.append('iberty') # needed for random, srandom umath_libraries.append('wsock32') # needed for select config.add_library('cprops', join('cprops_thread', '*.c'), Modified: branches/multicore/numpy/core/src/ufuncobject.c =================================================================== --- branches/multicore/numpy/core/src/ufuncobject.c 2007-04-10 20:21:39 UTC (rev 3697) +++ branches/multicore/numpy/core/src/ufuncobject.c 2007-04-10 22:16:10 UTC (rev 3698) @@ -1803,6 +1803,7 @@ static cp_thread_pool* thread_pool=NULL; cp_pooled_thread* thread; + NPY_BEGIN_THREADS_DEF if (thread_pool == NULL) { @@ -1813,7 +1814,6 @@ thread_pool = cp_thread_pool_create(1, 20); } - NPY_BEGIN_THREADS_DEF if (!(loop = construct_loop(self, args, kwds, mps))) return -1; if (loop->notimplemented) {ufuncloop_dealloc(loop); return -2;} From numpy-svn at scipy.org Tue Apr 10 22:05:13 2007 From: numpy-svn at scipy.org (numpy-svn at scipy.org) Date: Tue, 10 Apr 2007 21:05:13 -0500 (CDT) Subject: [Numpy-svn] r3699 - trunk/numpy/lib Message-ID: <20070411020513.E255039C044@new.scipy.org> Author: eric Date: 2007-04-10 21:05:06 -0500 (Tue, 10 Apr 2007) New Revision: 3699 Modified: trunk/numpy/lib/function_base.py Log: fixed a typecode Float->float issue in average. This is not pretty code it seems overly complicated, and it has an "eval" statement in it where it builds a string and evaluates it. I can't imagine this is the best approach to this -- but I also am not going to spend the time to examine it right now. Modified: trunk/numpy/lib/function_base.py =================================================================== --- trunk/numpy/lib/function_base.py 2007-04-10 22:16:10 UTC (rev 3698) +++ trunk/numpy/lib/function_base.py 2007-04-11 02:05:06 UTC (rev 3699) @@ -306,7 +306,7 @@ ni = ash[axis] r = [newaxis]*ni r[axis] = slice(None, None, 1) - w1 = eval("w["+repr(tuple(r))+"]*ones(ash, Float)") + w1 = eval("w["+repr(tuple(r))+"]*ones(ash, float)") n = add.reduce(a*w1, axis) d = add.reduce(w1, axis) else: From numpy-svn at scipy.org Tue Apr 10 22:10:01 2007 From: numpy-svn at scipy.org (numpy-svn at scipy.org) Date: Tue, 10 Apr 2007 21:10:01 -0500 (CDT) Subject: [Numpy-svn] r3700 - trunk/numpy/lib/tests Message-ID: <20070411021001.E5C6A39C118@new.scipy.org> Author: eric Date: 2007-04-10 21:09:59 -0500 (Tue, 10 Apr 2007) New Revision: 3700 Modified: trunk/numpy/lib/tests/test_function_base.py Log: added simple test for weighted average Modified: trunk/numpy/lib/tests/test_function_base.py =================================================================== --- trunk/numpy/lib/tests/test_function_base.py 2007-04-11 02:05:06 UTC (rev 3699) +++ trunk/numpy/lib/tests/test_function_base.py 2007-04-11 02:09:59 UTC (rev 3700) @@ -57,6 +57,13 @@ assert_array_equal(y5.mean(0), average(y5, 0)) assert_array_equal(y5.mean(1), average(y5, 1)) + def check_weighted(self): + y1 = array([[1,2,3], + [4,5,6]]) + actual = average(y1,weights=[1,2],axis=0) + desired = array([3.,4.,5.]) + assert_array_equal(actual, desired) + class test_logspace(NumpyTestCase): def check_basic(self): y = logspace(0,6) From numpy-svn at scipy.org Tue Apr 10 22:21:18 2007 From: numpy-svn at scipy.org (numpy-svn at scipy.org) Date: Tue, 10 Apr 2007 21:21:18 -0500 (CDT) Subject: [Numpy-svn] r3701 - in branches/multicore: . numpy/lib numpy/lib/tests Message-ID: <20070411022118.E840239C118@new.scipy.org> Author: eric Date: 2007-04-10 21:21:10 -0500 (Tue, 10 Apr 2007) New Revision: 3701 Modified: branches/multicore/ branches/multicore/numpy/lib/function_base.py branches/multicore/numpy/lib/tests/test_function_base.py Log: Merged revisions 3696-3700 via svnmerge from http://svn.scipy.org/svn/numpy/trunk ........ r3699 | eric | 2007-04-10 21:05:06 -0500 (Tue, 10 Apr 2007) | 6 lines fixed a typecode Float->float issue in average. This is not pretty code it seems overly complicated, and it has an "eval" statement in it where it builds a string and evaluates it. I can't imagine this is the best approach to this -- but I also am not going to spend the time to examine it right now. ........ r3700 | eric | 2007-04-10 21:09:59 -0500 (Tue, 10 Apr 2007) | 1 line added simple test for weighted average ........ Property changes on: branches/multicore ___________________________________________________________________ Name: svnmerge-integrated - /branches/distutils-revamp:1-2752 /trunk:1-3695 + /branches/distutils-revamp:1-2752 /trunk:1-3700 Modified: branches/multicore/numpy/lib/function_base.py =================================================================== --- branches/multicore/numpy/lib/function_base.py 2007-04-11 02:09:59 UTC (rev 3700) +++ branches/multicore/numpy/lib/function_base.py 2007-04-11 02:21:10 UTC (rev 3701) @@ -306,7 +306,7 @@ ni = ash[axis] r = [newaxis]*ni r[axis] = slice(None, None, 1) - w1 = eval("w["+repr(tuple(r))+"]*ones(ash, Float)") + w1 = eval("w["+repr(tuple(r))+"]*ones(ash, float)") n = add.reduce(a*w1, axis) d = add.reduce(w1, axis) else: Modified: branches/multicore/numpy/lib/tests/test_function_base.py =================================================================== --- branches/multicore/numpy/lib/tests/test_function_base.py 2007-04-11 02:09:59 UTC (rev 3700) +++ branches/multicore/numpy/lib/tests/test_function_base.py 2007-04-11 02:21:10 UTC (rev 3701) @@ -57,6 +57,13 @@ assert_array_equal(y5.mean(0), average(y5, 0)) assert_array_equal(y5.mean(1), average(y5, 1)) + def check_weighted(self): + y1 = array([[1,2,3], + [4,5,6]]) + actual = average(y1,weights=[1,2],axis=0) + desired = array([3.,4.,5.]) + assert_array_equal(actual, desired) + class test_logspace(NumpyTestCase): def check_basic(self): y = logspace(0,6) From numpy-svn at scipy.org Wed Apr 11 03:32:17 2007 From: numpy-svn at scipy.org (numpy-svn at scipy.org) Date: Wed, 11 Apr 2007 02:32:17 -0500 (CDT) Subject: [Numpy-svn] r3702 - trunk/numpy/doc/swig Message-ID: <20070411073217.76CDD39C122@new.scipy.org> Author: eric Date: 2007-04-11 02:32:05 -0500 (Wed, 11 Apr 2007) New Revision: 3702 Modified: trunk/numpy/doc/swig/numpy.i Log: long lost author was... eric. Modified: trunk/numpy/doc/swig/numpy.i =================================================================== --- trunk/numpy/doc/swig/numpy.i 2007-04-11 02:21:10 UTC (rev 3701) +++ trunk/numpy/doc/swig/numpy.i 2007-04-11 07:32:05 UTC (rev 3702) @@ -9,7 +9,7 @@ #include /* The following code originally appeared in - * enthought/kiva/agg/src/numeric.i, author unknown. It was + * enthought/kiva/agg/src/numeric.i written by Eric Jones. It was * translated from C++ to C by John Hunter. Bill Spotz has modified * it slightly to fix some minor bugs, upgrade to numpy (all * versions), add some comments and some functionality. From numpy-svn at scipy.org Wed Apr 11 12:50:43 2007 From: numpy-svn at scipy.org (numpy-svn at scipy.org) Date: Wed, 11 Apr 2007 11:50:43 -0500 (CDT) Subject: [Numpy-svn] r3703 - trunk/numpy/doc/swig Message-ID: <20070411165043.E04E739C171@new.scipy.org> Author: wfspotz at sandia.gov Date: 2007-04-11 11:50:38 -0500 (Wed, 11 Apr 2007) New Revision: 3703 Modified: trunk/numpy/doc/swig/numpy.i Log: Provided more sophisticated typecheck typemap for IN_ARRAYs Modified: trunk/numpy/doc/swig/numpy.i =================================================================== --- trunk/numpy/doc/swig/numpy.i 2007-04-11 07:32:05 UTC (rev 3702) +++ trunk/numpy/doc/swig/numpy.i 2007-04-11 16:50:38 UTC (rev 3703) @@ -445,7 +445,7 @@ %typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY) (DATA_TYPE IN_ARRAY1[ANY]) { - $1 = ($input != NULL); + $1 = is_array($input) || PySequence_Check($input); } %typemap(in) (DATA_TYPE IN_ARRAY1[ANY]) @@ -467,7 +467,7 @@ %typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY) (DATA_TYPE* IN_ARRAY1, DIM_TYPE DIM1) { - $1 = ($input != NULL); + $1 = is_array($input) || PySequence_Check($input); } %typemap(in) (DATA_TYPE* IN_ARRAY1, DIM_TYPE DIM1) @@ -490,7 +490,7 @@ %typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY) (DIM_TYPE DIM1, DATA_TYPE* IN_ARRAY1) { - $1 = ($input != NULL); + $1 = is_array($input) || PySequence_Check($input); } %typemap(in) (DIM_TYPE DIM1, DATA_TYPE* IN_ARRAY1) @@ -513,7 +513,7 @@ %typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY) (DATA_TYPE IN_ARRAY2[ANY][ANY]) { - $1 = ($input != NULL); + $1 = is_array($input) || PySequence_Check($input); } %typemap(in) (DATA_TYPE IN_ARRAY2[ANY][ANY]) @@ -535,7 +535,7 @@ %typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY) (DATA_TYPE* IN_ARRAY2, DIM_TYPE DIM1, DIM_TYPE DIM2) { - $1 = ($input != NULL); + $1 = is_array($input) || PySequence_Check($input); } %typemap(in) (DATA_TYPE* IN_ARRAY2, DIM_TYPE DIM1, DIM_TYPE DIM2) @@ -559,7 +559,7 @@ %typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY) (DIM_TYPE DIM1, DIM_TYPE DIM2, DATA_TYPE* IN_ARRAY2) { - $1 = ($input != NULL); + $1 = is_array($input) || PySequence_Check($input); } %typemap(in) (DIM_TYPE DIM1, DIM_TYPE DIM2, DATA_TYPE* IN_ARRAY2) @@ -583,7 +583,7 @@ %typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY) (DATA_TYPE IN_ARRAY3[ANY][ANY][ANY]) { - $1 = ($input != NULL); + $1 = is_array($input) || PySequence_Check($input); } %typemap(in) (DATA_TYPE IN_ARRAY3[ANY][ANY][ANY]) @@ -606,7 +606,7 @@ %typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY) (DATA_TYPE* IN_ARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3) { - $1 = ($input != NULL); + $1 = is_array($input) || PySequence_Check($input); } %typemap(in) (DATA_TYPE* IN_ARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3) @@ -632,7 +632,7 @@ %typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY) (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DATA_TYPE* IN_ARRAY3) { - $1 = ($input != NULL); + $1 = is_array($input) || PySequence_Check($input); } %typemap(in) (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DATA_TYPE* IN_ARRAY3) From numpy-svn at scipy.org Wed Apr 11 13:41:30 2007 From: numpy-svn at scipy.org (numpy-svn at scipy.org) Date: Wed, 11 Apr 2007 12:41:30 -0500 (CDT) Subject: [Numpy-svn] r3704 - trunk/numpy/core/blasdot Message-ID: <20070411174130.C305B39C17A@new.scipy.org> Author: charris Date: 2007-04-11 12:41:19 -0500 (Wed, 11 Apr 2007) New Revision: 3704 Modified: trunk/numpy/core/blasdot/_dotblas.c trunk/numpy/core/blasdot/cblas.h Log: Cleanup whitespace. Modified: trunk/numpy/core/blasdot/_dotblas.c =================================================================== --- trunk/numpy/core/blasdot/_dotblas.c 2007-04-11 16:50:38 UTC (rev 3703) +++ trunk/numpy/core/blasdot/_dotblas.c 2007-04-11 17:41:19 UTC (rev 3704) @@ -12,62 +12,62 @@ static PyArray_DotFunc *oldFunctions[PyArray_NTYPES]; -static void -FLOAT_dot(void *a, intp stridea, void *b, intp strideb, void *res, +static void +FLOAT_dot(void *a, intp stridea, void *b, intp strideb, void *res, intp n, void *tmp) { register int na = stridea / sizeof(float); register int nb = strideb / sizeof(float); - if ((sizeof(float) * na == stridea) && + if ((sizeof(float) * na == stridea) && (sizeof(float) * nb == strideb)) *((float *)res) = cblas_sdot((int)n, (float *)a, na, (float *)b, nb); - - else + + else oldFunctions[PyArray_FLOAT](a, stridea, b, strideb, res, n, tmp); } -static void -DOUBLE_dot(void *a, intp stridea, void *b, intp strideb, void *res, +static void +DOUBLE_dot(void *a, intp stridea, void *b, intp strideb, void *res, intp n, void *tmp) { register int na = stridea / sizeof(double); register int nb = strideb / sizeof(double); - if ((sizeof(double) * na == stridea) && - (sizeof(double) * nb == strideb)) + if ((sizeof(double) * na == stridea) && + (sizeof(double) * nb == strideb)) *((double *)res) = cblas_ddot((int)n, (double *)a, na, (double *)b, nb); else oldFunctions[PyArray_DOUBLE](a, stridea, b, strideb, res, n, tmp); } -static void -CFLOAT_dot(void *a, intp stridea, void *b, intp strideb, void *res, +static void +CFLOAT_dot(void *a, intp stridea, void *b, intp strideb, void *res, intp n, void *tmp) { - + register int na = stridea / sizeof(cfloat); register int nb = strideb / sizeof(cfloat); - if ((sizeof(cfloat) * na == stridea) && - (sizeof(cfloat) * nb == strideb)) + if ((sizeof(cfloat) * na == stridea) && + (sizeof(cfloat) * nb == strideb)) cblas_cdotu_sub((int)n, (float *)a, na, (float *)b, nb, (float *)res); else oldFunctions[PyArray_CFLOAT](a, stridea, b, strideb, res, n, tmp); } -static void -CDOUBLE_dot(void *a, intp stridea, void *b, intp strideb, void *res, +static void +CDOUBLE_dot(void *a, intp stridea, void *b, intp strideb, void *res, intp n, void *tmp) { register int na = stridea / sizeof(cdouble); register int nb = strideb / sizeof(cdouble); - if ((sizeof(cdouble) * na == stridea) && - (sizeof(cdouble) * nb == strideb)) + if ((sizeof(cdouble) * na == stridea) && + (sizeof(cdouble) * nb == strideb)) cblas_zdotu_sub((int)n, (double *)a, na, (double *)b, nb, (double *)res); else - oldFunctions[PyArray_CDOUBLE](a, stridea, b, strideb, res, n, tmp); + oldFunctions[PyArray_CDOUBLE](a, stridea, b, strideb, res, n, tmp); } @@ -76,10 +76,10 @@ static char doc_alterdot[] = "alterdot() changes all dot functions to use blas."; static PyObject * -dotblas_alterdot(PyObject *dummy, PyObject *args) +dotblas_alterdot(PyObject *dummy, PyObject *args) { PyArray_Descr *descr; - + if (!PyArg_ParseTuple(args, "")) return NULL; /* Replace the dot functions to the ones using blas */ @@ -88,15 +88,15 @@ descr = PyArray_DescrFromType(PyArray_FLOAT); oldFunctions[PyArray_FLOAT] = descr->f->dotfunc; descr->f->dotfunc = (PyArray_DotFunc *)FLOAT_dot; - + descr = PyArray_DescrFromType(PyArray_DOUBLE); oldFunctions[PyArray_DOUBLE] = descr->f->dotfunc; descr->f->dotfunc = (PyArray_DotFunc *)DOUBLE_dot; - + descr = PyArray_DescrFromType(PyArray_CFLOAT); oldFunctions[PyArray_CFLOAT] = descr->f->dotfunc; descr->f->dotfunc = (PyArray_DotFunc *)CFLOAT_dot; - + descr = PyArray_DescrFromType(PyArray_CDOUBLE); oldFunctions[PyArray_CDOUBLE] = descr->f->dotfunc; descr->f->dotfunc = (PyArray_DotFunc *)CDOUBLE_dot; @@ -111,7 +111,7 @@ static char doc_restoredot[] = "restoredot() restores dots to defaults."; static PyObject * -dotblas_restoredot(PyObject *dummy, PyObject *args) +dotblas_restoredot(PyObject *dummy, PyObject *args) { PyArray_Descr *descr; @@ -137,7 +137,7 @@ descr->f->dotfunc = oldFunctions[PyArray_CDOUBLE]; oldFunctions[PyArray_CDOUBLE] = NULL; Py_XDECREF(descr); - + altered = FALSE; } @@ -147,7 +147,7 @@ typedef enum {_scalar, _column, _row, _matrix} MatrixShape; -static MatrixShape +static MatrixShape _select_matrix_shape(PyArrayObject *array) { switch (array->nd) { @@ -175,7 +175,7 @@ static char doc_matrixproduct[] = "dot(a,b)\nReturns the dot product of a and b for arrays of floating point types.\nLike the generic numpy equivalent the product sum is over\nthe last dimension of a and the second-to-last dimension of b.\nNB: The first argument is not conjugated."; static PyObject * -dotblas_matrixproduct(PyObject *dummy, PyObject *args) +dotblas_matrixproduct(PyObject *dummy, PyObject *args) { PyObject *op1, *op2; PyArrayObject *ap1=NULL, *ap2=NULL, *ret=NULL; @@ -192,23 +192,23 @@ PyTypeObject *subtype; PyArray_Descr *dtype; MatrixShape ap1shape, ap2shape; - + if (!PyArg_ParseTuple(args, "OO", &op1, &op2)) return NULL; - - /* - * "Matrix product" using the BLAS. + + /* + * "Matrix product" using the BLAS. * Only works for float double and complex types. */ - typenum = PyArray_ObjectType(op1, 0); + typenum = PyArray_ObjectType(op1, 0); typenum = PyArray_ObjectType(op2, typenum); - + /* This function doesn't handle other types */ if ((typenum != PyArray_DOUBLE && typenum != PyArray_CDOUBLE && typenum != PyArray_FLOAT && typenum != PyArray_CFLOAT)) { return PyArray_Return((PyArrayObject *)PyArray_MatrixProduct(op1, op2)); } - + dtype = PyArray_DescrFromType(typenum); ap1 = (PyArrayObject *)PyArray_FromAny(op1, dtype, 0, 0, ALIGNED, NULL); if (ap1 == NULL) return NULL; @@ -216,7 +216,7 @@ ap2 = (PyArrayObject *)PyArray_FromAny(op2, dtype, 0, 0, ALIGNED, NULL); if (ap2 == NULL) goto fail; - if ((ap1->nd > 2) || (ap2->nd > 2)) { + if ((ap1->nd > 2) || (ap2->nd > 2)) { /* This function doesn't handle dimensions greater than 2 -- other than to ensure the dot function is altered */ @@ -225,16 +225,16 @@ PyObject *tmp1, *tmp2; tmp1 = PyTuple_New(0); tmp2 = dotblas_alterdot(NULL, tmp1); - Py_DECREF(tmp1); + Py_DECREF(tmp1); Py_DECREF(tmp2); } - ret = (PyArrayObject *)PyArray_MatrixProduct((PyObject *)ap1, + ret = (PyArrayObject *)PyArray_MatrixProduct((PyObject *)ap1, (PyObject *)ap2); - Py_DECREF(ap1); + Py_DECREF(ap1); Py_DECREF(ap2); return PyArray_Return(ret); } - + if (!PyArray_ElementStrides((PyObject *)ap1)) { op1 = PyArray_NewCopy(ap1, PyArray_ANYORDER); Py_DECREF(ap1); @@ -249,7 +249,7 @@ } ap1shape = _select_matrix_shape(ap1); ap2shape = _select_matrix_shape(ap2); - + if (ap1shape == _scalar || ap2shape == _scalar) { PyArrayObject *oap1, *oap2; oap1 = ap1; oap2 = ap2; @@ -267,11 +267,11 @@ if (ap1->nd == 0 || ap2->nd == 0) { intp *thisdims; - if (ap1->nd == 0) { + if (ap1->nd == 0) { nd = ap2->nd; thisdims = ap2->dimensions; } - else { + else { nd = ap1->nd; thisdims = ap1->dimensions; } @@ -281,7 +281,7 @@ l *= dimensions[j]; } } - else { + else { l = oap1->dimensions[oap1->nd-1]; if (oap2->dimensions[0] != l) { @@ -292,7 +292,7 @@ /* nd = 0 or 1 or 2 */ /* If nd == 0 do nothing ... */ if (nd == 1) { - /* Either ap1->nd is 1 dim or ap2->nd is 1 dim + /* Either ap1->nd is 1 dim or ap2->nd is 1 dim and the other is 2-dim */ dimensions[0] = (oap1->nd == 2) ? oap1->dimensions[0] : oap2->dimensions[1]; l = dimensions[0]; @@ -316,21 +316,21 @@ else { /* (ap1->nd <= 2 && ap2->nd <= 2) */ /* Both ap1 and ap2 are vectors or matrices */ l = ap1->dimensions[ap1->nd-1]; - + if (ap2->dimensions[0] != l) { PyErr_SetString(PyExc_ValueError, "matrices are not aligned"); goto fail; } nd = ap1->nd+ap2->nd-2; - - if (nd == 1) + + if (nd == 1) dimensions[0] = (ap1->nd == 2) ? ap1->dimensions[0] : ap2->dimensions[1]; else if (nd == 2) { dimensions[0] = ap1->dimensions[0]; dimensions[1] = ap2->dimensions[1]; } } - + /* Choose which subtype to return */ if (ap1->ob_type != ap2->ob_type) { prior2 = PyArray_GetPriority((PyObject *)ap2, 0.0); @@ -341,12 +341,12 @@ prior1 = prior2 = 0.0; subtype = ap1->ob_type; } - + ret = (PyArrayObject *)PyArray_New(subtype, nd, dimensions, typenum, NULL, NULL, 0, 0, (PyObject *) (prior2 > prior1 ? ap2 : ap1)); - + if (ret == NULL) goto fail; numbytes = PyArray_NBYTES(ret); memset(ret->data, 0, numbytes); @@ -386,19 +386,19 @@ a1s = ap1->strides[maxind] / sizeof(double); rets = ret->strides[maxind] / sizeof(double); for (i=0; i < ap1->dimensions[oind]; i++) { - cblas_daxpy(l, val, (double *)ptr, a1s, + cblas_daxpy(l, val, (double *)ptr, a1s, (double *)rptr, rets); ptr += ap1->strides[oind]; rptr += ret->strides[oind]; } } - } + } else if (typenum == PyArray_CDOUBLE) { if (l == 1) { cdouble *ptr1, *ptr2, *res; ptr1 = (cdouble *)ap2->data; ptr2 = (cdouble *)ap1->data; - res = (cdouble *)ret->data; + res = (cdouble *)ret->data; res->real = ptr1->real * ptr2->real - ptr1->imag * ptr2->imag; res->imag = ptr1->real * ptr2->imag + ptr1->imag * ptr2->real; } @@ -419,7 +419,7 @@ a1s = ap1->strides[maxind] / sizeof(cdouble); rets = ret->strides[maxind] / sizeof(cdouble); for (i=0; i < ap1->dimensions[oind]; i++) { - cblas_zaxpy(l, pval, (double *)ptr, a1s, + cblas_zaxpy(l, pval, (double *)ptr, a1s, (double *)rptr, rets); ptr += ap1->strides[oind]; rptr += ret->strides[oind]; @@ -448,7 +448,7 @@ a1s = ap1->strides[maxind] / sizeof(float); rets = ret->strides[maxind] / sizeof(float); for (i=0; i < ap1->dimensions[oind]; i++) { - cblas_saxpy(l, val, (float *)ptr, a1s, + cblas_saxpy(l, val, (float *)ptr, a1s, (float *)rptr, rets); ptr += ap1->strides[oind]; rptr += ret->strides[oind]; @@ -460,7 +460,7 @@ cfloat *ptr1, *ptr2, *res; ptr1 = (cfloat *)ap2->data; ptr2 = (cfloat *)ap1->data; - res = (cfloat *)ret->data; + res = (cfloat *)ret->data; res->real = ptr1->real * ptr2->real - ptr1->imag * ptr2->imag; res->imag = ptr1->real * ptr2->imag + ptr1->imag * ptr2->real; } @@ -481,7 +481,7 @@ a1s = ap1->strides[maxind] / sizeof(cfloat); rets = ret->strides[maxind] / sizeof(cfloat); for (i=0; i < ap1->dimensions[oind]; i++) { - cblas_caxpy(l, pval, (float *)ptr, a1s, + cblas_caxpy(l, pval, (float *)ptr, a1s, (float *)rptr, rets); ptr += ap1->strides[oind]; rptr += ret->strides[oind]; @@ -501,24 +501,24 @@ else { ap1s = ap1->strides[0] / ap1->descr->elsize; } - + /* Dot product between two vectors -- Level 1 BLAS */ if (typenum == PyArray_DOUBLE) { - double result = cblas_ddot(l, (double *)ap1->data, ap1s, + double result = cblas_ddot(l, (double *)ap1->data, ap1s, (double *)ap2->data, ap2s); *((double *)ret->data) = result; } else if (typenum == PyArray_FLOAT) { - float result = cblas_sdot(l, (float *)ap1->data, ap1s, + float result = cblas_sdot(l, (float *)ap1->data, ap1s, (float *)ap2->data, ap2s); *((float *)ret->data) = result; } else if (typenum == PyArray_CDOUBLE) { - cblas_zdotu_sub(l, (double *)ap1->data, ap1s, + cblas_zdotu_sub(l, (double *)ap1->data, ap1s, (double *)ap2->data, ap2s, (double *)ret->data); } else if (typenum == PyArray_CFLOAT) { - cblas_cdotu_sub(l, (float *)ap1->data, ap1s, + cblas_cdotu_sub(l, (float *)ap1->data, ap1s, (float *)ap2->data, ap2s, (float *)ret->data); } NPY_END_ALLOW_THREADS @@ -547,29 +547,29 @@ } ap2s = ap2->strides[0] / ap2->descr->elsize; if (typenum == PyArray_DOUBLE) { - cblas_dgemv(Order, CblasNoTrans, - ap1->dimensions[0], ap1->dimensions[1], - 1.0, (double *)ap1->data, lda, + cblas_dgemv(Order, CblasNoTrans, + ap1->dimensions[0], ap1->dimensions[1], + 1.0, (double *)ap1->data, lda, (double *)ap2->data, ap2s, 0.0, (double *)ret->data, 1); } else if (typenum == PyArray_FLOAT) { - cblas_sgemv(Order, CblasNoTrans, - ap1->dimensions[0], ap1->dimensions[1], - 1.0, (float *)ap1->data, lda, + cblas_sgemv(Order, CblasNoTrans, + ap1->dimensions[0], ap1->dimensions[1], + 1.0, (float *)ap1->data, lda, (float *)ap2->data, ap2s, 0.0, (float *)ret->data, 1); } else if (typenum == PyArray_CDOUBLE) { - cblas_zgemv(Order, - CblasNoTrans, ap1->dimensions[0], ap1->dimensions[1], - oneD, (double *)ap1->data, lda, - (double *)ap2->data, ap2s, zeroD, + cblas_zgemv(Order, + CblasNoTrans, ap1->dimensions[0], ap1->dimensions[1], + oneD, (double *)ap1->data, lda, + (double *)ap2->data, ap2s, zeroD, (double *)ret->data, 1); } else if (typenum == PyArray_CFLOAT) { - cblas_cgemv(Order, - CblasNoTrans, ap1->dimensions[0], ap1->dimensions[1], - oneF, (float *)ap1->data, lda, - (float *)ap2->data, ap2s, zeroF, + cblas_cgemv(Order, + CblasNoTrans, ap1->dimensions[0], ap1->dimensions[1], + oneF, (float *)ap1->data, lda, + (float *)ap2->data, ap2s, zeroF, (float *)ret->data, 1); } NPY_END_ALLOW_THREADS @@ -602,33 +602,33 @@ ap1s = ap1->strides[0] / ap1->descr->elsize; } if (typenum == PyArray_DOUBLE) { - cblas_dgemv(Order, - CblasTrans, ap2->dimensions[0], ap2->dimensions[1], + cblas_dgemv(Order, + CblasTrans, ap2->dimensions[0], ap2->dimensions[1], 1.0, (double *)ap2->data, lda, (double *)ap1->data, ap1s, 0.0, (double *)ret->data, 1); } else if (typenum == PyArray_FLOAT) { cblas_sgemv(Order, - CblasTrans, ap2->dimensions[0], ap2->dimensions[1], + CblasTrans, ap2->dimensions[0], ap2->dimensions[1], 1.0, (float *)ap2->data, lda, (float *)ap1->data, ap1s, 0.0, (float *)ret->data, 1); } else if (typenum == PyArray_CDOUBLE) { cblas_zgemv(Order, - CblasTrans, ap2->dimensions[0], ap2->dimensions[1], + CblasTrans, ap2->dimensions[0], ap2->dimensions[1], oneD, (double *)ap2->data, lda, (double *)ap1->data, ap1s, zeroD, (double *)ret->data, 1); } else if (typenum == PyArray_CFLOAT) { cblas_cgemv(Order, - CblasTrans, ap2->dimensions[0], ap2->dimensions[1], + CblasTrans, ap2->dimensions[0], ap2->dimensions[1], oneF, (float *)ap2->data, lda, (float *)ap1->data, ap1s, zeroF, (float *)ret->data, 1); } NPY_END_ALLOW_THREADS } else { /* (ap1->nd == 2 && ap2->nd == 2) */ - /* Matrix matrix multiplication -- Level 3 BLAS */ + /* Matrix matrix multiplication -- Level 3 BLAS */ /* L x M multiplied by M x N */ enum CBLAS_ORDER Order; enum CBLAS_TRANSPOSE Trans1, Trans2; @@ -638,7 +638,7 @@ /* We may be able to handle single-segment arrays here using appropriate values of Order, Trans1, and Trans2. */ - + if (!PyArray_ISCONTIGUOUS(ap2)) { PyObject *new; new = PyArray_Copy(ap2); @@ -655,7 +655,7 @@ } NPY_BEGIN_ALLOW_THREADS - + Order = CblasRowMajor; Trans1 = CblasNoTrans; Trans2 = CblasNoTrans; @@ -664,9 +664,9 @@ M = ap2->dimensions[0]; lda = (ap1->dimensions[1] > 1 ? ap1->dimensions[1] : 1); ldb = (ap2->dimensions[1] > 1 ? ap2->dimensions[1] : 1); - ldc = (ret->dimensions[1] > 1 ? ret->dimensions[1] : 1); + ldc = (ret->dimensions[1] > 1 ? ret->dimensions[1] : 1); if (typenum == PyArray_DOUBLE) { - cblas_dgemm(Order, Trans1, Trans2, + cblas_dgemm(Order, Trans1, Trans2, L, N, M, 1.0, (double *)ap1->data, lda, (double *)ap2->data, ldb, @@ -674,14 +674,14 @@ } else if (typenum == PyArray_FLOAT) { cblas_sgemm(Order, Trans1, Trans2, - L, N, M, + L, N, M, 1.0, (float *)ap1->data, lda, (float *)ap2->data, ldb, 0.0, (float *)ret->data, ldc); } else if (typenum == PyArray_CDOUBLE) { cblas_zgemm(Order, Trans1, Trans2, - L, N, M, + L, N, M, oneD, (double *)ap1->data, lda, (double *)ap2->data, ldb, zeroD, (double *)ret->data, ldc); @@ -700,7 +700,7 @@ Py_DECREF(ap1); Py_DECREF(ap2); return PyArray_Return(ret); - + fail: Py_XDECREF(ap1); Py_XDECREF(ap2); @@ -712,7 +712,7 @@ static char doc_innerproduct[] = "innerproduct(a,b)\nReturns the inner product of a and b for arrays of floating point types.\nLike the generic NumPy equivalent the product sum is over\nthe last dimension of a and b.\nNB: The first argument is not conjugated."; static PyObject * -dotblas_innerproduct(PyObject *dummy, PyObject *args) +dotblas_innerproduct(PyObject *dummy, PyObject *args) { PyObject *op1, *op2; PyArrayObject *ap1, *ap2, *ret; @@ -727,15 +727,15 @@ double prior1, prior2; if (!PyArg_ParseTuple(args, "OO", &op1, &op2)) return NULL; - - /* + + /* * Inner product using the BLAS. The product sum is taken along the last * dimensions of the two arrays. * Only speeds things up for float double and complex types. */ - typenum = PyArray_ObjectType(op1, 0); + typenum = PyArray_ObjectType(op1, 0); typenum = PyArray_ObjectType(op2, typenum); /* This function doesn't handle other types */ @@ -750,7 +750,7 @@ ap2 = (PyArrayObject *)PyArray_ContiguousFromObject(op2, typenum, 0, 0); if (ap2 == NULL) goto fail; - if ((ap1->nd > 2) || (ap2->nd > 2)) { + if ((ap1->nd > 2) || (ap2->nd > 2)) { /* This function doesn't handle dimensions greater than 2 -- other than to ensure the dot function is altered */ @@ -759,12 +759,12 @@ PyObject *tmp1, *tmp2; tmp1 = PyTuple_New(0); tmp2 = dotblas_alterdot(NULL, tmp1); - Py_DECREF(tmp1); + Py_DECREF(tmp1); Py_DECREF(tmp2); } - ret = (PyArrayObject *)PyArray_InnerProduct((PyObject *)ap1, + ret = (PyArrayObject *)PyArray_InnerProduct((PyObject *)ap1, (PyObject *)ap2); - Py_DECREF(ap1); + Py_DECREF(ap1); Py_DECREF(ap2); return PyArray_Return(ret); } @@ -785,14 +785,14 @@ else { /* (ap1->nd <= 2 && ap2->nd <= 2) */ /* Both ap1 and ap2 are vectors or matrices */ l = ap1->dimensions[ap1->nd-1]; - + if (ap2->dimensions[ap2->nd-1] != l) { PyErr_SetString(PyExc_ValueError, "matrices are not aligned"); goto fail; } nd = ap1->nd+ap2->nd-2; - - if (nd == 1) + + if (nd == 1) dimensions[0] = (ap1->nd == 2) ? ap1->dimensions[0] : ap2->dimensions[0]; else if (nd == 2) { dimensions[0] = ap1->dimensions[0]; @@ -804,12 +804,12 @@ prior2 = PyArray_GetPriority((PyObject *)ap2, 0.0); prior1 = PyArray_GetPriority((PyObject *)ap1, 0.0); subtype = (prior2 > prior1 ? ap2->ob_type : ap1->ob_type); - - ret = (PyArrayObject *)PyArray_New(subtype, nd, dimensions, - typenum, NULL, NULL, 0, 0, + + ret = (PyArrayObject *)PyArray_New(subtype, nd, dimensions, + typenum, NULL, NULL, 0, 0, (PyObject *)\ (prior2 > prior1 ? ap2 : ap1)); - + if (ret == NULL) goto fail; NPY_BEGIN_ALLOW_THREADS memset(ret->data, 0, PyArray_NBYTES(ret)); @@ -819,7 +819,7 @@ if (typenum == PyArray_DOUBLE) { cblas_daxpy(l, *((double *)ap2->data), (double *)ap1->data, 1, (double *)ret->data, 1); - } + } else if (typenum == PyArray_CDOUBLE) { cblas_zaxpy(l, (double *)ap2->data, (double *)ap1->data, 1, (double *)ret->data, 1); @@ -836,21 +836,21 @@ else if (ap1->nd == 1 && ap2->nd == 1) { /* Dot product between two vectors -- Level 1 BLAS */ if (typenum == PyArray_DOUBLE) { - double result = cblas_ddot(l, (double *)ap1->data, 1, + double result = cblas_ddot(l, (double *)ap1->data, 1, (double *)ap2->data, 1); *((double *)ret->data) = result; } else if (typenum == PyArray_CDOUBLE) { - cblas_zdotu_sub(l, (double *)ap1->data, 1, + cblas_zdotu_sub(l, (double *)ap1->data, 1, (double *)ap2->data, 1, (double *)ret->data); } else if (typenum == PyArray_FLOAT) { - float result = cblas_sdot(l, (float *)ap1->data, 1, + float result = cblas_sdot(l, (float *)ap1->data, 1, (float *)ap2->data, 1); *((float *)ret->data) = result; } else if (typenum == PyArray_CFLOAT) { - cblas_cdotu_sub(l, (float *)ap1->data, 1, + cblas_cdotu_sub(l, (float *)ap1->data, 1, (float *)ap2->data, 1, (float *)ret->data); } } @@ -858,26 +858,26 @@ /* Matrix-vector multiplication -- Level 2 BLAS */ lda = (ap1->dimensions[1] > 1 ? ap1->dimensions[1] : 1); if (typenum == PyArray_DOUBLE) { - cblas_dgemv(CblasRowMajor, - CblasNoTrans, ap1->dimensions[0], ap1->dimensions[1], + cblas_dgemv(CblasRowMajor, + CblasNoTrans, ap1->dimensions[0], ap1->dimensions[1], 1.0, (double *)ap1->data, lda, (double *)ap2->data, 1, 0.0, (double *)ret->data, 1); } else if (typenum == PyArray_CDOUBLE) { - cblas_zgemv(CblasRowMajor, - CblasNoTrans, ap1->dimensions[0], ap1->dimensions[1], + cblas_zgemv(CblasRowMajor, + CblasNoTrans, ap1->dimensions[0], ap1->dimensions[1], oneD, (double *)ap1->data, lda, (double *)ap2->data, 1, zeroD, (double *)ret->data, 1); } else if (typenum == PyArray_FLOAT) { - cblas_sgemv(CblasRowMajor, - CblasNoTrans, ap1->dimensions[0], ap1->dimensions[1], + cblas_sgemv(CblasRowMajor, + CblasNoTrans, ap1->dimensions[0], ap1->dimensions[1], 1.0, (float *)ap1->data, lda, (float *)ap2->data, 1, 0.0, (float *)ret->data, 1); } else if (typenum == PyArray_CFLOAT) { - cblas_cgemv(CblasRowMajor, - CblasNoTrans, ap1->dimensions[0], ap1->dimensions[1], + cblas_cgemv(CblasRowMajor, + CblasNoTrans, ap1->dimensions[0], ap1->dimensions[1], oneF, (float *)ap1->data, lda, (float *)ap2->data, 1, zeroF, (float *)ret->data, 1); } @@ -886,32 +886,32 @@ /* Vector matrix multiplication -- Level 2 BLAS */ lda = (ap2->dimensions[1] > 1 ? ap2->dimensions[1] : 1); if (typenum == PyArray_DOUBLE) { - cblas_dgemv(CblasRowMajor, - CblasNoTrans, ap2->dimensions[0], ap2->dimensions[1], + cblas_dgemv(CblasRowMajor, + CblasNoTrans, ap2->dimensions[0], ap2->dimensions[1], 1.0, (double *)ap2->data, lda, (double *)ap1->data, 1, 0.0, (double *)ret->data, 1); } else if (typenum == PyArray_CDOUBLE) { - cblas_zgemv(CblasRowMajor, - CblasNoTrans, ap2->dimensions[0], ap2->dimensions[1], + cblas_zgemv(CblasRowMajor, + CblasNoTrans, ap2->dimensions[0], ap2->dimensions[1], oneD, (double *)ap2->data, lda, (double *)ap1->data, 1, zeroD, (double *)ret->data, 1); } else if (typenum == PyArray_FLOAT) { - cblas_sgemv(CblasRowMajor, - CblasNoTrans, ap2->dimensions[0], ap2->dimensions[1], + cblas_sgemv(CblasRowMajor, + CblasNoTrans, ap2->dimensions[0], ap2->dimensions[1], 1.0, (float *)ap2->data, lda, (float *)ap1->data, 1, 0.0, (float *)ret->data, 1); } else if (typenum == PyArray_CFLOAT) { - cblas_cgemv(CblasRowMajor, - CblasNoTrans, ap2->dimensions[0], ap2->dimensions[1], + cblas_cgemv(CblasRowMajor, + CblasNoTrans, ap2->dimensions[0], ap2->dimensions[1], oneF, (float *)ap2->data, lda, (float *)ap1->data, 1, zeroF, (float *)ret->data, 1); } } - else { /* (ap1->nd == 2 && ap2->nd == 2) */ - /* Matrix matrix multiplication -- Level 3 BLAS */ + else { /* (ap1->nd == 2 && ap2->nd == 2) */ + /* Matrix matrix multiplication -- Level 3 BLAS */ lda = (ap1->dimensions[1] > 1 ? ap1->dimensions[1] : 1); ldb = (ap2->dimensions[1] > 1 ? ap2->dimensions[1] : 1); ldc = (ret->dimensions[1] > 1 ? ret->dimensions[1] : 1); @@ -948,7 +948,7 @@ Py_DECREF(ap1); Py_DECREF(ap2); return PyArray_Return(ret); - + fail: Py_XDECREF(ap1); Py_XDECREF(ap2); @@ -969,31 +969,31 @@ PyArray_Descr *type; if (!PyArg_ParseTuple(args, "OO", &op1, &op2)) return NULL; - - /* + + /* * Conjugating dot product using the BLAS for vectors. * Multiplies op1 and op2, each of which must be vector. */ - typenum = PyArray_ObjectType(op1, 0); + typenum = PyArray_ObjectType(op1, 0); typenum = PyArray_ObjectType(op2, typenum); - + type = PyArray_DescrFromType(typenum); - Py_INCREF(type); + Py_INCREF(type); ap1 = (PyArrayObject *)PyArray_FromAny(op1, type, 0, 0, 0, NULL); if (ap1==NULL) {Py_DECREF(type); goto fail;} op1 = PyArray_Flatten(ap1, 0); if (op1==NULL) {Py_DECREF(type); goto fail;} Py_DECREF(ap1); ap1 = (PyArrayObject *)op1; - + ap2 = (PyArrayObject *)PyArray_FromAny(op2, type, 0, 0, 0, NULL); if (ap2==NULL) goto fail; op2 = PyArray_Flatten(ap2, 0); if (op2 == NULL) goto fail; Py_DECREF(ap2); ap2 = (PyArrayObject *)op2; - + if (typenum != PyArray_FLOAT && typenum != PyArray_DOUBLE && typenum != PyArray_CFLOAT && typenum != PyArray_CDOUBLE) { if (!altered) { @@ -1001,7 +1001,7 @@ PyObject *tmp1, *tmp2; tmp1 = PyTuple_New(0); tmp2 = dotblas_alterdot(NULL, tmp1); - Py_DECREF(tmp1); + Py_DECREF(tmp1); Py_DECREF(tmp2); } if (PyTypeNum_ISCOMPLEX(typenum)) { @@ -1009,10 +1009,10 @@ if (op1==NULL) goto fail; Py_DECREF(ap1); ap1 = (PyArrayObject *)op1; - } - ret = (PyArrayObject *)PyArray_InnerProduct((PyObject *)ap1, + } + ret = (PyArrayObject *)PyArray_InnerProduct((PyObject *)ap1, (PyObject *)ap2); - Py_DECREF(ap1); + Py_DECREF(ap1); Py_DECREF(ap2); return PyArray_Return(ret); } @@ -1022,7 +1022,7 @@ goto fail; } l = ap1->dimensions[ap1->nd-1]; - + ret = (PyArrayObject *)PyArray_SimpleNew(0, dimensions, typenum); if (ret == NULL) goto fail; @@ -1030,19 +1030,19 @@ /* Dot product between two vectors -- Level 1 BLAS */ if (typenum == PyArray_DOUBLE) { - *((double *)ret->data) = cblas_ddot(l, (double *)ap1->data, 1, + *((double *)ret->data) = cblas_ddot(l, (double *)ap1->data, 1, (double *)ap2->data, 1); } else if (typenum == PyArray_FLOAT) { - *((float *)ret->data) = cblas_sdot(l, (float *)ap1->data, 1, + *((float *)ret->data) = cblas_sdot(l, (float *)ap1->data, 1, (float *)ap2->data, 1); } else if (typenum == PyArray_CDOUBLE) { - cblas_zdotc_sub(l, (double *)ap1->data, 1, + cblas_zdotc_sub(l, (double *)ap1->data, 1, (double *)ap2->data, 1, (double *)ret->data); } else if (typenum == PyArray_CFLOAT) { - cblas_cdotc_sub(l, (float *)ap1->data, 1, + cblas_cdotc_sub(l, (float *)ap1->data, 1, (float *)ap2->data, 1, (float *)ret->data); } @@ -1051,7 +1051,7 @@ Py_DECREF(ap1); Py_DECREF(ap2); return PyArray_Return(ret); - + fail: Py_XDECREF(ap1); Py_XDECREF(ap2); @@ -1072,7 +1072,7 @@ PyMODINIT_FUNC init_dotblas(void) { int i; PyObject *d, *s; - + /* Create the module and add the functions */ Py_InitModule3("_dotblas", dotblas_module_methods, module_doc); @@ -1088,5 +1088,5 @@ s = dotblas_alterdot(NULL, d); Py_DECREF(d); Py_DECREF(s); - + } Modified: trunk/numpy/core/blasdot/cblas.h =================================================================== --- trunk/numpy/core/blasdot/cblas.h 2007-04-11 16:50:38 UTC (rev 3703) +++ trunk/numpy/core/blasdot/cblas.h 2007-04-11 17:41:19 UTC (rev 3704) @@ -4,7 +4,7 @@ /* Allow the use in C++ code. */ #ifdef __cplusplus -extern "C" +extern "C" { #endif @@ -77,39 +77,39 @@ * =========================================================================== */ -/* +/* * Routines with standard 4 prefixes (s, d, c, z) */ -void cblas_sswap(const int N, float *X, const int incX, +void cblas_sswap(const int N, float *X, const int incX, float *Y, const int incY); -void cblas_scopy(const int N, const float *X, const int incX, +void cblas_scopy(const int N, const float *X, const int incX, float *Y, const int incY); void cblas_saxpy(const int N, const float alpha, const float *X, const int incX, float *Y, const int incY); -void cblas_dswap(const int N, double *X, const int incX, +void cblas_dswap(const int N, double *X, const int incX, double *Y, const int incY); -void cblas_dcopy(const int N, const double *X, const int incX, +void cblas_dcopy(const int N, const double *X, const int incX, double *Y, const int incY); void cblas_daxpy(const int N, const double alpha, const double *X, const int incX, double *Y, const int incY); -void cblas_cswap(const int N, void *X, const int incX, +void cblas_cswap(const int N, void *X, const int incX, void *Y, const int incY); -void cblas_ccopy(const int N, const void *X, const int incX, +void cblas_ccopy(const int N, const void *X, const int incX, void *Y, const int incY); void cblas_caxpy(const int N, const void *alpha, const void *X, const int incX, void *Y, const int incY); -void cblas_zswap(const int N, void *X, const int incX, +void cblas_zswap(const int N, void *X, const int incX, void *Y, const int incY); -void cblas_zcopy(const int N, const void *X, const int incX, +void cblas_zcopy(const int N, const void *X, const int incX, void *Y, const int incY); void cblas_zaxpy(const int N, const void *alpha, const void *X, const int incX, void *Y, const int incY); -/* +/* * Routines with S and D prefix only */ void cblas_srotg(float *a, float *b, float *c, float *s); @@ -127,7 +127,7 @@ double *Y, const int incY, const double *P); -/* +/* * Routines with S D C Z CS and ZD prefixes */ void cblas_sscal(const int N, const float alpha, float *X, const int incX); @@ -143,7 +143,7 @@ * =========================================================================== */ -/* +/* * Routines with standard 4 prefixes (S, D, C, Z) */ void cblas_sgemv(const enum CBLAS_ORDER order, @@ -158,11 +158,11 @@ const int incX, const float beta, float *Y, const int incY); void cblas_strmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, - const int N, const float *A, const int lda, + const int N, const float *A, const int lda, float *X, const int incX); void cblas_stbmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, - const int N, const int K, const float *A, const int lda, + const int N, const int K, const float *A, const int lda, float *X, const int incX); void cblas_stpmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, @@ -191,11 +191,11 @@ const int incX, const double beta, double *Y, const int incY); void cblas_dtrmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, - const int N, const double *A, const int lda, + const int N, const double *A, const int lda, double *X, const int incX); void cblas_dtbmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, - const int N, const int K, const double *A, const int lda, + const int N, const int K, const double *A, const int lda, double *X, const int incX); void cblas_dtpmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, @@ -224,11 +224,11 @@ const int incX, const void *beta, void *Y, const int incY); void cblas_ctrmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, - const int N, const void *A, const int lda, + const int N, const void *A, const int lda, void *X, const int incX); void cblas_ctbmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, - const int N, const int K, const void *A, const int lda, + const int N, const int K, const void *A, const int lda, void *X, const int incX); void cblas_ctpmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, @@ -257,11 +257,11 @@ const int incX, const void *beta, void *Y, const int incY); void cblas_ztrmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, - const int N, const void *A, const int lda, + const int N, const void *A, const int lda, void *X, const int incX); void cblas_ztbmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, - const int N, const int K, const void *A, const int lda, + const int N, const int K, const void *A, const int lda, void *X, const int incX); void cblas_ztpmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, @@ -279,7 +279,7 @@ const int N, const void *Ap, void *X, const int incX); -/* +/* * Routines with S and D prefixes only */ void cblas_ssymv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, @@ -341,7 +341,7 @@ const int incX, const double *Y, const int incY, double *A); -/* +/* * Routines with C and Z prefixes only */ void cblas_chemv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, @@ -412,7 +412,7 @@ * =========================================================================== */ -/* +/* * Routines with standard 4 prefixes (S, D, C, Z) */ void cblas_sgemm(const enum CBLAS_ORDER Order, const enum CBLAS_TRANSPOSE TransA, @@ -536,7 +536,7 @@ void *B, const int ldb); -/* +/* * Routines with prefixes C and Z only */ void cblas_chemm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, @@ -573,6 +573,6 @@ #ifdef __cplusplus } -#endif +#endif #endif From numpy-svn at scipy.org Wed Apr 11 16:38:47 2007 From: numpy-svn at scipy.org (numpy-svn at scipy.org) Date: Wed, 11 Apr 2007 15:38:47 -0500 (CDT) Subject: [Numpy-svn] r3705 - in branches/multicore: . numpy/core/blasdot numpy/doc/swig Message-ID: <20070411203847.9E8B339C087@new.scipy.org> Author: eric Date: 2007-04-11 15:38:46 -0500 (Wed, 11 Apr 2007) New Revision: 3705 Modified: branches/multicore/ branches/multicore/numpy/core/blasdot/_dotblas.c branches/multicore/numpy/core/blasdot/cblas.h branches/multicore/numpy/doc/swig/numpy.i Log: Merged revisions 3701-3704 via svnmerge from http://svn.scipy.org/svn/numpy/trunk ........ r3702 | eric | 2007-04-11 02:32:05 -0500 (Wed, 11 Apr 2007) | 1 line long lost author was... eric. ........ r3703 | wfspotz at sandia.gov | 2007-04-11 11:50:38 -0500 (Wed, 11 Apr 2007) | 1 line Provided more sophisticated typecheck typemap for IN_ARRAYs ........ r3704 | charris | 2007-04-11 12:41:19 -0500 (Wed, 11 Apr 2007) | 1 line Cleanup whitespace. ........ Property changes on: branches/multicore ___________________________________________________________________ Name: svnmerge-integrated - /branches/distutils-revamp:1-2752 /trunk:1-3700 + /branches/distutils-revamp:1-2752 /trunk:1-3704 Modified: branches/multicore/numpy/core/blasdot/_dotblas.c =================================================================== --- branches/multicore/numpy/core/blasdot/_dotblas.c 2007-04-11 17:41:19 UTC (rev 3704) +++ branches/multicore/numpy/core/blasdot/_dotblas.c 2007-04-11 20:38:46 UTC (rev 3705) @@ -12,62 +12,62 @@ static PyArray_DotFunc *oldFunctions[PyArray_NTYPES]; -static void -FLOAT_dot(void *a, intp stridea, void *b, intp strideb, void *res, +static void +FLOAT_dot(void *a, intp stridea, void *b, intp strideb, void *res, intp n, void *tmp) { register int na = stridea / sizeof(float); register int nb = strideb / sizeof(float); - if ((sizeof(float) * na == stridea) && + if ((sizeof(float) * na == stridea) && (sizeof(float) * nb == strideb)) *((float *)res) = cblas_sdot((int)n, (float *)a, na, (float *)b, nb); - - else + + else oldFunctions[PyArray_FLOAT](a, stridea, b, strideb, res, n, tmp); } -static void -DOUBLE_dot(void *a, intp stridea, void *b, intp strideb, void *res, +static void +DOUBLE_dot(void *a, intp stridea, void *b, intp strideb, void *res, intp n, void *tmp) { register int na = stridea / sizeof(double); register int nb = strideb / sizeof(double); - if ((sizeof(double) * na == stridea) && - (sizeof(double) * nb == strideb)) + if ((sizeof(double) * na == stridea) && + (sizeof(double) * nb == strideb)) *((double *)res) = cblas_ddot((int)n, (double *)a, na, (double *)b, nb); else oldFunctions[PyArray_DOUBLE](a, stridea, b, strideb, res, n, tmp); } -static void -CFLOAT_dot(void *a, intp stridea, void *b, intp strideb, void *res, +static void +CFLOAT_dot(void *a, intp stridea, void *b, intp strideb, void *res, intp n, void *tmp) { - + register int na = stridea / sizeof(cfloat); register int nb = strideb / sizeof(cfloat); - if ((sizeof(cfloat) * na == stridea) && - (sizeof(cfloat) * nb == strideb)) + if ((sizeof(cfloat) * na == stridea) && + (sizeof(cfloat) * nb == strideb)) cblas_cdotu_sub((int)n, (float *)a, na, (float *)b, nb, (float *)res); else oldFunctions[PyArray_CFLOAT](a, stridea, b, strideb, res, n, tmp); } -static void -CDOUBLE_dot(void *a, intp stridea, void *b, intp strideb, void *res, +static void +CDOUBLE_dot(void *a, intp stridea, void *b, intp strideb, void *res, intp n, void *tmp) { register int na = stridea / sizeof(cdouble); register int nb = strideb / sizeof(cdouble); - if ((sizeof(cdouble) * na == stridea) && - (sizeof(cdouble) * nb == strideb)) + if ((sizeof(cdouble) * na == stridea) && + (sizeof(cdouble) * nb == strideb)) cblas_zdotu_sub((int)n, (double *)a, na, (double *)b, nb, (double *)res); else - oldFunctions[PyArray_CDOUBLE](a, stridea, b, strideb, res, n, tmp); + oldFunctions[PyArray_CDOUBLE](a, stridea, b, strideb, res, n, tmp); } @@ -76,10 +76,10 @@ static char doc_alterdot[] = "alterdot() changes all dot functions to use blas."; static PyObject * -dotblas_alterdot(PyObject *dummy, PyObject *args) +dotblas_alterdot(PyObject *dummy, PyObject *args) { PyArray_Descr *descr; - + if (!PyArg_ParseTuple(args, "")) return NULL; /* Replace the dot functions to the ones using blas */ @@ -88,15 +88,15 @@ descr = PyArray_DescrFromType(PyArray_FLOAT); oldFunctions[PyArray_FLOAT] = descr->f->dotfunc; descr->f->dotfunc = (PyArray_DotFunc *)FLOAT_dot; - + descr = PyArray_DescrFromType(PyArray_DOUBLE); oldFunctions[PyArray_DOUBLE] = descr->f->dotfunc; descr->f->dotfunc = (PyArray_DotFunc *)DOUBLE_dot; - + descr = PyArray_DescrFromType(PyArray_CFLOAT); oldFunctions[PyArray_CFLOAT] = descr->f->dotfunc; descr->f->dotfunc = (PyArray_DotFunc *)CFLOAT_dot; - + descr = PyArray_DescrFromType(PyArray_CDOUBLE); oldFunctions[PyArray_CDOUBLE] = descr->f->dotfunc; descr->f->dotfunc = (PyArray_DotFunc *)CDOUBLE_dot; @@ -111,7 +111,7 @@ static char doc_restoredot[] = "restoredot() restores dots to defaults."; static PyObject * -dotblas_restoredot(PyObject *dummy, PyObject *args) +dotblas_restoredot(PyObject *dummy, PyObject *args) { PyArray_Descr *descr; @@ -137,7 +137,7 @@ descr->f->dotfunc = oldFunctions[PyArray_CDOUBLE]; oldFunctions[PyArray_CDOUBLE] = NULL; Py_XDECREF(descr); - + altered = FALSE; } @@ -147,7 +147,7 @@ typedef enum {_scalar, _column, _row, _matrix} MatrixShape; -static MatrixShape +static MatrixShape _select_matrix_shape(PyArrayObject *array) { switch (array->nd) { @@ -175,7 +175,7 @@ static char doc_matrixproduct[] = "dot(a,b)\nReturns the dot product of a and b for arrays of floating point types.\nLike the generic numpy equivalent the product sum is over\nthe last dimension of a and the second-to-last dimension of b.\nNB: The first argument is not conjugated."; static PyObject * -dotblas_matrixproduct(PyObject *dummy, PyObject *args) +dotblas_matrixproduct(PyObject *dummy, PyObject *args) { PyObject *op1, *op2; PyArrayObject *ap1=NULL, *ap2=NULL, *ret=NULL; @@ -192,23 +192,23 @@ PyTypeObject *subtype; PyArray_Descr *dtype; MatrixShape ap1shape, ap2shape; - + if (!PyArg_ParseTuple(args, "OO", &op1, &op2)) return NULL; - - /* - * "Matrix product" using the BLAS. + + /* + * "Matrix product" using the BLAS. * Only works for float double and complex types. */ - typenum = PyArray_ObjectType(op1, 0); + typenum = PyArray_ObjectType(op1, 0); typenum = PyArray_ObjectType(op2, typenum); - + /* This function doesn't handle other types */ if ((typenum != PyArray_DOUBLE && typenum != PyArray_CDOUBLE && typenum != PyArray_FLOAT && typenum != PyArray_CFLOAT)) { return PyArray_Return((PyArrayObject *)PyArray_MatrixProduct(op1, op2)); } - + dtype = PyArray_DescrFromType(typenum); ap1 = (PyArrayObject *)PyArray_FromAny(op1, dtype, 0, 0, ALIGNED, NULL); if (ap1 == NULL) return NULL; @@ -216,7 +216,7 @@ ap2 = (PyArrayObject *)PyArray_FromAny(op2, dtype, 0, 0, ALIGNED, NULL); if (ap2 == NULL) goto fail; - if ((ap1->nd > 2) || (ap2->nd > 2)) { + if ((ap1->nd > 2) || (ap2->nd > 2)) { /* This function doesn't handle dimensions greater than 2 -- other than to ensure the dot function is altered */ @@ -225,16 +225,16 @@ PyObject *tmp1, *tmp2; tmp1 = PyTuple_New(0); tmp2 = dotblas_alterdot(NULL, tmp1); - Py_DECREF(tmp1); + Py_DECREF(tmp1); Py_DECREF(tmp2); } - ret = (PyArrayObject *)PyArray_MatrixProduct((PyObject *)ap1, + ret = (PyArrayObject *)PyArray_MatrixProduct((PyObject *)ap1, (PyObject *)ap2); - Py_DECREF(ap1); + Py_DECREF(ap1); Py_DECREF(ap2); return PyArray_Return(ret); } - + if (!PyArray_ElementStrides((PyObject *)ap1)) { op1 = PyArray_NewCopy(ap1, PyArray_ANYORDER); Py_DECREF(ap1); @@ -249,7 +249,7 @@ } ap1shape = _select_matrix_shape(ap1); ap2shape = _select_matrix_shape(ap2); - + if (ap1shape == _scalar || ap2shape == _scalar) { PyArrayObject *oap1, *oap2; oap1 = ap1; oap2 = ap2; @@ -267,11 +267,11 @@ if (ap1->nd == 0 || ap2->nd == 0) { intp *thisdims; - if (ap1->nd == 0) { + if (ap1->nd == 0) { nd = ap2->nd; thisdims = ap2->dimensions; } - else { + else { nd = ap1->nd; thisdims = ap1->dimensions; } @@ -281,7 +281,7 @@ l *= dimensions[j]; } } - else { + else { l = oap1->dimensions[oap1->nd-1]; if (oap2->dimensions[0] != l) { @@ -292,7 +292,7 @@ /* nd = 0 or 1 or 2 */ /* If nd == 0 do nothing ... */ if (nd == 1) { - /* Either ap1->nd is 1 dim or ap2->nd is 1 dim + /* Either ap1->nd is 1 dim or ap2->nd is 1 dim and the other is 2-dim */ dimensions[0] = (oap1->nd == 2) ? oap1->dimensions[0] : oap2->dimensions[1]; l = dimensions[0]; @@ -316,21 +316,21 @@ else { /* (ap1->nd <= 2 && ap2->nd <= 2) */ /* Both ap1 and ap2 are vectors or matrices */ l = ap1->dimensions[ap1->nd-1]; - + if (ap2->dimensions[0] != l) { PyErr_SetString(PyExc_ValueError, "matrices are not aligned"); goto fail; } nd = ap1->nd+ap2->nd-2; - - if (nd == 1) + + if (nd == 1) dimensions[0] = (ap1->nd == 2) ? ap1->dimensions[0] : ap2->dimensions[1]; else if (nd == 2) { dimensions[0] = ap1->dimensions[0]; dimensions[1] = ap2->dimensions[1]; } } - + /* Choose which subtype to return */ if (ap1->ob_type != ap2->ob_type) { prior2 = PyArray_GetPriority((PyObject *)ap2, 0.0); @@ -341,12 +341,12 @@ prior1 = prior2 = 0.0; subtype = ap1->ob_type; } - + ret = (PyArrayObject *)PyArray_New(subtype, nd, dimensions, typenum, NULL, NULL, 0, 0, (PyObject *) (prior2 > prior1 ? ap2 : ap1)); - + if (ret == NULL) goto fail; numbytes = PyArray_NBYTES(ret); memset(ret->data, 0, numbytes); @@ -386,19 +386,19 @@ a1s = ap1->strides[maxind] / sizeof(double); rets = ret->strides[maxind] / sizeof(double); for (i=0; i < ap1->dimensions[oind]; i++) { - cblas_daxpy(l, val, (double *)ptr, a1s, + cblas_daxpy(l, val, (double *)ptr, a1s, (double *)rptr, rets); ptr += ap1->strides[oind]; rptr += ret->strides[oind]; } } - } + } else if (typenum == PyArray_CDOUBLE) { if (l == 1) { cdouble *ptr1, *ptr2, *res; ptr1 = (cdouble *)ap2->data; ptr2 = (cdouble *)ap1->data; - res = (cdouble *)ret->data; + res = (cdouble *)ret->data; res->real = ptr1->real * ptr2->real - ptr1->imag * ptr2->imag; res->imag = ptr1->real * ptr2->imag + ptr1->imag * ptr2->real; } @@ -419,7 +419,7 @@ a1s = ap1->strides[maxind] / sizeof(cdouble); rets = ret->strides[maxind] / sizeof(cdouble); for (i=0; i < ap1->dimensions[oind]; i++) { - cblas_zaxpy(l, pval, (double *)ptr, a1s, + cblas_zaxpy(l, pval, (double *)ptr, a1s, (double *)rptr, rets); ptr += ap1->strides[oind]; rptr += ret->strides[oind]; @@ -448,7 +448,7 @@ a1s = ap1->strides[maxind] / sizeof(float); rets = ret->strides[maxind] / sizeof(float); for (i=0; i < ap1->dimensions[oind]; i++) { - cblas_saxpy(l, val, (float *)ptr, a1s, + cblas_saxpy(l, val, (float *)ptr, a1s, (float *)rptr, rets); ptr += ap1->strides[oind]; rptr += ret->strides[oind]; @@ -460,7 +460,7 @@ cfloat *ptr1, *ptr2, *res; ptr1 = (cfloat *)ap2->data; ptr2 = (cfloat *)ap1->data; - res = (cfloat *)ret->data; + res = (cfloat *)ret->data; res->real = ptr1->real * ptr2->real - ptr1->imag * ptr2->imag; res->imag = ptr1->real * ptr2->imag + ptr1->imag * ptr2->real; } @@ -481,7 +481,7 @@ a1s = ap1->strides[maxind] / sizeof(cfloat); rets = ret->strides[maxind] / sizeof(cfloat); for (i=0; i < ap1->dimensions[oind]; i++) { - cblas_caxpy(l, pval, (float *)ptr, a1s, + cblas_caxpy(l, pval, (float *)ptr, a1s, (float *)rptr, rets); ptr += ap1->strides[oind]; rptr += ret->strides[oind]; @@ -501,24 +501,24 @@ else { ap1s = ap1->strides[0] / ap1->descr->elsize; } - + /* Dot product between two vectors -- Level 1 BLAS */ if (typenum == PyArray_DOUBLE) { - double result = cblas_ddot(l, (double *)ap1->data, ap1s, + double result = cblas_ddot(l, (double *)ap1->data, ap1s, (double *)ap2->data, ap2s); *((double *)ret->data) = result; } else if (typenum == PyArray_FLOAT) { - float result = cblas_sdot(l, (float *)ap1->data, ap1s, + float result = cblas_sdot(l, (float *)ap1->data, ap1s, (float *)ap2->data, ap2s); *((float *)ret->data) = result; } else if (typenum == PyArray_CDOUBLE) { - cblas_zdotu_sub(l, (double *)ap1->data, ap1s, + cblas_zdotu_sub(l, (double *)ap1->data, ap1s, (double *)ap2->data, ap2s, (double *)ret->data); } else if (typenum == PyArray_CFLOAT) { - cblas_cdotu_sub(l, (float *)ap1->data, ap1s, + cblas_cdotu_sub(l, (float *)ap1->data, ap1s, (float *)ap2->data, ap2s, (float *)ret->data); } NPY_END_ALLOW_THREADS @@ -547,29 +547,29 @@ } ap2s = ap2->strides[0] / ap2->descr->elsize; if (typenum == PyArray_DOUBLE) { - cblas_dgemv(Order, CblasNoTrans, - ap1->dimensions[0], ap1->dimensions[1], - 1.0, (double *)ap1->data, lda, + cblas_dgemv(Order, CblasNoTrans, + ap1->dimensions[0], ap1->dimensions[1], + 1.0, (double *)ap1->data, lda, (double *)ap2->data, ap2s, 0.0, (double *)ret->data, 1); } else if (typenum == PyArray_FLOAT) { - cblas_sgemv(Order, CblasNoTrans, - ap1->dimensions[0], ap1->dimensions[1], - 1.0, (float *)ap1->data, lda, + cblas_sgemv(Order, CblasNoTrans, + ap1->dimensions[0], ap1->dimensions[1], + 1.0, (float *)ap1->data, lda, (float *)ap2->data, ap2s, 0.0, (float *)ret->data, 1); } else if (typenum == PyArray_CDOUBLE) { - cblas_zgemv(Order, - CblasNoTrans, ap1->dimensions[0], ap1->dimensions[1], - oneD, (double *)ap1->data, lda, - (double *)ap2->data, ap2s, zeroD, + cblas_zgemv(Order, + CblasNoTrans, ap1->dimensions[0], ap1->dimensions[1], + oneD, (double *)ap1->data, lda, + (double *)ap2->data, ap2s, zeroD, (double *)ret->data, 1); } else if (typenum == PyArray_CFLOAT) { - cblas_cgemv(Order, - CblasNoTrans, ap1->dimensions[0], ap1->dimensions[1], - oneF, (float *)ap1->data, lda, - (float *)ap2->data, ap2s, zeroF, + cblas_cgemv(Order, + CblasNoTrans, ap1->dimensions[0], ap1->dimensions[1], + oneF, (float *)ap1->data, lda, + (float *)ap2->data, ap2s, zeroF, (float *)ret->data, 1); } NPY_END_ALLOW_THREADS @@ -602,33 +602,33 @@ ap1s = ap1->strides[0] / ap1->descr->elsize; } if (typenum == PyArray_DOUBLE) { - cblas_dgemv(Order, - CblasTrans, ap2->dimensions[0], ap2->dimensions[1], + cblas_dgemv(Order, + CblasTrans, ap2->dimensions[0], ap2->dimensions[1], 1.0, (double *)ap2->data, lda, (double *)ap1->data, ap1s, 0.0, (double *)ret->data, 1); } else if (typenum == PyArray_FLOAT) { cblas_sgemv(Order, - CblasTrans, ap2->dimensions[0], ap2->dimensions[1], + CblasTrans, ap2->dimensions[0], ap2->dimensions[1], 1.0, (float *)ap2->data, lda, (float *)ap1->data, ap1s, 0.0, (float *)ret->data, 1); } else if (typenum == PyArray_CDOUBLE) { cblas_zgemv(Order, - CblasTrans, ap2->dimensions[0], ap2->dimensions[1], + CblasTrans, ap2->dimensions[0], ap2->dimensions[1], oneD, (double *)ap2->data, lda, (double *)ap1->data, ap1s, zeroD, (double *)ret->data, 1); } else if (typenum == PyArray_CFLOAT) { cblas_cgemv(Order, - CblasTrans, ap2->dimensions[0], ap2->dimensions[1], + CblasTrans, ap2->dimensions[0], ap2->dimensions[1], oneF, (float *)ap2->data, lda, (float *)ap1->data, ap1s, zeroF, (float *)ret->data, 1); } NPY_END_ALLOW_THREADS } else { /* (ap1->nd == 2 && ap2->nd == 2) */ - /* Matrix matrix multiplication -- Level 3 BLAS */ + /* Matrix matrix multiplication -- Level 3 BLAS */ /* L x M multiplied by M x N */ enum CBLAS_ORDER Order; enum CBLAS_TRANSPOSE Trans1, Trans2; @@ -638,7 +638,7 @@ /* We may be able to handle single-segment arrays here using appropriate values of Order, Trans1, and Trans2. */ - + if (!PyArray_ISCONTIGUOUS(ap2)) { PyObject *new; new = PyArray_Copy(ap2); @@ -655,7 +655,7 @@ } NPY_BEGIN_ALLOW_THREADS - + Order = CblasRowMajor; Trans1 = CblasNoTrans; Trans2 = CblasNoTrans; @@ -664,9 +664,9 @@ M = ap2->dimensions[0]; lda = (ap1->dimensions[1] > 1 ? ap1->dimensions[1] : 1); ldb = (ap2->dimensions[1] > 1 ? ap2->dimensions[1] : 1); - ldc = (ret->dimensions[1] > 1 ? ret->dimensions[1] : 1); + ldc = (ret->dimensions[1] > 1 ? ret->dimensions[1] : 1); if (typenum == PyArray_DOUBLE) { - cblas_dgemm(Order, Trans1, Trans2, + cblas_dgemm(Order, Trans1, Trans2, L, N, M, 1.0, (double *)ap1->data, lda, (double *)ap2->data, ldb, @@ -674,14 +674,14 @@ } else if (typenum == PyArray_FLOAT) { cblas_sgemm(Order, Trans1, Trans2, - L, N, M, + L, N, M, 1.0, (float *)ap1->data, lda, (float *)ap2->data, ldb, 0.0, (float *)ret->data, ldc); } else if (typenum == PyArray_CDOUBLE) { cblas_zgemm(Order, Trans1, Trans2, - L, N, M, + L, N, M, oneD, (double *)ap1->data, lda, (double *)ap2->data, ldb, zeroD, (double *)ret->data, ldc); @@ -700,7 +700,7 @@ Py_DECREF(ap1); Py_DECREF(ap2); return PyArray_Return(ret); - + fail: Py_XDECREF(ap1); Py_XDECREF(ap2); @@ -712,7 +712,7 @@ static char doc_innerproduct[] = "innerproduct(a,b)\nReturns the inner product of a and b for arrays of floating point types.\nLike the generic NumPy equivalent the product sum is over\nthe last dimension of a and b.\nNB: The first argument is not conjugated."; static PyObject * -dotblas_innerproduct(PyObject *dummy, PyObject *args) +dotblas_innerproduct(PyObject *dummy, PyObject *args) { PyObject *op1, *op2; PyArrayObject *ap1, *ap2, *ret; @@ -727,15 +727,15 @@ double prior1, prior2; if (!PyArg_ParseTuple(args, "OO", &op1, &op2)) return NULL; - - /* + + /* * Inner product using the BLAS. The product sum is taken along the last * dimensions of the two arrays. * Only speeds things up for float double and complex types. */ - typenum = PyArray_ObjectType(op1, 0); + typenum = PyArray_ObjectType(op1, 0); typenum = PyArray_ObjectType(op2, typenum); /* This function doesn't handle other types */ @@ -750,7 +750,7 @@ ap2 = (PyArrayObject *)PyArray_ContiguousFromObject(op2, typenum, 0, 0); if (ap2 == NULL) goto fail; - if ((ap1->nd > 2) || (ap2->nd > 2)) { + if ((ap1->nd > 2) || (ap2->nd > 2)) { /* This function doesn't handle dimensions greater than 2 -- other than to ensure the dot function is altered */ @@ -759,12 +759,12 @@ PyObject *tmp1, *tmp2; tmp1 = PyTuple_New(0); tmp2 = dotblas_alterdot(NULL, tmp1); - Py_DECREF(tmp1); + Py_DECREF(tmp1); Py_DECREF(tmp2); } - ret = (PyArrayObject *)PyArray_InnerProduct((PyObject *)ap1, + ret = (PyArrayObject *)PyArray_InnerProduct((PyObject *)ap1, (PyObject *)ap2); - Py_DECREF(ap1); + Py_DECREF(ap1); Py_DECREF(ap2); return PyArray_Return(ret); } @@ -785,14 +785,14 @@ else { /* (ap1->nd <= 2 && ap2->nd <= 2) */ /* Both ap1 and ap2 are vectors or matrices */ l = ap1->dimensions[ap1->nd-1]; - + if (ap2->dimensions[ap2->nd-1] != l) { PyErr_SetString(PyExc_ValueError, "matrices are not aligned"); goto fail; } nd = ap1->nd+ap2->nd-2; - - if (nd == 1) + + if (nd == 1) dimensions[0] = (ap1->nd == 2) ? ap1->dimensions[0] : ap2->dimensions[0]; else if (nd == 2) { dimensions[0] = ap1->dimensions[0]; @@ -804,12 +804,12 @@ prior2 = PyArray_GetPriority((PyObject *)ap2, 0.0); prior1 = PyArray_GetPriority((PyObject *)ap1, 0.0); subtype = (prior2 > prior1 ? ap2->ob_type : ap1->ob_type); - - ret = (PyArrayObject *)PyArray_New(subtype, nd, dimensions, - typenum, NULL, NULL, 0, 0, + + ret = (PyArrayObject *)PyArray_New(subtype, nd, dimensions, + typenum, NULL, NULL, 0, 0, (PyObject *)\ (prior2 > prior1 ? ap2 : ap1)); - + if (ret == NULL) goto fail; NPY_BEGIN_ALLOW_THREADS memset(ret->data, 0, PyArray_NBYTES(ret)); @@ -819,7 +819,7 @@ if (typenum == PyArray_DOUBLE) { cblas_daxpy(l, *((double *)ap2->data), (double *)ap1->data, 1, (double *)ret->data, 1); - } + } else if (typenum == PyArray_CDOUBLE) { cblas_zaxpy(l, (double *)ap2->data, (double *)ap1->data, 1, (double *)ret->data, 1); @@ -836,21 +836,21 @@ else if (ap1->nd == 1 && ap2->nd == 1) { /* Dot product between two vectors -- Level 1 BLAS */ if (typenum == PyArray_DOUBLE) { - double result = cblas_ddot(l, (double *)ap1->data, 1, + double result = cblas_ddot(l, (double *)ap1->data, 1, (double *)ap2->data, 1); *((double *)ret->data) = result; } else if (typenum == PyArray_CDOUBLE) { - cblas_zdotu_sub(l, (double *)ap1->data, 1, + cblas_zdotu_sub(l, (double *)ap1->data, 1, (double *)ap2->data, 1, (double *)ret->data); } else if (typenum == PyArray_FLOAT) { - float result = cblas_sdot(l, (float *)ap1->data, 1, + float result = cblas_sdot(l, (float *)ap1->data, 1, (float *)ap2->data, 1); *((float *)ret->data) = result; } else if (typenum == PyArray_CFLOAT) { - cblas_cdotu_sub(l, (float *)ap1->data, 1, + cblas_cdotu_sub(l, (float *)ap1->data, 1, (float *)ap2->data, 1, (float *)ret->data); } } @@ -858,26 +858,26 @@ /* Matrix-vector multiplication -- Level 2 BLAS */ lda = (ap1->dimensions[1] > 1 ? ap1->dimensions[1] : 1); if (typenum == PyArray_DOUBLE) { - cblas_dgemv(CblasRowMajor, - CblasNoTrans, ap1->dimensions[0], ap1->dimensions[1], + cblas_dgemv(CblasRowMajor, + CblasNoTrans, ap1->dimensions[0], ap1->dimensions[1], 1.0, (double *)ap1->data, lda, (double *)ap2->data, 1, 0.0, (double *)ret->data, 1); } else if (typenum == PyArray_CDOUBLE) { - cblas_zgemv(CblasRowMajor, - CblasNoTrans, ap1->dimensions[0], ap1->dimensions[1], + cblas_zgemv(CblasRowMajor, + CblasNoTrans, ap1->dimensions[0], ap1->dimensions[1], oneD, (double *)ap1->data, lda, (double *)ap2->data, 1, zeroD, (double *)ret->data, 1); } else if (typenum == PyArray_FLOAT) { - cblas_sgemv(CblasRowMajor, - CblasNoTrans, ap1->dimensions[0], ap1->dimensions[1], + cblas_sgemv(CblasRowMajor, + CblasNoTrans, ap1->dimensions[0], ap1->dimensions[1], 1.0, (float *)ap1->data, lda, (float *)ap2->data, 1, 0.0, (float *)ret->data, 1); } else if (typenum == PyArray_CFLOAT) { - cblas_cgemv(CblasRowMajor, - CblasNoTrans, ap1->dimensions[0], ap1->dimensions[1], + cblas_cgemv(CblasRowMajor, + CblasNoTrans, ap1->dimensions[0], ap1->dimensions[1], oneF, (float *)ap1->data, lda, (float *)ap2->data, 1, zeroF, (float *)ret->data, 1); } @@ -886,32 +886,32 @@ /* Vector matrix multiplication -- Level 2 BLAS */ lda = (ap2->dimensions[1] > 1 ? ap2->dimensions[1] : 1); if (typenum == PyArray_DOUBLE) { - cblas_dgemv(CblasRowMajor, - CblasNoTrans, ap2->dimensions[0], ap2->dimensions[1], + cblas_dgemv(CblasRowMajor, + CblasNoTrans, ap2->dimensions[0], ap2->dimensions[1], 1.0, (double *)ap2->data, lda, (double *)ap1->data, 1, 0.0, (double *)ret->data, 1); } else if (typenum == PyArray_CDOUBLE) { - cblas_zgemv(CblasRowMajor, - CblasNoTrans, ap2->dimensions[0], ap2->dimensions[1], + cblas_zgemv(CblasRowMajor, + CblasNoTrans, ap2->dimensions[0], ap2->dimensions[1], oneD, (double *)ap2->data, lda, (double *)ap1->data, 1, zeroD, (double *)ret->data, 1); } else if (typenum == PyArray_FLOAT) { - cblas_sgemv(CblasRowMajor, - CblasNoTrans, ap2->dimensions[0], ap2->dimensions[1], + cblas_sgemv(CblasRowMajor, + CblasNoTrans, ap2->dimensions[0], ap2->dimensions[1], 1.0, (float *)ap2->data, lda, (float *)ap1->data, 1, 0.0, (float *)ret->data, 1); } else if (typenum == PyArray_CFLOAT) { - cblas_cgemv(CblasRowMajor, - CblasNoTrans, ap2->dimensions[0], ap2->dimensions[1], + cblas_cgemv(CblasRowMajor, + CblasNoTrans, ap2->dimensions[0], ap2->dimensions[1], oneF, (float *)ap2->data, lda, (float *)ap1->data, 1, zeroF, (float *)ret->data, 1); } } - else { /* (ap1->nd == 2 && ap2->nd == 2) */ - /* Matrix matrix multiplication -- Level 3 BLAS */ + else { /* (ap1->nd == 2 && ap2->nd == 2) */ + /* Matrix matrix multiplication -- Level 3 BLAS */ lda = (ap1->dimensions[1] > 1 ? ap1->dimensions[1] : 1); ldb = (ap2->dimensions[1] > 1 ? ap2->dimensions[1] : 1); ldc = (ret->dimensions[1] > 1 ? ret->dimensions[1] : 1); @@ -948,7 +948,7 @@ Py_DECREF(ap1); Py_DECREF(ap2); return PyArray_Return(ret); - + fail: Py_XDECREF(ap1); Py_XDECREF(ap2); @@ -969,31 +969,31 @@ PyArray_Descr *type; if (!PyArg_ParseTuple(args, "OO", &op1, &op2)) return NULL; - - /* + + /* * Conjugating dot product using the BLAS for vectors. * Multiplies op1 and op2, each of which must be vector. */ - typenum = PyArray_ObjectType(op1, 0); + typenum = PyArray_ObjectType(op1, 0); typenum = PyArray_ObjectType(op2, typenum); - + type = PyArray_DescrFromType(typenum); - Py_INCREF(type); + Py_INCREF(type); ap1 = (PyArrayObject *)PyArray_FromAny(op1, type, 0, 0, 0, NULL); if (ap1==NULL) {Py_DECREF(type); goto fail;} op1 = PyArray_Flatten(ap1, 0); if (op1==NULL) {Py_DECREF(type); goto fail;} Py_DECREF(ap1); ap1 = (PyArrayObject *)op1; - + ap2 = (PyArrayObject *)PyArray_FromAny(op2, type, 0, 0, 0, NULL); if (ap2==NULL) goto fail; op2 = PyArray_Flatten(ap2, 0); if (op2 == NULL) goto fail; Py_DECREF(ap2); ap2 = (PyArrayObject *)op2; - + if (typenum != PyArray_FLOAT && typenum != PyArray_DOUBLE && typenum != PyArray_CFLOAT && typenum != PyArray_CDOUBLE) { if (!altered) { @@ -1001,7 +1001,7 @@ PyObject *tmp1, *tmp2; tmp1 = PyTuple_New(0); tmp2 = dotblas_alterdot(NULL, tmp1); - Py_DECREF(tmp1); + Py_DECREF(tmp1); Py_DECREF(tmp2); } if (PyTypeNum_ISCOMPLEX(typenum)) { @@ -1009,10 +1009,10 @@ if (op1==NULL) goto fail; Py_DECREF(ap1); ap1 = (PyArrayObject *)op1; - } - ret = (PyArrayObject *)PyArray_InnerProduct((PyObject *)ap1, + } + ret = (PyArrayObject *)PyArray_InnerProduct((PyObject *)ap1, (PyObject *)ap2); - Py_DECREF(ap1); + Py_DECREF(ap1); Py_DECREF(ap2); return PyArray_Return(ret); } @@ -1022,7 +1022,7 @@ goto fail; } l = ap1->dimensions[ap1->nd-1]; - + ret = (PyArrayObject *)PyArray_SimpleNew(0, dimensions, typenum); if (ret == NULL) goto fail; @@ -1030,19 +1030,19 @@ /* Dot product between two vectors -- Level 1 BLAS */ if (typenum == PyArray_DOUBLE) { - *((double *)ret->data) = cblas_ddot(l, (double *)ap1->data, 1, + *((double *)ret->data) = cblas_ddot(l, (double *)ap1->data, 1, (double *)ap2->data, 1); } else if (typenum == PyArray_FLOAT) { - *((float *)ret->data) = cblas_sdot(l, (float *)ap1->data, 1, + *((float *)ret->data) = cblas_sdot(l, (float *)ap1->data, 1, (float *)ap2->data, 1); } else if (typenum == PyArray_CDOUBLE) { - cblas_zdotc_sub(l, (double *)ap1->data, 1, + cblas_zdotc_sub(l, (double *)ap1->data, 1, (double *)ap2->data, 1, (double *)ret->data); } else if (typenum == PyArray_CFLOAT) { - cblas_cdotc_sub(l, (float *)ap1->data, 1, + cblas_cdotc_sub(l, (float *)ap1->data, 1, (float *)ap2->data, 1, (float *)ret->data); } @@ -1051,7 +1051,7 @@ Py_DECREF(ap1); Py_DECREF(ap2); return PyArray_Return(ret); - + fail: Py_XDECREF(ap1); Py_XDECREF(ap2); @@ -1072,7 +1072,7 @@ PyMODINIT_FUNC init_dotblas(void) { int i; PyObject *d, *s; - + /* Create the module and add the functions */ Py_InitModule3("_dotblas", dotblas_module_methods, module_doc); @@ -1088,5 +1088,5 @@ s = dotblas_alterdot(NULL, d); Py_DECREF(d); Py_DECREF(s); - + } Modified: branches/multicore/numpy/core/blasdot/cblas.h =================================================================== --- branches/multicore/numpy/core/blasdot/cblas.h 2007-04-11 17:41:19 UTC (rev 3704) +++ branches/multicore/numpy/core/blasdot/cblas.h 2007-04-11 20:38:46 UTC (rev 3705) @@ -4,7 +4,7 @@ /* Allow the use in C++ code. */ #ifdef __cplusplus -extern "C" +extern "C" { #endif @@ -77,39 +77,39 @@ * =========================================================================== */ -/* +/* * Routines with standard 4 prefixes (s, d, c, z) */ -void cblas_sswap(const int N, float *X, const int incX, +void cblas_sswap(const int N, float *X, const int incX, float *Y, const int incY); -void cblas_scopy(const int N, const float *X, const int incX, +void cblas_scopy(const int N, const float *X, const int incX, float *Y, const int incY); void cblas_saxpy(const int N, const float alpha, const float *X, const int incX, float *Y, const int incY); -void cblas_dswap(const int N, double *X, const int incX, +void cblas_dswap(const int N, double *X, const int incX, double *Y, const int incY); -void cblas_dcopy(const int N, const double *X, const int incX, +void cblas_dcopy(const int N, const double *X, const int incX, double *Y, const int incY); void cblas_daxpy(const int N, const double alpha, const double *X, const int incX, double *Y, const int incY); -void cblas_cswap(const int N, void *X, const int incX, +void cblas_cswap(const int N, void *X, const int incX, void *Y, const int incY); -void cblas_ccopy(const int N, const void *X, const int incX, +void cblas_ccopy(const int N, const void *X, const int incX, void *Y, const int incY); void cblas_caxpy(const int N, const void *alpha, const void *X, const int incX, void *Y, const int incY); -void cblas_zswap(const int N, void *X, const int incX, +void cblas_zswap(const int N, void *X, const int incX, void *Y, const int incY); -void cblas_zcopy(const int N, const void *X, const int incX, +void cblas_zcopy(const int N, const void *X, const int incX, void *Y, const int incY); void cblas_zaxpy(const int N, const void *alpha, const void *X, const int incX, void *Y, const int incY); -/* +/* * Routines with S and D prefix only */ void cblas_srotg(float *a, float *b, float *c, float *s); @@ -127,7 +127,7 @@ double *Y, const int incY, const double *P); -/* +/* * Routines with S D C Z CS and ZD prefixes */ void cblas_sscal(const int N, const float alpha, float *X, const int incX); @@ -143,7 +143,7 @@ * =========================================================================== */ -/* +/* * Routines with standard 4 prefixes (S, D, C, Z) */ void cblas_sgemv(const enum CBLAS_ORDER order, @@ -158,11 +158,11 @@ const int incX, const float beta, float *Y, const int incY); void cblas_strmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, - const int N, const float *A, const int lda, + const int N, const float *A, const int lda, float *X, const int incX); void cblas_stbmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, - const int N, const int K, const float *A, const int lda, + const int N, const int K, const float *A, const int lda, float *X, const int incX); void cblas_stpmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, @@ -191,11 +191,11 @@ const int incX, const double beta, double *Y, const int incY); void cblas_dtrmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, - const int N, const double *A, const int lda, + const int N, const double *A, const int lda, double *X, const int incX); void cblas_dtbmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, - const int N, const int K, const double *A, const int lda, + const int N, const int K, const double *A, const int lda, double *X, const int incX); void cblas_dtpmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, @@ -224,11 +224,11 @@ const int incX, const void *beta, void *Y, const int incY); void cblas_ctrmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, - const int N, const void *A, const int lda, + const int N, const void *A, const int lda, void *X, const int incX); void cblas_ctbmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, - const int N, const int K, const void *A, const int lda, + const int N, const int K, const void *A, const int lda, void *X, const int incX); void cblas_ctpmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, @@ -257,11 +257,11 @@ const int incX, const void *beta, void *Y, const int incY); void cblas_ztrmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, - const int N, const void *A, const int lda, + const int N, const void *A, const int lda, void *X, const int incX); void cblas_ztbmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, - const int N, const int K, const void *A, const int lda, + const int N, const int K, const void *A, const int lda, void *X, const int incX); void cblas_ztpmv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, @@ -279,7 +279,7 @@ const int N, const void *Ap, void *X, const int incX); -/* +/* * Routines with S and D prefixes only */ void cblas_ssymv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, @@ -341,7 +341,7 @@ const int incX, const double *Y, const int incY, double *A); -/* +/* * Routines with C and Z prefixes only */ void cblas_chemv(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, @@ -412,7 +412,7 @@ * =========================================================================== */ -/* +/* * Routines with standard 4 prefixes (S, D, C, Z) */ void cblas_sgemm(const enum CBLAS_ORDER Order, const enum CBLAS_TRANSPOSE TransA, @@ -536,7 +536,7 @@ void *B, const int ldb); -/* +/* * Routines with prefixes C and Z only */ void cblas_chemm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, @@ -573,6 +573,6 @@ #ifdef __cplusplus } -#endif +#endif #endif Modified: branches/multicore/numpy/doc/swig/numpy.i =================================================================== --- branches/multicore/numpy/doc/swig/numpy.i 2007-04-11 17:41:19 UTC (rev 3704) +++ branches/multicore/numpy/doc/swig/numpy.i 2007-04-11 20:38:46 UTC (rev 3705) @@ -9,7 +9,7 @@ #include /* The following code originally appeared in - * enthought/kiva/agg/src/numeric.i, author unknown. It was + * enthought/kiva/agg/src/numeric.i written by Eric Jones. It was * translated from C++ to C by John Hunter. Bill Spotz has modified * it slightly to fix some minor bugs, upgrade to numpy (all * versions), add some comments and some functionality. @@ -445,7 +445,7 @@ %typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY) (DATA_TYPE IN_ARRAY1[ANY]) { - $1 = ($input != NULL); + $1 = is_array($input) || PySequence_Check($input); } %typemap(in) (DATA_TYPE IN_ARRAY1[ANY]) @@ -467,7 +467,7 @@ %typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY) (DATA_TYPE* IN_ARRAY1, DIM_TYPE DIM1) { - $1 = ($input != NULL); + $1 = is_array($input) || PySequence_Check($input); } %typemap(in) (DATA_TYPE* IN_ARRAY1, DIM_TYPE DIM1) @@ -490,7 +490,7 @@ %typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY) (DIM_TYPE DIM1, DATA_TYPE* IN_ARRAY1) { - $1 = ($input != NULL); + $1 = is_array($input) || PySequence_Check($input); } %typemap(in) (DIM_TYPE DIM1, DATA_TYPE* IN_ARRAY1) @@ -513,7 +513,7 @@ %typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY) (DATA_TYPE IN_ARRAY2[ANY][ANY]) { - $1 = ($input != NULL); + $1 = is_array($input) || PySequence_Check($input); } %typemap(in) (DATA_TYPE IN_ARRAY2[ANY][ANY]) @@ -535,7 +535,7 @@ %typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY) (DATA_TYPE* IN_ARRAY2, DIM_TYPE DIM1, DIM_TYPE DIM2) { - $1 = ($input != NULL); + $1 = is_array($input) || PySequence_Check($input); } %typemap(in) (DATA_TYPE* IN_ARRAY2, DIM_TYPE DIM1, DIM_TYPE DIM2) @@ -559,7 +559,7 @@ %typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY) (DIM_TYPE DIM1, DIM_TYPE DIM2, DATA_TYPE* IN_ARRAY2) { - $1 = ($input != NULL); + $1 = is_array($input) || PySequence_Check($input); } %typemap(in) (DIM_TYPE DIM1, DIM_TYPE DIM2, DATA_TYPE* IN_ARRAY2) @@ -583,7 +583,7 @@ %typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY) (DATA_TYPE IN_ARRAY3[ANY][ANY][ANY]) { - $1 = ($input != NULL); + $1 = is_array($input) || PySequence_Check($input); } %typemap(in) (DATA_TYPE IN_ARRAY3[ANY][ANY][ANY]) @@ -606,7 +606,7 @@ %typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY) (DATA_TYPE* IN_ARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3) { - $1 = ($input != NULL); + $1 = is_array($input) || PySequence_Check($input); } %typemap(in) (DATA_TYPE* IN_ARRAY3, DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3) @@ -632,7 +632,7 @@ %typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY) (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DATA_TYPE* IN_ARRAY3) { - $1 = ($input != NULL); + $1 = is_array($input) || PySequence_Check($input); } %typemap(in) (DIM_TYPE DIM1, DIM_TYPE DIM2, DIM_TYPE DIM3, DATA_TYPE* IN_ARRAY3) From numpy-svn at scipy.org Wed Apr 11 18:48:37 2007 From: numpy-svn at scipy.org (Nude jennajameson.com) Date: Wed, 11 Apr 2007 17:48:37 -0500 (CDT) Subject: [Numpy-svn] Hot pictures of paris hilton nude Message-ID: <20070411-14830.22980.qmail@d150-57-50.home.cgocable.net> An HTML attachment was scrubbed... URL: From numpy-svn at scipy.org Wed Apr 11 22:02:48 2007 From: numpy-svn at scipy.org (numpy-svn at scipy.org) Date: Wed, 11 Apr 2007 21:02:48 -0500 (CDT) Subject: [Numpy-svn] r3706 - trunk/numpy/doc Message-ID: <20070412020248.287C439C06A@new.scipy.org> Author: oliphant Date: 2007-04-11 21:02:44 -0500 (Wed, 11 Apr 2007) New Revision: 3706 Modified: trunk/numpy/doc/pep_buffer.txt Log: Add example to buffer interface. Modified: trunk/numpy/doc/pep_buffer.txt =================================================================== --- trunk/numpy/doc/pep_buffer.txt 2007-04-11 20:38:46 UTC (rev 3705) +++ trunk/numpy/doc/pep_buffer.txt 2007-04-12 02:02:44 UTC (rev 3706) @@ -172,44 +172,44 @@ All of the following assume that at least buf, len, and readonly will be utilized by the caller. -BUF_SIMPLE +Py_BUF_SIMPLE The returned buffer will only be assumed to be readable (the object may or may not have writeable memory). Only the buf, len, and readonly variables may be accessed. The format will be assumed to be unsigned bytes. This is a "stand-alone" flag constant. It never needs to be |'d to the others. -BUF_WRITEABLE +Py_BUF_WRITEABLE The returned buffer must be writeable. If it cannot be, then raise an error. -BUF_READONLY +Py_BUF_READONLY The returned buffer must be readonly and the underlying object should make its memory readonly. If it cannot do that, then an error should be raised if this flag is requested. -BUF_FORMAT +Py_BUF_FORMAT The consumer will be using the format string information so make sure that member is filled correctly. -BUF_SHAPE +Py_BUF_SHAPE The consumer can (and might) make use of using the ndims and shape members of the structure so make sure they are filled in correctly. -BUF_STRIDES (implies BUF_SHAPE) +Py_BUF_STRIDES (implies Py_BUF_SHAPE) The consumer can (and might) make use of the strides member of the structure (as well as ndims and shape) -BUF_OFFSETS (implies BUF_STRIDES) +Py_BUF_OFFSETS (implies Py_BUF_STRIDES) The consumer can (and might) make use of the suboffsets member (as well as ndims, shape, and strides) -BUF_FULL - This is the same as BUF_OFFSETS | BUF_FORMAT +Py_BUF_FULL + This is the same as Py_BUF_OFFSETS | Py_BUF_FORMAT -Thus, the consumer simply wanting an contiguous chunk of bytes from -the object would use BUF_SIMPLE, while a consumer that understands -how to make use of the most complicated cases would use BUF_FULL. +Thus, the consumer simply wanting a contiguous chunk of bytes from +the object would use Py_BUF_SIMPLE, while a consumer that understands +how to make use of the most complicated cases could use Py_BUF_FULL. There is a C-API that simple exporting objects can use to fill-in the buffer info structure correctly according to the provided flags if a @@ -441,7 +441,7 @@ :: int PyObject_GetContiguous(PyObject *obj, void **buf, Py_ssize_t *len, - int fortran) + char **format, int fortran) Return a contiguous chunk of memory representing the buffer. If a copy is made then return 1. If no copy was needed return 0. If an @@ -452,7 +452,7 @@ the fastest in the buffer. If fortran is 0, then the last dimension will vary the fastest (C-style contiguous). If fortran is -1, then it does not matter and you will get whatever the object decides is more -efficient. +efficient. :: @@ -685,10 +685,12 @@ ========= Ex. 1 ----------- +----------- This example shows how an image object that uses contiguous lines might expose its buffer.:: +:: + struct rgba { unsigned char r, g, b, a; }; @@ -711,6 +713,8 @@ So what does ImageObject's getbuffer do? Leaving error checking out:: +:: + int Image_getbuffer(PyObject *self, struct bufferinfo *view, int flags) { static Py_ssize_t suboffsets[2] = { -1, 0 }; @@ -746,19 +750,21 @@ chunk of memory (which will never be re-allocated while the object is alive) would do that. -int myobject_getbuffer(PyObject *self, struct bufferinfo *view, int flags) { +:: - void *buf; - Py_ssize_t len; - int readonly=0; + int myobject_getbuffer(PyObject *self, struct bufferinfo *view, int flags) { + + void *buf; + Py_ssize_t len; + int readonly=0; - buf = /* Point to buffer */ - len = /* Set to size of buffer */ - readonly = /* Set to 1 if readonly */ + buf = /* Point to buffer */ + len = /* Set to size of buffer */ + readonly = /* Set to 1 if readonly */ + + return PyObject_FillBufferInfo(view, buf, len, readonly, flags); + } - return PyObject_FillBufferInfo(view, buf, len, readonly, flags); -} - /* No releasebuffer is necessary because the memory will never be re-allocated so the locking mechanism is not needed */ @@ -769,6 +775,7 @@ A consumer that wants to only get a simple contiguous chunk of bytes from a Python object, obj would do the following: +:: struct bufferinfo view; int ret; @@ -790,8 +797,37 @@ } +Ex. 4 +----------- +A consumer that wants to be able to use any object's memory but is +writing an algorithm that only handle contiguous memory could do the following: +:: + + void *buf; + Py_ssize_t len; + char *format; + + if (PyObject_GetContiguous(obj, &buf, &len, &format, 0) < 0) { + /* error return */ + } + + /* process memory pointed to by buffer if format is correct */ + + /* Optional: + + if, after processing, we want to copy data from buffer back + into the the object + + we could do + */ + + if (PyObject_CopyToObject(obj, buf, len, 0) < 0) { + /* error return */ + } + + Copyright ========= From numpy-svn at scipy.org Thu Apr 12 04:37:46 2007 From: numpy-svn at scipy.org (numpy-svn at scipy.org) Date: Thu, 12 Apr 2007 03:37:46 -0500 (CDT) Subject: [Numpy-svn] r3707 - trunk/numpy/doc Message-ID: <20070412083746.3AD2E39C247@new.scipy.org> Author: oliphant Date: 2007-04-12 03:37:38 -0500 (Thu, 12 Apr 2007) New Revision: 3707 Modified: trunk/numpy/doc/pep_buffer.txt Log: Fixes to pep_buffer.txt Modified: trunk/numpy/doc/pep_buffer.txt =================================================================== --- trunk/numpy/doc/pep_buffer.txt 2007-04-12 02:02:44 UTC (rev 3706) +++ trunk/numpy/doc/pep_buffer.txt 2007-04-12 08:37:38 UTC (rev 3707) @@ -151,7 +151,7 @@ :: - typedef int (*getbufferproc)(PyObject *obj, struct bufferinfo *view, int flags) + typedef int (*getbufferproc)(PyObject *obj, PyBuffer *view, int flags) This function returns 0 on success and -1 on failure (and raises an error). The first variable is the "exporting" object. The second @@ -222,21 +222,22 @@ void *buf; Py_ssize_t len; int readonly; - char *format; + const char *format; int ndims; Py_ssize_t *shape; Py_ssize_t *strides; Py_ssize_t *suboffsets; + int itemsize; void *internal; - }; + } PyBuffer; -Before calling this function, the bufferinfo structure can be filled with -whatever. Upon return from getbufferproc, the bufferinfo structure is filled in -with relevant information about the buffer. This same bufferinfo -structure must be passed to bf_releasebuffer (if available) when the -consumer is done with the memory. The caller is responsible for -keeping a reference to obj until releasebuffer is called (i.e. this -call does not alter the reference count of obj). +Before calling this function, the bufferinfo structure can be filled +with whatever. Upon return from getbufferproc, the bufferinfo +structure is filled in with relevant information about the buffer. +This same bufferinfo structure must be passed to bf_releasebuffer (if +available) when the consumer is done with the memory. The caller is +responsible for keeping a reference to obj until releasebuffer is +called (i.e. this call does not alter the reference count of obj). The members of the bufferinfo structure are: @@ -315,6 +316,12 @@ the location of the starting pointer directly (i.e. buf would be modified). +itemsize + This is a storage for the itemsize of each element of the shared + memory. It can be obtained using PyBuffer_SizeFromFormat but an + exporter may know it without making this call and thus storing it + is more convenient and faster. + internal This is for use internally by the exporting object. For example, this might be re-cast as an integer by the exporter and used to @@ -336,7 +343,7 @@ interface call. The caller is responsible for the memory of the bufferinfo structure itself. -``typedef int (*releasebufferproc)(PyObject *obj, struct bufferinfo *view)`` +``typedef int (*releasebufferproc)(PyObject *obj, PyBuffer *view)`` Callers of getbufferproc must make sure that this function is called when memory previously acquired from the object is no longer needed. The exporter of the interface must make sure that @@ -373,7 +380,8 @@ :: - int PyObject_GetBuffer(PyObject *obj, struct bufferinfo *view, int flags) + int PyObject_GetBuffer(PyObject *obj, PyBuffer *view, + int flags) This is a C-API version of the getbuffer function call. It checks to make sure object has the required function pointer and issues the @@ -381,7 +389,7 @@ success. :: - int PyObject_ReleaseBuffer(PyObject *obj, struct bufferinfo *view) + int PyObject_ReleaseBuffer(PyObject *obj, PyBuffer *view) This is a C-API version of the releasebuffer function call. It checks to make sure the object has the required function pointer and issues @@ -395,45 +403,38 @@ Return a memory-view object from an object that defines the buffer interface. -A memory-view object is an extended buffer object that should replace -the buffer object in Python 3K. It's C-structure is:: +A memory-view object is an extended buffer object that could replace +the buffer object (but doesn't have to). It's C-structure is +:: + typedef struct { PyObject_HEAD - PyObject *base; - struct bufferinfo view; - int itemsize; - int flags; + PyObject *base; + int ndims; + Py_ssize_t *starts; /* slice starts */ + Py_ssize_t *stops; /* slice stops */ + Py_ssize_t *steps; /* slice steps */ } PyMemoryViewObject; -This is very similar to the current buffer object except offset has -been removed because ptr can just be modified by offset and a single -offset is not sufficient for the sub-offsets. Also the hash has been -removed because using the buffer object as a hash even if it is -read-only is rarely useful. +This is functionally similar to the current buffer object except only +a reference to base is kept. The actual memory for base must be +re-grabbed using the buffer-protocol, whenever it is needed. -Also, the format, ndims, shape, strides, and suboffsets have been -added. These additions will allow multi-dimensional slicing of the -memory-view object which can be added at some point. This object -always owns it's own shape, strides, and suboffsets arrays and it's -own format string, but always borrows the memory from the object -pointed to by base. +The getbuffer and releasebuffer for this object use the underlying +base object (adjusted using the slice information). If the number of +dimensions of the base object (or the strides or the size) has changed +when a new view is requested, then the getbuffer will trigger an error. -The itemsize is a convenience and specifies the number of bytes -indicated by the format string if positive. +This memory-view object will support mult-dimensional slicing. Slices +of the memory-view object are other memory-view objects. When an +"element" from the memory-view is returned it is always a tuple of +bytes object + format string which can then be interpreted using the +struct module if desired. -This object never reallocates ptr, shape, strides, subboffsets or -format and therefore does not need to keep track of how many views it -has exported. - -It exports a view using the base object. It releases a view by -releasing the view on the base object. Because, it will never -re-allocate memory, it does not need to keep track of how many it has -exported but simple reference counting will suffice. - :: - int PyObject_SizeFromFormat(char *) + int PyBuffer_SizeFromFormat(const char *) Return the implied itemsize of the data-format area from a struct-style description. @@ -441,32 +442,32 @@ :: int PyObject_GetContiguous(PyObject *obj, void **buf, Py_ssize_t *len, - char **format, int fortran) + char **format, char fortran) Return a contiguous chunk of memory representing the buffer. If a copy is made then return 1. If no copy was needed return 0. If an error occurred in probing the buffer interface, then return -1. The contiguous chunk of memory is pointed to by ``*buf`` and the length of that memory is ``*len``. If the object is multi-dimensional, then if -fortran is 1, the first dimension of the underlying array will vary -the fastest in the buffer. If fortran is 0, then the last dimension -will vary the fastest (C-style contiguous). If fortran is -1, then it +fortran is 'F', the first dimension of the underlying array will vary +the fastest in the buffer. If fortran is 'C', then the last dimension +will vary the fastest (C-style contiguous). If fortran is 'A', then it does not matter and you will get whatever the object decides is more efficient. :: int PyObject_CopyToObject(PyObject *obj, void *buf, Py_ssize_t len, - int fortran) + char fortran) Copy ``len`` bytes of data pointed to by the contiguous chunk of memory pointed to by ``buf`` into the buffer exported by obj. Return 0 on success and return -1 and raise an error on failure. If the object does not have a writeable buffer, then an error is raised. If -fortran is 1, then if the object is multi-dimensional, then the data +fortran is 'F', then if the object is multi-dimensional, then the data will be copied into the array in Fortran-style (first dimension varies -the fastest). If fortran is 0, then the data will be copied into the -array in C-style (last dimension varies the fastest). If fortran is -1, then +the fastest). If fortran is 'C', then the data will be copied into the +array in C-style (last dimension varies the fastest). If fortran is 'A', then it does not matter and the copy will be made in whatever way is more efficient. @@ -477,24 +478,24 @@ :: - int PyObject_IsContiguous(struct bufferinfo *view, int fortran); + int PyBuffer_IsContiguous(PyBuffer *view, char fortran); -Return 1 if the memory defined by the view object is C-style (fortran = 0) -or Fortran-style (fortran = 1) contiguous. Return 0 otherwise. +Return 1 if the memory defined by the view object is C-style (fortran = 'C') +or Fortran-style (fortran = 'A') contiguous. Return 0 otherwise. :: - void PyObject_FillContiguousStrides(int *ndims, Py_ssize_t *shape, + void PyBuffer_FillContiguousStrides(int *ndims, Py_ssize_t *shape, int itemsize, - Py_ssize_t *strides, int fortran) + Py_ssize_t *strides, char fortran) Fill the strides array with byte-strides of a contiguous (C-style if fortran is 0 or Fortran-style if fortran is 1) array of the given shape with the given number of bytes per element. :: - int PyObject_FillBufferInfo(struct bufferinfo *view, void *buf, - Py_ssize_t len, int readonly, int infoflags) + int PyBuffer_FillInfo(PyBuffer *view, void *buf, + Py_ssize_t len, int readonly, int infoflags) Fills in a buffer-info structure correctly for an exporter that can only share a contiguous chunk of memory of "unsigned bytes" of the @@ -715,7 +716,7 @@ :: - int Image_getbuffer(PyObject *self, struct bufferinfo *view, int flags) { + int Image_getbuffer(PyObject *self, PyBuffer *view, int flags) { static Py_ssize_t suboffsets[2] = { -1, 0 }; @@ -737,7 +738,7 @@ } - int Image_releasebuffer(PyObject *self, struct bufferinfo *view) { + int Image_releasebuffer(PyObject *self, PyBuffer *view) { self->view_count--; return 0; } @@ -752,7 +753,7 @@ :: - int myobject_getbuffer(PyObject *self, struct bufferinfo *view, int flags) { + int myobject_getbuffer(PyObject *self, PyBuffer *view, int flags) { void *buf; Py_ssize_t len; @@ -777,7 +778,7 @@ :: - struct bufferinfo view; + PyBuffer view; int ret; if (PyObject_GetBuffer(obj, &view, Py_BUF_SIMPLE) < 0) { From numpy-svn at scipy.org Thu Apr 12 04:38:29 2007 From: numpy-svn at scipy.org (numpy-svn at scipy.org) Date: Thu, 12 Apr 2007 03:38:29 -0500 (CDT) Subject: [Numpy-svn] r3708 - trunk/numpy/core/src Message-ID: <20070412083829.D4CE239C10A@new.scipy.org> Author: oliphant Date: 2007-04-12 03:38:23 -0500 (Thu, 12 Apr 2007) New Revision: 3708 Modified: trunk/numpy/core/src/scalartypes.inc.src Log: Fix scalar creation function so it can take sequences. Modified: trunk/numpy/core/src/scalartypes.inc.src =================================================================== --- trunk/numpy/core/src/scalartypes.inc.src 2007-04-12 08:37:38 UTC (rev 3707) +++ trunk/numpy/core/src/scalartypes.inc.src 2007-04-12 08:38:23 UTC (rev 3708) @@ -1761,6 +1761,7 @@ } arr = PyArray_FromAny(obj, typecode, 0, 0, FORCECAST, NULL); + if ((arr==NULL) || (PyArray_NDIM(arr) > 0)) return arr; robj = PyArray_Return((PyArrayObject *)arr); finish: From numpy-svn at scipy.org Thu Apr 12 04:42:29 2007 From: numpy-svn at scipy.org (numpy-svn at scipy.org) Date: Thu, 12 Apr 2007 03:42:29 -0500 (CDT) Subject: [Numpy-svn] r3709 - trunk/numpy/core/tests Message-ID: <20070412084229.41D5A39C10A@new.scipy.org> Author: oliphant Date: 2007-04-12 03:42:21 -0500 (Thu, 12 Apr 2007) New Revision: 3709 Modified: trunk/numpy/core/tests/test_scalarmath.py Log: Add check for fix to allowing types to create arrays. Modified: trunk/numpy/core/tests/test_scalarmath.py =================================================================== --- trunk/numpy/core/tests/test_scalarmath.py 2007-04-12 08:38:23 UTC (rev 3708) +++ trunk/numpy/core/tests/test_scalarmath.py 2007-04-12 08:42:21 UTC (rev 3709) @@ -32,6 +32,12 @@ val.dtype.char == valo.dtype.char, \ "error with (%d,%d)" % (k,l) + def check_type_create(self, level=1): + for k, atype in enumerate(types): + a = array([1,2,3],atype) + b = atype([1,2,3]) + assert_equal(a,b) + class test_power(NumpyTestCase): def check_small_types(self): for t in [N.int8, N.int16]: From numpy-svn at scipy.org Fri Apr 13 01:49:54 2007 From: numpy-svn at scipy.org (numpy-svn at scipy.org) Date: Fri, 13 Apr 2007 00:49:54 -0500 (CDT) Subject: [Numpy-svn] r3710 - trunk/numpy/core Message-ID: <20070413054954.D9D4D39C089@new.scipy.org> Author: timl Date: 2007-04-13 00:49:41 -0500 (Fri, 13 Apr 2007) New Revision: 3710 Modified: trunk/numpy/core/records.py Log: remove unneeded semi-colon, add missing import, whitespace cleanups Modified: trunk/numpy/core/records.py =================================================================== --- trunk/numpy/core/records.py 2007-04-12 08:42:21 UTC (rev 3709) +++ trunk/numpy/core/records.py 2007-04-13 05:49:41 UTC (rev 3710) @@ -6,6 +6,7 @@ import numerictypes as nt import types import os +import sys ndarray = sb.ndarray @@ -128,7 +129,7 @@ except AttributeError: pass fielddict = nt.void.__getattribute__(self, 'dtype').fields - res = fielddict.get(attr,None) + res = fielddict.get(attr, None) if res: obj = self.getfield(*res[:2]) # if it has fields return a recarray, @@ -146,15 +147,15 @@ def __setattr__(self, attr, val): if attr in ['setfield', 'getfield', 'dtype']: - raise AttributeError, "Cannot set '%s' attribute" % attr; + raise AttributeError, "Cannot set '%s' attribute" % attr try: - return nt.void.__setattr__(self,attr,val) + return nt.void.__setattr__(self, attr, val) except AttributeError: pass - fielddict = nt.void.__getattribute__(self,'dtype').fields - res = fielddict.get(attr,None) + fielddict = nt.void.__getattribute__(self, 'dtype').fields + res = fielddict.get(attr, None) if res: - return self.setfield(val,*res[:2]) + return self.setfield(val, *res[:2]) else: raise AttributeError, "'record' object has no "\ "attribute '%s'" % attr @@ -187,7 +188,7 @@ def __getattribute__(self, attr): try: - return object.__getattribute__(self,attr) + return object.__getattribute__(self, attr) except AttributeError: # attr must be a fieldname pass fielddict = ndarray.__getattribute__(self,'dtype').fields @@ -232,7 +233,7 @@ res = fielddict[attr][:2] except (TypeError,KeyError): raise AttributeError, "record array has no attribute %s" % attr - return self.setfield(val,*res) + return self.setfield(val, *res) def __getitem__(self, indx): obj = ndarray.__getitem__(self, indx) @@ -240,10 +241,10 @@ return obj.view(ndarray) return obj - def field(self,attr, val=None): - if isinstance(attr,int): + def field(self, attr, val=None): + if isinstance(attr, int): names = ndarray.__getattribute__(self,'dtype').names - attr=names[attr] + attr = names[attr] fielddict = ndarray.__getattribute__(self,'dtype').fields @@ -304,7 +305,7 @@ if issubclass(obj.dtype.type, nt.flexible): formats += `obj.itemsize` formats += ',' - formats=formats[:-1] + formats = formats[:-1] if dtype is not None: descr = sb.dtype(dtype) @@ -370,7 +371,7 @@ nfields = len(recList[0]) if formats is None and dtype is None: # slower - obj = sb.array(recList,dtype=object) + obj = sb.array(recList, dtype=object) arrlist = [sb.array(obj[...,i].tolist()) for i in xrange(nfields)] return fromarrays(arrlist, formats=formats, shape=shape, names=names, titles=titles, aligned=aligned, byteorder=byteorder) From numpy-svn at scipy.org Fri Apr 13 02:56:09 2007 From: numpy-svn at scipy.org (numpy-svn at scipy.org) Date: Fri, 13 Apr 2007 01:56:09 -0500 (CDT) Subject: [Numpy-svn] r3711 - trunk/numpy/doc Message-ID: <20070413065609.3592C39C129@new.scipy.org> Author: oliphant Date: 2007-04-13 01:55:55 -0500 (Fri, 13 Apr 2007) New Revision: 3711 Modified: trunk/numpy/doc/pep_buffer.txt Log: A few more changes to pep_buffer.txt Modified: trunk/numpy/doc/pep_buffer.txt =================================================================== --- trunk/numpy/doc/pep_buffer.txt 2007-04-13 05:49:41 UTC (rev 3710) +++ trunk/numpy/doc/pep_buffer.txt 2007-04-13 06:55:55 UTC (rev 3711) @@ -73,7 +73,7 @@ NumPy uses the notion of constant striding in each dimension as its basic concept of an array. With this concept, a simple sub-region - of a larger array can be described without copying the data. T + of a larger array can be described without copying the data. Thus, stride information is the additional information that must be shared. @@ -161,59 +161,83 @@ be called with NULL. The third argument indicates what kind of buffer the exporter is -allowed to return. It tells the exporter what elements the bufferinfo -structure the consumer is going to make use of. This allows the -exporter to simplify and/or raise an error if it can't support the -operation. +allowed to return. It essentially tells the exporter what kind of +memory area the consumer can deal with. It also indicates what +members of the PyBuffer structure the consumer is going to care about. -It also allows the caller to make a request for a simple "view" and -receive it or have an error raised if it's not possible. +The exporter can use this information to simplify how much of the PyBuffer +structure is filled in and/or raise an error if the object can't support +a simpler view of its memory. -All of the following assume that at least buf, len, and readonly will -be utilized by the caller. +Thus, the caller can request a simple "view" and either receive it or +have an error raised if it is not possible. -Py_BUF_SIMPLE - The returned buffer will only be assumed to be readable (the object - may or may not have writeable memory). Only the buf, len, and - readonly variables may be accessed. The format will be assumed to - be unsigned bytes. This is a "stand-alone" flag constant. It - never needs to be |'d to the others. +All of the following assume that at least buf, len, and readonly +will always be utilized by the caller. +Py_BUF_SIMPLE + + The returned buffer will be assumed to be readable (the object may + or may not have writeable memory). Only the buf, len, and readonly + variables may be accessed. The format will be assumed to be + unsigned bytes . This is a "stand-alone" flag constant. It never + needs to be |'d to the others. The exporter will raise an + error if it cannot provide such a contiguous buffer. + Py_BUF_WRITEABLE - The returned buffer must be writeable. If it cannot be, then raise - an error. -Py_BUF_READONLY - The returned buffer must be readonly and the underlying object - should make its memory readonly. If it cannot do that, then an - error should be raised if this flag is requested. + The returned buffer must be writeable. If it is not writeable, + then raise an error. +Py_BUF_READONLY + + The returned buffer must be readonly. If the object is already + read-only or it can make its memory read-only (and there are no + other views on the object) then it should do so and return the + buffer information. If the object does not have read-only memory + (or cannot make it read-only), then an error should be raised. + Py_BUF_FORMAT - The consumer will be using the format string information so make - sure that member is filled correctly. + + The returned buffer must have true format information. This would + be used when the consumer is going to be checking for what 'kind' + of data is actually stored. An exporter should always be able + to provide this information if requested. -Py_BUF_SHAPE - The consumer can (and might) make use of using the ndims and shape - members of the structure so make sure they are filled in correctly. +Py_BUF_SHAPE + + The returned buffer must have shape information. The memory will + be assumed C-style contiguous (last dimension varies the fastest). + The exporter may raise an error if it cannot provide this kind + of contiguous buffer. -Py_BUF_STRIDES (implies Py_BUF_SHAPE) - The consumer can (and might) make use of the strides member of the - structure (as well as ndims and shape) +Py_BUF_STRIDES (implies Py_BUF_SHAPE) + The returned buffer must have strides information. This would be + used when the consumer can handle strided, discontiguous arrays. + Handling strides automatically assumes you can handle shape. + The exporter may raise an error if cannot provide a strided-only + representation of the data (i.e. without the suboffsets). + Py_BUF_OFFSETS (implies Py_BUF_STRIDES) - The consumer can (and might) make use of the suboffsets member (as - well as ndims, shape, and strides) -Py_BUF_FULL - This is the same as Py_BUF_OFFSETS | Py_BUF_FORMAT + The returned buffer must have suboffsets information. This would + be used when the consumer can handle indirect array referencing + implied by these suboffsets. +Py_BUF_FULL (Py_BUF_OFFSETS | Py_BUF_WRITEABLE | Py_BUF_FORMAT) + Thus, the consumer simply wanting a contiguous chunk of bytes from the object would use Py_BUF_SIMPLE, while a consumer that understands -how to make use of the most complicated cases could use Py_BUF_FULL. +how to make use of the most complicated cases could use Py_BUF_INDIRECT. +If format information is going to be probed, then Py_BUF_FORMAT must +be |'d to the flags otherwise the consumer assumes it is unsigned +bytes. + There is a C-API that simple exporting objects can use to fill-in the buffer info structure correctly according to the provided flags if a -contiguous chunk of memory is all that can be exported. +contiguous chunk of "unsigned bytes" is all that can be exported. The bufferinfo structure is:: @@ -268,18 +292,19 @@ shape an array of ``Py_ssize_t`` of length ``ndims`` indicating the shape of the memory as an N-D array. Note that ``((*shape)[0] * - ... * (*shape)[ndims-1])*itemsize = len``. + ... * (*shape)[ndims-1])*itemsize = len``. If ndims is 0 (indicating + a scalar), then this must be NULL. strides address of a ``Py_ssize_t*`` variable that will be filled with a - pointer to an array of ``Py_ssize_t`` of length ``*ndims`` - indicating the number of bytes to skip to get to the next element - in each dimension. If this is not requested by the caller - (BUF_STRIDES is not set), then this member of the structure will - not be used and the consumer is assuming the array is C-style - contiguous. If this is not the case, then an error should be - raised. If this member is requested by the caller (BUF_STRIDES is - set), then it must be filled in. + pointer to an array of ``Py_ssize_t`` of length ``ndims`` (or NULL + if ndims is 0). indicating the number of bytes to skip to get to + the next element in each dimension. If this is not requested by + the caller (BUF_STRIDES is not set), then this member of the + structure will not be used and the consumer is assuming the array + is C-style contiguous. If this is not the case, then an error + should be raised. If this member is requested by the caller + (BUF_STRIDES is set), then it must be filled in. suboffsets @@ -471,7 +496,17 @@ it does not matter and the copy will be made in whatever way is more efficient. -The last two C-API calls allow a standard way of getting data in and +:: + + void PyBuffer_FreeMem(void *buf) + +This function frees the memory returned by PyObject_GetContiguous if a +copy was made. Do not call this function unless +PyObject_GetContiguous returns a 1 indicating that new memory was +created. + + +These last three C-API calls allow a standard way of getting data in and out of Python objects into contiguous memory areas no matter how it is actually stored. These calls use the extended buffer interface to perform their work. From numpy-svn at scipy.org Fri Apr 13 13:04:08 2007 From: numpy-svn at scipy.org (numpy-svn at scipy.org) Date: Fri, 13 Apr 2007 12:04:08 -0500 (CDT) Subject: [Numpy-svn] r3712 - trunk/numpy/doc/swig Message-ID: <20070413170408.88F4939C1DD@new.scipy.org> Author: wfspotz at sandia.gov Date: 2007-04-13 12:04:02 -0500 (Fri, 13 Apr 2007) New Revision: 3712 Modified: trunk/numpy/doc/swig/numpy.i trunk/numpy/doc/swig/numpy_swig.html trunk/numpy/doc/swig/numpy_swig.pdf trunk/numpy/doc/swig/numpy_swig.txt Log: Fixed typo in documentation Modified: trunk/numpy/doc/swig/numpy.i =================================================================== --- trunk/numpy/doc/swig/numpy.i 2007-04-13 06:55:55 UTC (rev 3711) +++ trunk/numpy/doc/swig/numpy.i 2007-04-13 17:04:02 UTC (rev 3712) @@ -965,9 +965,9 @@ * Swig complains about a syntax error for the following macros * expansions: */ -/*%numpy_typemaps(complex float, NPY_CFLOAT ) +/*%numpy_typemaps(complex float, NPY_CFLOAT , int) */ -/*%numpy_typemaps(complex double, NPY_CDOUBLE ) +/*%numpy_typemaps(complex double, NPY_CDOUBLE, int) */ /*%numpy_typemaps(complex long double, NPY_CLONGDOUBLE) */ Modified: trunk/numpy/doc/swig/numpy_swig.html =================================================================== --- trunk/numpy/doc/swig/numpy_swig.html 2007-04-13 06:55:55 UTC (rev 3711) +++ trunk/numpy/doc/swig/numpy_swig.html 2007-04-13 17:04:02 UTC (rev 3712) @@ -688,7 +688,7 @@

    We could have implemented:

    -%numpy_typemaps(Py_complex , NPY_DOUBLE , int)
    +%numpy_typemaps(Py_complex , NPY_CDOUBLE, int)
     %numpy_typemaps(npy_cfloat , NPY_CFLOAT , int)
     %numpy_typemaps(npy_cdouble, NPY_CDOUBLE, int)
     
    @@ -948,7 +948,7 @@ Modified: trunk/numpy/doc/swig/numpy_swig.pdf =================================================================== --- trunk/numpy/doc/swig/numpy_swig.pdf 2007-04-13 06:55:55 UTC (rev 3711) +++ trunk/numpy/doc/swig/numpy_swig.pdf 2007-04-13 17:04:02 UTC (rev 3712) @@ -783,7 +783,7 @@ /ProcSet [ /PDF /Text ] >> endobj 218 0 obj << -/Length 3653 +/Length 3651 /Filter /FlateDecode >> stream @@ -792,22 +792,20 @@ ?c.?C??6?X??,lv???????9?[ff?obs5:??_4?Ka?^!?]??t????b???c??@u????????I?-.sD+;???d????? ?|^?7?7L??27?:&GR?U9Q?g??ZW??4??j????>????YP?Z?a?Gp??vu?w?9I?7V?????????F?ul?+?7??"??Kx????2???=????~?"?#i?4?~?]?? ?Q1^?qd?x????:J????&F?i?????_E?5h??/???m??l????0??[???s?A???~1?D??,n??eL???PP$|???Y\??? ^1?"???zAK?z??7)?5D;??g&???B%?y??M????P???????P??/E?,?2?D -???,?.??)l?E- -??7???Y?_? ?@PfL?J??2?;??:?yh??m}?tF?g?= k2Z?w?,?u??[ ?? ??Qr??t|?~a???X?2?xH?s??G????2W'$k??L??F?$l(mC{??I_7??Ef????>j@??C??????<?Dn?q?#?*????J|?p??????oR?Q?/???Q?U??L - u???0#B?8?1 -???@??y(IN?!'?! ???|{ST8o??1?[V8 ?? ???????????J???A??J??6?Y0?La?DH??y$xb?u???Q???<3y>?qbv{uvs???N?hB*?\???!?\B??EN3?????Z+?J?5?L6g2????&k???m??8f???Z?V?3??F?h|?&-c???]?%?'R???Aa"]?\?k????;?*??oa????ke[y??%A?5????J=???UJ?]5????M?W1a??_?*????? >?Z???`?????(??v8??Dr2?? -=???:b ?5Z???z??l( #?9yp?pw??d??????L?{?H ???????9???%`!???#?????#A?U????????11?#c?@???E?&~??fu?jU???@???<??T?Zib$?,??????"D?\??eU(?? ?d-,?I5?Ek|,`?$?s9?????vZ?Tuy?_?????k? G????jh????8? )$X\?Q}?I\?Mt??c}-????>?f?? -?>i? -B)" ??[n/?:xITS??T???J?_??p?? ?\9.kio??(&P???5az??e?V? -??,?v?2S??%???e_? ?J????x????'p????0?b?%???Ru??yV+?E??><:??/w|??;?? ?9?????e ?c?(d???7\?\??+?$?????8??dR?/vXc??k]??-?!j_?????^`U?6??5??uO?MJ??w#=K?wXB? UH~S?3?pl??B?u#?$???6/?t???p'u]=??!N???>^??&+??O??~Y??'q? I???TqX??oM'%?????(?p? ????bw$?3:???CK?/@)?:xLT??c?????v?c)m?k?T?2%????Zj4b?M?Z?iN??v???? ?{Iy8????D ?ER?w?4}6e?a?I ????!??j?P?RQ??s*?O?(?4!??Bpv?%????k?j???8?\9?W;????~?# ????;b?? ?-tx?Y]??t????b???c??@u????????I?-.sD+;???d????? ?|^?7?7L??27?:&GR?U9Q?g??ZW??4??j????>????YP?Z?a?Gp??vu?w?9I?7V?????????F?ul?+?7??"??Kx????2???=????~?"?#i?4?~?]?? ?Q1^?qd?x????:J????&F?i?????_E?5h??/???m??l????0??[????+????~eJ?} ???aH?7??Q~???N?????r*?????r???????W?Z????hP??!?:?Y?????I6?k??OX?";t???{?${??_??? m("8#`?Y?+CQ???N%?LM?? ?4E/??w??l W???????<+?{?Nkb;=C$??*0?D?8;?$????GM??v??????'kh???d*}}n?BX?9*?a????K???%y | ??5bhE????HD{????X }*.? ??j?}X?] +?S???ZT4co4???b???????6?H; +?e(x?; ?????-?6??????v{@?????t]???-??@?) 1????+??>?? ?????e??6????? +Ae.OH???ng?~H?P???X???p??[g}???O?????/C}x?_?&N29*c??"\??!4'ZJ78Y0??'[__ ????d?O???*???7??5?#?:?.G???6?q??>????.3??R?#??RI?#l??'?y?a?h=f{h????#y?? Q??? +X+?j)???????????}Z?{??T???MZ??s%??K< N?d o??D?6??OQvxU????$????????}K?"kI#???z?3???n???)?;????b????*U>??1x?|??+?T??'?Q???p???? +d??/z8?Gu4??k?4g??vW?PF$s??????a??[_)'??????4r1 +6?V ???w???s??#J?B??;?G?9??WG?8??????G/?cb?G>?(??#?RM????"??*?#??[?y"j??|???H*jY?U?U?9E??????P??F?ZXL?jH???X??I??rB?A?M??r???"V???W3?a?h??c???? ?-N?q?R8H????????8??????$Z?G}??GZ:x}??"?RD?U??^Ru???????(????? +*??J\B?&?bT:?7?)2?p?n *?y.???????Z? +??k?C?:)t??.!?3?4/Wi +r????x??g???SV?=?+?:?KT??^?????v?^)?????*??j?u]?a ???x????,???5*yz?36kV?M?3n??W!??E}?m???]??a?@; E???G~$Z{(???Zg?(??3??q????0??`c???K??)mw|1?aYR??e??,K????????A?v5?O?@??a"j??K0`?!.???????Vx??c}xt??_"??D)w??A?'r?7>?+??'?$???Q????????7W?IR[??qT??6?>_???f +%??0?3?2?F?I&m^??:?=1??x???y??UX?????|?(4Q??? ?7?? T????e ?d?????[?_Bj??r:9????_?L?JQ'?H???c????|N??z:V5C?0"g?}??cMVJ??????? ?O??A?.?4??x???NJ??%?%HQ??t? ??? +?H(1ft??;(??|_?RPu??????????+???R???.??:eJ??+S?2?h?????=4?????"?i?????p8J?A1?@?????h?8l???0?@P}CN??????T??2Q?iBz ???`K????????;?? p??r??v?+?y?? J??d.2K??. D???e?dz?6?u?HH?V???Y???C??t?IWf?C?D3/?Z?a??? ?3;?:1??"?M9endstream endobj 217 0 obj << /Type /Page @@ -1059,28 +1057,24 @@ /ProcSet [ /PDF /Text ] >> endobj 254 0 obj << -/Length 3928 +/Length 3931 /Filter /FlateDecode >> stream -x??ko$??;??????n??? ?D???8G( -?[?}'v??]?????Tuu?tO???-?GuUuu??N^4????F??????sV^l?4????d?1? c?????k?????+?E?Y3 ?uBK?I?]??oW|??4???rW7RJ??? ???????/?s???~?0J????*GX?MP5?6' {PZw%??.[?:^??????w???\???G?]=?????r?~?y 7'|????;?xE/i????JH?????D?"?????E/.????7????k??\*A??)r?E I?????Jb???? q~x? ~?? --{?w(??uF_??j?Z??!A?3???C????o???%??Z??tP?N"j6F??Vo?z??j?????@????7w?????Wx??}????[?[Y?bI -?~ -xC???B?k?k?o??|B ????P?*#s3B7 ???M??~[?5p???? ?6$$? ??6?D(p{??????)r??S[??N???p?????????wo"?;???????.{????~?#??!#WJhU??p|???xAajM' ???+a[?.??????Uh/HMC?2bc?jj?8????? ?j??'???x?:??????;?$?? `8=???(?*?*G)???`?AK?tJ??@`?U7Q???v?a??e?????Q`?T2?[+?>???uH?6l?E625?y??jTe???????H??f??P??!?????@??N???T??l$??!3#?~??????Q?4F??j[A~?x???[??J???'???c:?M?M?????q????[8)?{??P??5???0'?&?K@??4???p^s??8S???L@?x?y`w??:aTx? o???j[xz?4&????n??` ;^???2??????B?J????.????U??]?L???"?5Nf!f%??p3u?V4?=%?D.n???Gbe8??y????/?x???T??IjBS?w}?A???>??;?? ?|?_[p??7??d}%?~???_?\b~??>???????????3eouO??b??? -?Iz?+?=???8Gq?KE?r??????????>???????1??u?????? |?????1??p??(?Z?:\b???G?? ???n?;v;???? ??60??a!???\??#??v^?{{?^??????O?f?\"?w?????t?%w???X??? x?$??]?P? ????????F??`??3 -????? ???X@????&????>???d??h???????T?pC??oc???s8????cs????4????m??.? ???h???w?|? )?y???B?8?? ;2O?Ol&+\i??????A??????I?!????t?????U??k??TL?? ?1v? ??Bu?]?\?`??p1G6 c???"'????g2|???RN???|??1B?\??lJ??????????\?????p????:???3Hg??yd`s??` ?1Kt8?1????I????? ?u? ???Y??w??????:?;?V????.????"u? Yw???!?`3BN`?B?'??\?rA?? ???v??cV????;??????_??J?m???pwRRgZ E?7??C??o=?h????|?2C?"?m???+?6W???Ae????? O/e???K?? ?>9???nhf?u:??l????(Pl?S?Z?:?b?{??)q!?s? -?????Fczj??26G???$???d??,/??N?%?OjO?!Ck????0~?z?v???? ??o???;+?????~?%?^g??[[!~?p?j?0j????????=??OE"?|?'qj???7??L??sG????p?b?????cu???????R??B?F???RO??\?i?j[???K??A?H?cr -??6?R?r^F?)?zNykB??c?iy? -??;(?=D? ?J????L?_? ??]?v?sh:?@?S?1?F??VC%????$??Lmp???Q??S(e??>Q?????>?IG?lL?^??s?P?!???=[L???R N;??s? ?????fN{Lw?i?d_????.???????(C??"???E??? M??D??n'^?n'#3??R?7??j?-r? ??eX=???T?>??s?6?<;??P]ry???Q??.???????c?w1???le?9?'???x?= C?D???>?|?0?O??~RF?????VA]y??:??mh?Z?~???????? ?n?O3??(|Ir??hf??6?K+??|H51n?????????-gu}=E??? ?pfy?7??s?z?p?t>EQ?0+&??? ?@???-?OOt*? ?[???3? ????????@??uc?,?? ?iR ???{25?y???T?h'?????K? LWh???V???y?%?y???R?S? -??{?V&??_???g??-?|O?J -?q???0??s??? -????? ??q1? 5O?F?#j?E&zV[z:$'???U??bJ?3?VqM?< ?^???c?INq$5X("?i_????(?S???>?={ ]jB?x??#???v????j{V?Gg?Tm???k????bR? ??P???s?4O]?g???????7??Q??X?h???5G?kNML;??#??#a?g?? ??re:??o???|2t??>????????????x????_?????????J(u N??y?|?????uv???? ?J{?w!)y???~Go?x??aa?\?>???????r,?$C?r?????O`?O?ZM??_???a?????oXH?F????48?w?? #y??5?Q???!????6 ????+????C???\????b?>??????~O????DG??'}??????l???D??????Xz???v?? ??N;?D????}.{?i????!|0\6????`?k?e?+???J5?b?q?xQ"?Rwy????]??N4???8a?%N???????xauL???k?}?8~?? -/2q?_F)???? ???%XI??}=??E?d7/???(?h?V???xD???4#??]+???$)7???b?S?Y7`B????8??5A??Z??Lendstream +x??ko???{~?Q ?\?6?7?~J/Mr?@?EP4E??i?!?u??\????3;;?].E:??(rvfvv????? o?i:{??N8g??v?Asq ?>?@Fc?0?y?1?tm??6p??h;k&??Nh???;)??????S????BJ)???"?]]?{?}#????????F)?PV?+? ????daJ??$??ekV?K?z???}?????:????#?~{?Vn??7o?? ?????.^?CZ???W )????.?H?aD?'|???ug??? -}???"??6??GP?u??mH?????7R?OL#pw?!????*:kU???i???a;?A?:?Jc?????6?|??????Uh?????w?y?y?F?'??R?1??Z ?!u?J?g?A?nu??=??RF ??T?$?y?j???Wx??o????oE?];/??@?B?????G!=?I,?xI??C E??n???>?.#?6B5?[??.??>?^?3A'???7??N5&.D?"?OxO'w}?&nG3?-x??\??]?v8???^?`?k?W`??Q??%??i??N?h?ckp`=????i?M[C?s????>{s????]}??{??j?????1?E-?????????H2t]?{mr??m??C?!s{?^ednF??????o???A7v?9?wCB??? ???%B???????6G?I???-?????p?=????..??8? ?{????O:?(????X?Q +???;N?????j7??H????Li?A??z?"??B?\?'??~m?I~????????UvN!?p?????>??^? >>????=???|??P at O??_???O??s??T?,W???~???,??+???SL+?^g?|??1??g*??3? ????????%?!?@z?\?@^???c?? :???ls`?"] +???*?r??FmG?Ap??w?u?????i??%?x7?K????K[r??[??O?????O"???? +? ???? ??i?n ~??0?9????O`????)?9jr?|???J=NVJ???,??(?{J?7??%=?36?P>?????<86?????M|.A??c=P#??? ,ef?s???????M?! j??U?m0r??????Nj??-`?u???Th???M????N?VH??V0??ld4? ?a?o??(6y6jr?:G???N`???9~?VuEw?U]??TY???RY?~?L&?]????q?J?#9*rm??D?=.???8?k?????? ?????6`???!N?w? ??2? w?????z???rV/4??^gQ????@??A?&X?s?4?'?? ??????????^C:Pa?V??????? 1p/?????E??wt???????/$%2???S??aG?I???d?+M?{?|9(?2???w??c????Y(6??)??Yv??= +E???8?????I?? H\?j?1=?P????K?b^2?o??Tt'????'?'????????w? ?@?B?????wp???P ??RvmI|???j??3?????u?T5|5kl??D??????????"[>??85???????L??s/G????p?b?????cu?x???!??????^?O??F??????&??-??n??"??8???!?m?.??6??bSf?????.%?}??$ `:?x]3???&_@?W????~?u????&?\??[????]}???????`?%?!??m????L.??_?&??????k?????????a#??. at T???!?????i?1??E???O22?m(???$>=??\'?o??w?? ,Th"?n?????????X???&??I-, P?R?????@xNCR??'??? +,?/0]??W#[aZ??????cGJ?NM*L?C?QZ????s?????3??7?*??? I??????;z??C? #?z??o? ??`?c '2?C??y?/Y~i* ??8$??B ?????}uU?5??:?=;???|??}:?j????K??????A`!E=?Q?ip????"F?\?k???{?M????6 ????+????C???\????b?>??????~O???|EG??^l?]?V??BB"????:'V?^????@???d????(????x????k?e?7?c ?M???Ltm?5F+M+e?8?D??????????d?A??n"1T8??I)????/?????????L7????v??FN?? C-q???ft67?C?c??]#?????KLTx??c?2J???????\???.?J????Q5-%?y %??@ E???d??#???qD?Z???&9H?AT3???R?????9?? ??j6?Qendstream endobj 253 0 obj << /Type /Page @@ -1221,42 +1215,45 @@ /ProcSet [ /PDF /Text ] >> endobj 274 0 obj << -/Length1 1212 -/Length2 5717 +/Length1 1213 +/Length2 5702 /Length3 532 -/Length 6490 +/Length 6474 /Filter /FlateDecode >> stream -x???g\S[??A)JG!?* B??I?????@?Ho??WA??^??R?R?*]D????{u?|??4?9?r?k???g??O??????[?? ???*w ??`!arnn,?Cb??PB??????"?@??4DJZL????q??"?p@^?_E@%g ???w?8?3^E?00$?-TB????V? n?.D?Hh??G??A??h??0@????.?Ny ?nxS@^?I> ?"?Fy?;r?.? ?w??a???j?(?.???q??a????r?l/???? ?Q?U[???1B????????}9;?[?????kWf? ^????*.a???2?????R???F?F?yR''^?{?A?|{f??N???4/????!???1\??7\S?RRAMUs???J1 ho??$5? yB^???|?zt???????-?f?g??V?E??!?? -??? ?$`?7z?3k==?oa?1a??? ??M|?K*&?#~??Q????Gt?u6FAn?a?a????"D?1U?5???Y????s ???;?X?f?*?Q? '\&'2?uf???jb??[,n?$?K???P???7p?+??Nh?t??8??h2U\~? ~???.?Td8?*%_w?????(}w-??S??,??p? ?????t????G?MP??%?????f?d?d?@??j/]?%????????&???13 -E$?j4Oj? *?3??U???O5??I"_C?????;??2wd?g??xo????a$?r\*;????K<2.i?9L ???????JB?T?Z?}?G?m? -2?Z,??O?[h???s??I?r?Y at h???????O???$Q???????????4?7!C2RL ??w7??????:mK$??a?9?c?`????-1???>???B4???o8???w?.M!C??-??V??Q-E)????S??????B??????h???+0'?pS???A=??4?%@O??t?3?M??????????K??$??3??x ? KrRC???#?t^???%W??mqor?b??S?f?????????=?!??3.r??~E?(???-z??I1??u??g ???????%r"F????y?g??0??U??ihW7?????????E???.?8oI??xpi?X??x?yr`??2?+??R)UD?]I?'????????x????<]???????:?e -??"?,????/?????Sp??????ld?O?????}:?{???-??c? ????j?7?,???????+4???_.???!?Zue???v?Y???#D?????3?????1'??#?wA?DU???+5??K?,iG? -???Yl?0???!Z+_?? -?????-Ea????d??????i?????C:??{???mC?????0Vd???H??//6,??-pEg????]?6??&N ?0e?4p> =??} ?X?2??v?. "?L??#?!?Z???{??d???p???U??? ??H?7???}?p?k?.y?H6[?|2???nCC.?~?IW`?i????J?"?i7??V?Mu????OK?? ??x~L????mm????x?yb????h?e???Zx?&??o?^?ct:?B??U ?d=???F+?p? {??+?"?f?7??<O?????,9????e??Z!? ??B???GK3?mF -???DN???????m??i???Oh???W?v?!? ??h?$#? -???*????(?R$??5:???H'f?)?w????c?M??SH? ?fC?_?a?!~????~????0? '????????|?JG?3QT?X}??????m?J[o??6?i!z?E?H?Gf???S? 4?|"Qs%q?o????Uy?\??O?"?\???????R2?"?@n??Gd??(p*5?o??LgM7}???]?!???+??$Y?1sU,???$????L(?L??????VK|??}?n??????I?btu?3?Q???G?a?$$??I?#?3??,K??Q7?*z????????8?,?????XE|??W?|??B???;'???q?4?R???`>?$???????]??h?^=???_?;?E '?u?r???l+??3?+ MAx~h?>L?hJ?D}j????W?'?????VSy?]??]g=?????[g? ???e????9????fY.,[????C??3#?]`_Y????e]?d?N?o??g?Yo?cCN?M????i??????v?L??? ?6/?: uH?G???$????L?R??U?? -P?!K ?O???(???>?bK?,???&6??@?7??T?V????}1?]? ]??=??5y?4+??T??qL??(+e ????JU)Hf9??i ?lD?&S~?p?`?b`???Se53??VC?{??D??s?|7;???)!G#(??}u??m?f3izg??h?r?/#???#? ???M?cS?U??q????e???L??"K?l???8??|J?;qt?>????,?????????7????IX?%?J&????#/@???r???t????~??+v????H?>_4?U???9??Q9?x??n?+???+/}?5??f?[?f??????u???F??????s???Ke ??A??fM??%?k????I?????X e??_E??H?????m?|????z?\4Msg?#tbp??JI?K? ??{????>y???G??!?,??H???[???k(R/?o??????????p;??\?1??:????I?????w?H -??J)m,??????j???????????i?w??7??#?)?)?]?^7??W ??|q?7???P???m!;Z/????j????I???)YXOOE? 5?}?{?????????+??Er ??????G?????E*?????I@?C7????^?.????????, q?9 -7.R???F?z?fj???KwQo?L??? -?,???] -?{9A???^?M????*?'n?f???}??:??| ?2?w9???X?p??d?.?????ny}??)xh ;????????9?3F -???????\???? -?F?Q! s???????8????M?W??4H?? x??$?U?????y=??x??s??_????????u?}]??^K?S???("???@.?(@N]G???eb?CB?\????+Dd?l?<??(????.@???????X?X d!H(? +P?r??8?4 at V0?.??zqd`0???;\:???`(?` ???q??Q?? B? +?????r? ]P?,(???E0??!6??T/??????+??`V???Q{???V?P????Nn?$@? ??,5????: us?gV?? +??ma??BPE?'?u?l?`.???8??&P???nu=MM#????WJ? + +w??r?[?W?_ ????AB=?<\<<@T!??????R??`(uVH??.?\?H?@?`?'?????G??n???`?@??&????????WH????;$ ??? ?"n?7 ??]=~??(?CB???p? ?????.?? ???0?????[?7????????$????M?n??????7?? ??oBiZ?&??@??*??????Du???(a??Rv??@?2?D)#?@?}??k??@?|\?@?z?~#???????????~Bee?>?|"N^???<|?!??RrC"!p??~?9?7?@QO? ?NO"@b??)5?E~ +9??Xl????b5>??7?M??????????.J?H?????QZ?5bT=?Fs=NZGi?O??u???u??# ?)hJ????8????????I{??v??~a?Q~^IgO3?a >??????????E/?H??k(???[G1??O?|?&??,?C???????U3 ?-?????P?m?/????9????Oo/x< Mv?Z?????t?D??h?A?%d?d?: ? ??B?E?F??!?X??c\????d?;l??2??6??? h?* +?9?H??'???Q +N????A?J?.?T???D{??:?^?|???~????0?7?J2?z?@?????v`_?f?p?????&BX?[?SY?1??z?H????????%?I??tD x4)m?{M???SDQ? ??P??? l +$?mA?p????F2{??@^??uQ????.?C'??70??O(????T?E?K??Q?J?yp?k<>~Ui?????S??Y??YS??[?L?$???f?r?1?\?:|:`?>?}/$%)?A?????-B??Y??e?M3\_+II{V??P?y3?n&vA/\+?$^??3???O??xzd?n??????7)l?D???K?3???$0?????W?%ozCi?:? ?e???????+??dsg.???X?v`??o?/KU?I????+V??T?``Q?????P??????Oz???D?-!????%?????G??1?M?3O&Z?Z3R1[[Mnb? ]a&?"?I???k?H9H?????????n?8O/D[?????? ?/????'Jve??{?J$??????/??'A??}??;??g ?t??4 ?^?????%4x??{?B??????.?????'M????O9???y?f???=eD?m??;?a??X???H??z???a?%??6d???yI!%E?G?f_A 8Q?l???N?z)?\????q?l??????y??g_?dx c???= ??%???:a?????x???YzVO???c?T???????tAQ?L???? +1?'?? ????o/F?????A?????????h?D +????u??7???u???7 ???b?????q??????4O???R?@}???????n6????O??}inv ?/N???4mKa??}???????jd%???1O?V]???9???\~W?qy????k??jsgKsb;?n?@????????O|RJ3c 9y10??A???#2?+????x??|?????VZ4??W?D?;???A?m?n?O?:??X08kL???^??-c??????!?y????oi? {?+?eT?9??? /7y?e?aysf??6x|%??B?a??S????w2?2???zV1 ?????????v^?>x?!DG?{??=H??F??????MsQ3{A?&??b?f},l j????k???2??N=?5????:Q??n? ?9??U|?i??:?|C?-??XS???z?s????.%???Nw?N?L??????N??+?]??FB]{4^?J?[1Q??A?????!^5????QC?????ik?,???3Td?I?0g???b$?? ???+9????58???w*U)?A?$ +dVL\?????I)??o?e??T&\? Wj? &?????u????????S=???? +N?:????I?e"*p????V ,?o-??U?~??T??94?i??7?:?????l?9????3+?CK???J?,?n?#?? ,?????{7???NK>?&?*Q^???<(?[n?r??~i???F? ? +>_??o?J=D??4]?x?/????9??Z?4???2I`#?s8??;?Nu?????&??S?? ???Y???Q at c?X?[0??+??G?I?? +??[?gH??$??Zd?o??????z-I?C?63{i?e?e +??V2n??{??????p??YQ???3|?D?25<???????O???$?????6????????Uk}a?-Ui? ?Q?`??b??Px??6?y#+???NYjV^??Y#?+`?V|~o?????#`??e????'eF??????J?j?z??jS???C?:o?;*\'??+????a=h ??1??????z??~89k???????*?????3??#?!????D>?*J?E??-????:M??Flh??h???#????@5???3????????NR/??Bn?F??2 ?0??;??k??S??`??????Z????? +??'?/???p???(?????????C>g:t"???D?Rr?Q?D? \?\?0???3*?)?N?-??e??o?x`???!x[j>???Q??m?$??????%n{?3???^?_?g?+??x?i?]??W??N??K?S8??????C???? |/??W-+??yj??a?????}???;?_??]????[p?B? 0?K???8+????t3x??x?=y??B??p?@?yqQ???#??? ???S??- ??????!?r?Q????"??????P?ad?di??K???$??4?f????>fT1?9?I???i?"?? +????4$?L' +--?~???"m??l?BJ??;?5?d'???Nm5????=?????I/?XrGX;?????}??i??? ? ??-4??6#}?W$?Q?????TG6?h?9??D???^2C??v?${???+????????TV?L??????W??W W?0??=?y?p???1?rH???g???&?*~??0?????|???????:h?^?\?? +???q[?? ?)???#C?????-???@b??=?????X???? 4?h????<"w}???? ?K]?3?q?{??& ?mSx???????!?A???G+???-?endstream endobj 275 0 obj << /Type /Font @@ -1265,28 +1262,28 @@ /FirstChar 45 /LastChar 121 /Widths 279 0 R -/BaseFont /OAPZRV+CMR9 +/BaseFont /MTOORX+CMR9 /FontDescriptor 273 0 R >> endobj 273 0 obj << /Ascent 694 /CapHeight 683 /Descent -194 -/FontName /OAPZRV+CMR9 +/FontName /MTOORX+CMR9 /ItalicAngle 0 /StemV 74 /XHeight 431 /FontBBox [-39 -250 1036 750] /Flags 4 -/CharSet (/hyphen/period/zero/one/two/four/five/seven/colon/C/D/G/S/T/U/a/b/c/d/e/f/i/l/m/n/o/r/s/t/u/x/y) +/CharSet (/hyphen/period/zero/one/two/three/four/seven/colon/C/D/G/S/T/U/a/b/c/d/e/f/i/l/m/n/o/r/s/t/u/x/y) /FontFile 274 0 R >> endobj 279 0 obj -[343 285 0 514 514 514 0 514 514 0 514 0 0 285 0 0 0 0 0 0 0 0 742 785 0 0 806 0 0 0 0 0 0 0 0 0 0 0 571 742 771 0 0 0 0 0 0 0 0 0 0 0 514 571 457 571 457 314 0 0 285 0 0 285 856 571 514 0 0 402 405 400 571 0 0 542 542 ] +[343 285 0 514 514 514 514 514 0 0 514 0 0 285 0 0 0 0 0 0 0 0 742 785 0 0 806 0 0 0 0 0 0 0 0 0 0 0 571 742 771 0 0 0 0 0 0 0 0 0 0 0 514 571 457 571 457 314 0 0 285 0 0 285 856 571 514 0 0 402 405 400 571 0 0 542 542 ] endobj 278 0 obj << /Type /Encoding -/Differences [ 0 /.notdef 45/hyphen/period 47/.notdef 48/zero/one/two 51/.notdef 52/four/five 54/.notdef 55/seven 56/.notdef 58/colon 59/.notdef 67/C/D 69/.notdef 71/G 72/.notdef 83/S/T/U 86/.notdef 97/a/b/c/d/e/f 103/.notdef 105/i 106/.notdef 108/l/m/n/o 112/.notdef 114/r/s/t/u 118/.notdef 120/x/y 122/.notdef] +/Differences [ 0 /.notdef 45/hyphen/period 47/.notdef 48/zero/one/two/three/four 53/.notdef 55/seven 56/.notdef 58/colon 59/.notdef 67/C/D 69/.notdef 71/G 72/.notdef 83/S/T/U 86/.notdef 97/a/b/c/d/e/f 103/.notdef 105/i 106/.notdef 108/l/m/n/o 112/.notdef 114/r/s/t/u 118/.notdef 120/x/y 122/.notdef] >> endobj 190 0 obj << /Length1 750 @@ -1298,11 +1295,11 @@ stream x?SU ?uL?OJu??+?5?3?Rp? ?44P0?3?RUu.JM,???sI,I?R0??4Tp,MW04U00?22?25?RUp?/?,?L?(Q?p?)2Wp?M-?LN?S?M,?H??????????ZR???????Q??Z?ZT????eh????\????????r?g^Z??9D8??&U?ZT t????? @'????T*???q????J???B7??4'?/1d<8?0?s3s*?*?s JKR?|?SR??????B????Y??.?Y???????????kh?g`l -??,v??HM ?,I?PHK?)N?????;|`??G?E?8iC?,???WRY??`?P ?"??P*??P?6?300*B+?2???????t#S3?????J.` +??,v??HM ?,I?PHK?)N?????;|`??G?D?iC?,???WRY??`?P ?"??P*??P?6?300*B+?2???????t#S3?????J.` ?L? 2?RR+R+?.????/jQM?BZ~(Z??I? ??% q.L?89?WT?Y*?Z? 644S077?EQ?\ZT??WN+?????2?A??Z???u?Z~?uK??mm+?\_X????????7?D?????Rl:/P1?d????????(??l=U?h?d?_O??E?k?v-X1??t???`????i????_y. ?1?????????:?un~Q???3/??S??}??]?? ???$e~s?]F1????/??Q???m????|<?????/??q'}I???+6???E??g???xT.??G??gt???v??G??U|?????~??]?R????_k?9???:?{?p??G?? ??d}dN<6??-uB?o?H??=c?M?vH??z?q?a???RK?~,K???}????????m??????yo??~?????v? ?_????s>???.#????????{?/?????k????\m?|??r???X???????ad?j|?????R/?,2?p?0, H?IM,*??M,??\Jr?endstream +??-??????W???d?????_?~?+ ????i?s?s?`??C???u?I^>??\m?|??r???X???????ad?j|?????R/?,2?p?0, H?IM,*??M,????r?endstream endobj 191 0 obj << /Type /Font @@ -1311,14 +1308,14 @@ /FirstChar 15 /LastChar 15 /Widths 281 0 R -/BaseFont /YSNXLB+CMSY10 +/BaseFont /ZLPZRV+CMSY10 /FontDescriptor 189 0 R >> endobj 189 0 obj << /Ascent 750 /CapHeight 683 /Descent -194 -/FontName /YSNXLB+CMSY10 +/FontName /ZLPZRV+CMSY10 /ItalicAngle -14.035 /StemV 85 /XHeight 431 @@ -1342,18 +1339,19 @@ /Filter /FlateDecode >> stream -x???WXS???)?E)K??iH??J??7?!Y?P?[?"E?wDP?^E? ?$?? H? nt??m??????????????c???aJ56?????Am?E??j??\??0B"-?&? -?D?K?????. E*??? ?gL?`?Cw ?I??^???D???+?5p???OB"? "8? ??? -??A?????"'??t??/??)? ???O??Rjj?|??H??T???X PUR????XO2$R~?WzG?f??,?p??>B?H?IN$@?2k ?A?????M?R6?????m?*?.U???.?A?d?;?????????}???d??8?*CUg??l??(????8???K97???W?????_9?(M ??Ai~j^? ?k ??y??/?????Z?H+m?6??U?N?af???)?l??fG>o????aQ????H???j=s?U????|????]??????jy?D?-a??<^?????kj?>m?$?w]?o?o????Y|?W?? ;=v??Z????y]u? m?f^?@H??T?E????D(?O??`?_G??Z????K?d`?\bI???a??????G??-?( B????}?O??}?:???,'~???:???f???in?1????P?Ki????w?r?A?V?21?+?"58???^????1??>>?y4d????T?Y??j?????-_j?6?????nO -H???}?g(????5?gE?3 ?K???G$p}???Q???z???????\????P?4?????????????*W?I???????O??$?B?5gV???(?[L|????c??c?;??&A=;?}6??j??0????L??? @??:?s?{vu????up?C?2l???"M@?*?'~???O{`?}-??Bd???IX*m?@ -????N??S??&??nv??R??&????6 o?j??p(??`?r??H????o? ??~14?Z???_??:t?*{????7??Dk*???hE??O?6???6t[,??-????T?^(*?????x???LN???/?wt??????z??J/??7?[-Z3,B??O???JK?6?3??$?{?DW??j???{??m??N??F?,d?.??D??]6???????T??c????2Y????A?*Q?{?|????e-??Z???*?????????-;? _]???v?F????u?R?"?1???iI???;?????)?%(??8J???m??????????2??????????/??Tj M??x????2[????L??????uJZv~40?Jp? -?-???e???9??H[?7?3????PW-???g???!??%K??????????l???<?o????\???=yN??^Qe?|????A?4cv?T?????????l?-???~???????#P?b?w? ?? d??|4?/??I?`M????r??+o]???t?/???9R?t}?}e?"?T?b???9???}??b_?}5y??????V?????%w?H at F?????????K????e???7"?~??pFZ?[/??CG U?"?2e?\g??????>Z?????&{??J -?{??h?I?????^??hh9Iv?"V??p?{????:Q7?q?n#?XLmcR? ???[?????_P!?v??? ?????8(??Z???`?e??&g???R#[3??71?k6?0?2n????3??R??? %?J???" ?5??F?v?k!?Nz???m j?????r ????E??E???5V???????9$?[??9-j??n??j ????!??"?????????_??&?p???C)?(Q?6?V?6?????3?X??n?G?5????,A????? P??N?k??s??;?y_?iJ???L?;?_???Q$?_???? ??eb0?0aEl$? -???2Cy??a?>?%lyZi??C?W?`I'_?&?u???4TIK??sb??????B??i}? ?'?N??4???x?vw ?;??p?S??i??}????p|sL?=?+?^?-?|????P[?X???????;?_?V?,?pF?)h?????p??wgj1???x4??w?&??j????????@??w3?D??Z`??,F?U?m?ckz???quq?zw??rH?;?m!??!?uz???] u?UbhC???1[??????f?0F?U? J?R.u?_)?sP?4?v?&?U+0?^?O%?????, ?%??z????ze,???????@?7%:*U?j??p??R???x??ik?:??$Y????Re??^?"?F??WN?k?)?9b?_? ??W?????n???u?91Q~?>K?T?wx+????P~?q?{Y????m?????0???"?7|????? 4z?????7?!?=??i?????\B??a?/?|aK:?T??c,g?J?K@?/pwG?T,r??T|-5???qe????)???h7#?????#???^???O?;k????????1???>jl=?#???$"??!????. a?&DZM1?xC????? ???O ???T?Hh??/???H????)?\A2?!??#?J????f$,????s..????)???@ ?D8???"???.O?? +? ??@?:x???3q?;?????????????Z?s?C R?}?@???'#?az???A?2?.????~?L??%?D@?`?d?/?~???????}???#?(?%?2?D???+?5p???OB"? "8? ??? +??A?????"'??t??/??)? ???O??Rjj?|??H??T???X PUR ?_J?'? )??+?#3?@o"??X???UqJ*????VVG?q????????)???A????vsPl?/?????7qF??G ?????o??k?8??j?6?????????;??? ???[??\?????k??)??#???}O???,]w??6L?H?I?'B?T$???C1-?? ?,?q?A???]??????\)??2????fG????A?????V?:{??}5Dz]??f???W???8? |?N +?Y????!-;???y?Re?$??*`?^ ?????B3-?????g  ??:?_8??u?$'?_?E??z??{N"??Ry???z?yJ?4g?Z? OW??le?D|iRG?/H +A?6z_M??Ac??? ?!u?s72??????????3N??~^y? #??w???>8?K?lj7??J??.???)??GG?T??f4Dg?}.??? ??L?Z???Q???z???_??%i?M-??Y??Q?qt/????K1??????'?K???%?B?4?W???*?[?????E????3F?J?????6?y??L???f&Fv?z gi????=???cz?:$?!z 6[?V?& W????n?????????{H!??t?$, ???y ???]F??????M?}z7??W??~????Q???B5%D:jd0z9?K???B?????t??]%??o|??Eq?t????MU??i??A??>???E??O?6???6t[?AWkPa??=_X?'?U??Z????(.[ +2o?h?33??;t?w?^????X?d8X(??I?:}8y~??j?W?$)?M??e??V???T??g?a? |J???v?>r?/wp?z??8????d[?*#s??kG(?"???p;????I?p???? n????N?????fm?????l?)?G??Go?????zm\????M????:?=?aKC(t??u???????_u?dM?k?Z?)?iq???z>d????T?$?di?x????<~????uw????????"? q??&?)??-???o?>\4??f??_??qb?"????M?f}?0????C ?B??Z??{??%?2R??y.???y??$Z??????b?|?7/Q??e:??G??)?r????1I??j*n??Vx0???y??b_?}5q??????V?????Ew?(@F??????T???+????%???7?#=?O 8c?s?[>e?pA??????p????????v??W?V)\s?8????C???QUk=!??UJ??m??]?w?(44C?????Q??WR?W????3"\?x? +L??#-??V??#???`? ?4???3A? T?ZH)aQ??\?=?}9 ???e???FWm]m??h? +??$;_?qr???{?????M??av,??!9??A??????c?/?m?9??!??D?Zx?+???????l???)??f?*C7ll??l~]???X!?[MI?e??HK??nu#R8??????K??|u3? +?????N??id??R??q?6B?9?k.SP??p??|?????B???????????i`?????p??(??I(b?????2>p?0aYl??,???e?0?? ]?9???????6t??(i?So?E??sR??t]D?I???????????!?c?????Wk????????o?`d??Q???????o ;???)n?2??, w??77?%k???v????5????e+}?p?????f?}???@??V ??M?P~??A{?o???m?????0$?? _?????? 4??????7?!??L??m,g~?????_???4?X?? ,?Vb???o?????C?&?Q?1nF?e%b???????>m???????2Y??U?@???? ?3`]@ ?Br???!?????endstream endobj 154 0 obj << /Type /Font @@ -1362,14 +1360,14 @@ /FirstChar 97 /LastChar 117 /Widths 283 0 R -/BaseFont /FNUPCO+CMTI10 +/BaseFont /PEQYBR+CMTI10 /FontDescriptor 152 0 R >> endobj 152 0 obj << /Ascent 694 /CapHeight 683 /Descent -194 -/FontName /FNUPCO+CMTI10 +/FontName /PEQYBR+CMTI10 /ItalicAngle -14.04 /StemV 68 /XHeight 431 @@ -1396,7 +1394,7 @@ x???UX???p?w'H?????????[pww ,??[pw???!k??????s??s? ????U????)H??D??L-$??XYxb ??,?FffQx -1??????????/???? ? ?rX?y?YA?1'go?????Z???$.????????`?fm???????dfc?????????+@????aa???0?1s?ZX?8?3??$?h????????? yX]AR?i?@??N???s Kx&E'P5 ???Z?{rIw{{E????N?_?&6?????????f(8?[?w????)X???;??Q7{3G+{ ??l\%m?,??m???n at w??-???h??e?$???%?I??M????????????g?'?_???A????1???????? ?W1 G3'sG++'?4??q|Y6??^ /?0????hO??N@?:??` ??8???;??????????O?????`?O?????L?@3 G??1n??(?j?????3?2M????r?Y?;?_??aV???????? ????L?D at R??????9?%d??We?????????????'?`rr??7s?d??,?;???/i8?? ??????4?????/i?????q? AV!????????B???_??? ??I??:V????_~????????%.*?????``]\l,?????if?@?????$?E??lizkXXxY???-;??}??h ? ?(?????jMTl??????n_>!?B????R???| }L????5??OeZ?{?Kb??????q?O?G??l?#g??? ?????Kp?????T???????"ejq??M?~=????O?\????a??l$???.???[????P[????mt?N]??/%??)?F`?fbBXE?W[gm"?????????b ?`M??L?9u?Yu1??k????s{j ??`?o?p???x'???0s??|6????3?Q???Xm?N?X?%;?'??_cnU??*x????7????`?t0?B?w?X?T?:O??&s ? a?7?????f?H{?jL??|???%$???4???@??1xL?u??????????-;?v????)?\?????sD??RH?8V???KX5????^j?T??z!_q?]?s?b?AjH?????????%????~Z?d(L?6??????By???t[Z???(j?7???7^m?)Ot???s)?I????????j?9?3 ???????<~^??,I?yp8?W???].??Q????F?edL???l?}/?? ?l ?????bF??WLoNI?D?H?  ???9???r ?&Q?"????????v?/ ??i??#?+D????=C?v?u4cU???&??3????Wt?z(???I?6??T?????z_??b4???g?/r?Q????N?NK?_n???\?y???A??????=?????FZ0??a?*? ?nE:???E:?gm8=qw?}?????l?????pl???`?????\?? m_?wU??????????t?????????*?? @@ -1443,7 +1441,7 @@ ?l?????;&???????&~?{?^`?Cr9u\?????5?{??0s+{D(??2?3???N$?J?"?? {???l?&}?r???S??*TA?6?????\????Hb??m??1B??9???3?X?by????,45?S?l3?* ?&?.ba??@f??:???|0?`???_5C?'???l?????Q/?2+?}D??;???^?u3#t?X?F?w?VuO????e?$????O"h{?B?u}?D7?Q??D????0?U???>F?+?????7????,)uS??????{???fb???? ????+X??I5??l/A?s? ????[Sw????z???5?^?9???????:;2?XUi=?? lgLug?[embZF ?g??M??{?tv?>2?`& h???J??Uz??? ?V?^????>???y.X!#[H??0???L?y?F?????x???(???:J! ?0\??t??b??=aK???}?K/?????n^m???:"?????"?^?a????4?!l??B?*??FF??? ???????'Z??????WQ??????(n?Q?S??z??67($???+%????c]?_;?d?????'?????W?{z??,w??T?????F????x??+??z????bP?e??1?5??????????Lv~?[?????????????d$?)??Kg??V@??????`???L??(:t'm?m.?N9HY??#C?Ia??M??P?!?=Y7????P?#??tC_/6?? E.?q????}?&???L?H1r?>X?i??G7??{\&?W????V?/?c????s? ?_yx.nl????,?U7?FlI?????Z@=???$?_????G????9L ^??DB| y G`w??'?s?c??~?3?????.??+WhO????8???|?? ?????-?M??5U ??? <9X'^??????PK??J?mm~?D 8?{?j??Q?y?]5!??Mi?2^??4??3???nya???+???????+??B_{?YT&?-? kR?B_D ?{e???X??????T???RK2q??????ZEyIMT?w0??]?^&??e?1??????e|??h?B??G?f??"-K??????"?^?o$??g?R?P-?P{????c?N????A??P???!pM8??jg?)?p? ?O????????N? ?@2???,??sh?>8j?*ia{xGI?Q?k???????q??]B E+<????C?T?????>U??+#? ?T????4?g?5j0?y$? *D^???o???(???2+?? Mrfk|?)?u?>??v?}Y|C?9?i3? ?c?* o?%??I???? ?r`?I??l>a????P??{? ?y3??G??LTX?|??1??_E???????:?$fn?_10?@}4}???`Op ?.???????? ??????j?[D?-???[)p???N?Q???jkzP??2?????A?P??I???j8?? e?Y???-??????bv??j?$y$?^?x1a?_??????HD? ?}]Zb`?.??O UH????? 0},?????????Y? ?h?4??E ???i??u3?k-?d?????A *???????OL`foatsr0???.??endstream + [p3??>x1a?_??????HD? ?}]Zb`?.??O UH????? 0},?????????Y? ?h?4??E ???i??u3?k-?d?????A *???????OL`foatsr0????3?"endstream endobj 126 0 obj << /Type /Font @@ -1452,14 +1450,14 @@ /FirstChar 33 /LastChar 125 /Widths 285 0 R -/BaseFont /BOOWHV+CMTT10 +/BaseFont /PLSZWR+CMTT10 /FontDescriptor 124 0 R >> endobj 124 0 obj << /Ascent 611 /CapHeight 611 /Descent -222 -/FontName /BOOWHV+CMTT10 +/FontName /PLSZWR+CMTT10 /ItalicAngle 0 /StemV 69 /XHeight 431 @@ -1483,36 +1481,45 @@ /Filter /FlateDecode >> stream -x???e\????A???????A???s?.?????A$?AE?????g??|?u???~k??&:?W?N?P9'G7nNna????7??? ??I??89?????n!!n????? ??/? ?a2????a6V?ni????P? ?P?YC??=?????? ???h?5?? u??_?? ?????????P????*????mr????'B???~7???I?&???$J?&!P???~???x@??WQ?M??? ??? ?5?\S?7?5_?&?????????N ?7?????qs? -?@n??-??@???7????v ?????:?Fn????u?????}a ???????????cx?????~???@x ??????????//????.?+?????!?0????~????6???zA!??N???? ?e????Q???U?v??a?N?A?/Pra[?????$??@?????r?n???!w???1???a????L?w?????L????0v????6?0X??_??s?u7_?EFkm??????+?5???\??vDX3/?&~?KY$(b??% y~(4?6??}????????]??)???K??4o?U???????A??????T???W????fs???f?=;}?f????y?z,???Z ?T.?R?&?s[?6Bmb s?P?|A???????????J???"}D???Gq??w2????wqkX?X_?*?M'L???W???qM?????{_i??O??8?????ijo0uZ*??_??(?EF?Ht? C? ???c?l2?*?2??R? -c2@????????R1^???z??F????wo??VJ???N?HV?>???v???{?|4?T??V????a??%??5???g??J?P??? ;?=F?~x???8?g????5YP -{???k9?O????*?????@???????gy41c?kBF?8??vX?4(/`???_?ltRYuc/?? -3???nL0 ? ,`??=??W?[?m?????%?+??)???KW?r??s?2 ?i~C7-?Pgo?/??s?KZ???a?]?i??O}\??8??V?]?????? ????l??8????5????0???o?:?$??wB??USa?{?d?????I2p]_K|?,??? ;P??s??5'?7??j??guy?Z?@v??\$?i?2^???#?????????B???? f?b1V???Ek???Pi?D%Q??7?.z???B? ?w;]?X_? ?9?|?????> ??3S?F???D6?.D n?F??????-2H??x&E?36D?v>WK?4?!???Hc d???k -??p???????A?t'???Y?I!l????t,WO??.??Gm"!5??DiPE??n??E?Y?????U?????N7??I`f?????tCF????V}??JI??????C?:??%C=;3:?K???&??C?????B???????v???Q?'?m???Hg?l???G???@??Wm?a?????8_!_????q?vX?^????*x?0?y??%W?U)enX?7?y?A?6??wd[?d;??a.]?G? -y??]c?'?4a?W???v[hJB?)??8!e^?a?0 -???H<&?"?8?tK?Y2????`??%?d????%?F???/se???T{>?a}#h???? B?(S?I??]?F4????h?f??0v=9k?E ?q{???\O???1uG??B?{j??am?a? ????_m?ou2K?f?++????f?b]-????[?M?A9???-?????c,??V;-?=#?}?????>??;?(< -#2W?;?#:?u????Ba ?9_X&ij?r????0? +?|m?h????{?g???w g^??????e?8|?-?L|s????,?y??????`?XlxU?????\?????;????? -? ????v? ?;k?0??"S?F6?L??????4??Fu?a??#?Zm6XG?<;???gzn??t'???0`??]\]??)d????|y=?XD????YwM9*?r?z??r'?lq?e??I?????#??????%T?l??'??B??????#Z?o0??_??._?????N???^??????tVV??????C???klD?*p2??;??Av?hY???Z??????+.N???`f5?mP?d'??c?????m??????"?7!???sP??M7????????B?8?(??, ~ 6?qci=n?"!??F%H?r?+???z??S$`R"Z?U?|?F?Z?sx?!????????Q z??9Z??????v6?O6??'8?31z???0?(S??Y[???7?????? -P??_????U?Om???f5kd????xj?w{????-?o????? wj???????U%En??{x_??yM?P?????V??D??O-???????q@9|7?Rr????R?"??p??????E(????KMA?:?H?JBl?d???2?b???vY??P8Sz5/?n"??????@???????J????hW???_??b1C??7??6???????1x#??5~??v??#?,]m?wa.???L???????>@|=? ???n G?g??????'?8{???m????Bq+?UV?qa????JtY??F?jn????5~b{?W?j?7??H?'k??K?~?`?? 8????N?Po????????/?+??3 ?????6>.6P????*??.?mr????'B??7???I?&???$J?&!P???~???x@??WQ?M?j? ??? ?55~\S?7?5_?&?????????N ?7??,~??qs? -?@n??-??@???7????? ?????:?Fn????u?????}a ???????????cx???^?~???@x ??????????/????.?+??z??5B<`0????7 ?0???l?G +??B0?'?!"?????d ???!JY7&?}?m? +?z??P8??7??/ k?LJ?W=???5????0????6r8??{v????mu??L?Xn???::?\>JI?6?s[?Bmb s?P?|A??????????6????"}E???Gq??w2????wqkX?X?x???&?d??????%??n??????????`_?P\?4?7?:-???/fS??*??$?j?!Km???\6_ ~?|?U???? P9???h8?T?????^???yv????????83??8??? ??^t?&?Ua????????????"????2???-p?s???cI?j?(?f????R*?@?n&?I?)YBH;??0{V?rk"?E8?Qt?L??z?????????+?4??V,?!c?f:p5?l%Y???ir at J?;??@?b??e?B?e@??-e??p???&v`a?????&!?? ??1@?q_?5! ????~???P|?X!]n????a?;??+Rz^????????eBM+??R{o ??$??A????i= ???b4?????X&/a?=?>H?a??|?Z??0????????b???????ju?6??????o5rb'?a???? ?b'? ????;>C#?B?? 2??G.????????2Ael????H?z?,?????z????d~U7z????G ????)q???`(FA!W??.??????????W D??%? }o????~N?????.???>??Nz?????~????9wc???4>?6??J?6Z??U?~d\????@???)?F?C??-?????? +&?+?S*i)?/?q/??;?????i +??????zn???q???rF?IHl????r?? ?i!jx?0*'???|?m?a????C0?(????pt???z???]D ?v??\SH????Uf?'? B???)?AV?V??5Q??;??< M???a}#h???? B?(S?I??]?F4????h?f??0v=9k?E ?q{???\_???)uG???`?gj??am?a?0????_m?fou3K???++????f?b=m????[?M?A9???-?????c,??V{m?}c?}????????;?(< +#2W?;?#??u??0%?????/,?4?T????QtF?M~v??d??b?=??3??????/??e???2?????rf~9&N?K??B??L?}l0??O=??$pLM??' ?[c??NQ??Z\?IT? ?5q?%f?@??????x?n?.?b ????v'C+??~??_? ?w\D??o?????U?????F???*!n???x?,?E??? ?@x??^L?? $2?uWjH0?[??nY?g=(?A?? bl/????)('l??y?????mR???H??7??@A}?b?P??w??w???[?f??????B???l?g?7????rH5}M???V?@wsO7?$2+mGS?z??v?Q?`^Ie??c???L?,:?K? a\kn?????????????[???m???R?c+6??*??hU?0????[???\?5FV_xt?+i???????\^????lM??'?E-??? i??t????? w%b???? ne??wB??Z ???????[??DO8`????~?????U_?]?]???f???5k]?Hd0M{?????F?v?c[52>??OB???{????6?V???zh;|??v????n*5??1??f ZD?W???? ??]??? ?<Q?"s?s,?w7??IBB???v???????d??f?/I??fN????I?9????a??????3?~?x???.???2??wT\?Q?????w?P?N01??Z????A???? {u???zI?=??????_Sv?t?AAZ??W3????*????3?Wq????????H???? ???=??K ???C=u?????{0S???z?_??Nn????+g????p?@Y ?. 9w?c[???Q?pbm???e?2???u??U?5?q??#k???x?U +??S??Ec????S?_9[?|?????UU?oR?t?|???Mo?X?C??$?????5???Ry??? v?[?u*???L??AT?c2?+??7q;_??\??%?h??}[5???%???jF?I5w%??~????B3??-???[?? +?=?[I?`v?>V?.?????? ??'I????.?8? ?~?y??$??Z?qg.?>?!??9???????w??.?;?????K???`?????tW???W/???biW?);?? }_??dRy?,M?b??<???x?_????~?4????l?'??6]??L?G4??U??yU?h??????????? ?~E????|g????dZ?{????Wt????N&?M?????y?y???X?J?|>?=?DN8Ur?E?8p?????)'???h0&??/mUd???k?s????2???o0?`o?u?-?DPj?? +`uQ?l?Hw???+?????O??tq=t?????_3????b?#._\a??5??????)[???????QtP?'a?jZ?h/?'?P??????O +Ys?7{??h????b???j???Kr??;e??rx?^7?r??YYe{#??F?s????}?? ?J?p????U?ig?Z?:f?w???8?bn?????a-????e???*w???w?? ?D????A?t?7??L1??Z?-??c?? ????`s?4?????!-2XoT??)??r|?g?=E&%?5^???n???\0G???-\?????=?g +?\????Z??d??ds??:?_?~qs??0???E?S))q??qz??x??????e??^e?????mV?qD??A??G?vx???G\??2???^????m + at 9.?$_j +???!??tm?//>??D?5?/b???2D?r????uf%?n???lHr?.H_?`vN?e??B?L?I??????R ?f ?o_?s??*?????]]zY?? ?"????`???6g????h???L{?????y?Pk?t?q?????? +?+^v???????8L?!??" ?5???7?zcb??x?s?? R{????? ? ??_TYq?????V???e ??%j?M???6???E_A(j????"?????.????)t?H=??A?LaC??<?? v?[???l??I???????_\?[F|i?vh?I|H??3y&1En??b??????Fss?f? ??&????? (?YBU??5Q??`?$???;?Js?Q#D?E? ?0`?r.O](XBKx?5?a?!?s?^?Ki????u! ?y???????P*{?I?Y?L|??u????6? ?XW????W????a????)?,? ?BI?????Yb v?^m?^/ >?Y? +??p??pmm?>&???????????7K??{?????Sy?<nSE???svr}|XLg&?7?m5g???? ?????(?o?u\????/???? +??;;?a??? ??m?endstream endobj 119 0 obj << /Type /Font @@ -1521,14 +1528,14 @@ /FirstChar 45 /LastChar 121 /Widths 287 0 R -/BaseFont /UXRLUO+CMBX12 +/BaseFont /SAJEWQ+CMBX12 /FontDescriptor 117 0 R >> endobj 117 0 obj << /Ascent 694 /CapHeight 686 /Descent -194 -/FontName /UXRLUO+CMBX12 +/FontName /SAJEWQ+CMBX12 /ItalicAngle 0 /StemV 109 /XHeight 444 @@ -1554,8 +1561,7 @@ stream x???eT\????[?{???]????qw??????? ??$Xpr???|;9??????f0??5W????UtS?*?1????%?A.??L?|1UV+ ?(%??????$n??????$?&?7?_>N>N6$J????????? ?F???$n??????P0v????05????Z]?j{???'????x?7?????C?r?i?????I!z??z??sqkK??j???Q?????8??s?m??}???? @@ -1598,7 +1604,7 @@ m e2Q????W?p?????-Pa?W??|=_?eK;y?NK):?=????????????F??????N?SA?Q%%? 1??????K]?kd???I?Yd???DH?Z~GB{?n#u:????P??YU????(wf??D?M??n?72G&????\?r &??F*6?+.????t?9<>???????BM????-???_???{i?#??2l??g7?iD?????:;-?K[?????V5?????? ???????4??TR?-?t??? ? ???`B;????Wn\?T?)O9 =!????????wOc??????t? ???K7??????=??E???'?f???l????????jQ4?!N?S??Mx??y_ %?Q??%?>???g????????u3?0A?w???????/\)C?h??@*Y????????U???k?ap?p??]???l} ?\\P?D??????K?~&?C?4=??????Ox:}k? ?????^???R'p???????V[??3~?????pop |??]??5&Ti?2?A???z??C??Y?w?|?T}>h*??`Q??2T??A??hFi&???\V??|Nu?o&a??H? ?S`/?{ }?oh??E???_???vZ??#}e?HSp?|\i??E?K?~ -??SxtA?9???h???2;rR??????? ?:G9/??+?k??~^????'=?|\5?????? ?Qd?????????{?UZ?'???&l?KU;m?\o?????p???`????@%+&???????OL`j 4vr??3v?A?_M???endstream +??SxtA?9???h???2;rR??????? ?:G9/??+?k??~^????'=?|\5?????? ?Qd?????????{?UZ?'???&l?KU;m?\o?????p???`????@%+&???????OL`j 4vr??3v?A?_k???endstream endobj 95 0 obj << /Type /Font @@ -1607,14 +1613,14 @@ /FirstChar 11 /LastChar 122 /Widths 289 0 R -/BaseFont /LIXKSM+CMR10 +/BaseFont /NBCCGU+CMR10 /FontDescriptor 93 0 R >> endobj 93 0 obj << /Ascent 694 /CapHeight 683 /Descent -194 -/FontName /LIXKSM+CMR10 +/FontName /NBCCGU+CMR10 /ItalicAngle 0 /StemV 69 /XHeight 431 @@ -1638,31 +1644,21 @@ /Filter /FlateDecode >> stream -x???UT???qw?P??^???R? ?^?8??????kq??-V????????{?y?????|s?5???V2Fh?t9??!V ?3????G ?.c?? ??????``?uYB?g9K(H?#"? PY???^????? Y????? -`?e?#I ?r-???P;????? ?APN???#@????;??d??????+?-???'eg@???????????$?????afZ??p??AV?????M[.?Wa??m?3????+?e?F??9??Z?rz;??i?zL<z??? 2_FE?1??????????Z??KMFZ? ??Bkf[:??{???????Q???V9-m??j?d?*?0?q?2#??K?lkL?????8gz43?q???:?_??%D?????D'??xN??p??BrJz?R#?=?????????~B?%a?? -?Z.??-?A"???9??(??-????`n??X?????&{?'p?t_u ,`Z?????7???Fl??JG?~Y?aT??+???W??U{q.+??k?\*?{?<??hSi,?????u2oD__?8?_%?@?????/N?X?B???F?S`6?.j??????>???+$<|?v]?S&??+W?*W?^13A???? -????8_.?k5?&??B???n??-M?C????;?GT?/?f?"Env??M$@?'??C?G,x?o{Ox?????C??,??{??U|??@N9?w?????????LV??WP?+?U???C???p???9?.???6r????-o???-???j?+??d?e??8\?5????????15??vv?a??e?J?O%?-???? Y??Q.?????Yyr#???`??d? 4??CfMU?ho~|?N??B???]?&?P?{? 'H?\#X???H???G?7d????hvU?VOQ*??rIPp?^K??tCgNl??'?????>??B?\????Q?????{??????]w???[>?????{-?????????l}???3W? -???;m??II>S??q??TB??cM_??i????[? ?@?????,~??]g?????????gQz?}s?[=?^?O?????????/2Ho?????L?_Ev??7??;FaCLs??nf???5U?????^?w`7??;g_??????z?;??A?%???5?u???&?J(??Y?Y?&n?V??(6?s"?!??UI?Y??:W'??x??????bt??uV???]9)?o?b ??~!?-?f;??"?*??3R?????9?[bB???l??\2"????,???EW????Zi0???n?{???^?97???FT["???r?9???4???&??????Z??9?V;????W?;?????pf????????,?>?? 8??[?7???5_8??D-K??? ^9n??????(????u?.(rB?m ?,??5?f???M*a??U?a2v?l????|?QT???dU?^???????e- W?y? -? KR?;L???*?awM?F???y?t?\???m.?R?u?iT?qJqTYx?&?8?~J?r ???????6?q]4?J???m9w?(???ZKg[Y?"?a.sdq?~e?4Vo?=?!??I$~??p??`?h W6??3????z??_?????-B?z??.?????k??syFV??#???????????d24??qbf???DB???:?????{??x))?k<?Ma????Z?a????&??TqL ? -qTI?%??4?????h26??????@C?p??!`E?X?L?B??>?gn?? 92T-?r?h\:?%??? -?u)y?????cf?f? ?S;?????r??*??cwJ"????r ?/7??????? [m ???????d??w?K#3?Q?}???Ic$???^????^H?Jq???T6d'???o????5??v??3)F????D???e+8???????H?;?n??|???mh????fQ?p?T?n -???i!???dC?'???????IO?_y?)|??j_? ?!??Xq>???Q?u?-??9u7i????GGv?5zz??8y??y???CM(??????T?;x?:?J -l?????M?h%??I??p??,???V?????v?V?C?-?O????_p]F?? ???~??D*?????rrV?s8??q??Ol?I????"ph??????"0???U?????'?7w???Hf[???4e?+d\?)/???8 ]?Yo???@Gy?4?????0???{C?ZLxA??Z???tt?R~????:??=v????a???_:F]??????<>d??8F??l????]l??z?????D*?@??f?:`????????}??&D?T??rD(???k ??m'??9?nX?P??`???8?0???????K???a ?~?Zae?$?^??Q?v?A?E??OS?:,\X?????H#S??????D?Y? ??)O????0W??G?H7??I}?|5qL??????4?S???#WYk?d?????p?8j?P?-??j2(F???@t?b?R?U`???a?Gi?ZR?7???????|0?????8j})Zl? ??4?j??cy????\?(Y?+???`/_%b8??K???u\???HBc1???J??j?K:???-mXg#V??k??[*PTj_??@?? ?0???w? ??? ?V??? h??y????E?c.??d??L:?L?j???N???oME????nb";u ???oHh?)??x'?~<8A_?+*?~??%??Si?J???z ql ?e?q?????3????Q?x?F??#???????9??:???EN1?d?ID:b?]?+???0s??o?t~?K???%?????'b'?@x?6T??1??p;?????%?n??1????6}1??o?t??JO??v?HJ???nVp?????~??K???m?Y?Xx????c???7y??'??t ^\?H'?4??8???{k4 ?'?/c?%?Os??W???-??>??q??vk?2<"??z &? -??il???Z|X"??k??w?G?+?*?????(R?.-??2?u?CO??< ???V????'DmHIT?K??o?t'?v c?>[????u?W?c??????]?D?#f??s????"?[:_}?: ?g???u???? -?|#?:?9n??????????n/??Q?k?Q?????SB?bj? E;& ???\?p? ??Pr?p???I,?,?5???F?r???/??+D?h.? ??}?&?j ???????????????p?Y??s#??<)???E?8k?WC?aK??oK?V?>?- at +?Fj>P5g^?????)}?m???`K???4?_(?? ;:???U??cz???????Fk3?[??Gc??-'h???C?0OW????J?]?? ???CB??n???4M=?? ?d?D???????i???>`?C]?bSJU???*s?7?6R? ???n?+?x?s???????7Z?O?X?^????D>Irq$?{?F???m?????i?i^?+???e oM?Q???*??k???>??????M4M?w?~_8y a?mn? ??38?9M?Q>???'??>#8G$b%tE????J8?2? ??q?F'[(F?D???T?=?F???9????V$?d?oF^b??~95 RX?^+i???>??4\9?b?[9Wd???? ?V0?a?????s????qF!??Gy???? A/?21??r?s25??????e?[D???n}??????n???^?#*e?m?????????0A."???M??ij?O?QL?JC?:9YL??I?t??wS???]F? &????%I3?l.?W?5)????)???o?7??\?]??1??Q??y'1??-???d??b?!?( ???[???(>?l?3|-N???s?w????5' ????2??"?RL(]???/?~? ?=j?X??D???????EK??/?zw;% ??@?]???Q?p??7i?????i.???????1X?@u????1????? ????c?flo#??Bu ZDq,??tG?~?FY2????2\??z???WUMX[?????vG???$???c??$??????S?? -?(?????>?Y???P??????JB.N?`?cn?.?? qh?N?i??#$|]5???4??>?(h???&sO?????+q8?a[???g??s?}????!?\s??e???zMv)k?H? e?????Ips?9???1??e?@?P0?Y? +p ??AV?7?????=@???????d??HH9???@Kg??%????t?@?`?? ????c?;@?r?Ys`ps??@(? +d v????I???+l????%O??;L +???&3&i qv?X?l08?!?n ?????,.????n??G??'?_??N`G?e@?\ ??dD??e????"?gy?????=??_k\?W?kb??????v?o ??i????????}?????~x?????T???????M&Y???4p=?? =Y???????"?xi???]?^?E-{??&#-O??G?5?.?@?=n???S??n?(????^?A1?)$CZV????G?????k,?4??YM??e??z//???riB?????????p??h?eh??????l??({???w??3h??{????????????"????'m?*7?ZD?~??????W?????Cl?$(?[??+?E#?n??]2???f???G????Pk??(??|???6y\?}?o?? +??8b??????N??'^???a?3=??8??B??/ex"????yc?oi<'mJ8D~!9% ??Z??[?h??????E?????Z??X?u??? ?w?????r?Db??3???/Q?lD?W???8???:0?r~zq???G#???LG?~U?nX??+???W??U{q.#??k?L2?k?,??`Si$???? ?e2oDOO?8?_9?@?????/?X?B????jS`V?.j??????>???+$<|?v}?SF??+W?*W?^QS????????b?8_.?j?y'??BM?do??-??C????;?GT?/?f?"?ov?????A?'l C?G?x?o{O?e????B??,??z??V|??@N9??w?????????LV???W?+?U???C???p???9?.???6t????-o???-???j?+??d?e??8\?5????????15??vv?a??e?J?G%?-???? Y??V*???1?Yyr#??4g??d?4??CfMU?hov|?N??B???]?&?@?{?'H?\#X???H???G?7d???0ktU??VOQ???r?Sp?^K?3?tCgNlt?'u???>+?B?\????^?????{??????]w???[>????&{-?????D???l}???2W? +???;m??II>S??q??TB?cM^??i????Y? ?@?????,~??]g?????????gQz?}s?[=?Z?O?????????':g'??X??????bt??uVr??]9)jo?b ??~!?-?f;??"?*??3R?????8?ZbB??m??\2"e????????EVh? %[i0?eo?{??,??Q?o#?.???O?d?wlz??Nf?dLjc?K??Y?U?AV\??????G??}8???g?_FeK? I????z?-r???d?/?|"??%^jg?7?O^R?o}r???C9????^???k??y?&???????07?]6[?]`> ?(*~?g??R/ U=F?ut???|????T???x9l????r?\>O'??[??r+?]???F5?F???iR???T,??;?J?m?E?F#)??Yj???r5??@+??5%p???(b?b0G??W??Ac?F?????DbX???????e?k;s??}??7^| ?????"??????+?i?v?9?gd?J??????????aH?/H?!C??'???O$?o/??j.??????B??#?\?1??(??l/?n??O???G??[?8N??^?3?t!c3[N???H?kU?+?E?????????=sc?]?1??j??-F???/??@g?G?K?kv?A`?3?6?a?????-D??=?VNF?Sd??u0a???-h@x?I???~_?_??j???e?0G%d(?y?K\?1??c??_M?? ??i?j?????$???J8K%6(???J??Z=?tg??>C?b??}!?]MT??_??S??.??m??????z??k?????)[~?g ?t%?V???-?$????L?d|????/?????G,6??S??4 3$v+?g{44*??w"?U??&MZ????????.??FOm'?\?>??x? ????E'!U??6???U??mNV?????aLZJ??U]??!{??8????n]???????????%l???p Zj?x?? ???VF5??????@1k??*???????4j???????G?????)????K?+???@r?0oO??'9?qX~q???????? Y=??B?r^???t??i??lV???da???6??.?T}??j?I????9d?????s???Up?>?biC???r???R??7?{?*?%~?U[5??_IB???gyN??D?.??&?*?D??x?khZo?yH?=u?5{??R??K???????????-???}K?^?N?1??U??m.~???r??????6???!?\?:?t?GE$??L??~%?}5?%???EXg#V??k??[*PTj_??? ?0???w? ??? ?R?y!?2??8oW33?.?T?Y??G?tt??????;y??g?4M?Z??????1t~C?!????S??????}?z?x???A????O??+?v? 4??????(}??^?XNT?n??K|?4m )'3_??!???6?q?G???Q?,??m???t??_????????N^B?? ?2??????$????]?2?b?~?&H??C?^??3r?g?*i?UV?5Hd??%?0??B??2?~;??\??? R???????I?1s1?N??????=?e??"?j?Oc???7?1r??-?(?????9P?? ?D??h? ???q ?:A?My?w5H??Y`??V?????TM?k????@?G0dS??^I?|???7?T?c<K???????gCh?.kS?qsREu~D?4?b??(??>t?*??xP?X?????#Q?? ?v???3????????Lw'???-??????6?X?p?A1?B?[=|????K???S?u????5???a_'???;??????W??2????l?????#y??"HBx??sZ??????c???.L$ ? ????"L???~iW?_??s? M,?????(P5%??H????? ??? \[#???????K??;??LZ???]&??n5?????n???'???F?S???|w5?L??X^`??+?S?%|1????????d???{??????O?e-Db????Y?F ?JH???$\?$??v???l??d?E F??C0T0??mw??;u?p_Z?6??? _?n?&?e??@_???u??a?+?]????H?? ??oq???n??6W?}?'7???????J3??? ?k`h\??Y????W??M??Z?s??b????'?m?L?R????]???d????,?'?? ?k?. ?????^?Z??:/??`m ??=,???_&??IYb???i??j"??e???CgUz???j?.??"??????-q,2?[-/?+6A???-Jy????\???Mc??&?Q????L??~?gR?P?z`????)??@???2????C!?eG????X???????F??>/V?????.???@`????h????1?P??????+(vss??K?M???Xk7???Y??????q?*???")M??F?i??"6?c???/w?g?c???G? ?J??]+?7?5x1-C?????? r??!??,??|E??L??????_? J? ??()?}N?}?%??? ^?%?Lz(\.????K?m?y`?{?*?im????????Hl??|:?|?1=y???>j[]?B?????!%QE6I?????????EH?l=Z???}_9?!J?x?o w??Y? ?qo??y??e #ni?I?$L???J??"?B?(??????q;,??F???????F???G-c??_O ???'??Y?6r??i.?B?}?M?^LbXfAx?Y?6r?Kl|?,???9?.$??i??&,08?p?b?S@[2?????yfM^???t/r??#??????_ ??-??/?-?[????????@??yMV2cjR???b v???(Ui*??Q??v:?{K???2?t?????????f??(Q??F?YN??y#??a???.?-W???$?.??????t/??#??h?z,? ?d?D??????i???>`?C]?bSJ???t+s?7D?7R? x??n???x?q??? ???7??O?X?\??????Ir?'?y?F???m?????i?n^?+???e oM?Q???*??c???6??????M4M? +w?n_(y a?mn? ??38?9M?Q>??????>#0G$l%t?_I?p?UDf?9?p?v?Xr_H??2v???????M??W?????x?b?>H??!?????`JcHv?!J??2?Z0?]?A??-?4Ur?????K?5j?F]?D?Mh@H?P??F???9??js??~????k?]??01x?? 0????2?6??3?\??????3C?Y?? Q?A?I?w?K?[?L???a#?~?l19??/Y??????_N ?????Jxx???= V????V???1?FV???o? TJ>}??????r?n8???z9??q3??m????????S??(@??C????Y?s?{??3?7x(?M???-3?D?.?????FK????????^???(i?Sa?DB>{ v[??~?????U???\o _zm?d?I????????B??;C?e?$??gs??'#=?8!?KR)?????4?C?*,M???Jn??u[?^??? A$N s!?yr????JY/{?E_\[??Q?C??b?xo&?WP[??/?d???b?]??N?m?R0?#5Y#? ?:?Gk+a$??iL?ul?#!2+MU??{?&c??_W?O???64>?$*%EJ%WRJ?z????????.?'?*1???g??u?????m???V??N?x?,WV?V?Z ?b?b? +GsoTB20L?^?8?A/?`??F???N6??GRum?????y????t????Bs+>N??????Z???G??????.#L??x????@6????????????5??????.????(F??t??iHD??r??F?????)?N^?p6??#???9???dq???? ??SWtD?F)$?.??? z?qT???5P?^e?????WqmW?"??????s??????D ?.?????O????vba??4???I?aR??H?:??t??^?Y??n?T????]3???2ka???? D1,??tG?~?F2????2\??z????WU?YZ?????vG???"????c??$??????S?? +?(?????>?Y??W???{???BB.F?`?cn?.?? qh?N?a??-(t]5???4??>?0h???&sO?????3q8?a[???,??:?#???[?????a??OF +k5???&>??? ??????%??cA?y?/]??;??]?We?>'??`m?????V????|`?o???? K7(???????.4?endstream endobj 92 0 obj << /Type /Font @@ -1671,14 +1667,14 @@ /FirstChar 40 /LastChar 123 /Widths 291 0 R -/BaseFont /NRMOAC+CMBX10 +/BaseFont /UGLSSP+CMBX10 /FontDescriptor 90 0 R >> endobj 90 0 obj << /Ascent 694 /CapHeight 686 /Descent -194 -/FontName /NRMOAC+CMBX10 +/FontName /UGLSSP+CMBX10 /ItalicAngle 0 /StemV 114 /XHeight 444 @@ -1702,19 +1698,18 @@ /Filter /FlateDecode >> stream -x???e\T{??I?A?8(?0? !?)?? ?#0?P????? %?C????H?t?????;z?^??/w_?g?ys?O???????F???_?n??fn??p8 46??I=L?x??U???%???????,k?\G8??!?C??g???8/??r?x???)???Zo?n?????C??n??I????&ix.9?8 \????????????d??l\???R??B2???????????b?JI!?????????P??)w?????@??!?U?;?ZW??L????$??3@??7??S?X?J?/2{????? -<??B?\?Q?@v????}_?#??b??dR????? f????\Z?R0??j???????!W;?:I???~??]??P???7??=2?S??jU???????X?^Rn????$VuEVG?)??zc???? )?"o???{h????"??a??*??^I????!???*???????9Hez r??????!?.J?f at O??M?:????????????c???r&??U?????M???U?#?? .#????_???XR??*?BY??F?|3}?#DF?????5C?7?????????2P?[??????? M?????>S??|#$?VK?-?L[sW????????a(f????>l?????.?@????????>?ZO]??0???J8????#?SQ????\????0J??f???m??!O?u ?P???Uhv???a?F??????uP?????,u????yLU?F?t??????0/.`~??#?z ??VV ?{?'?H?`$?e >?|L?w?P|$?? _l???a?&+f?dGH?U?%?????????????????aj?c?]????F????b?W???Y'5#???rK??+??4??[;??S?fJ???G`? K??AM?A??????w`?~??LK?_?*m?v??'\?b'?_??q33@???r??S?g?7??k?sw|?x]???? ?V?S??????`?}????;EX??M??e?4H??y???_??8/?????Eg-??R?/?i2?h????)?? -~???`??????2???????.?y??3?y???v??^Sy?N????????????a)?)?v?"a???????k?????qHR????6)]???}?=?j?>]??S?{?W?"S????E?<: M?{UJ??????????2|??]?????1????g?d??Y?7W*n?? ?? E ?l$?e*???ksK?q??l.?^\?r??Z???????K????eks?????1?2?f?'j?d?????w?????Zs???3dw???%???s???? -?????v*?iD?[???%??_\?r?c????1YAW??k?s??R???8]C_g$s?r?_V??b?1?/????????.sTXX??9?qs6??%M??[??-??|???RkAC ?:?e?????D-I3?Aq??3JX?n?l9?4A @^CWP ??????P ?T?b????? ?j  ??%?!B" v@???F??a??? `??a+?- ??iHi??? +[?:??r??]p?0?$??h?B:x?p?& +?.8??????+?:8hB???KC??Y?rtr??????F?????7 ?5????YU ??E?:???B%??Z???6P??8i?o???????)o?i???y??iCH??????????o?M????q????'??K CY#???? @?h?'?8????=p????( ?????A?A??S?6???;??????(???p??wDL?W?M???o?U?W??????R?7??F?n5???I???}8???m?@Q???8??8)??(?s??q??????????7*??????pR??????????WX??ED1q??RsE??H??? ?P? ?~p?F?$?&T ?????X??-???T??? l???.?"?"??h?????l????|(???4?U\`??:S??\?-8j??*?Y??=????2??op?????h?%???b+??maD?7??? gX* jj??n? ?? ??fZ:??Vi3?s???(=?(?8?$??D?|`??q????N`???lKXT?Q???A?uq?:S&??j? +h???|~??#.w^?a5?7?z?I? u??5?^E?P??s"????rK??????? ??TWO9?V? ??????????mG???PTt??5?1?#??k????u?x?}?v??DLwW] K?L??? ?f??oF?X?F??f?C??m'|?I?:???????T[??jL?*??????z?????.???Yh????)?+???m????F9?c?t?x?+ _?B?.j??-n????Hnxb? ??/?wS?|?:???,?kt/:J??o??W????+8Y?M??????AH4G????8o7?7???Z?IP??e$>??????/?R,??#WR3??:? ????U&n??????W.m??T??U?M??P??lH??DB?$1?l? ?????? =P???LE?Dj????6??!4??5?r??Q??*??p????pzG????j??????:????\??~%Z???*??M ???????jC@~RU??=??g?9??????5????J?0???(???????????AO??$??cHQXq?????a???e:????x???????(W???d9!? ???M??=?S?Q??O???# -?^?[XI???????{????q]ZdZ4? ???Xx?????[??'T~l?A?????m??(?Z??????j?Q?!}~??)W?.X?Q?"??/???KS? ??=????k??d?_X????? O~???2?c??J?????7^????G???J??r ???c???2???T"0M?8????????OV??????~???f???<^N ?4F????{X??t?>?G2D {?[????!%????Y?@??kj#???.??1?9??? V-Qq??$?4?*K?$????{?ui<;????????P?k??g?" ??9?R???????????????XUH?G?)b@@9T?^)?"???????? ?;?4 ?M??Q?.?1???g1??O??6??^??????d%(??w??????U?61???0?mO??J?}KK???y?,C?"?????p?2?xl`? -H* ??t????^/?tocp$|??????3v) %??1?????C?-?d???????l??????9??^y5]?q4??a????FG? [????8???Duc????g?i_?l?Y??g??R????AajJTk5[??#??&?N,`@?8???% ??w???]R?E??/}??????,?>?{?8Rf?W?\i?E???[??<=l???v??w??????.??????$???O?6?nQ?d6?????? ??68?LJ'?J-??q#.G??????-g}3?????????????'?*??R??16>????i?Hg??>??$???s?O'???????z? ??????]?P???I????4??m??? ?n???o???????1??? ??eI?dF? ???S? ??9P,t??m??Ei?u??gi??!5{Az_???=?U?9???????????5~?d?)??_?????E$?x? ?????n?????????k??}????h??8?*??2T?3??CF??|t?)???????+{???aL ?AK??G? ?=k[:?Z??&?????[IL H~??6??f?C?p???~}(?;????FF??? T?B?nL?Nn?=??Z1?^E??1??]_5?`/??98??J?? ??Y&?d?l?L-?]?Z???HF? ??????????E?????&v?m??=???V?????goe??_???$??????$r??"g???F?u?????????R@?k???2`-??s? ??b;PG? ?f??????dd>??1s????a?????????????w????I??N'nq(W?^???+??i\?,????oxM[YLG?i?X0~G>??DHq???e~!R??EQ??=?6m??$c?D???}??},9?t??\Oa???V?W???_-??v??&???Lgt??t#f"????????O??P4?E?????5?endstream + ?`?O??A??q7??k??0 om?$w??'?C??+? ?????????_???U?z??W?kt?9???|t?)????>w????M?w?-????(?e??i\?? C? y?;c?z?q????m7?????U??U??3?7SM=?9????6?J??f]?????0;??@??????3X?D?q??X?R?\?,???W???????????>?j_?R?C??????K?????(K??C?V?g?r??3???bUM  ??D ??P}{???4??_?7?#.???;????( z*$??????lR?e??'?G??????N?ym{~?P"?XZ???1Y4 WQ???_O?"???e????S??w'?f +???????[?q?c?Y???{?npx$?$??R at RIP??;???KlH??A????,?+-??????W??G????X?atT??%? m?#?NpIT7?@??~????????5?>??????I??P???? +SS?Z??b??L61vb?9?/Y?????t=????x-r~}????? 4/f?????????0#?J?J?/Z'?&?????a????{???????u) ??$?T?H????t?2'?I????$_?6????fR:?P?hQ??q9??lFVl9????????????w> W?_H?,?H?&3?h?n???f?,??b??l.??,Js?K_=K?x1?? :????j?lV)?|?z?x?smZ2?3??-?eL????g??."q??o????.v?@p????????\???H?? ??G????W!\?????2?E???NiG?'???6_????^ cJ? Zz^=?e??Y????t4???&???JbZ@??|???5?? d???C?I???d42?$n]?z?????V??';v??b?7????z??? ?l???<4/????=??Wb?C?-??????a?9sX_??-O?7o4??= ?u? ?0????4?)(?q,?`1?6r>s ?C4?p#?????-/]????????]??? +????h???#S$#??U?8m??y????8G?\?"? .r??o???1!:?%^?$?k?TxQ?????w}?,??`???w+%???s f???}?2??w?k??*#?&,?sL;3???:U?N/?$??E(??{??JOZ?g|L`???M??????n?[??YB??Uw????_^?????K5???W??k?0???f?4??:"e?5?!nM^?%#????+???? ?~te???=??Nz+?Y?n?O?@???????a??g;????V?W??|?v??+W?'*???]H?J ?h?&AFo|8????\?zA???|f?qU??No???5me1??]?b???r!?U?????H?KE?????A????fL??y????t?)'r=??#?Z^?K??????W?pj?2??I???????^?^????!s?C??#m?Q5?endstream endobj 89 0 obj << /Type /Font @@ -1723,14 +1718,14 @@ /FirstChar 46 /LastChar 121 /Widths 293 0 R -/BaseFont /ZCYARN+CMR17 +/BaseFont /SNCUNY+CMR17 /FontDescriptor 87 0 R >> endobj 87 0 obj << /Ascent 694 /CapHeight 683 /Descent -195 -/FontName /ZCYARN+CMR17 +/FontName /SNCUNY+CMR17 /ItalicAngle 0 /StemV 53 /XHeight 430 @@ -1923,7 +1918,7 @@ >> endobj 300 0 obj << /Author(Bill Spotz)/Title(numpy.i: a SWIG Interface File for NumPy)/Subject()/Creator(LaTeX with hyperref package)/Producer(pdfeTeX-1.21a)/Keywords() -/CreationDate (D:20070410092024-06'00') +/CreationDate (D:20070413110240-06'00') /PTEX.Fullbanner (This is pdfeTeX, Version 3.141592-1.21a-2.2 (Web2C 7.5.4) kpathsea version 3.5.4) >> endobj xref @@ -1935,79 +1930,79 @@ 0000000000 00000 f 0000000009 00000 n 0000007627 00000 n -0000129979 00000 n +0000129952 00000 n 0000000055 00000 n 0000000081 00000 n 0000007810 00000 n -0000129893 00000 n +0000129866 00000 n 0000000131 00000 n 0000000162 00000 n 0000024122 00000 n -0000129805 00000 n +0000129778 00000 n 0000000214 00000 n 0000000246 00000 n 0000024309 00000 n -0000129680 00000 n +0000129653 00000 n 0000000303 00000 n 0000000340 00000 n 0000028031 00000 n -0000129606 00000 n +0000129579 00000 n 0000000391 00000 n 0000000422 00000 n 0000028219 00000 n -0000129519 00000 n +0000129492 00000 n 0000000476 00000 n 0000000510 00000 n 0000028407 00000 n -0000129432 00000 n +0000129405 00000 n 0000000562 00000 n 0000000594 00000 n 0000033800 00000 n -0000129345 00000 n +0000129318 00000 n 0000000646 00000 n 0000000678 00000 n 0000033988 00000 n -0000129258 00000 n +0000129231 00000 n 0000000740 00000 n 0000000783 00000 n 0000034176 00000 n -0000129184 00000 n +0000129157 00000 n 0000000848 00000 n 0000000894 00000 n -0000040030 00000 n -0000129059 00000 n +0000040028 00000 n +0000129032 00000 n 0000000949 00000 n 0000000984 00000 n -0000040218 00000 n -0000128985 00000 n +0000040216 00000 n +0000128958 00000 n 0000001029 00000 n 0000001054 00000 n -0000040406 00000 n -0000128911 00000 n +0000040404 00000 n +0000128884 00000 n 0000001101 00000 n 0000001128 00000 n -0000045680 00000 n -0000128786 00000 n +0000045678 00000 n +0000128759 00000 n 0000001195 00000 n 0000001242 00000 n -0000045868 00000 n -0000128712 00000 n +0000045866 00000 n +0000128685 00000 n 0000001297 00000 n 0000001332 00000 n -0000050042 00000 n -0000128625 00000 n +0000050040 00000 n +0000128598 00000 n 0000001387 00000 n 0000001422 00000 n -0000057495 00000 n -0000128551 00000 n +0000057496 00000 n +0000128524 00000 n 0000001473 00000 n 0000001504 00000 n -0000057683 00000 n -0000128463 00000 n +0000057684 00000 n +0000128436 00000 n 0000001550 00000 n 0000001576 00000 n -0000057871 00000 n -0000128388 00000 n +0000057872 00000 n +0000128361 00000 n 0000001631 00000 n 0000001666 00000 n 0000003729 00000 n @@ -2015,15 +2010,15 @@ 0000001716 00000 n 0000007444 00000 n 0000007505 00000 n -0000127204 00000 n -0000121898 00000 n -0000127045 00000 n -0000121051 00000 n -0000112641 00000 n -0000120891 00000 n -0000111389 00000 n -0000096639 00000 n -0000111230 00000 n +0000127177 00000 n +0000121871 00000 n +0000127018 00000 n +0000121024 00000 n +0000112614 00000 n +0000120864 00000 n +0000111362 00000 n +0000096612 00000 n +0000111203 00000 n 0000007566 00000 n 0000007687 00000 n 0000004026 00000 n @@ -2045,17 +2040,17 @@ 0000006618 00000 n 0000006771 00000 n 0000007748 00000 n -0000095772 00000 n -0000087822 00000 n -0000095610 00000 n +0000095745 00000 n +0000087795 00000 n +0000095583 00000 n 0000007871 00000 n 0000006933 00000 n 0000007103 00000 n 0000007273 00000 n -0000086333 00000 n -0000072001 00000 n -0000086171 00000 n -0000128027 00000 n +0000086306 00000 n +0000071974 00000 n +0000086144 00000 n +0000128000 00000 n 0000024060 00000 n 0000024246 00000 n 0000027968 00000 n @@ -2064,15 +2059,15 @@ 0000033737 00000 n 0000033925 00000 n 0000034113 00000 n -0000039967 00000 n -0000040155 00000 n -0000040343 00000 n -0000045617 00000 n -0000045805 00000 n -0000049979 00000 n -0000057432 00000 n -0000057620 00000 n -0000057808 00000 n +0000039965 00000 n +0000040153 00000 n +0000040341 00000 n +0000045615 00000 n +0000045803 00000 n +0000049977 00000 n +0000057433 00000 n +0000057621 00000 n +0000057809 00000 n 0000015161 00000 n 0000012268 00000 n 0000008052 00000 n @@ -2080,9 +2075,9 @@ 0000012522 00000 n 0000012693 00000 n 0000012863 00000 n -0000071517 00000 n -0000067490 00000 n -0000071355 00000 n +0000071490 00000 n +0000067463 00000 n +0000071328 00000 n 0000013036 00000 n 0000013210 00000 n 0000013383 00000 n @@ -2117,9 +2112,9 @@ 0000023653 00000 n 0000024371 00000 n 0000023824 00000 n -0000067170 00000 n -0000065780 00000 n -0000067009 00000 n +0000067143 00000 n +0000065753 00000 n +0000066982 00000 n 0000028469 00000 n 0000027050 00000 n 0000024543 00000 n @@ -2144,98 +2139,98 @@ 0000033126 00000 n 0000033291 00000 n 0000033450 00000 n -0000040468 00000 n -0000038080 00000 n +0000040466 00000 n +0000038078 00000 n 0000034347 00000 n -0000039841 00000 n -0000039904 00000 n -0000038286 00000 n -0000038459 00000 n -0000038633 00000 n -0000038806 00000 n -0000038978 00000 n -0000039150 00000 n -0000039323 00000 n -0000039494 00000 n -0000039667 00000 n -0000040092 00000 n -0000040280 00000 n -0000128143 00000 n -0000045930 00000 n -0000044631 00000 n -0000040576 00000 n -0000045491 00000 n -0000045554 00000 n -0000044797 00000 n -0000044971 00000 n -0000045143 00000 n -0000045742 00000 n -0000045317 00000 n -0000050167 00000 n -0000049182 00000 n -0000046038 00000 n -0000049853 00000 n -0000049916 00000 n -0000049340 00000 n -0000050104 00000 n -0000049511 00000 n -0000049680 00000 n -0000057996 00000 n -0000054284 00000 n -0000050276 00000 n -0000057369 00000 n -0000054546 00000 n -0000054717 00000 n -0000054891 00000 n -0000055076 00000 n -0000055261 00000 n -0000057557 00000 n -0000055451 00000 n -0000057745 00000 n -0000055622 00000 n -0000055795 00000 n -0000055966 00000 n -0000057933 00000 n -0000056139 00000 n -0000056310 00000 n -0000056484 00000 n -0000056655 00000 n -0000056828 00000 n -0000064901 00000 n -0000058130 00000 n -0000064741 00000 n -0000056995 00000 n -0000057178 00000 n -0000065428 00000 n -0000065190 00000 n -0000067403 00000 n -0000067379 00000 n -0000071821 00000 n -0000071739 00000 n -0000087223 00000 n -0000086861 00000 n -0000096318 00000 n -0000096063 00000 n -0000112201 00000 n -0000111816 00000 n -0000121612 00000 n -0000121352 00000 n -0000127669 00000 n -0000127451 00000 n -0000128244 00000 n -0000128314 00000 n -0000130051 00000 n -0000131711 00000 n -0000131750 00000 n -0000131788 00000 n -0000131917 00000 n +0000039839 00000 n +0000039902 00000 n +0000038284 00000 n +0000038457 00000 n +0000038631 00000 n +0000038804 00000 n +0000038976 00000 n +0000039148 00000 n +0000039321 00000 n +0000039492 00000 n +0000039665 00000 n +0000040090 00000 n +0000040278 00000 n +0000128116 00000 n +0000045928 00000 n +0000044629 00000 n +0000040574 00000 n +0000045489 00000 n +0000045552 00000 n +0000044795 00000 n +0000044969 00000 n +0000045141 00000 n +0000045740 00000 n +0000045315 00000 n +0000050165 00000 n +0000049180 00000 n +0000046036 00000 n +0000049851 00000 n +0000049914 00000 n +0000049338 00000 n +0000050102 00000 n +0000049509 00000 n +0000049678 00000 n +0000057997 00000 n +0000054285 00000 n +0000050274 00000 n +0000057370 00000 n +0000054547 00000 n +0000054718 00000 n +0000054892 00000 n +0000055077 00000 n +0000055262 00000 n +0000057558 00000 n +0000055452 00000 n +0000057746 00000 n +0000055623 00000 n +0000055796 00000 n +0000055967 00000 n +0000057934 00000 n +0000056140 00000 n +0000056311 00000 n +0000056485 00000 n +0000056656 00000 n +0000056829 00000 n +0000064886 00000 n +0000058131 00000 n +0000064726 00000 n +0000056996 00000 n +0000057179 00000 n +0000065414 00000 n +0000065176 00000 n +0000067376 00000 n +0000067352 00000 n +0000071794 00000 n +0000071712 00000 n +0000087196 00000 n +0000086834 00000 n +0000096291 00000 n +0000096036 00000 n +0000112174 00000 n +0000111789 00000 n +0000121585 00000 n +0000121325 00000 n +0000127642 00000 n +0000127424 00000 n +0000128217 00000 n +0000128287 00000 n +0000130024 00000 n +0000131684 00000 n +0000131723 00000 n +0000131761 00000 n +0000131890 00000 n trailer << /Size 301 /Root 299 0 R /Info 300 0 R -/ID [<8AEBC1FCCADD8D71CBEF5E0E60CFF503> <8AEBC1FCCADD8D71CBEF5E0E60CFF503>] +/ID [<558B9FB106AF5483352D8AA95CE22DAE> <558B9FB106AF5483352D8AA95CE22DAE>] >> startxref -132230 +132203 %%EOF Modified: trunk/numpy/doc/swig/numpy_swig.txt =================================================================== --- trunk/numpy/doc/swig/numpy_swig.txt 2007-04-13 06:55:55 UTC (rev 3711) +++ trunk/numpy/doc/swig/numpy_swig.txt 2007-04-13 17:04:02 UTC (rev 3712) @@ -374,7 +374,7 @@ We could have implemented:: - %numpy_typemaps(Py_complex , NPY_DOUBLE , int) + %numpy_typemaps(Py_complex , NPY_CDOUBLE, int) %numpy_typemaps(npy_cfloat , NPY_CFLOAT , int) %numpy_typemaps(npy_cdouble, NPY_CDOUBLE, int) From numpy-svn at scipy.org Fri Apr 13 16:38:51 2007 From: numpy-svn at scipy.org (numpy-svn at scipy.org) Date: Fri, 13 Apr 2007 15:38:51 -0500 (CDT) Subject: [Numpy-svn] r3713 - trunk/numpy/doc/swig Message-ID: <20070413203851.2692939C037@new.scipy.org> Author: wfspotz at sandia.gov Date: 2007-04-13 15:38:36 -0500 (Fri, 13 Apr 2007) New Revision: 3713 Modified: trunk/numpy/doc/swig/numpy_swig.html trunk/numpy/doc/swig/numpy_swig.pdf trunk/numpy/doc/swig/numpy_swig.txt Log: Reformatted numpy.i routines descriptions Modified: trunk/numpy/doc/swig/numpy_swig.html =================================================================== --- trunk/numpy/doc/swig/numpy_swig.html 2007-04-13 17:04:02 UTC (rev 3712) +++ trunk/numpy/doc/swig/numpy_swig.html 2007-04-13 20:38:36 UTC (rev 3713) @@ -745,57 +745,161 @@

    Routines

    -
    -
    char* pytype_string(PyObject* py_obj)
    -
    Given a PyObject*, return a string describing its type.
    -
    char* typecode_string(int typecode)
    -
    Given a NumPy integer typecode, return a string describing the type.
    -
    int type_match(int actual_type, int desired_type)
    -
    Make sure input has correct NumPy type. Allow character and -byte to match. Also allow int and long to match. This is -deprecated . You should use PyArray_EquivTypenums() instead.
    -
    PyArrayObject* obj_to_array_no_conversion(PyObject* input, int typecode)
    -
    Given a PyObject*, cast it to a PyArrayObject* if legal. -If not, set the python error string appropriately and return -NULL.
    -
    PyArrayObject* obj_to_array_allow_conversion(PyObject* input, int typecode, int* is_new_object)
    -
    Convert the given PyObject* to a NumPy array with the given -typecode. On Success, return a valid PyArrayObject* with the -correct type. On failure, the python error string will be set and -the routine returns NULL.
    -
    PyArrayObject* make_contiguous(PyArrayObject* ary, int* is_new_object, int min_dims, int max_dims)
    -
    Given a PyArrayObject*, check to see if it is contiguous. If -so, return the input pointer and flag it as not a new object. If -it is not contiguous, create a new PyArrayObject* using the -original data, flag it as a new object and return the pointer.
    -
    PyArrayObject* obj_to_array_contiguous_allow_conversion(PyObject* input, int typecode, int* is_new_object)
    -
    Convert a given PyObject* to a contiguous PyArrayObject* -of the specified type. If the input object is not a contiguous +

    pytype_string()

    +
    +

    Return type: char*

    +

    Arguments:

    +
      +
    • PyObject* py_obj, a general python object.
    • +
    +

    Return a string describing the type of py_obj.

    +
    +

    typecode_string()

    +
    +

    Return type: char*

    +

    Arguments:

    +
      +
    • int typecode, a NumPy integer typecode.
    • +
    +

    Return a string describing the type corresponding to the NumPy +typecode.

    +
    +

    type_match()

    +
    +

    Return type: int

    +

    Arguments:

    +
      +
    • int actual_type, the NumPy typecode of a NumPy array.
    • +
    • int desired_type, the desired NumPy typecode.
    • +
    +

    Make sure that actual_type is compatible with +desired_type. For example, this allows character and +byte types, or int and long types, to match. This is now +equivalent to PyArray_EquivTypenums().

    +
    +

    obj_to_array_no_conversion()

    +
    +

    Return type: PyArrayObject*

    +

    Arguments:

    +
      +
    • PyObject* input, a general python object.
    • +
    • int typecode, the desired NumPy typecode.
    • +
    +

    Cast input to a PyArrayObject* if legal, and ensure that +it is of type typecode. If input cannot be cast, or the +typecode is wrong, set a python error and return NULL.

    +
    +

    obj_to_array_allow_conversion()

    +
    +

    Return type: PyArrayObject*

    +

    Arguments:

    +
      +
    • PyObject* input, a general python object.
    • +
    • int typecode, the desired NumPy typecode of the resulting +array.
    • +
    • int* is_new_object, returns a value of 0 if no conversion +performed, else 1.
    • +
    +

    Convert input to a NumPy array with the given typecode. +On success, return a valid PyArrayObject* with the correct +type. On failure, the python error string will be set and the +routine returns NULL.

    +
    +

    make_contiguous()

    +
    +

    Return type: PyArrayObject*

    +

    Arguments:

    +
      +
    • PyArrayObject* ary, a NumPy array.
    • +
    • int* is_new_object, returns a value of 0 if no conversion +performed, else 1.
    • +
    • int min_dims, minimum allowable dimensions.
    • +
    • int max_dims, maximum allowable dimensions.
    • +
    +

    Check to see if ary is contiguous. If so, return the input +pointer and flag it as not a new object. If it is not contiguous, +create a new PyArrayObject* using the original data, flag it +as a new object and return the pointer.

    +
    +

    obj_to_array_contiguous_allow_conversion()

    +
    +

    Return type: PyArrayObject*

    +

    Arguments:

    +
      +
    • PyObject* input, a general python object.
    • +
    • int typecode, the desired NumPy typecode of the resulting +array.
    • +
    • int* is_new_object, returns a value of 0 if no conversion +performed, else 1.
    • +
    +

    Convert input to a contiguous PyArrayObject* of the +specified type. If the input object is not a contiguous PyArrayObject*, a new one will be created and the new object -flag will be set.

    -
    int require_contiguous(PyArrayObject* ary)
    -
    Test whether a PyArrayObject* is contiguous. If array is -contiguous, return 1. Otherwise, set the python error string and -return 0.
    -
    int require_native(PyArray_Object* ary)
    -
    Require that a numpy array is not byte-swapped. If the array is -not byte-swapped, return 1. Otherwise, set the python error string -and return 0.
    -
    int require_dimensions(PyArrayObject* ary, int exact_dimensions)
    -
    Require the given PyArrayObject* to have a specified number of -dimensions. If the array has the specified number of dimensions, -return 1. Otherwise, set the python error string and return 0.
    -
    int require_dimensions_n(PyArrayObject* ary, int* exact_dimensions, int n)
    -
    Require the given PyArrayObject* to have one of a list of -specified number of dimensions. If the array has one of the -specified number of dimensions, return 1. Otherwise, set the -python error string and return 0.
    -
    int require_size(PyArrayObject* ary, int* size, int n)
    -
    Require the given PyArrayObject* to have a specified shape. -If the array has the specified shape, return 1. Otherwise, set -the python error string and return 0.
    -
    +flag will be set.

    +

    require_contiguous()

    +
    +

    Return type: int

    +

    Arguments:

    +
      +
    • PyArrayObject* ary, a NumPy array.
    • +
    +

    Test whether ary is contiguous. If so, return 1. Otherwise, +set a python error and return 0.

    +
    +

    require_native()

    +
    +

    Return type: int

    +

    Arguments:

    +
      +
    • PyArray_Object* ary, a NumPy array.
    • +
    +

    Require that ary is not byte-swapped. If the array is not +byte-swapped, return 1. Otherwise, set a python error and return +0.

    +
    +

    require_dimensions()

    +
    +

    Return type: int

    +

    Arguments:

    +
      +
    • PyArrayObject* ary, a NumPy array.
    • +
    • int exact_dimensions, the desired number of dimensions.
    • +
    +

    Require ary to have a specified number of dimensions. If the +array has the specified number of dimensions, return 1. +Otherwise, set a python error and return 0.

    +
    +

    require_dimensions_n()

    +
    +

    Return type: int

    +

    Arguments:

    +
      +
    • PyArrayObject* ary, a NumPy array.
    • +
    • int* exact_dimensions, an array of integers representing +acceptable numbers of dimensions.
    • +
    • int n, the length of exact_dimensions.
    • +
    +

    Require ary to have one of a list of specified number of +dimensions. If the array has one of the specified number of +dimensions, return 1. Otherwise, set the python error string and +return 0.

    +
    +

    require_size()

    +
    +

    Return type: int

    +

    Arguments:

    +
      +
    • PyArrayObject* ary, a NumPy array.
    • +
    • npy_int* size, an array representing the desired lengths of +each dimension.
    • +
    • int n, the length of size.
    • +
    +

    Require ary to have a specified shape. If the array has the +specified shape, return 1. Otherwise, set the python error string +and return 0.

    +
    +
    @@ -948,7 +1052,7 @@
    Modified: trunk/numpy/doc/swig/numpy_swig.pdf =================================================================== --- trunk/numpy/doc/swig/numpy_swig.pdf 2007-04-13 17:04:02 UTC (rev 3712) +++ trunk/numpy/doc/swig/numpy_swig.pdf 2007-04-13 20:38:36 UTC (rev 3713) @@ -904,32 +904,18 @@ /ProcSet [ /PDF /Text ] >> endobj 235 0 obj << -/Length 3975 +/Length 2714 /Filter /FlateDecode >> stream -x??\Yo#?~?? ??U????6#Fb;??8F???Z??(?\??_??????5?5??????????!;???N?$?:uj?#Z+v??=??Wp??i??D*m????s?)?Z?????g'?? N#N)~z????f?hgN/.X}?{w?????~???????6KA??f?i???J??:|N!?x+O?S???Ft??4;6??6g???????????\X???|???.??? ???20 B(?*!~9??Gzz 8?:?D8+O? %?9~z{"??*}?9???oGQ2?Y??D -?J?=BF9????|?I??>???5_???j9??a??fd^"Tf8#7?@?Z??9H?:?N?`?N???L?C?A)1???????g???wg?zm?8`???i??????o??? =?V??g ???W8???N????jhA5???jTC[????? ?))L+?X??E:??3?P?J3???E?P ???mP?!?{ HT=?r -r+ gT??{?,?@ D??\??z??4??2?4??-B???6(Y?C ?%???T3?+??Z????J??*???C??V[p?? C???F??u????? IU?1??Q{??l??????N?rA4????w??,??VX??)??Hi#?i?Lrb?a???u???p ?7?Vr1UK ??MK*N ?r?m_? -?+A?d?)?g?e?T8??rK???M?#@??`?? E#)-?????CP??4???z%???????!h??}???=??}T?^?nlH6?????????????4QO -???1? -B!m??-?D?-3??v? ??9??i[ct??^}z???;??#l ?p?c?9????Wk???p?:???|?*????u??-?}???M&?l? 6?Wo????p?F?????p?^??{?r*%???V1?U at _d???8??)?Hu?u??x --?R?9??1?j????[??(?????&?sh%?^?????b?VR?.?11???A?????:??????Q!?wQ?????????B'K??????z?+?fa??v?+4 -!?3?YZ?[??]r?.?]m?{?/%????&??? eai????3??$L???? `n????????0?iY??^??jzn?TPMx?D?A?Ra!?4)??+?RMy????4???J?O?JK?=z?i??+Uhonvh?????????????i????/???e?+??% ???Xf8?eJ?>Q?LCy??*XI?7? kf8R?j\?f\w?h ?1"???f2S?(????B????_???.????nu? m ??Ff$?Iu?-??C???m??9?1??????}?c;?-??8?T????$??? ?s?????Z?}???6?e?????U\ ?*R ?f???_?X???W???PBV?8??t? -\?8??3Z???1?!????}%???}??T??4?]1R?B?7?:f r? -??T?m`0?????0/t??1W???&&?S?7!~{???!?l"?&???R??yq???iiBXx??]4TJ?&??K??x0S=7?]??mkq?R?U(_kE?3aLF%D/?H???p}?k??2,x??????sz?D?/? ?H?Xd?3??(?D??N_ -0 _ db8R?[?uy?v?C????]`6?X?? ??? -+I??? ?:?o?q???_????`??? 3????V?? -?4?IyN??L?#??$L??jx_X???K?^?G -Bq??X.a?1???g?L1???[??????1A?N??`??[?x??]r6{ 78??|f???n?????J-??C@\???[N~?Z??YS??=?40??~D?*m?9??q?K1??/m???Y???~???6???)9?????x??4 ???u????k?2??s?????? -S??k?8E?;8_?????iN 0f8?6????????W?&??jB????2??AW.??1ru???\sQ\???&b5?8????X????2UW???$?< ?V???j]!zQ?fb8???Z?;0??H^^ 0????D??SW8C?G?????????/???m?????7???Z[3???*? ????!??d???B??V?%????rG6?b2C?M/,%???"??bC??k?????????j?R?)o?????? 7p(???w at C@???q???Z? ? ?OT/S?????~?Q?K?~~?Q???? !??f92???H?q]??;??_5??&?E??Q??v????????????????1??u8x%?;?Qq????I?r??B???u??q?N??o???],???2?1???????$??3???RE2K??????? -???.k???)???]?????TW?n??????v?SI??GN??a?4?%????T/2?e[???i???T?C~{?.???? -_??????h J??b??t??X?????C'?K6=?2U??*??P?T i???[ef??,U??uc?K-??2#?Y? -L-??_?+'x?'?????????q????e(/c????N?3?=??%?j?3?%??p??W0?]O?Vf???q????q^???AS?1_5"'?3M???^????W?????wt?C??T????A??u??8?g?sA5a????s??B?y??:????Q??g?+i????? _?t ??? F???D[??<3??\X?o??????>???[1?8 ?'U#S?X??@`j] u???7?15???O?JA ???3????"W??]??? ?-sR5??W?m1?????\??>?r>????9??`?aj<%?e{}???N -??x?&?)5.? ???s?ld?????O/XZ:????vUM?^x???,?v?i3??(???S?z?s*?Z?9M?????????? ????9????m???JD??U*n??????t??4u?F?5O)#J IX4??M??s????.?L0??S???y??+?)??h?&Q???$?????N9????N?]*?:????)?????Q??^????x?-lU@??#??????/_??? ??2Sql?Li??d?z???;???+h8?? ???qu#-%? 9??__}?%|%!?????,I??F??o???}??o????_]}q??&b??Z?D? ??^?#???2N-?gp???je bD?? ??????/ 2?/q_???u?&a q?x???W???g???WW1???N0"????CF?x?p????N ;j??T?z???????????{,0?V<-?2$3M?Jd?G?K?2????p??\QJep1Q?m_?A?8??0.|??:????S?4x???I0gT?lV@??e`?'G.?w?i??`1{?g????\o?X??????F??aHc"???TCN?,A?=???O????=&j?ViMUGn??-lF?????s??p???_8?p???[SBd3? +O?8??tde {K? ??????~????:??Z|???(????????sk????U?9????%7rq=?B????~?l????'v6??q?{?V????"???1^??????0?????Zf?u??L?K?^d????[h?4?`??yag???I?ga???k???p?????B??p?1x??????}?P ?g????? ????P??~Udp?ZA? ?0?}L??????3l qP/??w;?j?C?^L????c??HS*?b?H???? z1m#????????n?:?????t? {:*?n?.u\m] @?}???Y?K???v???,???,?q?%KTl??2???????q \???j7F?.l??Pc-? s?'>????)l?????b8??4x???gN9??V$??^L?M?1????B??G?oE??I?Z??8b????????m??6v??;{??:??DD??>?C?n???????????%L?j?41?xTqn?@?h????m????Ce??A?"?????{??(9 at S???9?R??Y???}_??#?$?O)????????bH?if??&?~ ??8?? ??|P??PZ?m37????pF?T??<,?t?g[?? )?\?>F?1???|?????Z?>??????:l????4???^u????^Q?????)RB?=??@?-s???R+QS??WcD9f??3*? +~1T?36??i3?????0D?!#j??[???j?kq??????? ?endstream endobj 234 0 obj << /Type /Page @@ -937,353 +923,475 @@ /Resources 233 0 R /MediaBox [0 0 595.2757 841.8898] /Parent 232 0 R -/Annots [ 238 0 R 239 0 R 240 0 R 242 0 R ] +/Annots [ 238 0 R 239 0 R 240 0 R 241 0 R 242 0 R 243 0 R 244 0 R 245 0 R 246 0 R ] >> endobj 238 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] -/Rect [319.3285 712.0064 354.6457 723.9616] +/Rect [215.8886 605.3217 251.2059 616.4399] /Subtype/Link/A<> >> endobj 239 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] -/Rect [466.3648 684.111 501.682 696.0662] +/Rect [370.565 589.4719 405.8823 600.5901] /Subtype/Link/A<> >> endobj 240 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] -/Rect [270.6005 592.7337 305.9177 603.8519] +/Rect [240.3865 520.0498 275.7037 531.168] /Subtype/Link/A<> >> endobj +241 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[0 1 1] +/Rect [338.6766 520.0498 373.9939 531.168] +/Subtype/Link/A<> +>> endobj 242 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] -/Rect [217.5744 177.0729 252.8916 188.9333] +/Rect [279.4096 506.1473 314.7268 517.2655] /Subtype/Link/A<> >> endobj +243 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[0 1 1] +/Rect [258.5279 383.0625 293.8452 394.1807] +/Subtype/Link/A<> +>> endobj +244 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[0 1 1] +/Rect [258.5279 259.9778 293.8452 271.096] +/Subtype/Link/A<> +>> endobj +245 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[0 1 1] +/Rect [207.6747 230.2254 242.992 241.3437] +/Subtype/Link/A<> +>> endobj +246 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[0 1 1] +/Rect [247.2111 136.893 282.5284 147.8219] +/Subtype/Link/A<> +>> endobj 236 0 obj << /D [234 0 R /XYZ 74.4095 789.6651 null] >> endobj 237 0 obj << /D [234 0 R /XYZ 74.4095 755.3439 null] >> endobj -139 0 obj << -/D [234 0 R /XYZ 74.4095 233.3614 null] +233 0 obj << +/Font << /F51 119 0 R /F44 92 0 R /F8 95 0 R /F56 126 0 R /F14 191 0 R >> +/ProcSet [ /PDF /Text ] >> endobj -58 0 obj << -/D [234 0 R /XYZ 74.4095 233.3614 null] +249 0 obj << +/Length 2611 +/Filter /FlateDecode +>> +stream +x??[Ks#? ??W?H???~?|?Sq*>?G7???$??H?,j-?????????Ln?7???8??h???e +???H"?S c?Z????]?????X??R??????p???b???X?d??qF?n?6???A?????????#Ns?8?^0?ne?????RfV??{????? I??fQ2?MTc?J?r?#V?????>/???j???????9m????s??????QP??ol!? ?4?C?Vk????A9????q?-7??????^n?#?6????7 _?^???5????????l?????}Z?????6^????o??'????V?IB????????8????s????"?d???Y ?9P'??h?q?B?DJ?????h???x??jN?t4r???K?"?) Q???W?0oO?a3wiP??~??iX~?`??in??)]&D?%?l?q ????x$??8??j???2???DX???ed?ak?:? ???i???k?A?!???UL- O??B???????? +??3J 0??~P?????3H?@?????_?E~??????? ?+???/?1???6??N??pN;@b???+??BVD ?i?????t?&?s?j?????r????&?.~???sf?%?#u? gt??T[1????5? ?6?t6? ??T???aS6????Ae?G?(|?p?I?7% 3?Z?1 ^?j?a0 ?[???x/7??'S????a???*??_V?\????|??B?oBK??s?AXsD??9Yj. ?\3S?d?0????m??????=??gM??~52N???y????Wt>tS?{J??2?.?H???t??(??sGA?rG"?wGSn?????;J????%z????.V???*?A??O?J?WW#??|????9???M????m?????m?U??_y?W?D?'????3??t? ?C[??v ]?Ug,?0?????Cl^^?f6?nE?WV6?X?r?:7?%Y#?3?l??? ??qO??=S=?R9Q??A;??R???a\???2??B?9v??84 ~M?b??l??L???RQ?.?&?R;?jK?F??d???-7????j????}??Src?s?j=???dK85r0??R1??'?K[#?s??eD h??f?T3?-xC:??>U???????L???????;(tnS?r]?\Y P!?????Di??[?P???%w!-:???s??AT???+?3_?xl?o?????dt?vu(s?,uRx ?oDc1q??icj??~?????R~:?/96????\?y? ;=sh/a?TIw ??S}Nh?t}f? ??'?Y?o +?H?Z?Rf ?>?A??m?$?+A$????5v"?h??M??Y??P^??j9?E;J?? nae???~b8?Y?vf+??-??f?????Fr???'?Q???w@?4?h?~?M????i??~jKO?SO???'?5?????? kEY"?????.??r?QV???c?y ????!g5???0??m7}????1??xd ?tHNO???o{[???m./=?? [???.??c??T??? ?}?> endobj -241 0 obj << -/D [234 0 R /XYZ 74.4095 189.7319 null] +251 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[0 1 1] +/Rect [258.5279 607.1296 293.8452 618.2479] +/Subtype/Link/A<> >> endobj -140 0 obj << -/D [234 0 R /XYZ 74.4095 166.3929 null] +252 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[0 1 1] +/Rect [247.2111 483.5929 282.5284 494.5218] +/Subtype/Link/A<> >> endobj -62 0 obj << -/D [234 0 R /XYZ 74.4095 166.3929 null] +253 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[0 1 1] +/Rect [252.4315 385.959 287.7488 396.888] +/Subtype/Link/A<> >> endobj -233 0 obj << -/Font << /F51 119 0 R /F44 92 0 R /F8 95 0 R /F56 126 0 R >> +254 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[0 1 1] +/Rect [247.2111 288.3252 282.5284 299.2541] +/Subtype/Link/A<> +>> endobj +255 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[0 1 1] +/Rect [247.2111 176.7436 282.5284 187.6725] +/Subtype/Link/A<> +>> endobj +250 0 obj << +/D [248 0 R /XYZ 74.4095 789.6651 null] +>> endobj +247 0 obj << +/Font << /F14 191 0 R /F56 126 0 R /F8 95 0 R /F44 92 0 R >> /ProcSet [ /PDF /Text ] >> endobj -245 0 obj << -/Length 3064 +258 0 obj << +/Length 2769 /Filter /FlateDecode >> stream -x??k?????5?]`1Kr?J?Nb.??H?-??0?:???$]?w???{g?!???J~ 0?L-????g????????m?:3?1??[m4gW0??N0m?Y?????? ?Z??e????_=?!??)%?.^ {i??v????_???Ki??w??v???Zl?P???q?*?s?97 ??.wb??????D???5?H?`?C@K?9?+Z&Tc??,?????V????/f??M??!?G(??L~??(???? ?? -???.???,"J+U?x??N?Tg?e???k?O?o??f#?2?)??gD??|?LPx??????XU?G?XV ???t?bk|???BQ????G?V?f?<W?4??4?????@?2?W1 -*????_?f] Q? ???`?E??` i???~?PJU?m8dg?????:???h?m a?0?C*f????3?U?aZ??????_h?=.?Rf)???w2?????o??? ??Q?~(}??$*?V?L?f?????G?U??.c;???v?T?? i?????a?1sb?? A_????\[?????B?E??tWt?} -?^L??1?????z?G(?????n"???{?3k2V? ???????R$?_W?#g[????C?f?p9e?????????????t??? -?r?????$????????$E?Lj?f?mi????Q?????d=?P??a?s8n?:ZnPo_{&??es{????~???4???lX?v?? 1??M???h+x?~??%]????7?0EwLM??"?@ZMqG????=eQ???'qe?U??u????#0??=??Z?*???&a_^n????????q? ??t??wx???/?|??T??]? 9?b? ?ZM??&2?c?D;?M?6?&????V???s+CX?,a???6f??+?1??!? ?^??V0.??|D& -u???n-???V>???$?T?\|?B.?d&rc?5????m????ae -???jL?*?(%????w?Y?o?-???t\?9??:@O??SO??zIlg????g?+"-?8|???]??[???8???e~2n???'^q?.T}?p???_??#??)?#????7???L?????r`:?`?=?t?=&l?4~????^MK5 at 5???????eT?0????g?c?\f???6cx?'??56???Q`uZ?g9???N?????l?o???b*????F???5???|?1?7z??U?~*???I:?????g?{??T?B_??l??????8r??????~?6???[=??!?K+E??1???????9?v?pm??{??7??C??G'?????<.???x?K??)?J5??3????3RA<11?????,?jM?Q:????fT ??=?0?Yu,?U ?|????5??n?gP??$q???? ????N]?B?N ?????#M\Q??p????o?Lz@???_R?E??? ??? ??"??@vu=?m?G?n??PX:9?J?ZY???J?s?Ur]t???6?~??}7??M?9????Q??"????x??rs?/?L"?uxw??q+[?:????r?n7(??K?EO?W????Q??f????{?{??k"??3F?? ???h??i????\??1?,????????????-??{#?S?????:?c?e???;x???????????S???U{[??h????=6?r;????????????\,;?^??????rR1???v?X?k??z??E???G?Os?0!?e??Vq?1o~>??'?XC?}sD?pV.???_l?qV???????1dbf?*9?L?4?\"??B0j????m~??????u???bP??i???>?Z???k?W ?>?m??=????"?????fbWx?CE?I(???l??l?p??????S???]$?>????m?3??&????=????f??]???w";???r????]^?|??{=?)??Q???P????????(???S?'????HL?b?ACGd?$R?????(??# ?%:???X??S???Ct???P??"?Znb?}UrW???6N????1??XS?tm"?\????z8(?>8????F\?????(?e ?? H??Z??a;_"???????????M??^s?; | j?7??E8W?-??M???A??6d?i?: +??._??????;?|v???g?????8????B?*C?B? G?>??????v?1?CMY????J?qSND?E+IW??Y??%;D??F?s???rw??vC?????_gO??8P???m?j??0????:??O??=???}?z?ci}_??m??$.}??0?i?()????#??sL=t??????B?.*???(??]t??????%???E&ea ?JS l??`J??SK.???[_ ??????\m????\??g????!?"^?5?k????{??+R?;w???h???Y?c???Ga??~?????????x??y??JE???? L???Z ??? Cn?b???????/wQ??H?????(?VX?S\????j~9?R?$??V?? .???+?@??FXQ???(l-?N_???Y\??????"???????????D at c?#?.X??t?J???m?yw?93??????????/d???O}?_\OA???????????R????????cJ:5??,b^???/CK??2???5?????B?n,?K7= ?c?????>???:?)*Q??@9y?Z?e??u???mq??^{????X??????YfXUO9???ivQr??????? ?????,????L?TN?^k?1?@c?~U.?`?)[?????????W5??1j????d???!?rW _????H` ?64I???????*-?\-sb9?M?Y8?[,??h?Py?>h?g??>6h`6fl9??????XPA??e?S???`??u????pEM1W?% ???? +??2?41??}k^d?N?X?q?S?h?6;?e????u?p+?xT?%??]e?? ????%???????!{m?sB?# ??o??????????.mP?7LE???? ??6?????????GNC???Q??}0,????X ?Q?XXM???X57?qt,??h?= ?C< Z?3?????????7?##?`n0?&b??"??uG?4i?m?\s?????e*u??5H= ?2}@1?(??A???-???5?y=R????C?&>??\At???D?*????'Z?????I???_J6???S?endstream endobj -244 0 obj << +257 0 obj << /Type /Page -/Contents 245 0 R -/Resources 243 0 R +/Contents 258 0 R +/Resources 256 0 R /MediaBox [0 0 595.2757 841.8898] /Parent 232 0 R -/Annots [ 248 0 R 250 0 R 251 0 R ] +/Annots [ 260 0 R 262 0 R 264 0 R ] >> endobj -248 0 obj << +260 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] -/Rect [405.2133 612.7799 434.3737 624.6404] -/Subtype/Link/A<> +/Rect [247.2111 670.4901 282.5284 681.419] +/Subtype/Link/A<> >> endobj -250 0 obj << +262 0 obj << /Type /Annot -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [356.307 280.4841 484.2022 291.3233] -/Subtype /Link -/A << /S /GoTo /D (other-common-types-bool) >> +/Border[0 0 0]/H/I/C[0 1 1] +/Rect [217.5744 557.5791 252.8916 569.4396] +/Subtype/Link/A<> >> endobj -251 0 obj << +264 0 obj << /Type /Annot -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [120.2376 268.5289 266.3938 279.3681] -/Subtype /Link -/A << /S /GoTo /D (other-common-types-complex) >> +/Border[0 0 0]/H/I/C[0 1 1] +/Rect [405.2133 385.2838 434.3737 397.1443] +/Subtype/Link/A<> >> endobj -246 0 obj << -/D [244 0 R /XYZ 74.4095 789.6651 null] +259 0 obj << +/D [257 0 R /XYZ 74.4095 789.6651 null] >> endobj -247 0 obj << -/D [244 0 R /XYZ 74.4095 753.0247 null] +139 0 obj << +/D [257 0 R /XYZ 74.4095 613.1825 null] >> endobj +58 0 obj << +/D [257 0 R /XYZ 74.4095 613.1825 null] +>> endobj +261 0 obj << +/D [257 0 R /XYZ 74.4095 570.2382 null] +>> endobj +140 0 obj << +/D [257 0 R /XYZ 74.4095 546.8992 null] +>> endobj +62 0 obj << +/D [257 0 R /XYZ 74.4095 546.8992 null] +>> endobj +263 0 obj << +/D [257 0 R /XYZ 74.4095 513.1808 null] +>> endobj 141 0 obj << -/D [244 0 R /XYZ 74.4095 359.2115 null] +/D [257 0 R /XYZ 74.4095 137.8893 null] >> endobj 66 0 obj << -/D [244 0 R /XYZ 74.4095 359.2115 null] +/D [257 0 R /XYZ 74.4095 137.8893 null] >> endobj -249 0 obj << -/D [244 0 R /XYZ 74.4095 327.1487 null] ->> endobj -243 0 obj << -/Font << /F51 119 0 R /F8 95 0 R /F56 126 0 R /F14 191 0 R >> +256 0 obj << +/Font << /F8 95 0 R /F56 126 0 R /F44 92 0 R /F14 191 0 R /F51 119 0 R >> /ProcSet [ /PDF /Text ] >> endobj -254 0 obj << -/Length 3931 +267 0 obj << +/Length 3767 /Filter /FlateDecode >> stream -x??ko???{~?Q ?\?6?7?~J/Mr?@?EP4E??i?!?u??\????3;;?].E:??(rvfvv????? o?i:{??N8g??v?Asq ?>?@Fc?0?y?1?tm??6p??h;k&??Nh???;)??????S????BJ)???"?]]?{?}#????????F)?PV?+? ????daJ??$??ekV?K?z???}?????:????#?~{?Vn??7o?? ?????.^?CZ???W )????.?H?aD?'|???ug??? -}???"??6??GP?u??mH?????7R?OL#pw?!????*:kU???i???a;?A?:?Jc?????6?|??????Uh?????w?y?y?F?'??R?1??Z ?!u?J?g?A?nu??=??RF ??T?$?y?j???Wx??o????oE?];/??@?B?????G!=?I,?xI??C E??n???>?.#?6B5?[??.??>?^?3A'???7??N5&.D?"?OxO'w}?&nG3?-x??\??]?v8???^?`?k?W`??Q??%??i??N?h?ckp`=????i?M[C?s????>{s????]}??{??j?????1?E-?????????H2t]?{mr??m??C?!s{?^ednF??????o???A7v?9?wCB??? ???%B???????6G?I???-?????p?=????..??8? ?{????O:?(????X?Q -???;N?????j7??H????Li?A??z?"??B?\?'??~m?I~????????UvN!?p?????>??^? >>????=???|??P at O??_???O??s??T?,W???~???,??+???SL+?^g?|??1??g*??3? ????????%?!?@z?\?@^???c?? :???ls`?"] -???*?r??FmG?Ap??w?u?????i??%?x7?K????K[r??[??O?????O"???? -? ???? ??i?n ~??0?9????O`????)?9jr?|???J=NVJ???,??(?{J?7??%=?36?P>?????<86?????M|.A??c=P#??? ,ef?s???????M?! j??U?m0r??????Nj??-`?u???Th???M????N?VH??V0??ld4? ?a?o??(6y6jr?:G???N`???9~?VuEw?U]??TY???RY?~?L&?]????q?J?#9*rm??D?=.???8?k?????? ?????6`???!N?w? ??2? w?????z???rV/4??^gQ????@??A?&X?s?4?'?? ??????????^C:Pa?V??????? 1p/?????E??wt???????/$%2???S??aG?I???d?+M?{?|9(?2???w??c????Y(6??)??Yv??= -E???8?????I?? H\?j?1=?P????K?b^2?o??Tt'????'?'????????w? ?@?B?????wp???P ??RvmI|???j??3?????u?T5|5kl??D??????????"[>??85???????L??s/G????p?b?????cu?x???!??????^?O??F??????&??-??n??"??8???!?m?.??6??bSf?????.%?}??$ `:?x]3???&_@?W????~?u????&?\??[????]}???????`?%?!??m????L.??_?&??????k?????????a#??. at T???!?????i?1??E???O22?m(???$>=??\'?o??w?? ,Th"?n?????????X???&??I-, P?R?????@xNCR??'??? -,?/0]??W#[aZ??????cGJ?NM*L?C?QZ????s?????3??7?*??? I??????;z??C? #?z??o? ??`?c '2?C??y?/Y~i* ??8$??B ?????}uU?5??:?=;???|??}:?j????K??????A`!E=?Q?ip????"F?\?k???{?M????6 ????+????C???\????b?>??????~O???|EG??^l?]?V??BB"????:'V?^????@???d????(????x????k?e?7?c ?M???Ltm?5F+M+e?8?D??????????d?A??n"1T8??I)????/?????????L7????v??FN?? C-q???ft67?C?c??]#?????KLTx??c?2J???????\???.?J????Q5-%?y %??@ E???d??#???qD?Z???&9H?AT3???R?????9?? ??j6?Qendstream +x??ko????? +#@?u1???~?????6 A??n?go????n?C???rHQ%?. ??c???1??????????5??/??g?? |??'? S?Xx(|????3F\T?$?^=??%?r???????????^\]?c??%??nw???z???tn???x?]???/??t k?08C}Qq???~??-@?H?FK?i??? ? ^??#~l?????u?M???G??DG??Df????Ka?'S??NQ??h??`$??&>??p1??d??^??Z??6?}}Y ??WvG?????2?vD??K?6?sx?!%??????2?$~???????i??d?H]kZ?eD????oU?0? ???{??*? IfI`??jn??rn??0j??*AM???????}?UVl??a?w???e?k? ~?>??o??????????=iiX?L|???????]I:5?????}H?0????v?{??f? :? -I???wG????r?+???d??*???CD?;?HJ????[O?W??W?. D8>???%?y#??E???i:vY?7?"?]?a??\???L??{*?h?????&?_?&B6?6?????:GZ?U0?J???iC?8 +??w?%('??u3Z?H;?2??Y??t?>?52*?e?Z??%?*0?? ??6%db???f?}?A?~?@?dc?h#?%?e???)j;???m??G ?$I?@?zA??\o^ ?q??Y????{{?C??\w??r?????^?d?Q???8?7????q?~3?:Y?????1?'}?ij? Zh??~??Z?H$y??ey??8???K1N??-?M#8 t??m?~?????/X[t????P?bR1????????e>?P=??X???.z???;????????y? ?<?/??k???Y? ?????????Y>??G??L?????Yn?rL?C-? l5?XD???e?????????!V???????z???L?u|??&? ?ER?w?G?\JH?Q?pz?BO??????xq%3????7//? +v@? +?1'??Tm?`??`Vj5?Q?|`hlm??li??o?9#??ho?|?@Q???????g?????? n????m/?< ?`?a(?/?????'-??m? ?????o?2~??}?hwE?'???GD?#R? !??)?? C1x??!yi???TO?M?P??,/?8?????Co? LEy??>????@(?7o???2,?|?&??)c?O??w^???Y-Y??[?g??=?`??l mf??x??,G?5?G??F?????[??a?o?Hp[???' +Y??I?`|????\???*?Y?????,? ?V2????F??:?t?'???82?$??????c ,? cH??`?xw???o 5D3???d?>E??]??*??#}?9??@?{D#?sy??y|VHp?Z??{d?S???h|n?C\?m)???????kr>_Q??o??-??G????????nL?n???`?????^??f ?#F?m?l??V?;/4???I;nxq?????6?U? !z???9a%???b[??i???h?B???6PIU???d?~1 ?5y9d?????_?#bQ?#v??mi??O??????v?????g:???8?"?????? F???V?| 6???P].????`?A?? _??9???O`?6~mo?'x?6~??;???H0??i????q=qH~^?I???9? H?y?9? g?????0????m ???F\Q????????e?Mrs???R?9f??P?????Fi?t???O?u???G"|??n?d????????2??Q^d??%B? w?KH??g?A?&???%?e@??D?$?e???"}_zC ???Y#?[?N?Z?>? ????'J1>B??"??]???@&??m??9B??t??^S\hIO1??v?V?L?X??n\?_f?t?~?~??UQ? ?n?-?:?eu1?k??0???F??6D?*?j??@?S?d>GK??P m"??~?????<"n??????V5r? j?!? ?}N?????Wwy?1???A"@?U,?v?T??/0?V????????W?????Y?wQ??12???C?0D?,f?rNY?%?b+o ?!~??'$N??W d]?` n=???bD?Z-mw]?>??}~?%[3#??x????.QL~ z??w???3??q>???xs{ +dN-?4A??`???>?$??8`?ju???90* ?????E?*0U???+??&!T?1)?? +r?y??!?A?dU???W?v??vd?E???????>Z?x??+k0???yp?s<????I?C;??@K????????w?%G???w??c??fk????$?f+?/?@?D??) ??}?v>?H?-f?3W????LU+z?7??????`Z.?L?R?Q??????G? +n??5$2C??c?????7,??u?&c1fx?;?a?5 +#????z6??j? l?V?DoV???-??h?zQ?T{Ym(??t????C?p???k?c?M? ??? ????wGn?Q???8?????N[?cR_0'???`L??!V???kU???????? B? ` z?'?? ??Gi???4Oh8? h?O?? ?/ ?b?~*??v????t???|a"?~???2h?WV????& 92??]??tH?&???????5L?&?6kcu at 0?SPQ??W??G?BH?X!W?E??."???XB???1?????&w???L?????c??H???<&^??coR?*?{a?;?????8???+??R?k?#U???R??????U ?????????L??????4u?N??B???WQ??z?B?%??Z?{???? `?f????(???Gh^Rje?r???H`????4??ii?(_??:?6G???[:? o???d?:?{?-:??6??-J?=?]??4v????#? +???L#-29G????o?;???K??~Z??ch\?% j??3n?"}?bKg"?L{??????u?4?M???????> endobj -256 0 obj << +270 0 obj << /Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [356.307 708.5793 484.2022 719.4186] +/Subtype /Link +/A << /S /GoTo /D (other-common-types-bool) >> +>> endobj +271 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [120.2376 696.6242 266.3938 707.4634] +/Subtype /Link +/A << /S /GoTo /D (other-common-types-complex) >> +>> endobj +272 0 obj << +/Type /Annot /Border[0 0 0]/H/I/C[0 1 1] -/Rect [153.5984 746.6066 182.7589 757.7248] +/Rect [153.5984 536.9429 182.7589 548.0612] /Subtype/Link/A<> >> endobj -257 0 obj << +273 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] -/Rect [241.6158 746.6066 276.9331 757.7248] +/Rect [241.6158 536.9429 276.9331 548.0612] /Subtype/Link/A<> >> endobj -258 0 obj << +274 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] -/Rect [459.8353 746.6066 496.9558 757.7248] +/Rect [459.8353 536.9429 496.9558 548.0612] /Subtype/Link/A<> >> endobj -259 0 obj << +275 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] -/Rect [120.2376 734.9304 165.5172 745.7696] +/Rect [120.2376 525.2668 165.5172 536.106] /Subtype/Link/A<> >> endobj -260 0 obj << +276 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] -/Rect [186.1994 734.9304 229.7456 745.7696] +/Rect [186.1994 525.2668 229.7456 536.106] /Subtype/Link/A<> >> endobj -262 0 obj << +278 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] -/Rect [108.1855 669.6559 137.3459 680.4951] +/Rect [108.1855 459.0903 137.3459 469.9295] /Subtype/Link/A<> >> endobj -264 0 obj << +280 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] -/Rect [423.987 504.7053 459.3042 515.8236] +/Rect [423.987 292.4954 459.3042 303.6136] /Subtype/Link/A<> >> endobj +268 0 obj << +/D [266 0 R /XYZ 74.4095 789.6651 null] +>> endobj +269 0 obj << +/D [266 0 R /XYZ 74.4095 755.3439 null] +>> endobj +142 0 obj << +/D [266 0 R /XYZ 74.4095 518.2929 null] +>> endobj +70 0 obj << +/D [266 0 R /XYZ 74.4095 518.2929 null] +>> endobj +277 0 obj << +/D [266 0 R /XYZ 74.4095 485.9296 null] +>> endobj +143 0 obj << +/D [266 0 R /XYZ 74.4095 348.505 null] +>> endobj +74 0 obj << +/D [266 0 R /XYZ 74.4095 348.505 null] +>> endobj +279 0 obj << +/D [266 0 R /XYZ 74.4095 304.8755 null] +>> endobj 265 0 obj << +/Font << /F51 119 0 R /F8 95 0 R /F56 126 0 R /F14 191 0 R /F44 92 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +283 0 obj << +/Length 1808 +/Filter /FlateDecode +>> +stream +x??X???6}?W?????*2oi??-?6h\??- +??:?xW???&???????ZA?,/?s?????rU???*?0E??????????bu???Od?????????????R?`?J???"?^>2? Ah??Q:)JJD}?}???4+???[m?WRJ?J??????????g?????*? eaU.pB????>?U@?u???pj-??a??S?C????'??D,??????????D W?_?zB-?;+? ~H~[?N??\m?3`[??^Y?-?V.??%???{?n???g?????8V??*?[???Tz? ??``???^??DY???M?FU??u??s %??+? ???]_??N?E?"?g?????KQ???.X??B???a"X?H???Qv??? +???B?2??\?@s:?Bh[#??? ?]??@ ??Ehs????ZF?)?~??}???F ?T6??????i???#?3??R)'/?]?~?/???T,Z?W2?r???+L9Rc???m?P?pC?%[?h?DA1??@&EVmK??I??g???Wp?p?;R??\??? +???j>W?GoEg??d?O??c ?x\B? 2?????.?[??h??=???9-?????>Xr?F?W??BZ??dZD???E1??????hd??H? ?H?vU?.: +??5?lg?8?p?Gx?+?cm??M? %??f???^?K5??????Q3????i(endstream +endobj +282 0 obj << +/Type /Page +/Contents 283 0 R +/Resources 281 0 R +/MediaBox [0 0 595.2757 841.8898] +/Parent 232 0 R +/Annots [ 285 0 R 286 0 R 288 0 R 289 0 R 290 0 R 291 0 R 292 0 R 296 0 R 297 0 R ] +>> endobj +285 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] -/Rect [132.3327 340.3946 161.4931 352.2551] +/Rect [132.3327 758.2828 161.4931 770.1433] /Subtype/Link/A<> >> endobj -266 0 obj << +286 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] -/Rect [414.726 328.4394 450.0432 340.2999] +/Rect [414.726 746.3276 450.0432 758.1881] /Subtype/Link/A<> >> endobj -268 0 obj << +288 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] -/Rect [219.6728 227.1576 248.8332 239.0181] +/Rect [219.6728 643.7726 248.8332 655.6331] /Subtype/Link/A<> >> endobj -269 0 obj << +289 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] -/Rect [268.4819 227.1576 303.7992 239.0181] +/Rect [268.4819 643.7726 303.7992 655.6331] /Subtype/Link/A<> >> endobj -270 0 obj << +290 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] -/Rect [390.3215 227.1576 419.4819 239.0181] +/Rect [390.3215 643.7726 419.4819 655.6331] /Subtype/Link/A<> >> endobj -271 0 obj << +291 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] -/Rect [73.4132 215.2024 108.7305 227.0629] +/Rect [73.4132 631.8175 108.7305 643.6779] /Subtype/Link/A<> >> endobj -272 0 obj << +292 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] -/Rect [73.4132 203.8052 100.1426 214.6445] +/Rect [73.4132 620.4203 100.1426 631.2595] /Subtype/Link/A<> >> endobj -276 0 obj << +296 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] -/Rect [324.6699 148.1394 360.0704 158.094] +/Rect [324.6699 563.8265 360.0704 573.781] /Subtype/Link/A<> >> endobj -277 0 obj << +297 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] -/Rect [382.9052 148.1394 454.0182 158.094] +/Rect [382.9052 563.8265 454.0182 573.781] /Subtype/Link/A<> >> endobj -255 0 obj << -/D [253 0 R /XYZ 74.4095 789.6651 null] +284 0 obj << +/D [282 0 R /XYZ 74.4095 789.6651 null] >> endobj -142 0 obj << -/D [253 0 R /XYZ 74.4095 728.6989 null] ->> endobj -70 0 obj << -/D [253 0 R /XYZ 74.4095 728.6989 null] ->> endobj -261 0 obj << -/D [253 0 R /XYZ 74.4095 696.4952 null] ->> endobj -143 0 obj << -/D [253 0 R /XYZ 74.4095 560.5553 null] ->> endobj -74 0 obj << -/D [253 0 R /XYZ 74.4095 560.5553 null] ->> endobj -263 0 obj << -/D [253 0 R /XYZ 74.4095 517.0854 null] ->> endobj 144 0 obj << -/D [253 0 R /XYZ 74.4095 283.2866 null] +/D [282 0 R /XYZ 74.4095 700.0612 null] >> endobj 78 0 obj << -/D [253 0 R /XYZ 74.4095 283.2866 null] +/D [282 0 R /XYZ 74.4095 700.0612 null] >> endobj -267 0 obj << -/D [253 0 R /XYZ 74.4095 239.8167 null] +287 0 obj << +/D [282 0 R /XYZ 74.4095 656.4317 null] >> endobj -252 0 obj << -/Font << /F14 191 0 R /F8 95 0 R /F56 126 0 R /F51 119 0 R /F44 92 0 R /F67 275 0 R >> +281 0 obj << +/Font << /F14 191 0 R /F8 95 0 R /F56 126 0 R /F51 119 0 R /F67 295 0 R >> /ProcSet [ /PDF /Text ] >> endobj -274 0 obj << -/Length1 1213 -/Length2 5702 +294 0 obj << +/Length1 1231 +/Length2 5884 /Length3 532 -/Length 6474 +/Length 6663 /Filter /FlateDecode >> stream -x???eXTm??AB?$???????``???A@ ??P?CRA??AZZ?n?3>?y=??x??s??_????????u?}]??^K?S???("???@.?(@N]G???eb?CB?\????+Dd?l?<??(????.@???????X?X d!H(? -P?r??8?4 at V0?.??zqd`0???;\:???`(?` ???q??Q?? B? -?????r? ]P?,(???E0??!6??T/??????+??`V???Q{???V?P????Nn?$@? ??,5????: us?gV?? -??ma??BPE?'?u?l?`.???8??&P???nu=MM#????WJ? - -w??r?[?W?_ ????AB=?<\<<@T!??????R??`(uVH??.?\?H?@?`?'?????G??n???`?@??&????????WH????;$ ??? ?"n?7 ??]=~??(?CB???p? ?????.?? ???0?????[?7????????$????M?n??????7?? ??oBiZ?&??@??*??????Du???(a??Rv??@?2?D)#?@?}??k??@?|\?@?z?~#???????????~Bee?>?|"N^???<|?!??RrC"!p??~?9?7?@QO? ?NO"@b??)5?E~ -9??Xl????b5>??7?M??????????.J?H?????QZ?5bT=?Fs=NZGi?O??u???u??# ?)hJ????8????????I{??v??~a?Q~^IgO3?a >??????????E/?H??k(???[G1??O?|?&??,?C???????U3 ?-?????P?m?/????9????Oo/x< Mv?Z?????t?D??h?A?%d?d?: ? ??B?E?F??!?X??c\????d?;l??2??6??? h?* -?9?H??'???Q -N????A?J?.?T???D{??:?^?|???~????0?7?J2?z?@?????v`_?f?p?????&BX?[?SY?1??z?H????????%?I??tD x4)m?{M???SDQ? ??P??? l -$?mA?p????F2{??@^??uQ????.?C'??70??O(????T?E?K??Q?J?yp?k<>~Ui?????S??Y??YS??[?L?$???f?r?1?\?:|:`?>?}/$%)?A?????-B??Y??e?M3\_+II{V??P?y3?n&vA/\+?$^??3???O??xzd?n??????7)l?D???K?3???$0?????W?%ozCi?:? ?e???????+??dsg.???X?v`??o?/KU?I????+V??T?``Q?????P??????Oz???D?-!????%?????G??1?M?3O&Z?Z3R1[[Mnb? ]a&?"?I???k?H9H?????????n?8O/D[?????? ?/????'Jve??{?J$??????/??'A??}??;??g ?t??4 ?^?????%4x??{?B??????.?????'M????O9???y?f???=eD?m??;?a??X???H??z???a?%??6d???yI!%E?G?f_A 8Q?l???N?z)?\????q?l??????y??g_?dx c???= ??%???:a?????x???YzVO???c?T???????tAQ?L???? -1?'?? ????o/F?????A?????????h?D -????u??7???u???7 ???b?????q??????4O???R?@}???????n6????O??}inv ?/N???4mKa??}???????jd%???1O?V]???9???\~W?qy????k??jsgKsb;?n?@????????O|RJ3c 9y10??A???#2?+????x??|?????VZ4??W?D?;???A?m?n?O?:??X08kL???^??-c??????!?y????oi? {?+?eT?9??? /7y?e?aysf??6x|%??B?a??S????w2?2???zV1 ?????????v^?>x?!DG?{??=H??F??????MsQ3{A?&??b?f},l j????k???2??N=?5????:Q??n? ?9??U|?i??:?|C?-??XS???z?s????.%???Nw?N?L??????N??+?]??FB]{4^?J?[1Q??A?????!^5????QC?????ik?,???3Td?I?0g???b$?? ???+9????58???w*U)?A?$ -dVL\?????I)??o?e??T&\? Wj? &?????u????????S=???? -N?:????I?e"*p????V ,?o-??U?~??T??94?i??7?:?????l?9????3+?CK???J?,?n?#?? ,?????{7???NK>?&?*Q^???<(?[n?r??~i???F? ? ->_??o?J=D??4]?x?/????9??Z?4???2I`#?s8??;?Nu?????&??S?? ???Y???Q at c?X?[0??+??G?I?? -??[?gH??$??Zd?o??????z-I?C?63{i?e?e -??V2n??{??????p??YQ???3|?D?25<???????O???$?????6????????Uk}a?-Ui? ?Q?`??b??Px??6?y#+???NYjV^??Y#?+`?V|~o?????#`??e????'eF??????J?j?z??jS???C?:o?;*\'??+????a=h ??1??????z??~89k???????*?????3??#?!????D>?*J?E??-????:M??Flh??h???#????@5???3????????NR/??Bn?F??2 ?0??;??k??S??`??????Z????? -??'?/???p???(?????????C>g:t"???D?Rr?Q?D? \?\?0???3*?)?N?-??e??o?x`???!x[j>???Q??m?$??????%n{?3???^?_?g?+??x?i?]??W??N??K?S8??????C???? |/??W-+??yj??a?????}???;?_??]????[p?B? 0?K???8+????t3x??x?=y??B??p?@?yqQ???#??? ???S??- ??????!?r?Q????"??????P?ad?di??K???$??4?f????>fT1?9?I???i?"?? -????4$?L' ---?~???"m??l?BJ??;?5?d'???Nm5????=?????I/?XrGX;?????}??i??? ? ??-4??6#}?W$?Q?????TG6?h?9??D???^2C??v?${???+????????TV?L??????W??W W?0??=?y?p???1?rH???g???&?*~??0?????|???????:h?^?\?? -???q[?? ?)???#C?????-???@b??=?????X???? 4?h????<"w}???? ?K]?3?q?{??& ?mSx???????!?A???G+???-?endstream +x???e\????iI?J:?????????.?R?)Ii?S?F???.i?=>???z????W???~3????[?k]?}?3??)???`U8 ?'?/????/ ??ggWB?m?8L? ~??(x8?Bb??D%??JpW?? ?T??U$Pp# v60?? ??????? ?v0???????????`????Cl???/?0{8@??0????)O0?e +??2?@Y?aPl?/?G?????0?oqU(T??????`????!1??+j????! ??/???a?XT ????B?#?G?0@????@uv{?????????? +?]#&P?M????$?j??I?I `??P???!????M(M???Z???$$?Z'?Du???????@?@?0?D)??F!?2?D)??@?}??kv jp???????'??@???_?????"???( ?F??? P .*??y `???u?????w{????'?vR?N)u???*y_J?????u??G[ B????Zn? ?_????]?^g???s?l??R???z?f??z=?????Q????+?y?qs????(??? ???????vrt9? 7??1?u?{?t?????VM?E???d?'y?V?\$b??$9k?sH?Sn??!????env???9E?] P??\Cn?(????????B>?`??c????k??! ????U?9?Vy???????1?5???B?????1_s???Ab?????????5??Q?FZk#?I?}@;????t??9y;f????Kd4%???????0&????^?C"??)?b~q????G??^j?b????C?X?x?FY. Rw?????fK??I????p?sj??? +n??5???????H??\??>O?X?: Oq?Y????M?@&?[??(?'??t?: ?,????O?F??%?D????S?/??'w5?E???-<-???rU?7???yR?????F?A??\??DI?????he???????????J?% ??ld jw????E??nfM|??????Z????ZMyc?3?G???$>[vzK????$Y??m?u??!'?\???????{+B?????&??ty??P?N????L?I )????t??)h???R?????[????ch:?????????~;?????????n?#W?H?7P??_8\???L???>&?q?F?e??T??????i?????????????if2?F???F??Ui?PZ c(o? ,????w??t]??4I?? ?=?]?,??>?SL????j???<]uVL^c?m}????T ????~??s? c?Y?b???,?;B +}??b????:?N???[???????iN?jU????d`^??????#?U??u?+?O????H!a?????? ?l????????,'??7????)[?9??$??Z??6?>?q????G??q????gj??xNN?D?5?r]?Z?S?q? +???a??,?k6??i??? +??y'%1???r???? mR(i'4????R?dX????$J|?2???????! ?p wr4a>/?"y???h]???Qn_? ?{??wY4?Zp!Z81{???? *;?;S_??&??x???Mm?9?#{???"#??:,?B??T????f?Xy?p??????uF??X????n?`?=?{?3?&/"??BcV?l?4?cTt9?r\M??????|?Y??7gP??P?T\  ]?a??????V?]????+????^EQyU{G?? A*?}6o?_???m??I?`Os??>?????P??70"? ????+?\A?Oh?LG????I??y{"??s??? SH?+1????'??K?0?? ?E?+???????l;??G2??X`g7???yN??u;]Y?K=??B_???wc???????sQ???1I?0?-_ ???SQb???3?ad??????P??\????[????A??*??M?B?/??7L? ??????F?&??X???MS?????R?u??^=&?%?????HQf??4?X?0I?~??3???m?[fY?c?.^?m?I????3q ?????@?Y?????a?z?H???U;r?%So*??{p?? ?????KI???N?m?L=N????GL O?E/?(hPn????.????iO??1???R??????=??d1?p?JZ?ar?&v!g?QSV/?????fj\???"+?v????P?M?19??'????? +?x?^?P?^???????E ???l??L??I?|B[h?>??M??2_?lKI?>G??h??RV???R?;O?Iu????????+??c??>?i?R???jM(?U??(u +?#k?=?o! +h?~??fU4?d.S???w???9?,?dMOj?????0J???o????v7F?-???I??Au??n????3?4g???Y??@?$ +w]ly?Ao!????????!m?1?~?#?G???3?R??''?ZJ???i?????>?z?L +U??R{|????????? "?????????K#?????????#??H?'X?@?(??q????m???B&EQDx?iy??t?#q?W"????BN'?Lbk4??#?t^"?"2????????????????o2???o??4?z?p??\J`????w+z?=Z??jGx???68w????O?m??"?M??????lA^????Fq?h?t??r +?????TT??Kd^Oz??'????]{??? ?_?? v0?????@F[D???4?a????q??O???,??S6??4>EW??????? ??z|??7o???r?,?1????ek??????F.?????? +????H??_??k?=C?9u ???????P?? ??m3??= ???`??fT?&?F?(????Z='??3.Cs???,^?mEHR??ci?f?]K?EB!*?>??m?6Ox?i??????`1&Urp(?a?oOm(?U????A??{????TDV? [?BZ?Gs??X??zM ???????5???3Z??W??r??q???)??5?,R?????F???9?U??D???!W??*\??gE???^?Oo?w???6?;????F???%lNi:?l ?F???0&?6r?~5??B??|?'k??t zf??E??%Fu2vL???a?\?????????'??R???QqO??Ak???n???(?M???QzaB???t1??h?b???? Cy???x2$???h/??S??S??E?-t? ?>??G?.?k???%)??c???????? +M?qx??8?????]#S?wu6 at kIDk{YMZ[a?h?#?^??!fz53?!X{vv?v????+?s??????Y??B?J?DM? ??O??G9??????g??A???Gu?? 5&???GE|?&???j;?????Y??9???p{?s?????????W?M?}N???a??!TOpgQ*?? ;P;?r???? ;p?8T??Ry2???a?@a???j?qh?D\????^(?I??c?X?p\????>?O?{???v??e??oq??mY?a???????\??~G??_Wz???cU??rC \1,e}?a?|Y??2?*???@?e?????t@\????#???0I,????????C>^]Z??,?'^??%?????????V=?????g(m?M?T^??j??;? C0??8??p2???2F$o18?wR?????????3~??A?, +???5SG?d??,[I?wG>?%h????}?U`oy6]????2n?Z???????i?????3??? +O?????*???^?zHr?"~pK???^??^?D???!of?? ?? ?/?e?u =C?mYI??{Ov??Ch?H?F???y> endobj -273 0 obj << +293 0 obj << /Ascent 694 /CapHeight 683 /Descent -194 -/FontName /MTOORX+CMR9 +/FontName /EBGDWE+CMR9 /ItalicAngle 0 /StemV 74 /XHeight 431 /FontBBox [-39 -250 1036 750] /Flags 4 -/CharSet (/hyphen/period/zero/one/two/three/four/seven/colon/C/D/G/S/T/U/a/b/c/d/e/f/i/l/m/n/o/r/s/t/u/x/y) -/FontFile 274 0 R +/CharSet (/hyphen/period/zero/one/two/three/four/seven/eight/colon/C/D/G/S/T/U/a/b/c/d/e/f/i/l/m/n/o/r/s/t/u/x/y) +/FontFile 294 0 R >> endobj -279 0 obj -[343 285 0 514 514 514 514 514 0 0 514 0 0 285 0 0 0 0 0 0 0 0 742 785 0 0 806 0 0 0 0 0 0 0 0 0 0 0 571 742 771 0 0 0 0 0 0 0 0 0 0 0 514 571 457 571 457 314 0 0 285 0 0 285 856 571 514 0 0 402 405 400 571 0 0 542 542 ] +299 0 obj +[343 285 0 514 514 514 514 514 0 0 514 514 0 285 0 0 0 0 0 0 0 0 742 785 0 0 806 0 0 0 0 0 0 0 0 0 0 0 571 742 771 0 0 0 0 0 0 0 0 0 0 0 514 571 457 571 457 314 0 0 285 0 0 285 856 571 514 0 0 402 405 400 571 0 0 542 542 ] endobj -278 0 obj << +298 0 obj << /Type /Encoding -/Differences [ 0 /.notdef 45/hyphen/period 47/.notdef 48/zero/one/two/three/four 53/.notdef 55/seven 56/.notdef 58/colon 59/.notdef 67/C/D 69/.notdef 71/G 72/.notdef 83/S/T/U 86/.notdef 97/a/b/c/d/e/f 103/.notdef 105/i 106/.notdef 108/l/m/n/o 112/.notdef 114/r/s/t/u 118/.notdef 120/x/y 122/.notdef] +/Differences [ 0 /.notdef 45/hyphen/period 47/.notdef 48/zero/one/two/three/four 53/.notdef 55/seven/eight 57/.notdef 58/colon 59/.notdef 67/C/D 69/.notdef 71/G 72/.notdef 83/S/T/U 86/.notdef 97/a/b/c/d/e/f 103/.notdef 105/i 106/.notdef 108/l/m/n/o 112/.notdef 114/r/s/t/u 118/.notdef 120/x/y 122/.notdef] >> endobj 190 0 obj << /Length1 750 @@ -1295,27 +1403,27 @@ stream x?SU ?uL?OJu??+?5?3?Rp? ?44P0?3?RUu.JM,???sI,I?R0??4Tp,MW04U00?22?25?RUp?/?,?L?(Q?p?)2Wp?M-?LN?S?M,?H??????????ZR???????Q??Z?ZT????eh????\????????r?g^Z??9D8??&U?ZT t????? @'????T*???q????J???B7??4'?/1d<8?0?s3s*?*?s JKR?|?SR??????B????Y??.?Y???????????kh?g`l -??,v??HM ?,I?PHK?)N?????;|`??G?D?iC?,???WRY??`?P ?"??P*??P?6?300*B+?2???????t#S3?????J.` +??,v??HM ?,I?PHK?)N?????;|`????y8??jC?,???WRY??`?P ?"??P*??P?6?300*B+?2???????t#S3?????J.` ?L? 2?RR+R+?.????/jQM?BZ~(Z??I? ??% q.L?89?WT?Y*?Z? 644S077?EQ?\ZT??WN+?????2?A??Z???u?Z~?uK??mm+?\_X????????7?D?????Rl:/P1?d????????(??l=U?h?d?_O??E?k?v-X1??t???`????i????_y. ?1?????????:?un~Q???3/??S??}??]?? ???$e~s?]F1????/??Q???m????|<?????/??q'}I???+6???E??g???xT.??G??gt???v??G??U|?????~??]?R????_k?9???:?{?p??G?? ??d}dN<6??-uB?o?H??=c?M?vH??z?q?a???RK?~,K???}????????m??????yo??~?????v? ?_????s>???.#????????{?/?????k????\m?|??r???X???????ad?j|?????R/?,2?p?0, H?IM,*??M,????r?endstream +??-??????W???d?????_?~?+ ????i?s?s?`??C???u?I^>??\m?|??r???X???????ad?j|?????R/?,2?p?0, H?IM,*??M,??6?r?endstream endobj 191 0 obj << /Type /Font /Subtype /Type1 -/Encoding 280 0 R +/Encoding 300 0 R /FirstChar 15 /LastChar 15 -/Widths 281 0 R -/BaseFont /ZLPZRV+CMSY10 +/Widths 301 0 R +/BaseFont /TVHCOU+CMSY10 /FontDescriptor 189 0 R >> endobj 189 0 obj << /Ascent 750 /CapHeight 683 /Descent -194 -/FontName /ZLPZRV+CMSY10 +/FontName /TVHCOU+CMSY10 /ItalicAngle -14.035 /StemV 85 /XHeight 431 @@ -1324,10 +1432,10 @@ /CharSet (/bullet) /FontFile 190 0 R >> endobj -281 0 obj +301 0 obj [500 ] endobj -280 0 obj << +300 0 obj << /Type /Encoding /Differences [ 0 /.notdef 15/bullet 16/.notdef] >> endobj @@ -1341,33 +1449,32 @@ stream x???WXS???)?E)K??iH??J??7?!Y?P??"E?"HEP?^E? ?$?? H????>??^???O?;k????????1???>jl=?#???$"??!????. a?&DZM1?xC????? ???O ???T?Hh??/???H????)?\A2?!??#?J????f$,????s..????)???@ ?D8???"???.O?? ? ??@?:x???3q?;?????????????Z?s?C R?}?@???'#?az???A?2?.????~?L??%?D@?`?d?/?~???????}???#?(?%?2?D???+?5p???OB"? "8? ??? -??A?????"'??t??/??)? ???O??Rjj?|??H??T???X PUR ?_J?'? )??+?#3?@o"??X???UqJ*????VVG?q????????)???A????vsPl?/?????7qF??G ?????o??k?8??j?6?????????;??? ???[??\?????k??)??#???}O???,]w??6L?H?I?'B?T$???C1-?? ?,?q?A???]??????\)??2????fG????A?????V?:{??}5Dz]??f???W???8? |?N -?Y????!-;???y?Re?$??*`?^ ?????B3-?????g  ??:?_8??u?$'?_?E??z??{N"??Ry???z?yJ?4g?Z? OW??le?D|iRG?/H -A?6z_M??Ac??? ?!u?s72??????????3N??~^y? #??w???>8?K?lj7??J??.???)??GG?T??f4Dg?}.??? ??L?Z???Q???z???_??%i?M-??Y??Q?qt/????K1??????'?K???%?B?4?W???*?[?????E????3F?J?????6?y??L???f&Fv?z gi????=???cz?:$?!z 6[?V?& W????n?????????{H!??t?$, ???y ???]F??????M?}z7??W??~????Q???B5%D:jd0z9?K???B?????t??]%??o|??Eq?t????MU??i??A??>???E??O?6???6t[?AWkPa??=_X?'?U??Z????(.[ -2o?h?33??;t?w?^????X?d8X(??I?:}8y~??j?W?$)?M??e??V???T??g?a? |J???v?>r?/wp?z??8????d[?*#s??kG(?"???p;????I?p???? n????N?????fm?????l?)?G??Go?????zm\????M????:?=?aKC(t??u???????_u?dM?k?Z?)?iq???z>d????T?$?di?x????<~????uw????????"? q??&?)??-???o?>\4??f??_??qb?"????M?f}?0????C ?B??Z??{??%?2R??y.???y??$Z??????b?|?7/Q??e:??G??)?r????1I??j*n??Vx0???y??b_?}5q??????V?????Ew?(@F??????T???+????%???7?#=?O 8c?s?[>e?pA??????p????????v??W?V)\s?8????C???QUk=!??UJ??m??]?w?(44C?????Q??WR?W????3"\?x? -L??#-??V??#???`? ?4???3A? T?ZH)aQ??\?=?}9 ???e???FWm]m??h? -??$;_?qr???{?????M??av,??!9??A??????c?/?m?9??!??D?Zx?+???????l???)??f?*C7ll??l~]???X!?[MI?e??HK??nu#R8??????K??|u3? -?????N??id??R??q?6B?9?k.SP??p??|?????B???????????i`?????p??(??I(b?????2>p?0aYl??,???e?0?? ]?9???????6t??(i?So?E??sR??t]D?I???????????!?c?????Wk????????o?`d??Q???????o ;???)n?2??, w??77?%k???v????5????e+}?p?????f?}???@??V ??M?P~??A{?o???m?????0$?? _?????? 4??????7?!??L??m,g~?????_???4?X?? ,?Vb???o?????C?&?Q?1nF?e%b???????>m???????2Y??U?@???? ?3`]@ ?Br???!?????endstream +H I8?L?]???9CG?t?}V??q!`?\@?T?!?? ??@?:x???3q?;????8????Z?_??9i?!)??n ??G????0?Hd?`??WI???Gv?m?E??p???R0d2?B?DtB?H?@??>?Cw ?I??^?O"C~???8?G?'!????Op?_? ? ???_P??A???T??_?n??'?{)55I>?P??I??B?H??*??/%??L????????O?7}@,??K???8%??zz]+?#????HJNH????u?????nrE?9(????Dx??8?????????]k?7????5p ?L5c??N?^fj|???kz?U|??B~?_re??5K??R???L????{w??;?h?r$?$?!v? @?????M?R?????m? +?.U???N???? ?{RNo?#???G? ????T? U???? ???&?^??>#.???:^Q?N'~???4%4[m???y?7??9???y?2?4.o_??#????[H??i;-???'?&?mj??????fnw\?E??f?b%?;????????AB?v?6?B+e??}??YV?M?K??So???? ???w*???y??f??_9(K????A j?B?.?]t??????U??BR????o$A)?.???j9?????E$^0?!?+??r?? ? 7???=?Wl?EYZ?\??!~*?Z?i??%9?37???_6y?wOq3??????"^J?>???W?3 ????5]6????d??t??????????i ?`??????nW???~M?h?b?????? ?M[r`????{ G???^1???9??7%[??l???R???,*?????u?aY? ??h&W??7??? vu????"?.BF3Y???? sb?>?g'??,????????W? ?K??ED&r????(pkT=H|??????????X?,????8?????????JW? ?????g??r??e??+F??-???Wk?"?X`?#G??MT?Jm?????x&?c? 3#?e=???N?X??YY?1=a????-s+O???w???s????_B?d??=?Ya:f?JF??]?+Us??y?????[??" +52???%??}??????f?G\ ?????7>?????]??????*??4?? ?r??RL?"E????i???p?-???5????T??/,?n???x??UOL??-??w?????????J?????[,Z2,????N???F?mpg?Iq??v????\????)???^?j??_0??t>?<|?M?:?,g?D:???hz???L?1}?*(Z)?u?????B???;U???C?W?4?>?% ??|;C???;8i??[C??p?-\??9???#V?T?[???t??q?gxy??_?GtT?PW??F???H??l???#Q?????{rQ??6?Jk???Y?}c?????!:_????j???????Y2???5m-???8?B?M= +??VMH*?N????[)??>?t??1q<@B??????fR?"?Fw`??hl???????CAm*3E:??? I?\?l??e?'c?D?? ?B??g^????????~?8cB[D?u?Rn.?I?p?X??k<|?~m??S???;?s??VB?h?????[???Vd?7|.?J3f??/??81R}P??&G?>c??????~!?T?H?={?~???<C???????k?2e??kf?A9]??????G5??o+<A??????w?mX\??peE??;o ??A??X\*F??\??????k?????'???9?-?2f? ??V??Cv??S[n`??X?y?+i??9kp|??!?????????*%????????;P?!?????w?+?????f???O?&?????? ????AU?m?N???? ??e-????(?v????? +??\?2RtR??????{4FZF??/??89?????I????&???0;S???u??l????Z?1??T?????U?Dt"v-J????%"?o????Yu?-W??UO??????M??.??? +z?ism?evf?E??{? ????40S??y?b??NJ?$?~zk??a???,6|? +???2Cy??a?.?%|iJi??#??s`q_?&?u???e4TIK??s|???????m?)}?K???O??6???x?nw?3???S??i??}????pBSl?]?+ ^???|??NvSZ?Y??c??????_??W/ts???o?????p??wgj6???t4??w?&??j????????@??w3?E???a+y,F?Q???kz????qur?zw=?t???w +?B<3C???,Q?#??x?$?I?'?0s/????U?s??\? ??W?????????u?9)I~?."?$??z????h????=k???O????????????;??Z?(}5<rd???]???S????E??g]????g??_???)n???V?Xx????????9?KOv??T??%??S???yd?Ie?$i?;?.g?????????vv??O?T?wx+V??a(??????7???6|WVFM?s?/??]?????j??b]????[?wF??v?? +.?uk??y??%?x????6?3?O?KD?/pwF?U,r???+1?{??qe????I???7#?????c?\Gc??c?VK_Qb?,??*g ?????? ?. ?L!?b?????"??endstream endobj 154 0 obj << /Type /Font /Subtype /Type1 -/Encoding 282 0 R +/Encoding 302 0 R /FirstChar 97 /LastChar 117 -/Widths 283 0 R -/BaseFont /PEQYBR+CMTI10 +/Widths 303 0 R +/BaseFont /CDHNUC+CMTI10 /FontDescriptor 152 0 R >> endobj 152 0 obj << /Ascent 694 /CapHeight 683 /Descent -194 -/FontName /PEQYBR+CMTI10 +/FontName /CDHNUC+CMTI10 /ItalicAngle -14.04 /StemV 68 /XHeight 431 @@ -1376,10 +1483,10 @@ /CharSet (/a/d/e/g/i/n/r/s/t/u) /FontFile 153 0 R >> endobj -283 0 obj +303 0 obj [511 0 0 511 460 0 460 0 307 0 0 0 0 562 0 0 0 422 409 332 537 ] endobj -282 0 obj << +302 0 obj << /Type /Encoding /Differences [ 0 /.notdef 97/a 98/.notdef 100/d/e 102/.notdef 103/g 104/.notdef 105/i 106/.notdef 110/n 111/.notdef 114/r/s/t/u 118/.notdef] >> endobj @@ -1394,7 +1501,7 @@ x???UX???p?w'H?????????[pww ,??[pw???!k??????s??s? ????U????)H??D??L-$??XYxb ??,?FffQx -1??????????/???? ? ?rX?y?YA?1'go?????Z???$.????????`?fm???????dfc?????????+@????aa???0?1s?ZX?8?3??$?h????????? yX]AR?i?@??N???s Kx&E'P5 ???Z?{rIw{{E????N?_?&6?????????f(8?[?w????)X???;??Q7{3G+{ ??l\%m?,??m???n at w??-???h??e??,????J??M????????????g?'?_???A????1???????? ?W1 G3'sG++'?4??q|Y6??^ /?0????hO??N@?:??` ??8???;??????????O?????`?O?????L?@3 G??1n??(?j?????3?2M????r?Y?;?_??aV???????? ????L?D at R??????9?%d??We?????????????'?`rr??7s?d??,?;???/i8?? ??????4?????/i?????q? AV!????????B???_??? ??I??:V????_~????????%.*?????``]\l,?????if?@?????$?E??lizkXXxY???-;??}??h ? ?(?????jMTl??????n_>!?B????R???| }L????5??OeZ?{?Kb??????q?O?G??l?#g??? ?????Kp?????T???????"ejq??M?~=????O?\????a??l$???.???[????P[????mt?N]??/%??)?F`?fbBXE?W[gm"?????????b ?`M??L?9u?Yu1??k????s{j ??`?o?p???x'???0s??|6????3?Q???Xm?N?X?%;?'??_cnU??*x????7????`?t0?B?w?X?T?:O??&s ? a?7?????f?H{?jL??|???%$???4???@??1xL?u??????????-;?v????)?\?????sD??RH?8V???KX5????^j?T??z!_q?]?s?b?AjH?????????%????~Z?d(L?6??????By???t[Z???(j?7???7^m?)Ot???s)?I????????j?9?3 ???????<~^??,I?yp8?W???].??Q????F?edL???l?}/?? ?l ?????bF??WLoNI?D?H?  ???9???r ?&Q?"????????v?/ ??i??#?+D????=C?v?u4cU???&??3????Wt?z(???I?6??T?????z_??b4???g?/r?Q????N?NK?_n???\?y???A??????=?????FZ0??a?*? ?nE:???E:?gm8=qw?}?????l?????pl???`?????\?? m_?wU??????????t?????????*?? @@ -1441,23 +1548,23 @@ ?l?????;&???????&~?{?^`?Cr9u\?????5?{??0s+{D(??2?3???N$?J?"?? {???l?&}?r???S??*TA?6?????\????Hb??m??1B??9???3?X?by????,45?S?l3?* ?&?.ba??@f??:???|0?`???_5C?'???l?????Q/?2+?}D??;???^?u3#t?X?F?w?VuO????e?$????O"h{?B?u}?D7?Q??D????0?U???>F?+?????7????,)uS??????{???fb???? ????+X??I5??l/A?s? ????[Sw????z???5?^?9???????:;2?XUi=?? lgLug?[embZF ?g??M??{?tv?>2?`& h???J??Uz??? ?V?^????>???y.X!#[H??0???L?y?F?????x???(???:J! ?0\??t??b??=aK???}?K/?????n^m???:"?????"?^?a????4?!l??B?*??FF??? ???????'Z??????WQ??????(n?Q?S??z??67($???+%????c]?_;?d?????'?????W?{z??,w??T?????F????x??+??z????bP?e??1?5??????????Lv~?[?????????????d$?)??Kg??V@??????`???L??(:t'm?m.?N9HY??#C?Ia??M??P?!?=Y7????P?#??tC_/6?? E.?q????}?&???L?H1r?>X?i??G7??{\&?W????V?/?c????s? ?_yx.nl????,?U7?FlI?????Z@=???$?_????G????9L ^??DB| y G`w??'?s?c??~?3?????.??+WhO????8???|?? ?????-?M??5U ??? <9X'^??????PK??J?mm~?D 8?{?j??Q?y?]5!??Mi?2^??4??3???nya???+???????+??B_{?YT&?-? kR?B_D ?{e???X??????T???RK2q??????ZEyIMT?w0??]?^&??e?1??????e|??h?B??G?f??"-K??????"?^?o$??g?R?P-?P{????c?N????A??P???!pM8??jg?)?p? ?O????????N? ?@2???,??sh?>8j?*ia{xGI?Q?k???????q??]B E+<????C?T?????>U??+#? ?T????4?g?5j0?y$? *D^???o???(???2+?? Mrfk|?)?u?>??v?}Y|C?9?i3? ?c?* o?%??I???? ?r`?I??l>a????P??{? ?y3??G??LTX?|??1??_E???????:?$fn?_10?@}4}???`Op ?.???????? ??????j?[D?-???[)p???N?Q???jkzP??2?????A?P??I???j8?? e?Y???-??????bv??j?$y$?^?x1a?_??????HD? ?}]Zb`?.??O UH????? 0},?????????Y? ?h?4??E ???i??u3?k-?d?????A *???????OL`foatsr0????3?"endstream + [p3??>x1a?_??????HD? ?}]Zb`?.??O UH????? 0},?????????Y? ?h?4??E ???i??u3?k-?d?????A *???????OL`foatsr0???q??endstream endobj 126 0 obj << /Type /Font /Subtype /Type1 -/Encoding 284 0 R +/Encoding 304 0 R /FirstChar 33 /LastChar 125 -/Widths 285 0 R -/BaseFont /PLSZWR+CMTT10 +/Widths 305 0 R +/BaseFont /AXTQZT+CMTT10 /FontDescriptor 124 0 R >> endobj 124 0 obj << /Ascent 611 /CapHeight 611 /Descent -222 -/FontName /PLSZWR+CMTT10 +/FontName /AXTQZT+CMTT10 /ItalicAngle 0 /StemV 69 /XHeight 431 @@ -1466,10 +1573,10 @@ /CharSet (/exclam/quotedbl/numbersign/percent/ampersand/parenleft/parenright/asterisk/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/equal/greater/A/B/C/D/E/F/G/H/I/L/M/N/O/P/R/S/T/U/V/W/Y/bracketleft/bracketright/underscore/a/b/c/d/e/f/g/h/i/j/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright) /FontFile 125 0 R >> endobj -285 0 obj +305 0 obj [525 525 525 0 525 525 0 525 525 525 0 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 0 525 525 0 0 525 525 525 525 525 525 525 525 525 0 0 525 525 525 525 525 0 525 525 525 525 525 525 0 525 0 525 0 525 0 525 0 525 525 525 525 525 525 525 525 525 525 0 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 ] endobj -284 0 obj << +304 0 obj << /Type /Encoding /Differences [ 0 /.notdef 33/exclam/quotedbl/numbersign 36/.notdef 37/percent/ampersand 39/.notdef 40/parenleft/parenright/asterisk 43/.notdef 44/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon 60/.notdef 61/equal/greater 63/.notdef 65/A/B/C/D/E/F/G/H/I 74/.notdef 76/L/M/N/O/P 81/.notdef 82/R/S/T/U/V/W 88/.notdef 89/Y 90/.notdef 91/bracketleft 92/.notdef 93/bracketright 94/.notdef 95/underscore 96/.notdef 97/a/b/c/d/e/f/g/h/i/j 107/.notdef 108/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright 126/.notdef] >> endobj @@ -1481,61 +1588,52 @@ /Filter /FlateDecode >> stream -x???e\????A???????;?{???CR:?%%?C iAP?????3????????s^???y3?{?????Z????N?%????T???????[ ?*???????db??A????N2`w?0?[H? ?a ??p? ????@?Lig????;?E???&??#f ;T??6PG??x? ????p$Z?phA??0O?%'&77?????Z?:a?J??d? ?W?????C?P?<???h??????Za???^Px????S\???A ???????_?`G[???pvt?p?????P????A?N????l???I'k(??_%[79[o????;?`vp??]?:Y?g????RRIVO?????A ?????????u?????:0[o?'7????/??0?u?8[?:?_>~?`?? 8????N?Po????????/?+??3 ?????6>.6P????*??.?mr????'B??7???I?&???$J?&!P???~???x@??WQ?M?j? ??? ?55~\S?7?5_?&?????????N ?7??,~??qs? -?@n??-??@???7????? ?????:?Fn????u?????}a ???????????cx???^?~???@x ??????????/????.?+??z??5B<`0????7 ?0???l?G -??B0?'?!"?????d ???!JY7&?}?m? -?z??P8??7??/ k?LJ?W=???5????0????6r8??{v????mu??L?Xn???::?\>JI?6?s[?Bmb s?P?|A??????????6????"}E???Gq??w2????wqkX?X?x???&?d??????%??n??????????`_?P\?4?7?:-???/fS??*??$?j?!Km???\6_ ~?|?U???? P9???h8?T?????^???yv????????83??8??? ??^t?&?Ua????????????"????2???-p?s???cI?j?(?f????R*?@?n&?I?)YBH;??0{V?rk"?E8?Qt?L??z?????????+?4??V,?!c?f:p5?l%Y???ir at J?;??@?b??e?B?e@??-e??p???&v`a?????&!?? ??1@?q_?5! ????~???P|?X!]n????a?;??+Rz^????????eBM+??R{o ??$??A????i= ???b4?????X&/a?=?>H?a??|?Z??0????????b???????ju?6??????o5rb'?a???? ?b'? ????;>C#?B?? 2??G.????????2Ael????H?z?,?????z????d~U7z????G ????)q???`(FA!W??.??????????W D??%? }o????~N?????.???>??Nz?????~????9wc???4>?6??J?6Z??U?~d\????@???)?F?C??-?????? -&?+?S*i)?/?q/??;?????i -??????zn???q???rF?IHl????r?? ?i!jx?0*'???|?m?a????C0?(????pt???z???]D ?v??\SH????Uf?'? B???)?AV?V??5Q??;??< M???a}#h???? B?(S?I??]?F4????h?f??0v=9k?E ?q{???\_???)uG???`?gj??am?a?0????_m?fou3K???++????f?b=m????[?M?A9???-?????c,??V{m?}c?}????????;?(< -#2W?;?#??u??0%?????/,?4?T????QtF?M~v??d??b?=??3??????/??e???2?????rf~9&N?K??B??L?}l0??O=??$pLM??' ?[c??NQ??Z\?IT? ?5q?%f?@??????x?n?.?b ????v'C+??~??_? ?w\D??o?????U?????F???*!n???x?,?E??? ?@x??^L?? $2?uWjH0?[??nY?g=(?A?? bl/????)('l??y?????mR???H??7??@A}?b?P??w??w???[?f??????B???l?g?7????rH5}M???V?@wsO7?$2+mGS?z??v?Q?`^Ie??c???L?,:?K? a\kn?????????????[???m???R?c+6??*??hU?0????[???\?5FV_xt?+i???????\^????lM??'?E-??? i??t????? w%b???? ne??wB??Z ???????[??DO8`????~?????U_?]?]???f???5k]?Hd0M{?????F?v?c[52>??OB???{????6?V???zh;|??v????n*5??1??f ZD?W???? ??]??? ?<Q?"s?s,?w7??IBB???v???????d??f?/I??fN????I?9????a??????3?~?x???.???2??wT\?Q?????w?P?N01??Z????A???? {u???zI?=??????_Sv?t?AAZ??W3????*????3?Wq????????H???? ???=??K ???C=u?????{0S???z?_??Nn????+g????p?@Y ?. 9w?c[???Q?pbm???e?2???u??U?5?q??#k???x?U -??S??Ec????S?_9[?|?????UU?oR?t?|???Mo?X?C??$?????5???Ry??? v?[?u*???L??AT?c2?+??7q;_??\??%?h??}[5???%???jF?I5w%??~????B3??-???[?? -?=?[I?`v?>V?.?????? ??'I????.?8? ?~?y??$??Z?qg.?>?!??9???????w??.?;?????K???`?????tW???W/???biW?);?? }_??dRy?,M?b??<???x?_????~?4????l?'??6]??L?G4??U??yU?h??????????? ?~E????|g????dZ?{????Wt????N&?M?????y?y???X?J?|>?=?DN8Ur?E?8p?????)'???h0&??/mUd???k?s????2???o0?`o?u?-?DPj?? -`uQ?l?Hw???+?????O??tq=t?????_3????b?#._\a??5??????)[???????QtP?'a?jZ?h/?'?P??????O -Ys?7{??h????b???j???Kr??;e??rx?^7?r??YYe{#??F?s????}?? ?J?p????U?ig?Z?:f?w???8?bn?????a-????e???*w???w?? ?D????A?t?7??L1??Z?-??c?? ????`s?4?????!-2XoT??)??r|?g?=E&%?5^???n???\0G???-\?????=?g -?\????Z??d??ds??:?_?~qs??0???E?S))q??qz??x??????e??^e?????mV?qD??A??G?vx???G\??2???^????m - at 9.?$_j -???!??tm?//>??D?5?/b???2D?r????uf%?n???lHr?.H_?`vN?e??B?L?I??????R ?f ?o_?s??*?????]]zY?? ?"????`???6g????h???L{?????y?Pk?t?q?????? -?+^v???????8L?!??" ?5???7?zcb??x?s?? R{????? ? ??_TYq?????V???e ??%j?M???6???E_A(j????"?????.????)t?H=??A?LaC??<?? v?[???l??I???????_\?[F|i?vh?I|H??3y&1En??b??????Fss?f? ??&????? (?YBU??5Q??`?$???;?Js?Q#D?E? ?0`?r.O](XBKx?5?a?!?s?^?Ki????u! ?y???????P*{?I?Y?L|??u????6? ?XW????W????a????)?,? ?BI?????Yb v?^m?^/ >?Y? -??p??pmm?>&???????????7K??{?????Sy?<nSE???svr}|XLg&?7?m5g???? ?????(?o?u\????/???? -??;;?a??? ??m?endstream +x???e\????A???????A???s?.?????A$?AE?????g??|?u???~k??&:?W?N?P9'G7nNna????7??? ??I??89?????n!!n????? ??/? ?a2????a6V?ni????P? ?P?YC??=?????? ???h?5?? u??_?? ?????????P????*????mr????'B???~7???I?&???$J?&!P???~???x@??WQ?M??? ??? ?5?\S?7?5_?&?????????N ?7?????qs? -?@n??-??@???7????v ?????:?Fn????u?????}a ???????????cx?????~???@x ??????????//????.?+?????!?0????~????6???zA!??N???? ?e????Q???U?v??a?N?A?/Pra[?????$??@?????r?n???!w???1???a????L?w?????L????0v????6?0X??_??s?u7_?EFkm??????+?5???\??vDX3/?&~?KY$(b??% y~(4?6??}????????]??)???K??4o?U???????A??????T???W????fs???f?=;}?f????y?z,???Z ?T.?R?&?s[?6Bmb s?P?|A???????????J???"}D???Gq??w2????wqkX?X_?*?M'L???W???qM?????{_i??O??8?????ijo0uZ*??_??(?EF?Ht? C? ???c?l2?*?2??R? +c2@????????R1^???z??F????wo??VJ???N?HV?>???v???{?|4?T??V????a??%??5???g??J?P??? ;?=F?~x???8?g????5YP +{???k9?O????*?????@???????gy41c?kBF?8??vX?4(/`???_?ltRYuc/?? +3???nL0 ? ,`??=??W?[?m?????%?+??)???KW?r??s?2 ?i~C7-?Pgo?/??s?KZ???a?]?i??O}\??8??V?]?????? ????l??8????5????0???o?:?$??wB??USa?{?d?????I2p]_K|?,??? ;P??s??5'?7??j??guy?Z?@v??\$?i?2^???#?????????B???? f?b1V???Ek???Pi?D%Q??7?.z???B? ?w;]?X_? ?9?|?????> ??3S?F???D6?.D n?F??????-2H??x&E?36D?v>WK?4?!???Hc d???k +??p???????A?t'???Y?I!l????t,WO??.??Gm"!5??DiPE??n??E?Y?????U?????N7??I`f?????tCF????V}??JI??????C?:??%C=;3:?K???&??C?????B???????v???Q?'?m???Hg?l???G???@??Wm?a?????8_!_????q?vX?^????*x?0?y??%W?U)enX?7?y?A?6??wd[?d;??a.]?G? +y??]c?'?4a?W???v[hJB?)??8!e^?a?0 +???H<&?"?8?tK?Y2????`??%?d????%?F???/se???T{>?a}#h???? B?(S?I??]?F4????h?f??0v=9k?E ?q{???\O???1uG??B?{j??am?a? ????_m?ou2K?f?++????f?b]-????[?M?A9???-?????c,??V;-?=#?}?????>??;?(< +#2W?;?#:?u????Ba ?9_X&ij?r????0? +?|m?h????{?g???w g^??????e?8|?-?L|s????,?y??????`?XlxU?????\?????;????? +? ????v? ?;k?0??"S?F6?L??????4??Fu?a??#?Zm6XG?<;???gzn??t'???0`??]\]??)d????|y=?XD????YwM9*?r?z??r'?lq?e??I?????#??????%T?l??'??B??????#Z?o0??_??._?????N???^??????tVV??????C???klD?*p2??;??Av?hY???Z??????+.N???`f5?mP?d'??c?????m??????"?7!???sP??M7????????B?8?(??, ~ 6?qci=n?"!??F%H?r?+???z??S$`R"Z?U?|?F?Z?sx?!????????Q z??9Z??????v6?O6??'8?31z???0?(S??Y[???7?????? +P??_????U?Om???f5kd????xj?w{????-?o????? wj???????U%En??{x_??yM?P?????V??D??O-???????q@9|7?Rr????R?"??p??????E(????KMA?:?H?JBl?d???2?b???vY??P8Sz5/?n"??????@???????J????hW???_??b1C??7??6???????1x#??5~??v??#?,]m?wa.???L???????>@|=? ???n G?g??????'?8{???m????Bq+?UV?qa????JtY??F?jn????5~b{?W?j?7??H?'k??K?> endobj 117 0 obj << /Ascent 694 /CapHeight 686 /Descent -194 -/FontName /SAJEWQ+CMBX12 +/FontName /MUPPBE+CMBX12 /ItalicAngle 0 /StemV 109 /XHeight 444 @@ -1544,10 +1642,10 @@ /CharSet (/hyphen/period/colon/A/B/C/E/F/H/I/M/N/O/P/R/S/T/U/a/b/c/d/e/g/h/i/k/l/m/n/o/p/r/s/t/u/v/w/x/y) /FontFile 118 0 R >> endobj -287 0 obj +307 0 obj [375 312 0 0 0 0 0 0 0 0 0 0 0 312 0 0 0 0 0 0 850 800 812 0 738 707 0 880 419 0 0 0 1067 880 845 769 0 839 625 782 865 0 0 0 0 0 0 0 0 0 0 0 547 625 500 625 513 0 562 625 312 0 594 312 937 625 562 625 0 459 444 437 625 594 812 594 594 ] endobj -286 0 obj << +306 0 obj << /Type /Encoding /Differences [ 0 /.notdef 45/hyphen/period 47/.notdef 58/colon 59/.notdef 65/A/B/C 68/.notdef 69/E/F 71/.notdef 72/H/I 74/.notdef 77/M/N/O/P 81/.notdef 82/R/S/T/U 86/.notdef 97/a/b/c/d/e 102/.notdef 103/g/h/i 106/.notdef 107/k/l/m/n/o/p 113/.notdef 114/r/s/t/u/v/w/x/y 122/.notdef] >> endobj @@ -1561,7 +1659,7 @@ stream x???eT\????[?{???]????qw??????? ??$Xpr???|;9??????f0??5W????UtS?*?1????%?A.??L?|1UV+ ?(%??????$n??????$?&?7?_>N>N6$J????????? ?F???$n??????P0v????05????Z]?j{???'????x?7?????C?r?i?????I!z??z??sqkK??j???Q?????8??s?m??}???? @@ -1604,23 +1702,23 @@ m e2Q????W?p?????-Pa?W??|=_?eK;y?NK):?=????????????F??????N?SA?Q%%? 1??????K]?kd???I?Yd???DH?Z~GB{?n#u:????P??YU????(wf??D?M??n?72G&????\?r &??F*6?+.????t?9<>???????BM????-???_???{i?#??2l??g7?iD?????:;-?K[?????V5?????? ???????4??TR?-?t??? ? ???`B;????Wn\?T?)O9 =!????????wOc??????t? ???K7??????=??E???'?f???l????????jQ4?!N?S??Mx??y_ %?Q??%?>???g????????u3?0A?w???????/\)C?h??@*Y????????U???k?ap?p??]???l} ?\\P?D??????K?~&?C?4=??????Ox:}k? ?????^???R'p???????V[??3~?????pop |??]??5&Ti?2?A???z??C??Y?w?|?T}>h*??`Q??2T??A??hFi&???\V??|Nu?o&a??H? ?S`/?{ }?oh??E???_???vZ??#}e?HSp?|\i??E?K?~ -??SxtA?9???h???2;rR??????? ?:G9/??+?k??~^????'=?|\5?????? ?Qd?????????{?UZ?'???&l?KU;m?\o?????p???`????@%+&???????OL`j 4vr??3v?A?_k???endstream +??SxtA?9???h???2;rR??????? ?:G9/??+?k??~^????'=?|\5?????? ?Qd?????????{?UZ?'???&l?KU;m?\o?????p???`????@%+&???????OL`j 4vr??3v?A?_hG??endstream endobj 95 0 obj << /Type /Font /Subtype /Type1 -/Encoding 288 0 R +/Encoding 308 0 R /FirstChar 11 /LastChar 122 -/Widths 289 0 R -/BaseFont /NBCCGU+CMR10 +/Widths 309 0 R +/BaseFont /UHXIPS+CMR10 /FontDescriptor 93 0 R >> endobj 93 0 obj << /Ascent 694 /CapHeight 683 /Descent -194 -/FontName /NBCCGU+CMR10 +/FontName /UHXIPS+CMR10 /ItalicAngle 0 /StemV 69 /XHeight 431 @@ -1629,66 +1727,85 @@ /CharSet (/ff/fi/fl/ffi/quoteright/parenleft/parenright/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/question/A/B/C/D/E/F/G/H/I/L/M/N/O/P/R/S/T/U/W/Y/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z) /FontFile 94 0 R >> endobj -289 0 obj +309 0 obj [583 556 556 833 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 278 389 389 0 778 278 333 278 500 500 500 500 500 500 500 500 500 500 500 278 0 0 0 0 472 0 750 708 722 764 681 653 785 750 361 0 0 625 917 750 778 681 0 736 556 722 750 0 1028 0 750 0 0 0 0 0 0 0 500 556 444 556 444 306 500 556 278 306 528 278 833 556 500 556 528 392 394 389 556 528 722 528 528 444 ] endobj -288 0 obj << +308 0 obj << /Type /Encoding /Differences [ 0 /.notdef 11/ff/fi/fl/ffi 15/.notdef 39/quoteright/parenleft/parenright 42/.notdef 43/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon 59/.notdef 63/question 64/.notdef 65/A/B/C/D/E/F/G/H/I 74/.notdef 76/L/M/N/O/P 81/.notdef 82/R/S/T/U 86/.notdef 87/W 88/.notdef 89/Y 90/.notdef 97/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z 123/.notdef] >> endobj 91 0 obj << -/Length1 1288 -/Length2 7342 +/Length1 1224 +/Length2 6620 /Length3 532 -/Length 8130 +/Length 7382 /Filter /FlateDecode >> stream -x???UT???qw?P?????S?C?`A??(-??x??Z?)?bE?+?r??>g??s?}????!?\s??e???zMv)k?H? e?????Ips?9???1??e?@?P0?Y? -p ??AV?7?????=@???????d??HH9???@Kg??%????t?@?`?? ????c?;@?r?Ys`ps??@(? -d v????I???+l????%O??;L -???&3&i qv?X?l08?!?n ?????,.????n??G??'?_??N`G?e@?\ ??dD??e????"?gy?????=??_k\?W?kb??????v?o ??i????????}?????~x?????T???????M&Y???4p=?? =Y???????"?xi???]?^?E-{??&#-O??G?5?.?@?=n???S??n?(????^?A1?)$CZV????G?????k,?4??YM??e??z//???riB?????????p??h?eh??????l??({???w??3h??{????????????"????'m?*7?ZD?~??????W?????Cl?$(?[??+?E#?n??]2???f???G????Pk??(??|???6y\?}?o?? -??8b??????N??'^???a?3=??8??B??/ex"????yc?oi<'mJ8D~!9% ??Z??[?h??????E?????Z??X?u??? ?w?????r?Db??3???/Q?lD?W???8???:0?r~zq???G#???LG?~U?nX??+???W??U{q.#??k?L2?k?,??`Si$???? ?e2oDOO?8?_9?@?????/?X?B????jS`V?.j??????>???+$<|?v}?SF??+W?*W?^QS????????b?8_.?j?y'??BM?do??-??C????;?GT?/?f?"?ov?????A?'l C?G?x?o{O?e????B??,??z??V|??@N9??w?????????LV???W?+?U???C???p???9?.???6t????-o???-???j?+??d?e??8\?5????????15??vv?a??e?J?G%?-???? Y??V*???1?Yyr#??4g??d?4??CfMU?hov|?N??B???]?&?@?{?'H?\#X???H???G?7d???0ktU??VOQ???r?Sp?^K?3?tCgNlt?'u???>+?B?\????^?????{??????]w???[>????&{-?????D???l}???2W? -???;m??II>S??q??TB?cM^??i????Y? ?@?????,~??]g?????????gQz?}s?[=?Z?O?????????':g'??X??????bt??uVr??]9)jo?b ??~!?-?f;??"?*??3R?????8?ZbB??m??\2"e????????EVh? %[i0?eo?{??,??Q?o#?.???O?d?wlz??Nf?dLjc?K??Y?U?AV\??????G??}8???g?_FeK? I????z?-r???d?/?|"??%^jg?7?O^R?o}r???C9????^???k??y?&???????07?]6[?]`> ?(*~?g??R/ U=F?ut???|????T???x9l????r?\>O'??[??r+?]???F5?F???iR???T,??;?J?m?E?F#)??Yj???r5??@+??5%p???(b?b0G??W??Ac?F?????DbX???????e?k;s??}??7^| ?????"??????+?i?v?9?gd?J??????????aH?/H?!C??'???O$?o/??j.??????B??#?\?1??(??l/?n??O???G??[?8N??^?3?t!c3[N???H?kU?+?E?????????=sc?]?1??j??-F???/??@g?G?K?kv?A`?3?6?a?????-D??=?VNF?Sd??u0a???-h@x?I???~_?_??j???e?0G%d(?y?K\?1??c??_M?? ??i?j?????$???J8K%6(???J??Z=?tg??>C?b??}!?]MT??_??S??.??m??????z??k?????)[~?g ?t%?V???-?$????L?d|????/?????G,6??S??4 3$v+?g{44*??w"?U??&MZ????????.??FOm'?\?>??x? ????E'!U??6???U??mNV?????aLZJ??U]??!{??8????n]???????????%l???p Zj?x?? ???VF5??????@1k??*???????4j???????G?????)????K?+???@r?0oO??'9?qX~q???????? Y=??B?r^???t??i??lV???da???6??.?T}??j?I????9d?????s???Up?>?biC???r???R??7?{?*?%~?U[5??_IB???gyN??D?.??&?*?D??x?khZo?yH?=u?5{??R??K???????????-???}K?^?N?1??U??m.~???r??????6???!?\?:?t?GE$??L??~%?}5?%???EXg#V??k??[*PTj_??? ?0???w? ??? ?R?y!?2??8oW33?.?T?Y??G?tt??????;y??g?4M?Z??????1t~C?!????S??????}?z?x???A????O??+?v? 4??????(}??^?XNT?n??K|?4m )'3_??!???6?q?G???Q?,??m???t??_????????N^B?? ?2??????$????]?2?b?~?&H??C?^??3r?g?*i?UV?5Hd??%?0??B??2?~;??\??? R???????I?1s1?N??????=?e??"?j?Oc???7?1r??-?(?????9P?? ?D??h? ???q ?:A?My?w5H??Y`??V?????TM?k????@?G0dS??^I?|???7?T?c<K???????gCh?.kS?qsREu~D?4?b??(??>t?*??xP?X?????#Q?? ?v???3????????Lw'???-??????6?X?p?A1?B?[=|????K???S?u????5???a_'???;??????W??2????l?????#y??"HBx??sZ??????c???.L$ ? ????"L???~iW?_??s? M,?????(P5%??H????? ??? \[#???????K??;??LZ???]&??n5?????n???'???F?S???|w5?L??X^`??+?S?%|1????????d???{??????O?e-Db????Y?F ?JH???$\?$??v???l??d?E F??C0T0??mw??;u?p_Z?6??? _?n?&?e??@_???u??a?+?]????H?? ??oq???n??6W?}?'7???????J3??? ?k`h\??Y????W??M??Z?s??b????'?m?L?R????]???d????,?'?? ?k?. ?????^?Z??:/??`m ??=,???_&??IYb???i??j"??e???CgUz???j?.??"??????-q,2?[-/?+6A???-Jy????\???Mc??&?Q????L??~?gR?P?z`????)??@???2????C!?eG????X???????F??>/V?????.???@`????h????1?P??????+(vss??K?M???Xk7???Y??????q?*???")M??F?i??"6?c???/w?g?c???G? ?J??]+?7?5x1-C?????? r??!??,??|E??L??????_? J? ??()?}N?}?%??? ^?%?Lz(\.????K?m?y`?{?*?im????????Hl??|:?|?1=y???>j[]?B?????!%QE6I?????????EH?l=Z???}_9?!J?x?o w??Y? ?qo??y??e #ni?I?$L???J??"?B?(??????q;,??F???????F???G-c??_O ???'??Y?6r??i.?B?}?M?^LbXfAx?Y?6r?Kl|?,???9?.$??i??&,08?p?b?S@[2?????yfM^???t/r??#??????_ ??-??/?-?[????????@??yMV2cjR???b v???(Ui*??Q??v:?{K???2?t?????????f??(Q??F?YN??y#??a???.?-W???$?.??????t/??#??h?z,? ?d?D??????i???>`?C]?bSJ???t+s?7D?7R? x??n???x?q??? ???7??O?X?\??????Ir?'?y?F???m?????i?n^?+???e oM?Q???*??c???6??????M4M? -w?n_(y a?mn? ??38?9M?Q>??????>#0G$l%t?_I?p?UDf?9?p?v?Xr_H??2v???????M??W?????x?b?>H??!?????`JcHv?!J??2?Z0?]?A??-?4Ur?????K?5j?F]?D?Mh@H?P??F???9??js??~????k?]??01x?? 0????2?6??3?\??????3C?Y?? Q?A?I?w?K?[?L???a#?~?l19??/Y??????_N ?????Jxx???= V????V???1?FV???o? TJ>}??????r?n8???z9??q3??m????????S??(@??C????Y?s?{??3?7x(?M???-3?D?.?????FK????????^???(i?Sa?DB>{ v[??~?????U???\o _zm?d?I????????B??;C?e?$??gs??'#=?8!?KR)?????4?C?*,M???Jn??u[?^??? A$N s!?yr????JY/{?E_\[??Q?C??b?xo&?WP[??/?d???b?]??N?m?R0?#5Y#? ?:?Gk+a$??iL?ul?#!2+MU??{?&c??_W?O???64>?$*%EJ%WRJ?z????????.?'?*1???g??u?????m???V??N?x?,WV?V?Z ?b?b? -GsoTB20L?^?8?A/?`??F???N6??GRum?????y????t????Bs+>N??????Z???G??????.#L??x????@6????????????5??????.????(F??t??iHD??r??F?????)?N^?p6??#???9???dq???? ??SWtD?F)$?.??? z?qT???5P?^e?????WqmW?"??????s??????D ?.?????O????vba??4???I?aR??H?:??t??^?Y??n?T????]3???2ka???? D1,??tG?~?F2????2\??z????WU?YZ?????vG???"????c??$??????S?? -?(?????>?Y??W???{???BB.F?`?cn?.?? qh?N?a??-(t]5???4??>?0h???&sO?????3q8?a[???,??:?#???[?????a??OF -k5???&>??? ??????%??cA?y?/]??;??]?We?>'??`m?????V????|`?o???? K7(???????.4?endstream +x???e\Tk?? ?FJr???!??`(??$?[?%A???PJ?.?w?9?}??}|?O???=?]k???[???1??P?f Q?9!??:CJ?]????6?-63^5?ghxm83]?5?N??F?_(N2y????{7O?]A k??????-3XD?X)j??U?Q?8??8\(l??8)???H??Cv=?????Uvn?? ?K+??(W?????L?o?J?(P\?=?{?ViNmq??o9M???*??????????j??? +K}i? ???f?z /?Z?????S??'???`???~I}?1??0F +(J???uU?????:]???o?? ????o??r?P`?m??,?????}?_A???z[?O?y ??1Xw??(4%v???\4???Tf???Ox??1X??mj??u?????p?gC??It?: ? A?????0????H????&?4?,??M?r?l?Z???????S???A??L?.???????T<x???9??oh(?K????STv?u???%J???R??@?Q{.?? ?C? : n[.?P}?32;f???p?*s1??|.?U?'??9?w?p????RSpd??s??N?+K?Y?k?{*???~5?3???A??????,fJR??#n???}b7???#~??C??e?b???kB?1?q??^????? ?3?4:?T??*??????uCi? !?Xs??&N???*K??.? +t???? +YZX??????????Dy??$?????Z=??f????H.D/?)????9??Z!??.???E??=?R:???sny??ETB*k??8???/????B?p ???[gy C?H??VIWf????fq`?Y +?GZ_??????*?4?J?????%m?q??????Z?%E;Q2?M)B?!?YxL?V?!??|?6bih??T1?!s{?c???????%??-g??r????????`??($??b?-??C?(? +Z]?$&?Ke3??8'???*??>?I??Z )zH#??$??X????k??)v?>?H6??v??T?}?j?^++???b_??.??????????a??b???!?t?r?C|?-? +,)h??f???l??n??~??t at dnVj_$?K???"w???H:?:k?????j?????` ??????I?????????K?;?G????jml?I~.??4\8l,7D?o???????F?C??w??l????e?????t?W%4????????\h??y?7|$????q;?y]4??1??????R}??1=?To???~???Je?p4?$?EaJU???I1 ??-AP??_?? }?z????????????{???????x???T^?{?%???5RJ?r;??????G???'????f??B??2,???ck???????f???0???^Y????N&8;Q:?s?E???????&?X????hT???H?9z?K"U0??e ?P? ???:?_???f??????k???h??7? ?? ?'L?2?;????t??Un?????R???FI??A??nz???y???c??M!]Y?(Q???????Sj?haE}pAq??O?s6?Rk??????J2??7i?????????SNP??"?s??hf???1??:z?SC?'z?s?Nj ?p/???????vD?E?m7v?????????1^!L????O|(????F-:?????3???6?.?'????>???;8???x?J??????m?Y????o?? Z??[??? ??l /??~?F????? ?1y??HG?v?(??=_o?A?L?s?;[????{]o?????r?/?J??4??i??\+P???b???i@?}?????CJx?A?1?F????;??7E&?*d???R?ND?m#;=v?:??c??/??9"?d`??|??????e??C??????U?j?f?? ??A????N?.7X?J???D?n?E0) !9???=??+Ww?(????fl???G????P???V}?8??@5???F?????D?a =????n??8? ?Dd.\????DE???????Y??+?B??????????????V???\?[2?nIZ?{GSv?*?E8Y???k???p???k???9f??#??G9?z??qu{?(Or?B?.???>???????#??Y??Tc-?7R"??v?z?@????.Q *? +J&? ???+!e???C?x???S?R?b??H?|>?D??r?n??"?K???v?? i:?|???)??i=??m?\?(??????????B?]I??i??????'fG`?8?E???Hb??????Vu?????$"s??m??G$[W?Z9??KMID???x?? ??!\s?g?:S?]???@??ko?x.?v?????E??E?CK5?i?mo???)??X ??)?V???o?I?}LY|??ifT????,?u????????? Q%?;&l?;?%?4?I?Z???%#???J)5?.??r?l?C;?K:;???}??"??p?+?Mf???_%??(?nU???? +? ??x??#???[????E ?????aQ'o%?_???Z;|?????? Ko???Dh+?????g??.???2? ??W????????\?U?CP???u???S??=?!5??{z.aW?g?6?#??9????????`:[+f???? ??????C<9???"?=wb?l|??Uj?k??&??=?Q?G??c'???"Y ?K??????l?[?1???Xc?B>???BQ???MT??&??????R??$???????_?^] F?b?????7???h?~\??jD7? +N???????9??s?????#?w?#?0?????T[\Y -?B?;?b_?9f&??pb??%????j*???,?,Q?]7?tT????)?r?^?@ ??WuI?y{X???i???Z?????i`(?????_?????N????????GFv ?Vmr??f\?gnfx?j{"??rb?J?k??????wx/Nq??? vl?????p??>#1l?pZD1?B6`9?}???P????B???t???;?????P??rOq?Z\n?s?i??g?d???B??Z2?~?)92}P????_y????5??]??O"????????kf????$??%????????_?|?*?sR?S??K 4?'?6C'??~??????????v(?#?B?H??{?????k:?????-????bsF??v??????k z ????G??e?#2cH?H?L.??0????G?[??E??}&c??????2Y\? ~GR'6?c???Et?0CM?-d?.??) '??W???o???t?????l>)7? )T'??q????P??3??GD?" ???9???????8?;??u?zm/?X???H????????u??*{O?/?m??? -?????h??29 ???^=?????L????N?*?K/??zT?D?RgVB?,)????h??8??]???????a|?"? cQ?o:?Y?'?? k?4s???,?q|??{l#??-Dp ??"?vlW???N????=?7??I???T??W??d|?(???????????PR??>?$c?R7J?!?8?^??^???xdK?[????J?ZaO???_?F??l???c`???W??8#??#v?a??E????E?+zm]amh?KZ???????6??U???b?H????s?:J????d;L?h 1?b?j?;???@????iR[?r?? ?;? ??z?????? gD? >x?b??????!?7???vX????x!W??k_:T??????QG???????o\??T??*????YN???},|%??????????.?????W8???3F)v???|CC??0 9?]???g?2>???????,?_??1?NB?Q??3???u??%??_L?M????????W/??a??????e?hPj?????-?7o???????_??=? ho??'.??c???z??d????$}S???PX?Q?M????d.??6p???/=???????re.?????*???=??x???sy??)H?^8D?6w 6?????NS(????D?k,}????q<|?wi??%??Zf??????T3?]V??N????{?^?,?a6??????fs#B??d?b??~?,`??i?S'??wS???z?????:?F?< ?d#!????%e3?u??3??/z at e ^O????????# +XA!`8???????G??endstream endobj 92 0 obj << /Type /Font /Subtype /Type1 -/Encoding 290 0 R +/Encoding 310 0 R /FirstChar 40 /LastChar 123 -/Widths 291 0 R -/BaseFont /UGLSSP+CMBX10 +/Widths 311 0 R +/BaseFont /KMROOS+CMBX10 /FontDescriptor 90 0 R >> endobj 90 0 obj << /Ascent 694 /CapHeight 686 /Descent -194 -/FontName /UGLSSP+CMBX10 +/FontName /KMROOS+CMBX10 /ItalicAngle 0 /StemV 114 /XHeight 444 /FontBBox [-301 -250 1164 946] /Flags 4 -/CharSet (/parenleft/parenright/asterisk/comma/A/C/D/I/O/P/a/b/c/d/e/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/endash) +/CharSet (/parenleft/parenright/comma/A/C/D/I/a/b/c/d/e/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/y/z/endash) /FontFile 91 0 R >> endobj -291 0 obj -[447 447 575 0 319 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 869 0 831 882 0 0 0 0 436 0 0 0 0 0 864 786 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 559 639 511 639 527 0 575 639 319 351 607 319 958 639 575 639 607 474 454 447 639 607 831 607 607 511 575 ] +311 0 obj +[447 447 0 0 319 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 869 0 831 882 0 0 0 0 436 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 559 639 511 639 527 0 575 639 319 351 607 319 958 639 575 639 607 474 454 447 639 607 831 0 607 511 575 ] endobj -290 0 obj << +310 0 obj << /Type /Encoding -/Differences [ 0 /.notdef 40/parenleft/parenright/asterisk 43/.notdef 44/comma 45/.notdef 65/A 66/.notdef 67/C/D 69/.notdef 73/I 74/.notdef 79/O/P 81/.notdef 97/a/b/c/d/e 102/.notdef 103/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/endash 124/.notdef] +/Differences [ 0 /.notdef 40/parenleft/parenright 42/.notdef 44/comma 45/.notdef 65/A 66/.notdef 67/C/D 69/.notdef 73/I 74/.notdef 97/a/b/c/d/e 102/.notdef 103/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w 120/.notdef 121/y/z/endash 124/.notdef] >> endobj 88 0 obj << /Length1 1064 @@ -1698,34 +1815,35 @@ /Filter /FlateDecode >> stream -x???g<\{???`D??#Q??Q"z??[b??3???A? D???^?D??K?????e'?{o?w_???????|??;?????????+k???+??^A>A @^CWP ??????P ?T?b????? ?j  ??%?!B" v@???F??a??? `??a+?- ??iHi??? -[?:??r??]p?0?$??h?B:x?p?& -?.8??????+?:8hB???KC??Y?rtr??????F?????7 ?5????YU ??E?:???B%??Z???6P??8i?o???????)o?i???y??iCH??????????o?M????q????'??K CY#???? @?h?'?8????=p????( ?????A?A??S?6???;??????(???p??wDL?W?M???o?U?W??????R?7??F?n5???I???}8???m?@Q???8??8)??(?s??q??????????7*??????pR??????????WX??ED1q??RsE??H??? ?P? ?~p?F?$?&T ?????X??-???T??? l???.?"?"??h?????l????|(???4?U\`??:S??\?-8j??*?Y??=????2??op?????h?%???b+??maD?7??? gX* jj??n? ?? ??fZ:??Vi3?s???(=?(?8?$??D?|`??q????N`???lKXT?Q???A?uq?:S&??j? -h???|~??#.w^?a5?7?z?I? u??5?^E?P??s"????rK??????? ??TWO9?V? ??????????mG???PTt??5?1?#??k????u?x?}?v??DLwW] K?L??? ?f??oF?X?F??f?C??m'|?I?:???????T[??jL?*??????z?????.???Yh????)?+???m????F9?c?t?x?+ _?B?.j??-n????Hnxb? ??/?wS?|?:???,?kt/:J??o??W????+8Y?M??????AH4G????8o7?7???Z?IP??e$>??????/?R,??#WR3??:? ????U&n??????W.m??T??U?M??P??lH??DB?$1?l? ?????? =P???LE?Dj????6??!4??5?r??Q??*??p????pzG????j??????:????\??~%Z???*??M ???????jC@~RU??=??g?9??????5????J?0???(????????????F???_?n??fn??p8 46??I=L?x??U???%???????,k?\G8??!?C??g???8/??r?x???)???Zo?n?????C??n??I????&ix.9?8 \????????????d??l\???R??B2???????????b?JI!?????????P??)w?????@??!?U?;?ZW??L????$??3@??7??S?X?J?/2{????? +<??B?\?Q?@v????}_?#??b??dR????? f????\Z?R0??j???????!W;?:I???~??]??P???7??=2?S??jU???????X?^Rn????$VuEVG?)??zc???? )?"o???{h????"??a??*??^I????!???*???????9Hez r??????!?.J?f at O??M?:????????????c???r&??U?????M???U?#?? .#????_???XR??*?BY??F?|3}?#DF?????5C?7?????????2P?[??????? M?????>S??|#$?VK?-?L[sW????????a(f????>l?????.?@????????>?ZO]??0???J8????#?SQ????\????0J??f???m??!O?u ?P???Uhv???a?F??????uP?????,u????yLU?F?t??????0/.`~??#?z ??VV ?{?'?H?`$?e >?|L?w?P|$?? _l???a?&+f?dGH?U?%?????????????????aj?c?]????F????b?W???Y'5#???rK??+??4??[;??S?fJ???G`? K??AM?A??????w`?~??LK?_?*m?v??'\?b'?_??q33@???r??S?g?7??k?sw|?x]???? ?V?S??????`?}????;EX??M??e?4H??y???_??8/?????Eg-??R?/?i2?h????)?? +~???`??????2???????.?y??3?y???v??^Sy?N????????????a)?)?v?"a???????k?????qHR????6)]???}?=?j?>]??S?{?W?"S????E?<: M?{UJ??????????2|??]?????1????g?d??Y?7W*n?? ?? E ?l$?e*???ksK?q??l.?^\?r??Z???????K????eks?????1?2?f?'j?d?????w?????Zs???3dw???%???s???? +?????v*?iD?[???%??_\?r?c????1YAW??k?s??R???8]C_g$s?r?_V??b?1?/????????.sTXX??9?qs6??%M??[??-??|???RkAC ?:?e?????D-I3?Aq??3JX?n?l9?4w????M?w?-????(?e??i\?? C? y?;c?z?q????m7?????U??U??3?7SM=?9????6?J??f]?????0;??@??????3X?D?q??X?R?\?,???W???????????>?j_?R?C??????K?????(K??C?V?g?r??3???bUM  ??D ??P}{???4??_?7?#.???;????( z*$??????lR?e??'?G??????N?ym{~?P"?XZ???1Y4 WQ???_O?"???e????S??w'?f -???????[?q?c?Y???{?npx$?$??R at RIP??;???KlH??A????,?+-??????W??G????X?atT??%? m?#?NpIT7?@??~????????5?>??????I??P???? -SS?Z??b??L61vb?9?/Y?????t=????x-r~}????? 4/f?????????0#?J?J?/Z'?&?????a????{???????u) ??$?T?H????t?2'?I????$_?6????fR:?P?hQ??q9??lFVl9????????????w> W?_H?,?H?&3?h?n???f?,??b??l.??,Js?K_=K?x1?? :????j?lV)?|?z?x?smZ2?3??-?eL????g??."q??o????.v?@p????????\???H?? ??G????W!\?????2?E???NiG?'???6_????^ cJ? Zz^=?e??Y????t4???&???JbZ@??|???5?? d???C?I???d42?$n]?z?????V??';v??b?7????z??? ?l???<4/????=??Wb?C?-??????a?9sX_??-O?7o4??= ?u? ?0????4?)(?q,?`1?6r>s ?C4?p#?????-/]????????]??? -????h???#S$#??U?8m??y????8G?\?"? .r??o???1!:?%^?$?k?TxQ?????w}?,??`???w+%???s f???}?2??w?k??*#?&,?sL;3???:U?N/?$??E(??{??JOZ?g|L`???M??????n?[??YB??Uw????_^?????K5???W??k?0???f?4??:"e?5?!nM^?%#????+???? ?~te???=??Nz+?Y?n?O?@???????a??g;????V?W??|?v??+W?'*???]H?J ?h?&AFo|8????\?zA???|f?qU??No???5me1??]?b???r!?U?????H?KE?????A????fL??y????t?)'r=??#?Z^?K??????W?pj?2??I???????^?^????!s?C??#m?Q5?endstream + ?`?O??A??q7??k??0 om?$w???O??ZGW????'wg???????l????s ?W???S&?E?}??G??????[??gy?_%????????b?uPnvO????y?W?????o???=?O????~?\>???AO??$??cHQXq?????a???e:????x???????(W???d9!? ???M??=?S?Q??O???# +?^?[XI???????{????q]ZdZ4? ???Xx?????[??'T~l?A?????m??(?Z??????j?Q?!}~??)W?.X?Q?"??/???KS? ??=????k??d?_X????? O~???2?c??J?????7^????G???J??r ???c???2???T"0M?8????????OV??????~???f???<^N ?4F????{X??t?>?G2D {?[????!%????Y?@??kj#???.??1?9??? V-Qq??$?4?*K?$????{?ui<;????????P?k??g?" ??9?R???????????????XUH?G?)b@@9T?^)?"???????? ?;?4 ?M??Q?.?1???g1??O??6??^??????d%(??w??????U?61???0?mO??J?}KK???y?,C?"?????p?2?xl`? +H* ??t????^/?tocp$|??????3v) %??1?????C?-?d???????l??????9??^y5]?q4??a????FG? [????8???Duc????g?i_?l?Y??g??R????AajJTk5[??#??&?N,`@?8???% ??w???]R?E??/}??????,?>?{?8Rf?W?\i?E???[??<=l???v??w??????.??????$???O?6?nQ?d6?????? ??68?LJ'?J-??q#.G??????-g}3?????????????'?*??R??16>????i?Hg??>??$???s?O'???????z? ??????]?P???I????4??m??? ?n???o???????1??? ??eI?dF? ???S? ??9P,t??m??Ei?u??gi??!5{Az_???=?U?9???????????5~?d?)??_?????E$?x? ?????n?????????k??}????h??8?*??2T?3??CF??|t?)???????+{???aL ?AK??G? ?=k[:?Z??&?????[IL H~??6??f?C?p???~}(?;????FF??? T?B?nL?Nn?=??Z1?^E??1??]_5?`/??98??J?? ??Y&?d?l?L-?]?Z???HF? ??????????E?????&v?m??=???V?????goe??_???$??????$r??"g???F?u?????????R@?k???2`-??s? ??b;PG? ?f??????dd>??1s????a?????????????w????I??N'nq(W?^???+??i\?,????oxM[YLG?i?X0~G>??DHq???e~!R??EQ??=?6m??$c?D???}??},9?t??\Oa???V?W???_-??v??&???Lgt??t#f"????????O??P4?E????l5?endstream endobj 89 0 obj << /Type /Font /Subtype /Type1 -/Encoding 292 0 R +/Encoding 312 0 R /FirstChar 46 /LastChar 121 -/Widths 293 0 R -/BaseFont /SNCUNY+CMR17 +/Widths 313 0 R +/BaseFont /ZXEBJK+CMR17 /FontDescriptor 87 0 R >> endobj 87 0 obj << /Ascent 694 /CapHeight 683 /Descent -195 -/FontName /SNCUNY+CMR17 +/FontName /ZXEBJK+CMR17 /ItalicAngle 0 /StemV 53 /XHeight 430 @@ -1734,31 +1852,31 @@ /CharSet (/period/colon/F/G/I/N/P/S/W/a/c/e/f/i/l/m/n/o/p/r/t/u/y) /FontFile 88 0 R >> endobj -293 0 obj +313 0 obj [250 0 0 0 0 0 0 0 0 0 0 0 250 0 0 0 0 0 0 0 0 0 0 0 602 726 0 328 0 0 0 0 693 0 628 0 0 511 0 0 0 955 0 0 0 0 0 0 0 0 0 459 0 406 0 406 276 0 0 250 0 0 250 772 511 459 511 0 354 0 354 511 0 0 0 485 ] endobj -292 0 obj << +312 0 obj << /Type /Encoding /Differences [ 0 /.notdef 46/period 47/.notdef 58/colon 59/.notdef 70/F/G 72/.notdef 73/I 74/.notdef 78/N 79/.notdef 80/P 81/.notdef 83/S 84/.notdef 87/W 88/.notdef 97/a 98/.notdef 99/c 100/.notdef 101/e/f 103/.notdef 105/i 106/.notdef 108/l/m/n/o/p 113/.notdef 114/r 115/.notdef 116/t/u 118/.notdef 121/y 122/.notdef] >> endobj 127 0 obj << /Type /Pages /Count 6 -/Parent 294 0 R +/Parent 314 0 R /Kids [82 0 R 146 0 R 168 0 R 177 0 R 193 0 R 203 0 R] >> endobj 232 0 obj << /Type /Pages -/Count 4 -/Parent 294 0 R -/Kids [217 0 R 234 0 R 244 0 R 253 0 R] +/Count 6 +/Parent 314 0 R +/Kids [217 0 R 234 0 R 248 0 R 257 0 R 266 0 R 282 0 R] >> endobj -294 0 obj << +314 0 obj << /Type /Pages -/Count 10 +/Count 12 /Kids [127 0 R 232 0 R] >> endobj -295 0 obj << +315 0 obj << /Type /Outlines /First 7 0 R /Last 79 0 R @@ -1767,13 +1885,13 @@ 79 0 obj << /Title 80 0 R /A 77 0 R -/Parent 295 0 R +/Parent 315 0 R /Prev 75 0 R >> endobj 75 0 obj << /Title 76 0 R /A 73 0 R -/Parent 295 0 R +/Parent 315 0 R /Prev 59 0 R /Next 79 0 R >> endobj @@ -1799,7 +1917,7 @@ 59 0 obj << /Title 60 0 R /A 57 0 R -/Parent 295 0 R +/Parent 315 0 R /Prev 47 0 R /Next 75 0 R /First 63 0 R @@ -1821,7 +1939,7 @@ 47 0 obj << /Title 48 0 R /A 45 0 R -/Parent 295 0 R +/Parent 315 0 R /Prev 19 0 R /Next 59 0 R /First 51 0 R @@ -1871,7 +1989,7 @@ 19 0 obj << /Title 20 0 R /A 17 0 R -/Parent 295 0 R +/Parent 315 0 R /Prev 15 0 R /Next 47 0 R /First 23 0 R @@ -1881,48 +1999,48 @@ 15 0 obj << /Title 16 0 R /A 13 0 R -/Parent 295 0 R +/Parent 315 0 R /Prev 11 0 R /Next 19 0 R >> endobj 11 0 obj << /Title 12 0 R /A 9 0 R -/Parent 295 0 R +/Parent 315 0 R /Prev 7 0 R /Next 15 0 R >> endobj 7 0 obj << /Title 8 0 R /A 5 0 R -/Parent 295 0 R +/Parent 315 0 R /Next 11 0 R >> endobj -296 0 obj << -/Names [(Doc-Start) 86 0 R (a-common-example) 140 0 R (a-common-example.1) 62 0 R (a-final-note) 142 0 R (a-final-note.1) 70 0 R (acknowledgements) 144 0 R (acknowledgements.0) 78 0 R (argout-arrays) 132 0 R (argout-arrays.1) 30 0 R (available-typemaps) 129 0 R (available-typemaps.0) 18 0 R (beyond-the-provided-typemaps) 139 0 R (beyond-the-provided-typemaps.0) 58 0 R (contents) 96 0 R (contents.0) 6 0 R (helper-functions) 136 0 R (helper-functions.0) 46 0 R (in-place-arrays) 131 0 R (in-place-arrays.1) 26 0 R (input-arrays) 130 0 R (input-arrays.1) 22 0 R (introduction) 116 0 R (introduction.0) 10 0 R (macros) 137 0 R (macros.1) 50 0 R (other-common-types-bool) 134 0 R (other-common-types-bool.1) 38 0 R (other-common-types-complex) 135 0 R (other-common-types-complex.1) 42 0 R (other-situations) 141 0 R (other-situations.1) 66 0 R (output-arrays) 133 0 R (output-arrays.1) 34 0 R (page.1) 85 0 R (page.10) 255 0 R (page.2) 148 0 R (page.3) 170 0 R (page.4) 179 0 R (page.5) 195 0 R (page.6) 205 0 R (page.7) 219 0 R (page.8) 236 0 R (page.9) 246 0 R (routines) 138 0 R (routines.1) 54 0 R (section*.1) 97 0 R (section*.10) 220 0 R (section*.11) 230 0 R (section*.12) 231 0 R (section*.13) 237 0 R (section*.14) 241 0 R (section*.15) 247 0 R (section*.16) 249 0 R (section*.17) 261 0 R (section*.18) 263 0 R (section*.19) 267 0 R (section*.2) 120 0 R (section*.3) 180 0 R (section*.4) 187 0 R (section*.5) 196 0 R (section*.6) 199 0 R (section*.7) 206 0 R (section*.8) 211 0 R (section*.9) 212 0 R (summary) 143 0 R (summary.0) 74 0 R (using-numpy-i) 128 0 R (using-numpy-i.0) 14 0 R] +316 0 obj << +/Names [(Doc-Start) 86 0 R (a-common-example) 140 0 R (a-common-example.1) 62 0 R (a-final-note) 142 0 R (a-final-note.1) 70 0 R (acknowledgements) 144 0 R (acknowledgements.0) 78 0 R (argout-arrays) 132 0 R (argout-arrays.1) 30 0 R (available-typemaps) 129 0 R (available-typemaps.0) 18 0 R (beyond-the-provided-typemaps) 139 0 R (beyond-the-provided-typemaps.0) 58 0 R (contents) 96 0 R (contents.0) 6 0 R (helper-functions) 136 0 R (helper-functions.0) 46 0 R (in-place-arrays) 131 0 R (in-place-arrays.1) 26 0 R (input-arrays) 130 0 R (input-arrays.1) 22 0 R (introduction) 116 0 R (introduction.0) 10 0 R (macros) 137 0 R (macros.1) 50 0 R (other-common-types-bool) 134 0 R (other-common-types-bool.1) 38 0 R (other-common-types-complex) 135 0 R (other-common-types-complex.1) 42 0 R (other-situations) 141 0 R (other-situations.1) 66 0 R (output-arrays) 133 0 R (output-arrays.1) 34 0 R (page.1) 85 0 R (page.10) 259 0 R (page.11) 268 0 R (page.12) 284 0 R (page.2) 148 0 R (page.3) 170 0 R (page.4) 179 0 R (page.5) 195 0 R (page.6) 205 0 R (page.7) 219 0 R (page.8) 236 0 R (page.9) 250 0 R (routines) 138 0 R (routines.1) 54 0 R (section*.1) 97 0 R (section*.10) 220 0 R (section*.11) 230 0 R (section*.12) 231 0 R (section*.13) 237 0 R (section*.14) 261 0 R (section*.15) 263 0 R (section*.16) 269 0 R (section*.17) 277 0 R (section*.18) 279 0 R (section*.19) 287 0 R (section*.2) 120 0 R (section*.3) 180 0 R (section*.4) 187 0 R (section*.5) 196 0 R (section*.6) 199 0 R (section*.7) 206 0 R (section*.8) 211 0 R (section*.9) 212 0 R (summary) 143 0 R (summary.0) 74 0 R (using-numpy-i) 128 0 R (using-numpy-i.0) 14 0 R] /Limits [(Doc-Start) (using-numpy-i.0)] >> endobj -297 0 obj << -/Kids [296 0 R] +317 0 obj << +/Kids [316 0 R] >> endobj -298 0 obj << -/Dests 297 0 R +318 0 obj << +/Dests 317 0 R >> endobj -299 0 obj << +319 0 obj << /Type /Catalog -/Pages 294 0 R -/Outlines 295 0 R -/Names 298 0 R +/Pages 314 0 R +/Outlines 315 0 R +/Names 318 0 R /PageMode /UseOutlines /OpenAction 81 0 R >> endobj -300 0 obj << +320 0 obj << /Author(Bill Spotz)/Title(numpy.i: a SWIG Interface File for NumPy)/Subject()/Creator(LaTeX with hyperref package)/Producer(pdfeTeX-1.21a)/Keywords() -/CreationDate (D:20070413110240-06'00') +/CreationDate (D:20070413143805-06'00') /PTEX.Fullbanner (This is pdfeTeX, Version 3.141592-1.21a-2.2 (Web2C 7.5.4) kpathsea version 3.5.4) >> endobj xref -0 301 +0 321 0000000001 65535 f 0000000002 00000 f 0000000003 00000 f @@ -1930,79 +2048,79 @@ 0000000000 00000 f 0000000009 00000 n 0000007627 00000 n -0000129952 00000 n +0000135055 00000 n 0000000055 00000 n 0000000081 00000 n 0000007810 00000 n -0000129866 00000 n +0000134969 00000 n 0000000131 00000 n 0000000162 00000 n 0000024122 00000 n -0000129778 00000 n +0000134881 00000 n 0000000214 00000 n 0000000246 00000 n 0000024309 00000 n -0000129653 00000 n +0000134756 00000 n 0000000303 00000 n 0000000340 00000 n 0000028031 00000 n -0000129579 00000 n +0000134682 00000 n 0000000391 00000 n 0000000422 00000 n 0000028219 00000 n -0000129492 00000 n +0000134595 00000 n 0000000476 00000 n 0000000510 00000 n 0000028407 00000 n -0000129405 00000 n +0000134508 00000 n 0000000562 00000 n 0000000594 00000 n 0000033800 00000 n -0000129318 00000 n +0000134421 00000 n 0000000646 00000 n 0000000678 00000 n 0000033988 00000 n -0000129231 00000 n +0000134334 00000 n 0000000740 00000 n 0000000783 00000 n 0000034176 00000 n -0000129157 00000 n +0000134260 00000 n 0000000848 00000 n 0000000894 00000 n 0000040028 00000 n -0000129032 00000 n +0000134135 00000 n 0000000949 00000 n 0000000984 00000 n 0000040216 00000 n -0000128958 00000 n +0000134061 00000 n 0000001029 00000 n 0000001054 00000 n 0000040404 00000 n -0000128884 00000 n +0000133987 00000 n 0000001101 00000 n 0000001128 00000 n -0000045678 00000 n -0000128759 00000 n +0000052936 00000 n +0000133862 00000 n 0000001195 00000 n 0000001242 00000 n -0000045866 00000 n -0000128685 00000 n +0000053124 00000 n +0000133788 00000 n 0000001297 00000 n 0000001332 00000 n -0000050040 00000 n -0000128598 00000 n +0000053312 00000 n +0000133701 00000 n 0000001387 00000 n 0000001422 00000 n -0000057496 00000 n -0000128524 00000 n +0000059326 00000 n +0000133627 00000 n 0000001473 00000 n 0000001504 00000 n -0000057684 00000 n -0000128436 00000 n +0000059513 00000 n +0000133539 00000 n 0000001550 00000 n 0000001576 00000 n -0000057872 00000 n -0000128361 00000 n +0000063552 00000 n +0000133464 00000 n 0000001631 00000 n 0000001666 00000 n 0000003729 00000 n @@ -2010,15 +2128,15 @@ 0000001716 00000 n 0000007444 00000 n 0000007505 00000 n -0000127177 00000 n -0000121871 00000 n -0000127018 00000 n -0000121024 00000 n -0000112614 00000 n -0000120864 00000 n -0000111362 00000 n -0000096612 00000 n -0000111203 00000 n +0000132264 00000 n +0000126958 00000 n +0000132105 00000 n +0000126147 00000 n +0000118485 00000 n +0000125987 00000 n +0000117233 00000 n +0000102483 00000 n +0000117074 00000 n 0000007566 00000 n 0000007687 00000 n 0000004026 00000 n @@ -2040,17 +2158,17 @@ 0000006618 00000 n 0000006771 00000 n 0000007748 00000 n -0000095745 00000 n -0000087795 00000 n -0000095583 00000 n +0000101616 00000 n +0000093666 00000 n +0000101454 00000 n 0000007871 00000 n 0000006933 00000 n 0000007103 00000 n 0000007273 00000 n -0000086306 00000 n -0000071974 00000 n -0000086144 00000 n -0000128000 00000 n +0000092177 00000 n +0000077845 00000 n +0000092015 00000 n +0000133087 00000 n 0000024060 00000 n 0000024246 00000 n 0000027968 00000 n @@ -2062,12 +2180,12 @@ 0000039965 00000 n 0000040153 00000 n 0000040341 00000 n -0000045615 00000 n -0000045803 00000 n -0000049977 00000 n -0000057433 00000 n -0000057621 00000 n -0000057809 00000 n +0000052873 00000 n +0000053061 00000 n +0000053249 00000 n +0000059263 00000 n +0000059451 00000 n +0000063489 00000 n 0000015161 00000 n 0000012268 00000 n 0000008052 00000 n @@ -2075,9 +2193,9 @@ 0000012522 00000 n 0000012693 00000 n 0000012863 00000 n -0000071490 00000 n -0000067463 00000 n -0000071328 00000 n +0000077361 00000 n +0000073334 00000 n +0000077199 00000 n 0000013036 00000 n 0000013210 00000 n 0000013383 00000 n @@ -2112,9 +2230,9 @@ 0000023653 00000 n 0000024371 00000 n 0000023824 00000 n -0000067143 00000 n -0000065753 00000 n -0000066982 00000 n +0000073014 00000 n +0000071624 00000 n +0000072853 00000 n 0000028469 00000 n 0000027050 00000 n 0000024543 00000 n @@ -2155,82 +2273,102 @@ 0000039665 00000 n 0000040090 00000 n 0000040278 00000 n -0000128116 00000 n -0000045928 00000 n -0000044629 00000 n +0000133203 00000 n +0000045260 00000 n +0000043368 00000 n 0000040574 00000 n -0000045489 00000 n -0000045552 00000 n -0000044795 00000 n -0000044969 00000 n -0000045141 00000 n -0000045740 00000 n -0000045315 00000 n -0000050165 00000 n -0000049180 00000 n -0000046036 00000 n -0000049851 00000 n -0000049914 00000 n -0000049338 00000 n -0000050102 00000 n -0000049509 00000 n -0000049678 00000 n -0000057997 00000 n -0000054285 00000 n -0000050274 00000 n -0000057370 00000 n -0000054547 00000 n -0000054718 00000 n -0000054892 00000 n -0000055077 00000 n -0000055262 00000 n -0000057558 00000 n -0000055452 00000 n -0000057746 00000 n -0000055623 00000 n -0000055796 00000 n -0000055967 00000 n -0000057934 00000 n -0000056140 00000 n -0000056311 00000 n -0000056485 00000 n -0000056656 00000 n -0000056829 00000 n -0000064886 00000 n -0000058131 00000 n -0000064726 00000 n -0000056996 00000 n -0000057179 00000 n -0000065414 00000 n -0000065176 00000 n -0000067376 00000 n -0000067352 00000 n -0000071794 00000 n -0000071712 00000 n -0000087196 00000 n -0000086834 00000 n -0000096291 00000 n -0000096036 00000 n -0000112174 00000 n -0000111789 00000 n -0000121585 00000 n -0000121325 00000 n -0000127642 00000 n -0000127424 00000 n -0000128217 00000 n -0000128287 00000 n -0000130024 00000 n -0000131684 00000 n -0000131723 00000 n -0000131761 00000 n -0000131890 00000 n +0000045134 00000 n +0000045197 00000 n +0000043574 00000 n +0000043748 00000 n +0000043921 00000 n +0000044094 00000 n +0000044267 00000 n +0000044441 00000 n +0000044615 00000 n +0000044788 00000 n +0000044961 00000 n +0000049177 00000 n +0000048072 00000 n +0000045381 00000 n +0000049114 00000 n +0000048246 00000 n +0000048420 00000 n +0000048594 00000 n +0000048766 00000 n +0000048940 00000 n +0000053374 00000 n +0000052134 00000 n +0000049285 00000 n +0000052810 00000 n +0000052292 00000 n +0000052998 00000 n +0000052465 00000 n +0000053186 00000 n +0000052639 00000 n +0000059637 00000 n +0000057342 00000 n +0000053495 00000 n +0000059137 00000 n +0000059200 00000 n +0000057548 00000 n +0000057717 00000 n +0000057890 00000 n +0000058061 00000 n +0000058235 00000 n +0000058420 00000 n +0000058604 00000 n +0000059388 00000 n +0000058793 00000 n +0000059574 00000 n +0000058964 00000 n +0000063677 00000 n +0000061646 00000 n +0000059758 00000 n +0000063426 00000 n +0000061852 00000 n +0000062023 00000 n +0000063614 00000 n +0000062196 00000 n +0000062367 00000 n +0000062541 00000 n +0000062712 00000 n +0000062885 00000 n +0000070743 00000 n +0000063799 00000 n +0000070583 00000 n +0000063052 00000 n +0000063235 00000 n +0000071279 00000 n +0000071039 00000 n +0000073247 00000 n +0000073223 00000 n +0000077665 00000 n +0000077583 00000 n +0000093067 00000 n +0000092705 00000 n +0000102162 00000 n +0000101907 00000 n +0000118045 00000 n +0000117660 00000 n +0000126685 00000 n +0000126433 00000 n +0000132729 00000 n +0000132511 00000 n +0000133320 00000 n +0000133390 00000 n +0000135127 00000 n +0000136823 00000 n +0000136862 00000 n +0000136900 00000 n +0000137029 00000 n trailer << -/Size 301 -/Root 299 0 R -/Info 300 0 R -/ID [<558B9FB106AF5483352D8AA95CE22DAE> <558B9FB106AF5483352D8AA95CE22DAE>] +/Size 321 +/Root 319 0 R +/Info 320 0 R +/ID [ ] >> startxref -132203 +137342 %%EOF Modified: trunk/numpy/doc/swig/numpy_swig.txt =================================================================== --- trunk/numpy/doc/swig/numpy_swig.txt 2007-04-13 17:04:02 UTC (rev 3712) +++ trunk/numpy/doc/swig/numpy_swig.txt 2007-04-13 20:38:36 UTC (rev 3713) @@ -436,77 +436,196 @@ Routines -------- - **char* pytype_string(PyObject* py_obj)** - Given a ``PyObject*``, return a string describing its type. + **pytype_string()** + Return type: ``char*`` - **char* typecode_string(int typecode)** - Given a `NumPy`_ integer typecode, return a string describing the type. + Arguments: + * ``PyObject* py_obj``, a general python object. - **int type_match(int actual_type, int desired_type)** - Make sure input has correct `NumPy`_ type. Allow character and - byte to match. Also allow int and long to match. This is - deprecated . You should use ``PyArray_EquivTypenums()`` instead. + Return a string describing the type of ``py_obj``. - **PyArrayObject* obj_to_array_no_conversion(PyObject* input, int typecode)** - Given a ``PyObject*``, cast it to a ``PyArrayObject*`` if legal. - If not, set the python error string appropriately and return - ``NULL``. + **typecode_string()** + Return type: ``char*`` - **PyArrayObject* obj_to_array_allow_conversion(PyObject* input, int typecode, int* is_new_object)** - Convert the given ``PyObject*`` to a `NumPy`_ array with the given - typecode. On Success, return a valid ``PyArrayObject*`` with the - correct type. On failure, the python error string will be set and - the routine returns ``NULL``. + Arguments: + * ``int typecode``, a `NumPy`_ integer typecode. - **PyArrayObject* make_contiguous(PyArrayObject* ary, int* is_new_object, int min_dims, int max_dims)** - Given a ``PyArrayObject*``, check to see if it is contiguous. If - so, return the input pointer and flag it as not a new object. If - it is not contiguous, create a new ``PyArrayObject*`` using the - original data, flag it as a new object and return the pointer. + Return a string describing the type corresponding to the `NumPy`_ + ``typecode``. + **type_match()** - **PyArrayObject* obj_to_array_contiguous_allow_conversion(PyObject* input, int typecode, int* is_new_object)** - Convert a given ``PyObject*`` to a contiguous ``PyArrayObject*`` - of the specified type. If the input object is not a contiguous + Return type: ``int`` + + Arguments: + + * ``int actual_type``, the `NumPy`_ typecode of a `NumPy`_ array. + + * ``int desired_type``, the desired `NumPy`_ typecode. + + Make sure that ``actual_type`` is compatible with + ``desired_type``. For example, this allows character and + byte types, or int and long types, to match. This is now + equivalent to ``PyArray_EquivTypenums()``. + + + **obj_to_array_no_conversion()** + + Return type: ``PyArrayObject*`` + + Arguments: + + * ``PyObject* input``, a general python object. + + * ``int typecode``, the desired `NumPy`_ typecode. + + Cast ``input`` to a ``PyArrayObject*`` if legal, and ensure that + it is of type ``typecode``. If ``input`` cannot be cast, or the + ``typecode`` is wrong, set a python error and return ``NULL``. + + + **obj_to_array_allow_conversion()** + + Return type: ``PyArrayObject*`` + + Arguments: + + * ``PyObject* input``, a general python object. + + * ``int typecode``, the desired `NumPy`_ typecode of the resulting + array. + + * ``int* is_new_object``, returns a value of 0 if no conversion + performed, else 1. + + Convert ``input`` to a `NumPy`_ array with the given ``typecode``. + On success, return a valid ``PyArrayObject*`` with the correct + type. On failure, the python error string will be set and the + routine returns ``NULL``. + + + **make_contiguous()** + + Return type: ``PyArrayObject*`` + + Arguments: + + * ``PyArrayObject* ary``, a `NumPy`_ array. + + * ``int* is_new_object``, returns a value of 0 if no conversion + performed, else 1. + + * ``int min_dims``, minimum allowable dimensions. + + * ``int max_dims``, maximum allowable dimensions. + + Check to see if ``ary`` is contiguous. If so, return the input + pointer and flag it as not a new object. If it is not contiguous, + create a new ``PyArrayObject*`` using the original data, flag it + as a new object and return the pointer. + + + **obj_to_array_contiguous_allow_conversion()** + + Return type: ``PyArrayObject*`` + + Arguments: + + * ``PyObject* input``, a general python object. + + * ``int typecode``, the desired `NumPy`_ typecode of the resulting + array. + + * ``int* is_new_object``, returns a value of 0 if no conversion + performed, else 1. + + Convert ``input`` to a contiguous ``PyArrayObject*`` of the + specified type. If the input object is not a contiguous ``PyArrayObject*``, a new one will be created and the new object flag will be set. - **int require_contiguous(PyArrayObject* ary)** - Test whether a ``PyArrayObject*`` is contiguous. If array is - contiguous, return 1. Otherwise, set the python error string and + **require_contiguous()** + + Return type: ``int`` + + Arguments: + + * ``PyArrayObject* ary``, a `NumPy`_ array. + + Test whether ``ary`` is contiguous. If so, return 1. Otherwise, + set a python error and return 0. + + + **require_native()** + + Return type: ``int`` + + Arguments: + + * ``PyArray_Object* ary``, a `NumPy`_ array. + + Require that ``ary`` is not byte-swapped. If the array is not + byte-swapped, return 1. Otherwise, set a python error and return + 0. + + **require_dimensions()** + + Return type: ``int`` + + Arguments: + + * ``PyArrayObject* ary``, a `NumPy`_ array. + + * ``int exact_dimensions``, the desired number of dimensions. + + Require ``ary`` to have a specified number of dimensions. If the + array has the specified number of dimensions, return 1. + Otherwise, set a python error and return 0. + + + **require_dimensions_n()** + + Return type: ``int`` + + Arguments: + + * ``PyArrayObject* ary``, a `NumPy`_ array. + + * ``int* exact_dimensions``, an array of integers representing + acceptable numbers of dimensions. + + * ``int n``, the length of ``exact_dimensions``. + + Require ``ary`` to have one of a list of specified number of + dimensions. If the array has one of the specified number of + dimensions, return 1. Otherwise, set the python error string and return 0. - **int require_native(PyArray_Object* ary)** - Require that a numpy array is not byte-swapped. If the array is - not byte-swapped, return 1. Otherwise, set the python error string - and return 0. + **require_size()** - **int require_dimensions(PyArrayObject* ary, int exact_dimensions)** - Require the given ``PyArrayObject*`` to have a specified number of - dimensions. If the array has the specified number of dimensions, - return 1. Otherwise, set the python error string and return 0. + Return type: ``int`` + Arguments: - **int require_dimensions_n(PyArrayObject* ary, int* exact_dimensions, int n)** - Require the given ``PyArrayObject*`` to have one of a list of - specified number of dimensions. If the array has one of the - specified number of dimensions, return 1. Otherwise, set the - python error string and return 0. + * ``PyArrayObject* ary``, a `NumPy`_ array. + * ``npy_int* size``, an array representing the desired lengths of + each dimension. - **int require_size(PyArrayObject* ary, int* size, int n)** - Require the given ``PyArrayObject*`` to have a specified shape. - If the array has the specified shape, return 1. Otherwise, set - the python error string and return 0. + * ``int n``, the length of ``size``. + Require ``ary`` to have a specified shape. If the array has the + specified shape, return 1. Otherwise, set the python error string + and return 0. + Beyond the Provided Typemaps ============================ From numpy-svn at scipy.org Fri Apr 13 16:44:29 2007 From: numpy-svn at scipy.org (numpy-svn at scipy.org) Date: Fri, 13 Apr 2007 15:44:29 -0500 (CDT) Subject: [Numpy-svn] r3714 - trunk/numpy/doc/swig Message-ID: <20070413204429.0AFA839C07F@new.scipy.org> Author: wfspotz at sandia.gov Date: 2007-04-13 15:44:24 -0500 (Fri, 13 Apr 2007) New Revision: 3714 Modified: trunk/numpy/doc/swig/numpy_swig.html trunk/numpy/doc/swig/numpy_swig.pdf trunk/numpy/doc/swig/numpy_swig.txt Log: Updated date, example function documentation and python links Modified: trunk/numpy/doc/swig/numpy_swig.html =================================================================== --- trunk/numpy/doc/swig/numpy_swig.html 2007-04-13 20:38:36 UTC (rev 3713) +++ trunk/numpy/doc/swig/numpy_swig.html 2007-04-13 20:44:24 UTC (rev 3714) @@ -5,7 +5,7 @@ numpy.i: a SWIG Interface File for NumPy - +