summaryrefslogtreecommitdiff
path: root/numpy
diff options
context:
space:
mode:
Diffstat (limited to 'numpy')
-rw-r--r--numpy/core/code_generators/genapi.py48
-rw-r--r--numpy/core/code_generators/generate_numpy_api.py26
-rw-r--r--numpy/core/code_generators/generate_ufunc_api.py10
-rw-r--r--numpy/core/code_generators/numpy_api.py695
-rw-r--r--numpy/core/include/numpy/ndarraytypes.h4
-rw-r--r--numpy/core/include/numpy/npy_common.h24
-rw-r--r--numpy/core/numeric.py13
-rw-r--r--numpy/core/setup.py5
-rw-r--r--numpy/core/setup_common.py2
-rw-r--r--numpy/core/src/multiarray/convert_datatype.c2
-rw-r--r--numpy/core/src/multiarray/ctors.c6
-rw-r--r--numpy/core/src/multiarray/descriptor.c9
-rw-r--r--numpy/core/src/multiarray/mapping.c2
-rw-r--r--numpy/core/src/multiarray/methods.c3
-rw-r--r--numpy/core/src/multiarray/multiarraymodule.c2
-rw-r--r--numpy/core/src/multiarray/scalarapi.c5
-rw-r--r--numpy/distutils/command/config.py5
-rw-r--r--numpy/distutils/command/install.py9
-rw-r--r--numpy/random/mtrand/mtrand.pyx212
19 files changed, 600 insertions, 482 deletions
diff --git a/numpy/core/code_generators/genapi.py b/numpy/core/code_generators/genapi.py
index ad054920a..c73209d04 100644
--- a/numpy/core/code_generators/genapi.py
+++ b/numpy/core/code_generators/genapi.py
@@ -74,6 +74,29 @@ def remove_whitespace(s):
def _repl(str):
return str.replace('Bool', 'npy_bool')
+
+class StealRef:
+ def __init__(self, arg):
+ self.arg = arg # counting from 1
+
+ def __str__(self):
+ try:
+ return ' '.join('NPY_STEALS_REF_TO_ARG(%d)' % x for x in self.arg)
+ except TypeError:
+ return 'NPY_STEALS_REF_TO_ARG(%d)' % self.arg
+
+
+class NonNull:
+ def __init__(self, arg):
+ self.arg = arg # counting from 1
+
+ def __str__(self):
+ try:
+ return ' '.join('NPY_GCC_NONNULL(%d)' % x for x in self.arg)
+ except TypeError:
+ return 'NPY_GCC_NONNULL(%d)' % self.arg
+
+
class Function(object):
def __init__(self, name, return_type, args, doc=''):
self.name = name
@@ -350,9 +373,10 @@ NPY_NO_EXPORT PyBoolScalarObject _PyArrayScalar_BoolValues[2];
return astr
class FunctionApi(object):
- def __init__(self, name, index, return_type, args, api_name):
+ def __init__(self, name, index, annotations, return_type, args, api_name):
self.name = name
self.index = index
+ self.annotations = annotations
self.return_type = return_type
self.args = args
self.api_name = api_name
@@ -377,17 +401,21 @@ class FunctionApi(object):
return " (void *) %s" % self.name
def internal_define(self):
+ annstr = []
+ for a in self.annotations:
+ annstr.append(str(a))
+ annstr = ' '.join(annstr)
astr = """\
-NPY_NO_EXPORT %s %s \\\n (%s);""" % (self.return_type,
- self.name,
- self._argtypes_string())
+NPY_NO_EXPORT %s %s %s \\\n (%s);""" % (annstr, self.return_type,
+ self.name,
+ self._argtypes_string())
return astr
def order_dict(d):
"""Order dict by its values."""
o = list(d.items())
def _key(x):
- return (x[1], x[0])
+ return x[1] + (x[0],)
return sorted(o, key=_key)
def merge_api_dicts(dicts):
@@ -419,7 +447,7 @@ Same index has been used twice in api definition: %s
raise ValueError(msg)
# No 'hole' in the indexes may be allowed, and it must starts at 0
- indexes = set(d.values())
+ indexes = set(v[0] for v in d.values())
expected = set(range(len(indexes)))
if not indexes == expected:
diff = expected.symmetric_difference(indexes)
@@ -434,7 +462,7 @@ def get_api_functions(tagname, api_dict):
functions.extend(find_functions(f, tagname))
dfunctions = []
for func in functions:
- o = api_dict[func.name]
+ o = api_dict[func.name][0]
dfunctions.append( (o, func) )
dfunctions.sort()
return [a[1] for a in dfunctions]
@@ -444,11 +472,7 @@ def fullapi_hash(api_dicts):
of the list of items in the API (as a string)."""
a = []
for d in api_dicts:
- def sorted_by_values(d):
- """Sort a dictionary by its values. Assume the dictionary items is of
- the form func_name -> order"""
- return sorted(d.items(), key=lambda x_y: (x_y[1], x_y[0]))
- for name, index in sorted_by_values(d):
+ for name, index in order_dict(d):
a.extend(name)
a.extend(str(index))
diff --git a/numpy/core/code_generators/generate_numpy_api.py b/numpy/core/code_generators/generate_numpy_api.py
index ce270a6a0..a590cfb48 100644
--- a/numpy/core/code_generators/generate_numpy_api.py
+++ b/numpy/core/code_generators/generate_numpy_api.py
@@ -183,13 +183,11 @@ def do_generate_api(targets, sources):
doc_file = targets[2]
global_vars = sources[0]
- global_vars_types = sources[1]
- scalar_bool_values = sources[2]
- types_api = sources[3]
- multiarray_funcs = sources[4]
+ scalar_bool_values = sources[1]
+ types_api = sources[2]
+ multiarray_funcs = sources[3]
- # Remove global_vars_type: not a api dict
- multiarray_api = sources[:1] + sources[2:]
+ multiarray_api = sources[:]
module_list = []
extension_list = []
@@ -208,18 +206,22 @@ def do_generate_api(targets, sources):
multiarray_api_dict = {}
for f in numpyapi_list:
name = f.name
- index = multiarray_funcs[name]
- multiarray_api_dict[f.name] = FunctionApi(f.name, index, f.return_type,
+ index = multiarray_funcs[name][0]
+ annotations = multiarray_funcs[name][1:]
+ multiarray_api_dict[f.name] = FunctionApi(f.name, index, annotations,
+ f.return_type,
f.args, api_name)
- for name, index in global_vars.items():
- type = global_vars_types[name]
+ for name, val in global_vars.items():
+ index, type = val
multiarray_api_dict[name] = GlobalVarApi(name, index, type, api_name)
- for name, index in scalar_bool_values.items():
+ for name, val in scalar_bool_values.items():
+ index = val[0]
multiarray_api_dict[name] = BoolValuesApi(name, index, api_name)
- for name, index in types_api.items():
+ for name, val in types_api.items():
+ index = val[0]
multiarray_api_dict[name] = TypeApi(name, index, 'PyTypeObject', api_name)
if len(multiarray_api_dict) != len(multiarray_api_index):
diff --git a/numpy/core/code_generators/generate_ufunc_api.py b/numpy/core/code_generators/generate_ufunc_api.py
index 6305385af..b594fccf7 100644
--- a/numpy/core/code_generators/generate_ufunc_api.py
+++ b/numpy/core/code_generators/generate_ufunc_api.py
@@ -172,11 +172,13 @@ def do_generate_api(targets, sources):
api_name = 'PyUFunc_API'
for f in ufunc_api_list:
name = f.name
- index = ufunc_api_index[name]
- ufunc_api_dict[name] = FunctionApi(f.name, index, f.return_type,
- f.args, api_name)
+ index = ufunc_api_index[name][0]
+ annotations = ufunc_api_index[name][1:]
+ ufunc_api_dict[name] = FunctionApi(f.name, index, annotations,
+ f.return_type, f.args, api_name)
- for name, index in numpy_api.ufunc_types_api.items():
+ for name, val in numpy_api.ufunc_types_api.items():
+ index = val[0]
ufunc_api_dict[name] = TypeApi(name, index, 'PyTypeObject', api_name)
# set up object API
diff --git a/numpy/core/code_generators/numpy_api.py b/numpy/core/code_generators/numpy_api.py
index 791bc6ffc..cd6d2f176 100644
--- a/numpy/core/code_generators/numpy_api.py
+++ b/numpy/core/code_generators/numpy_api.py
@@ -14,64 +14,64 @@ exception, so it should hopefully not get unnoticed).
"""
from __future__ import division, absolute_import, print_function
-multiarray_global_vars = {
- 'NPY_NUMUSERTYPES': 7,
- 'NPY_DEFAULT_ASSIGN_CASTING': 292,
-}
+from code_generators.genapi import StealRef, NonNull
-multiarray_global_vars_types = {
- 'NPY_NUMUSERTYPES': 'int',
- 'NPY_DEFAULT_ASSIGN_CASTING': 'NPY_CASTING',
+# index, type
+multiarray_global_vars = {
+ 'NPY_NUMUSERTYPES': (7, 'int'),
+ 'NPY_DEFAULT_ASSIGN_CASTING': (292, 'NPY_CASTING'),
}
multiarray_scalar_bool_values = {
- '_PyArrayScalar_BoolValues': 9
+ '_PyArrayScalar_BoolValues': (9,)
}
+# index, annotations
+# please mark functions that have been checked to not need any annotations
multiarray_types_api = {
- 'PyBigArray_Type': 1,
- 'PyArray_Type': 2,
- 'PyArrayDescr_Type': 3,
- 'PyArrayFlags_Type': 4,
- 'PyArrayIter_Type': 5,
- 'PyArrayMultiIter_Type': 6,
- 'PyBoolArrType_Type': 8,
- 'PyGenericArrType_Type': 10,
- 'PyNumberArrType_Type': 11,
- 'PyIntegerArrType_Type': 12,
- 'PySignedIntegerArrType_Type': 13,
- 'PyUnsignedIntegerArrType_Type': 14,
- 'PyInexactArrType_Type': 15,
- 'PyFloatingArrType_Type': 16,
- 'PyComplexFloatingArrType_Type': 17,
- 'PyFlexibleArrType_Type': 18,
- 'PyCharacterArrType_Type': 19,
- 'PyByteArrType_Type': 20,
- 'PyShortArrType_Type': 21,
- 'PyIntArrType_Type': 22,
- 'PyLongArrType_Type': 23,
- 'PyLongLongArrType_Type': 24,
- 'PyUByteArrType_Type': 25,
- 'PyUShortArrType_Type': 26,
- 'PyUIntArrType_Type': 27,
- 'PyULongArrType_Type': 28,
- 'PyULongLongArrType_Type': 29,
- 'PyFloatArrType_Type': 30,
- 'PyDoubleArrType_Type': 31,
- 'PyLongDoubleArrType_Type': 32,
- 'PyCFloatArrType_Type': 33,
- 'PyCDoubleArrType_Type': 34,
- 'PyCLongDoubleArrType_Type': 35,
- 'PyObjectArrType_Type': 36,
- 'PyStringArrType_Type': 37,
- 'PyUnicodeArrType_Type': 38,
- 'PyVoidArrType_Type': 39,
+ 'PyBigArray_Type': (1,),
+ 'PyArray_Type': (2,),
+ 'PyArrayDescr_Type': (3,),
+ 'PyArrayFlags_Type': (4,),
+ 'PyArrayIter_Type': (5,),
+ 'PyArrayMultiIter_Type': (6,),
+ 'PyBoolArrType_Type': (8,),
+ 'PyGenericArrType_Type': (10,),
+ 'PyNumberArrType_Type': (11,),
+ 'PyIntegerArrType_Type': (12,),
+ 'PySignedIntegerArrType_Type': (13,),
+ 'PyUnsignedIntegerArrType_Type': (14,),
+ 'PyInexactArrType_Type': (15,),
+ 'PyFloatingArrType_Type': (16,),
+ 'PyComplexFloatingArrType_Type': (17,),
+ 'PyFlexibleArrType_Type': (18,),
+ 'PyCharacterArrType_Type': (19,),
+ 'PyByteArrType_Type': (20,),
+ 'PyShortArrType_Type': (21,),
+ 'PyIntArrType_Type': (22,),
+ 'PyLongArrType_Type': (23,),
+ 'PyLongLongArrType_Type': (24,),
+ 'PyUByteArrType_Type': (25,),
+ 'PyUShortArrType_Type': (26,),
+ 'PyUIntArrType_Type': (27,),
+ 'PyULongArrType_Type': (28,),
+ 'PyULongLongArrType_Type': (29,),
+ 'PyFloatArrType_Type': (30,),
+ 'PyDoubleArrType_Type': (31,),
+ 'PyLongDoubleArrType_Type': (32,),
+ 'PyCFloatArrType_Type': (33,),
+ 'PyCDoubleArrType_Type': (34,),
+ 'PyCLongDoubleArrType_Type': (35,),
+ 'PyObjectArrType_Type': (36,),
+ 'PyStringArrType_Type': (37,),
+ 'PyUnicodeArrType_Type': (38,),
+ 'PyVoidArrType_Type': (39,),
# End 1.5 API
- 'PyTimeIntegerArrType_Type': 214,
- 'PyDatetimeArrType_Type': 215,
- 'PyTimedeltaArrType_Type': 216,
- 'PyHalfArrType_Type': 217,
- 'NpyIter_Type': 218,
+ 'PyTimeIntegerArrType_Type': (214,),
+ 'PyDatetimeArrType_Type': (215,),
+ 'PyTimedeltaArrType_Type': (216,),
+ 'PyHalfArrType_Type': (217,),
+ 'NpyIter_Type': (218,),
# End 1.6 API
}
@@ -80,318 +80,318 @@ multiarray_types_api = {
#define _PyArrayScalar_BoolValues ((PyBoolScalarObject *)PyArray_API[8])
multiarray_funcs_api = {
- 'PyArray_GetNDArrayCVersion': 0,
- 'PyArray_SetNumericOps': 40,
- 'PyArray_GetNumericOps': 41,
- 'PyArray_INCREF': 42,
- 'PyArray_XDECREF': 43,
- 'PyArray_SetStringFunction': 44,
- 'PyArray_DescrFromType': 45,
- 'PyArray_TypeObjectFromType': 46,
- 'PyArray_Zero': 47,
- 'PyArray_One': 48,
- 'PyArray_CastToType': 49,
- 'PyArray_CastTo': 50,
- 'PyArray_CastAnyTo': 51,
- 'PyArray_CanCastSafely': 52,
- 'PyArray_CanCastTo': 53,
- 'PyArray_ObjectType': 54,
- 'PyArray_DescrFromObject': 55,
- 'PyArray_ConvertToCommonType': 56,
- 'PyArray_DescrFromScalar': 57,
- 'PyArray_DescrFromTypeObject': 58,
- 'PyArray_Size': 59,
- 'PyArray_Scalar': 60,
- 'PyArray_FromScalar': 61,
- 'PyArray_ScalarAsCtype': 62,
- 'PyArray_CastScalarToCtype': 63,
- 'PyArray_CastScalarDirect': 64,
- 'PyArray_ScalarFromObject': 65,
- 'PyArray_GetCastFunc': 66,
- 'PyArray_FromDims': 67,
- 'PyArray_FromDimsAndDataAndDescr': 68,
- 'PyArray_FromAny': 69,
- 'PyArray_EnsureArray': 70,
- 'PyArray_EnsureAnyArray': 71,
- 'PyArray_FromFile': 72,
- 'PyArray_FromString': 73,
- 'PyArray_FromBuffer': 74,
- 'PyArray_FromIter': 75,
- 'PyArray_Return': 76,
- 'PyArray_GetField': 77,
- 'PyArray_SetField': 78,
- 'PyArray_Byteswap': 79,
- 'PyArray_Resize': 80,
- 'PyArray_MoveInto': 81,
- 'PyArray_CopyInto': 82,
- 'PyArray_CopyAnyInto': 83,
- 'PyArray_CopyObject': 84,
- 'PyArray_NewCopy': 85,
- 'PyArray_ToList': 86,
- 'PyArray_ToString': 87,
- 'PyArray_ToFile': 88,
- 'PyArray_Dump': 89,
- 'PyArray_Dumps': 90,
- 'PyArray_ValidType': 91,
- 'PyArray_UpdateFlags': 92,
- 'PyArray_New': 93,
- 'PyArray_NewFromDescr': 94,
- 'PyArray_DescrNew': 95,
- 'PyArray_DescrNewFromType': 96,
- 'PyArray_GetPriority': 97,
- 'PyArray_IterNew': 98,
- 'PyArray_MultiIterNew': 99,
- 'PyArray_PyIntAsInt': 100,
- 'PyArray_PyIntAsIntp': 101,
- 'PyArray_Broadcast': 102,
- 'PyArray_FillObjectArray': 103,
- 'PyArray_FillWithScalar': 104,
- 'PyArray_CheckStrides': 105,
- 'PyArray_DescrNewByteorder': 106,
- 'PyArray_IterAllButAxis': 107,
- 'PyArray_CheckFromAny': 108,
- 'PyArray_FromArray': 109,
- 'PyArray_FromInterface': 110,
- 'PyArray_FromStructInterface': 111,
- 'PyArray_FromArrayAttr': 112,
- 'PyArray_ScalarKind': 113,
- 'PyArray_CanCoerceScalar': 114,
- 'PyArray_NewFlagsObject': 115,
- 'PyArray_CanCastScalar': 116,
- 'PyArray_CompareUCS4': 117,
- 'PyArray_RemoveSmallest': 118,
- 'PyArray_ElementStrides': 119,
- 'PyArray_Item_INCREF': 120,
- 'PyArray_Item_XDECREF': 121,
- 'PyArray_FieldNames': 122,
- 'PyArray_Transpose': 123,
- 'PyArray_TakeFrom': 124,
- 'PyArray_PutTo': 125,
- 'PyArray_PutMask': 126,
- 'PyArray_Repeat': 127,
- 'PyArray_Choose': 128,
- 'PyArray_Sort': 129,
- 'PyArray_ArgSort': 130,
- 'PyArray_SearchSorted': 131,
- 'PyArray_ArgMax': 132,
- 'PyArray_ArgMin': 133,
- 'PyArray_Reshape': 134,
- 'PyArray_Newshape': 135,
- 'PyArray_Squeeze': 136,
- 'PyArray_View': 137,
- 'PyArray_SwapAxes': 138,
- 'PyArray_Max': 139,
- 'PyArray_Min': 140,
- 'PyArray_Ptp': 141,
- 'PyArray_Mean': 142,
- 'PyArray_Trace': 143,
- 'PyArray_Diagonal': 144,
- 'PyArray_Clip': 145,
- 'PyArray_Conjugate': 146,
- 'PyArray_Nonzero': 147,
- 'PyArray_Std': 148,
- 'PyArray_Sum': 149,
- 'PyArray_CumSum': 150,
- 'PyArray_Prod': 151,
- 'PyArray_CumProd': 152,
- 'PyArray_All': 153,
- 'PyArray_Any': 154,
- 'PyArray_Compress': 155,
- 'PyArray_Flatten': 156,
- 'PyArray_Ravel': 157,
- 'PyArray_MultiplyList': 158,
- 'PyArray_MultiplyIntList': 159,
- 'PyArray_GetPtr': 160,
- 'PyArray_CompareLists': 161,
- 'PyArray_AsCArray': 162,
- 'PyArray_As1D': 163,
- 'PyArray_As2D': 164,
- 'PyArray_Free': 165,
- 'PyArray_Converter': 166,
- 'PyArray_IntpFromSequence': 167,
- 'PyArray_Concatenate': 168,
- 'PyArray_InnerProduct': 169,
- 'PyArray_MatrixProduct': 170,
- 'PyArray_CopyAndTranspose': 171,
- 'PyArray_Correlate': 172,
- 'PyArray_TypestrConvert': 173,
- 'PyArray_DescrConverter': 174,
- 'PyArray_DescrConverter2': 175,
- 'PyArray_IntpConverter': 176,
- 'PyArray_BufferConverter': 177,
- 'PyArray_AxisConverter': 178,
- 'PyArray_BoolConverter': 179,
- 'PyArray_ByteorderConverter': 180,
- 'PyArray_OrderConverter': 181,
- 'PyArray_EquivTypes': 182,
- 'PyArray_Zeros': 183,
- 'PyArray_Empty': 184,
- 'PyArray_Where': 185,
- 'PyArray_Arange': 186,
- 'PyArray_ArangeObj': 187,
- 'PyArray_SortkindConverter': 188,
- 'PyArray_LexSort': 189,
- 'PyArray_Round': 190,
- 'PyArray_EquivTypenums': 191,
- 'PyArray_RegisterDataType': 192,
- 'PyArray_RegisterCastFunc': 193,
- 'PyArray_RegisterCanCast': 194,
- 'PyArray_InitArrFuncs': 195,
- 'PyArray_IntTupleFromIntp': 196,
- 'PyArray_TypeNumFromName': 197,
- 'PyArray_ClipmodeConverter': 198,
- 'PyArray_OutputConverter': 199,
- 'PyArray_BroadcastToShape': 200,
- '_PyArray_SigintHandler': 201,
- '_PyArray_GetSigintBuf': 202,
- 'PyArray_DescrAlignConverter': 203,
- 'PyArray_DescrAlignConverter2': 204,
- 'PyArray_SearchsideConverter': 205,
- 'PyArray_CheckAxis': 206,
- 'PyArray_OverflowMultiplyList': 207,
- 'PyArray_CompareString': 208,
- 'PyArray_MultiIterFromObjects': 209,
- 'PyArray_GetEndianness': 210,
- 'PyArray_GetNDArrayCFeatureVersion': 211,
- 'PyArray_Correlate2': 212,
- 'PyArray_NeighborhoodIterNew': 213,
+ 'PyArray_GetNDArrayCVersion': (0,),
+ 'PyArray_SetNumericOps': (40,),
+ 'PyArray_GetNumericOps': (41,),
+ 'PyArray_INCREF': (42,),
+ 'PyArray_XDECREF': (43,),
+ 'PyArray_SetStringFunction': (44,),
+ 'PyArray_DescrFromType': (45,),
+ 'PyArray_TypeObjectFromType': (46,),
+ 'PyArray_Zero': (47,),
+ 'PyArray_One': (48,),
+ 'PyArray_CastToType': (49, StealRef(2), NonNull(2)),
+ 'PyArray_CastTo': (50,),
+ 'PyArray_CastAnyTo': (51,),
+ 'PyArray_CanCastSafely': (52,),
+ 'PyArray_CanCastTo': (53,),
+ 'PyArray_ObjectType': (54,),
+ 'PyArray_DescrFromObject': (55,),
+ 'PyArray_ConvertToCommonType': (56,),
+ 'PyArray_DescrFromScalar': (57,),
+ 'PyArray_DescrFromTypeObject': (58,),
+ 'PyArray_Size': (59,),
+ 'PyArray_Scalar': (60,),
+ 'PyArray_FromScalar': (61, StealRef(2)),
+ 'PyArray_ScalarAsCtype': (62,),
+ 'PyArray_CastScalarToCtype': (63,),
+ 'PyArray_CastScalarDirect': (64,),
+ 'PyArray_ScalarFromObject': (65,),
+ 'PyArray_GetCastFunc': (66,),
+ 'PyArray_FromDims': (67,),
+ 'PyArray_FromDimsAndDataAndDescr': (68, StealRef(3)),
+ 'PyArray_FromAny': (69, StealRef(2)),
+ 'PyArray_EnsureArray': (70, StealRef(1)),
+ 'PyArray_EnsureAnyArray': (71, StealRef(1)),
+ 'PyArray_FromFile': (72,),
+ 'PyArray_FromString': (73,),
+ 'PyArray_FromBuffer': (74,),
+ 'PyArray_FromIter': (75, StealRef(2)),
+ 'PyArray_Return': (76, StealRef(1)),
+ 'PyArray_GetField': (77, StealRef(2), NonNull(2)),
+ 'PyArray_SetField': (78, StealRef(2), NonNull(2)),
+ 'PyArray_Byteswap': (79,),
+ 'PyArray_Resize': (80,),
+ 'PyArray_MoveInto': (81,),
+ 'PyArray_CopyInto': (82,),
+ 'PyArray_CopyAnyInto': (83,),
+ 'PyArray_CopyObject': (84,),
+ 'PyArray_NewCopy': (85, NonNull(1)),
+ 'PyArray_ToList': (86,),
+ 'PyArray_ToString': (87,),
+ 'PyArray_ToFile': (88,),
+ 'PyArray_Dump': (89,),
+ 'PyArray_Dumps': (90,),
+ 'PyArray_ValidType': (91,),
+ 'PyArray_UpdateFlags': (92,),
+ 'PyArray_New': (93, NonNull(1)),
+ 'PyArray_NewFromDescr': (94, StealRef(2), NonNull([1, 2])),
+ 'PyArray_DescrNew': (95,),
+ 'PyArray_DescrNewFromType': (96,),
+ 'PyArray_GetPriority': (97,),
+ 'PyArray_IterNew': (98,),
+ 'PyArray_MultiIterNew': (99,),
+ 'PyArray_PyIntAsInt': (100,),
+ 'PyArray_PyIntAsIntp': (101,),
+ 'PyArray_Broadcast': (102,),
+ 'PyArray_FillObjectArray': (103,),
+ 'PyArray_FillWithScalar': (104,),
+ 'PyArray_CheckStrides': (105,),
+ 'PyArray_DescrNewByteorder': (106,),
+ 'PyArray_IterAllButAxis': (107,),
+ 'PyArray_CheckFromAny': (108, StealRef(2)),
+ 'PyArray_FromArray': (109, StealRef(2)),
+ 'PyArray_FromInterface': (110,),
+ 'PyArray_FromStructInterface': (111,),
+ 'PyArray_FromArrayAttr': (112,),
+ 'PyArray_ScalarKind': (113,),
+ 'PyArray_CanCoerceScalar': (114,),
+ 'PyArray_NewFlagsObject': (115,),
+ 'PyArray_CanCastScalar': (116,),
+ 'PyArray_CompareUCS4': (117,),
+ 'PyArray_RemoveSmallest': (118,),
+ 'PyArray_ElementStrides': (119,),
+ 'PyArray_Item_INCREF': (120,),
+ 'PyArray_Item_XDECREF': (121,),
+ 'PyArray_FieldNames': (122,),
+ 'PyArray_Transpose': (123,),
+ 'PyArray_TakeFrom': (124,),
+ 'PyArray_PutTo': (125,),
+ 'PyArray_PutMask': (126,),
+ 'PyArray_Repeat': (127,),
+ 'PyArray_Choose': (128,),
+ 'PyArray_Sort': (129,),
+ 'PyArray_ArgSort': (130,),
+ 'PyArray_SearchSorted': (131,),
+ 'PyArray_ArgMax': (132,),
+ 'PyArray_ArgMin': (133,),
+ 'PyArray_Reshape': (134,),
+ 'PyArray_Newshape': (135,),
+ 'PyArray_Squeeze': (136,),
+ 'PyArray_View': (137, StealRef(2)),
+ 'PyArray_SwapAxes': (138,),
+ 'PyArray_Max': (139,),
+ 'PyArray_Min': (140,),
+ 'PyArray_Ptp': (141,),
+ 'PyArray_Mean': (142,),
+ 'PyArray_Trace': (143,),
+ 'PyArray_Diagonal': (144,),
+ 'PyArray_Clip': (145,),
+ 'PyArray_Conjugate': (146,),
+ 'PyArray_Nonzero': (147,),
+ 'PyArray_Std': (148,),
+ 'PyArray_Sum': (149,),
+ 'PyArray_CumSum': (150,),
+ 'PyArray_Prod': (151,),
+ 'PyArray_CumProd': (152,),
+ 'PyArray_All': (153,),
+ 'PyArray_Any': (154,),
+ 'PyArray_Compress': (155,),
+ 'PyArray_Flatten': (156,),
+ 'PyArray_Ravel': (157,),
+ 'PyArray_MultiplyList': (158,),
+ 'PyArray_MultiplyIntList': (159,),
+ 'PyArray_GetPtr': (160,),
+ 'PyArray_CompareLists': (161,),
+ 'PyArray_AsCArray': (162, StealRef(5)),
+ 'PyArray_As1D': (163,),
+ 'PyArray_As2D': (164,),
+ 'PyArray_Free': (165,),
+ 'PyArray_Converter': (166,),
+ 'PyArray_IntpFromSequence': (167,),
+ 'PyArray_Concatenate': (168,),
+ 'PyArray_InnerProduct': (169,),
+ 'PyArray_MatrixProduct': (170,),
+ 'PyArray_CopyAndTranspose': (171,),
+ 'PyArray_Correlate': (172,),
+ 'PyArray_TypestrConvert': (173,),
+ 'PyArray_DescrConverter': (174,),
+ 'PyArray_DescrConverter2': (175,),
+ 'PyArray_IntpConverter': (176,),
+ 'PyArray_BufferConverter': (177,),
+ 'PyArray_AxisConverter': (178,),
+ 'PyArray_BoolConverter': (179,),
+ 'PyArray_ByteorderConverter': (180,),
+ 'PyArray_OrderConverter': (181,),
+ 'PyArray_EquivTypes': (182,),
+ 'PyArray_Zeros': (183, StealRef(3)),
+ 'PyArray_Empty': (184, StealRef(3)),
+ 'PyArray_Where': (185,),
+ 'PyArray_Arange': (186,),
+ 'PyArray_ArangeObj': (187,),
+ 'PyArray_SortkindConverter': (188,),
+ 'PyArray_LexSort': (189,),
+ 'PyArray_Round': (190,),
+ 'PyArray_EquivTypenums': (191,),
+ 'PyArray_RegisterDataType': (192,),
+ 'PyArray_RegisterCastFunc': (193,),
+ 'PyArray_RegisterCanCast': (194,),
+ 'PyArray_InitArrFuncs': (195,),
+ 'PyArray_IntTupleFromIntp': (196,),
+ 'PyArray_TypeNumFromName': (197,),
+ 'PyArray_ClipmodeConverter': (198,),
+ 'PyArray_OutputConverter': (199,),
+ 'PyArray_BroadcastToShape': (200,),
+ '_PyArray_SigintHandler': (201,),
+ '_PyArray_GetSigintBuf': (202,),
+ 'PyArray_DescrAlignConverter': (203,),
+ 'PyArray_DescrAlignConverter2': (204,),
+ 'PyArray_SearchsideConverter': (205,),
+ 'PyArray_CheckAxis': (206,),
+ 'PyArray_OverflowMultiplyList': (207,),
+ 'PyArray_CompareString': (208,),
+ 'PyArray_MultiIterFromObjects': (209,),
+ 'PyArray_GetEndianness': (210,),
+ 'PyArray_GetNDArrayCFeatureVersion': (211,),
+ 'PyArray_Correlate2': (212,),
+ 'PyArray_NeighborhoodIterNew': (213,),
# End 1.5 API
- 'PyArray_SetDatetimeParseFunction': 219,
- 'PyArray_DatetimeToDatetimeStruct': 220,
- 'PyArray_TimedeltaToTimedeltaStruct': 221,
- 'PyArray_DatetimeStructToDatetime': 222,
- 'PyArray_TimedeltaStructToTimedelta': 223,
+ 'PyArray_SetDatetimeParseFunction': (219,),
+ 'PyArray_DatetimeToDatetimeStruct': (220,),
+ 'PyArray_TimedeltaToTimedeltaStruct': (221,),
+ 'PyArray_DatetimeStructToDatetime': (222,),
+ 'PyArray_TimedeltaStructToTimedelta': (223,),
# NDIter API
- 'NpyIter_New': 224,
- 'NpyIter_MultiNew': 225,
- 'NpyIter_AdvancedNew': 226,
- 'NpyIter_Copy': 227,
- 'NpyIter_Deallocate': 228,
- 'NpyIter_HasDelayedBufAlloc': 229,
- 'NpyIter_HasExternalLoop': 230,
- 'NpyIter_EnableExternalLoop': 231,
- 'NpyIter_GetInnerStrideArray': 232,
- 'NpyIter_GetInnerLoopSizePtr': 233,
- 'NpyIter_Reset': 234,
- 'NpyIter_ResetBasePointers': 235,
- 'NpyIter_ResetToIterIndexRange': 236,
- 'NpyIter_GetNDim': 237,
- 'NpyIter_GetNOp': 238,
- 'NpyIter_GetIterNext': 239,
- 'NpyIter_GetIterSize': 240,
- 'NpyIter_GetIterIndexRange': 241,
- 'NpyIter_GetIterIndex': 242,
- 'NpyIter_GotoIterIndex': 243,
- 'NpyIter_HasMultiIndex': 244,
- 'NpyIter_GetShape': 245,
- 'NpyIter_GetGetMultiIndex': 246,
- 'NpyIter_GotoMultiIndex': 247,
- 'NpyIter_RemoveMultiIndex': 248,
- 'NpyIter_HasIndex': 249,
- 'NpyIter_IsBuffered': 250,
- 'NpyIter_IsGrowInner': 251,
- 'NpyIter_GetBufferSize': 252,
- 'NpyIter_GetIndexPtr': 253,
- 'NpyIter_GotoIndex': 254,
- 'NpyIter_GetDataPtrArray': 255,
- 'NpyIter_GetDescrArray': 256,
- 'NpyIter_GetOperandArray': 257,
- 'NpyIter_GetIterView': 258,
- 'NpyIter_GetReadFlags': 259,
- 'NpyIter_GetWriteFlags': 260,
- 'NpyIter_DebugPrint': 261,
- 'NpyIter_IterationNeedsAPI': 262,
- 'NpyIter_GetInnerFixedStrideArray': 263,
- 'NpyIter_RemoveAxis': 264,
- 'NpyIter_GetAxisStrideArray': 265,
- 'NpyIter_RequiresBuffering': 266,
- 'NpyIter_GetInitialDataPtrArray': 267,
- 'NpyIter_CreateCompatibleStrides': 268,
+ 'NpyIter_New': (224,),
+ 'NpyIter_MultiNew': (225,),
+ 'NpyIter_AdvancedNew': (226,),
+ 'NpyIter_Copy': (227,),
+ 'NpyIter_Deallocate': (228,),
+ 'NpyIter_HasDelayedBufAlloc': (229,),
+ 'NpyIter_HasExternalLoop': (230,),
+ 'NpyIter_EnableExternalLoop': (231,),
+ 'NpyIter_GetInnerStrideArray': (232,),
+ 'NpyIter_GetInnerLoopSizePtr': (233,),
+ 'NpyIter_Reset': (234,),
+ 'NpyIter_ResetBasePointers': (235,),
+ 'NpyIter_ResetToIterIndexRange': (236,),
+ 'NpyIter_GetNDim': (237,),
+ 'NpyIter_GetNOp': (238,),
+ 'NpyIter_GetIterNext': (239,),
+ 'NpyIter_GetIterSize': (240,),
+ 'NpyIter_GetIterIndexRange': (241,),
+ 'NpyIter_GetIterIndex': (242,),
+ 'NpyIter_GotoIterIndex': (243,),
+ 'NpyIter_HasMultiIndex': (244,),
+ 'NpyIter_GetShape': (245,),
+ 'NpyIter_GetGetMultiIndex': (246,),
+ 'NpyIter_GotoMultiIndex': (247,),
+ 'NpyIter_RemoveMultiIndex': (248,),
+ 'NpyIter_HasIndex': (249,),
+ 'NpyIter_IsBuffered': (250,),
+ 'NpyIter_IsGrowInner': (251,),
+ 'NpyIter_GetBufferSize': (252,),
+ 'NpyIter_GetIndexPtr': (253,),
+ 'NpyIter_GotoIndex': (254,),
+ 'NpyIter_GetDataPtrArray': (255,),
+ 'NpyIter_GetDescrArray': (256,),
+ 'NpyIter_GetOperandArray': (257,),
+ 'NpyIter_GetIterView': (258,),
+ 'NpyIter_GetReadFlags': (259,),
+ 'NpyIter_GetWriteFlags': (260,),
+ 'NpyIter_DebugPrint': (261,),
+ 'NpyIter_IterationNeedsAPI': (262,),
+ 'NpyIter_GetInnerFixedStrideArray': (263,),
+ 'NpyIter_RemoveAxis': (264,),
+ 'NpyIter_GetAxisStrideArray': (265,),
+ 'NpyIter_RequiresBuffering': (266,),
+ 'NpyIter_GetInitialDataPtrArray': (267,),
+ 'NpyIter_CreateCompatibleStrides': (268,),
#
- 'PyArray_CastingConverter': 269,
- 'PyArray_CountNonzero': 270,
- 'PyArray_PromoteTypes': 271,
- 'PyArray_MinScalarType': 272,
- 'PyArray_ResultType': 273,
- 'PyArray_CanCastArrayTo': 274,
- 'PyArray_CanCastTypeTo': 275,
- 'PyArray_EinsteinSum': 276,
- 'PyArray_NewLikeArray': 277,
- 'PyArray_GetArrayParamsFromObject': 278,
- 'PyArray_ConvertClipmodeSequence': 279,
- 'PyArray_MatrixProduct2': 280,
+ 'PyArray_CastingConverter': (269,),
+ 'PyArray_CountNonzero': (270,),
+ 'PyArray_PromoteTypes': (271,),
+ 'PyArray_MinScalarType': (272,),
+ 'PyArray_ResultType': (273,),
+ 'PyArray_CanCastArrayTo': (274,),
+ 'PyArray_CanCastTypeTo': (275,),
+ 'PyArray_EinsteinSum': (276,),
+ 'PyArray_NewLikeArray': (277, StealRef(3), NonNull(1)),
+ 'PyArray_GetArrayParamsFromObject': (278,),
+ 'PyArray_ConvertClipmodeSequence': (279,),
+ 'PyArray_MatrixProduct2': (280,),
# End 1.6 API
- 'NpyIter_IsFirstVisit': 281,
- 'PyArray_SetBaseObject': 282,
- 'PyArray_CreateSortedStridePerm': 283,
- 'PyArray_RemoveAxesInPlace': 284,
- 'PyArray_DebugPrint': 285,
- 'PyArray_FailUnlessWriteable': 286,
- 'PyArray_SetUpdateIfCopyBase': 287,
- 'PyDataMem_NEW': 288,
- 'PyDataMem_FREE': 289,
- 'PyDataMem_RENEW': 290,
- 'PyDataMem_SetEventHook': 291,
- 'PyArray_MapIterSwapAxes': 293,
- 'PyArray_MapIterArray': 294,
- 'PyArray_MapIterNext': 295,
+ 'NpyIter_IsFirstVisit': (281,),
+ 'PyArray_SetBaseObject': (282, StealRef(2)),
+ 'PyArray_CreateSortedStridePerm': (283,),
+ 'PyArray_RemoveAxesInPlace': (284,),
+ 'PyArray_DebugPrint': (285,),
+ 'PyArray_FailUnlessWriteable': (286,),
+ 'PyArray_SetUpdateIfCopyBase': (287, StealRef(2)),
+ 'PyDataMem_NEW': (288,),
+ 'PyDataMem_FREE': (289,),
+ 'PyDataMem_RENEW': (290,),
+ 'PyDataMem_SetEventHook': (291,),
+ 'PyArray_MapIterSwapAxes': (293,),
+ 'PyArray_MapIterArray': (294,),
+ 'PyArray_MapIterNext': (295,),
# End 1.7 API
- 'PyArray_Partition': 296,
- 'PyArray_ArgPartition': 297,
- 'PyArray_SelectkindConverter': 298,
- 'PyDataMem_NEW_ZEROED': 299,
+ 'PyArray_Partition': (296,),
+ 'PyArray_ArgPartition': (297,),
+ 'PyArray_SelectkindConverter': (298,),
+ 'PyDataMem_NEW_ZEROED': (299,),
# End 1.8 API
}
ufunc_types_api = {
- 'PyUFunc_Type': 0
+ 'PyUFunc_Type': (0,)
}
ufunc_funcs_api = {
- 'PyUFunc_FromFuncAndData': 1,
- 'PyUFunc_RegisterLoopForType': 2,
- 'PyUFunc_GenericFunction': 3,
- 'PyUFunc_f_f_As_d_d': 4,
- 'PyUFunc_d_d': 5,
- 'PyUFunc_f_f': 6,
- 'PyUFunc_g_g': 7,
- 'PyUFunc_F_F_As_D_D': 8,
- 'PyUFunc_F_F': 9,
- 'PyUFunc_D_D': 10,
- 'PyUFunc_G_G': 11,
- 'PyUFunc_O_O': 12,
- 'PyUFunc_ff_f_As_dd_d': 13,
- 'PyUFunc_ff_f': 14,
- 'PyUFunc_dd_d': 15,
- 'PyUFunc_gg_g': 16,
- 'PyUFunc_FF_F_As_DD_D': 17,
- 'PyUFunc_DD_D': 18,
- 'PyUFunc_FF_F': 19,
- 'PyUFunc_GG_G': 20,
- 'PyUFunc_OO_O': 21,
- 'PyUFunc_O_O_method': 22,
- 'PyUFunc_OO_O_method': 23,
- 'PyUFunc_On_Om': 24,
- 'PyUFunc_GetPyValues': 25,
- 'PyUFunc_checkfperr': 26,
- 'PyUFunc_clearfperr': 27,
- 'PyUFunc_getfperr': 28,
- 'PyUFunc_handlefperr': 29,
- 'PyUFunc_ReplaceLoopBySignature': 30,
- 'PyUFunc_FromFuncAndDataAndSignature': 31,
- 'PyUFunc_SetUsesArraysAsData': 32,
+ 'PyUFunc_FromFuncAndData': (1,),
+ 'PyUFunc_RegisterLoopForType': (2,),
+ 'PyUFunc_GenericFunction': (3,),
+ 'PyUFunc_f_f_As_d_d': (4,),
+ 'PyUFunc_d_d': (5,),
+ 'PyUFunc_f_f': (6,),
+ 'PyUFunc_g_g': (7,),
+ 'PyUFunc_F_F_As_D_D': (8,),
+ 'PyUFunc_F_F': (9,),
+ 'PyUFunc_D_D': (10,),
+ 'PyUFunc_G_G': (11,),
+ 'PyUFunc_O_O': (12,),
+ 'PyUFunc_ff_f_As_dd_d': (13,),
+ 'PyUFunc_ff_f': (14,),
+ 'PyUFunc_dd_d': (15,),
+ 'PyUFunc_gg_g': (16,),
+ 'PyUFunc_FF_F_As_DD_D': (17,),
+ 'PyUFunc_DD_D': (18,),
+ 'PyUFunc_FF_F': (19,),
+ 'PyUFunc_GG_G': (20,),
+ 'PyUFunc_OO_O': (21,),
+ 'PyUFunc_O_O_method': (22,),
+ 'PyUFunc_OO_O_method': (23,),
+ 'PyUFunc_On_Om': (24,),
+ 'PyUFunc_GetPyValues': (25,),
+ 'PyUFunc_checkfperr': (26,),
+ 'PyUFunc_clearfperr': (27,),
+ 'PyUFunc_getfperr': (28,),
+ 'PyUFunc_handlefperr': (29,),
+ 'PyUFunc_ReplaceLoopBySignature': (30,),
+ 'PyUFunc_FromFuncAndDataAndSignature': (31,),
+ 'PyUFunc_SetUsesArraysAsData': (32,),
# End 1.5 API
- 'PyUFunc_e_e': 33,
- 'PyUFunc_e_e_As_f_f': 34,
- 'PyUFunc_e_e_As_d_d': 35,
- 'PyUFunc_ee_e': 36,
- 'PyUFunc_ee_e_As_ff_f': 37,
- 'PyUFunc_ee_e_As_dd_d': 38,
+ 'PyUFunc_e_e': (33,),
+ 'PyUFunc_e_e_As_f_f': (34,),
+ 'PyUFunc_e_e_As_d_d': (35,),
+ 'PyUFunc_ee_e': (36,),
+ 'PyUFunc_ee_e_As_ff_f': (37,),
+ 'PyUFunc_ee_e_As_dd_d': (38,),
# End 1.6 API
- 'PyUFunc_DefaultTypeResolver': 39,
- 'PyUFunc_ValidateCasting': 40,
+ 'PyUFunc_DefaultTypeResolver': (39,),
+ 'PyUFunc_ValidateCasting': (40,),
# End 1.7 API
- 'PyUFunc_RegisterLoopForDescr': 41,
+ 'PyUFunc_RegisterLoopForDescr': (41,),
# End 1.8 API
}
@@ -399,7 +399,6 @@ ufunc_funcs_api = {
# XXX: DO NOT CHANGE THE ORDER OF TUPLES BELOW !
multiarray_api = (
multiarray_global_vars,
- multiarray_global_vars_types,
multiarray_scalar_bool_values,
multiarray_types_api,
multiarray_funcs_api,
diff --git a/numpy/core/include/numpy/ndarraytypes.h b/numpy/core/include/numpy/ndarraytypes.h
index ce348ed11..21ff8cd1a 100644
--- a/numpy/core/include/numpy/ndarraytypes.h
+++ b/numpy/core/include/numpy/ndarraytypes.h
@@ -1492,13 +1492,13 @@ PyArray_STRIDE(const PyArrayObject *arr, int istride)
return ((PyArrayObject_fields *)arr)->strides[istride];
}
-static NPY_INLINE PyObject *
+static NPY_INLINE NPY_RETURNS_BORROWED_REF PyObject *
PyArray_BASE(PyArrayObject *arr)
{
return ((PyArrayObject_fields *)arr)->base;
}
-static NPY_INLINE PyArray_Descr *
+static NPY_INLINE NPY_RETURNS_BORROWED_REF PyArray_Descr *
PyArray_DESCR(PyArrayObject *arr)
{
return ((PyArrayObject_fields *)arr)->descr;
diff --git a/numpy/core/include/numpy/npy_common.h b/numpy/core/include/numpy/npy_common.h
index 46c745c99..6244783f5 100644
--- a/numpy/core/include/numpy/npy_common.h
+++ b/numpy/core/include/numpy/npy_common.h
@@ -25,6 +25,16 @@
#define NPY_GCC_OPT_3
#endif
+/*
+ * mark an argument (starting from 1) that must not be NULL and is not checked
+ * DO NOT USE IF FUNCTION CHECKS FOR NULL!! the compiler will remove the check
+ */
+#ifdef HAVE_ATTRIBUTE_NONNULL
+#define NPY_GCC_NONNULL(n) __attribute__((nonnull(n)))
+#else
+#define NPY_GCC_NONNULL(n)
+#endif
+
#if defined HAVE_XMMINTRIN_H && defined HAVE__MM_LOAD_PS
#define NPY_HAVE_SSE_INTRINSICS
#endif
@@ -63,6 +73,20 @@
#define NPY_INLINE
#endif
+#ifdef WITH_CPYCHECKER_RETURNS_BORROWED_REF_ATTRIBUTE
+ #define NPY_RETURNS_BORROWED_REF \
+ __attribute__((cpychecker_returns_borrowed_ref))
+#else
+ #define NPY_RETURNS_BORROWED_REF
+#endif
+
+#ifdef WITH_CPYCHECKER_STEALS_REFERENCE_TO_ARG_ATTRIBUTE
+ #define NPY_STEALS_REF_TO_ARG(n) \
+ __attribute__((cpychecker_steals_reference_to_arg(n)))
+#else
+ #define NPY_STEALS_REF_TO_ARG(n)
+#endif
+
/* 64 bit file position support, also on win-amd64. Ticket #1660 */
#if defined(_MSC_VER) && defined(_WIN64) && (_MSC_VER > 1400) || \
defined(__MINGW32__) || defined(__MINGW64__)
diff --git a/numpy/core/numeric.py b/numpy/core/numeric.py
index 778eed8c3..8c569ea15 100644
--- a/numpy/core/numeric.py
+++ b/numpy/core/numeric.py
@@ -1,5 +1,6 @@
from __future__ import division, absolute_import, print_function
+import os
import sys
import warnings
import collections
@@ -1074,9 +1075,17 @@ def outer(a, b, out=None):
return multiply(a.ravel()[:, newaxis], b.ravel()[newaxis,:], out)
# try to import blas optimized dot if available
+envbak = os.environ.copy()
try:
# importing this changes the dot function for basic 4 types
# to blas-optimized versions.
+
+ # disables openblas affinity setting of the main thread that limits
+ # python threads or processes to one core
+ if 'OPENBLAS_MAIN_FREE' not in os.environ:
+ os.environ['OPENBLAS_MAIN_FREE'] = '1'
+ if 'GOTOBLAS_MAIN_FREE' not in os.environ:
+ os.environ['GOTOBLAS_MAIN_FREE'] = '1'
from ._dotblas import dot, vdot, inner, alterdot, restoredot
except ImportError:
# docstrings are in add_newdocs.py
@@ -1088,6 +1097,10 @@ except ImportError:
pass
def restoredot():
pass
+finally:
+ os.environ.clear()
+ os.environ.update(envbak)
+ del envbak
def tensordot(a, b, axes=2):
"""
diff --git a/numpy/core/setup.py b/numpy/core/setup.py
index d48368ca1..c28de7c11 100644
--- a/numpy/core/setup.py
+++ b/numpy/core/setup.py
@@ -176,9 +176,8 @@ def check_math_capabilities(config, moredefs, mathlibs):
moredefs.append((fname2def(f), 1))
for dec, fn in OPTIONAL_GCC_ATTRIBUTES:
- if config.check_funcs_once([fn],
- decl=dict((('%s %s' % (dec, fn), True),)),
- call=False):
+ if config.check_func(fn, decl='int %s %s(void *);' % (dec, fn),
+ call=False):
moredefs.append((fname2def(fn), 1))
# C99 functions: float and long double versions
diff --git a/numpy/core/setup_common.py b/numpy/core/setup_common.py
index af2590fc7..4188f4c3f 100644
--- a/numpy/core/setup_common.py
+++ b/numpy/core/setup_common.py
@@ -127,6 +127,8 @@ OPTIONAL_GCC_ATTRIBUTES = [('__attribute__((optimize("unroll-loops")))',
'attribute_optimize_unroll_loops'),
('__attribute__((optimize("O3")))',
'attribute_optimize_opt_3'),
+ ('__attribute__((nonnull (1)))',
+ 'attribute_nonnull'),
]
# Subset of OPTIONAL_STDFUNCS which may alreay have HAVE_* defined by Python.h
diff --git a/numpy/core/src/multiarray/convert_datatype.c b/numpy/core/src/multiarray/convert_datatype.c
index 849386504..1db3bfe85 100644
--- a/numpy/core/src/multiarray/convert_datatype.c
+++ b/numpy/core/src/multiarray/convert_datatype.c
@@ -36,7 +36,7 @@ NPY_NO_EXPORT npy_intp REQUIRED_STR_LEN[] = {0, 3, 5, 10, 10, 20, 20, 20, 20};
* For backward compatibility
*
* Cast an array using typecode structure.
- * steals reference to at --- cannot be NULL
+ * steals reference to dtype --- cannot be NULL
*
* This function always makes a copy of arr, even if the dtype
* doesn't change.
diff --git a/numpy/core/src/multiarray/ctors.c b/numpy/core/src/multiarray/ctors.c
index a45a470bf..5f8fbc4dc 100644
--- a/numpy/core/src/multiarray/ctors.c
+++ b/numpy/core/src/multiarray/ctors.c
@@ -26,6 +26,7 @@
#include "array_assign.h"
#include "mapping.h" /* for array_item_asarray */
#include "scalarmathmodule.h" /* for npy_mul_with_overflow_intp */
+#include <assert.h>
/*
* Reading from a file or a string.
@@ -885,12 +886,15 @@ PyArray_NewFromDescr_int(PyTypeObject *subtype, PyArray_Descr *descr, int nd,
int i;
size_t sd;
npy_intp size;
+ assert(dims != NULL || (nd == 0));
if (descr->subarray) {
PyObject *ret;
npy_intp newdims[2*NPY_MAXDIMS];
npy_intp *newstrides = NULL;
- memcpy(newdims, dims, nd*sizeof(npy_intp));
+ if (nd > 0) {
+ memcpy(newdims, dims, nd * sizeof(npy_intp));
+ }
if (strides) {
newstrides = newdims + NPY_MAXDIMS;
memcpy(newstrides, strides, nd*sizeof(npy_intp));
diff --git a/numpy/core/src/multiarray/descriptor.c b/numpy/core/src/multiarray/descriptor.c
index 46419e48f..8b55c9fbd 100644
--- a/numpy/core/src/multiarray/descriptor.c
+++ b/numpy/core/src/multiarray/descriptor.c
@@ -410,7 +410,8 @@ _convert_from_array_descr(PyObject *obj, int align)
PyObject *nameslist;
PyArray_Descr *new;
PyArray_Descr *conv;
- char dtypeflags = 0;
+ /* Types with fields need the Python C API for field access */
+ char dtypeflags = NPY_NEEDS_PYAPI;
int maxalign = 0;
n = PyList_GET_SIZE(obj);
@@ -599,7 +600,8 @@ _convert_from_list(PyObject *obj, int align)
PyObject *nameslist = NULL;
int ret;
int maxalign = 0;
- char dtypeflags = 0;
+ /* Types with fields need the Python C API for field access */
+ char dtypeflags = NPY_NEEDS_PYAPI;
n = PyList_GET_SIZE(obj);
/*
@@ -935,7 +937,8 @@ _convert_from_dict(PyObject *obj, int align)
int n, i;
int totalsize, itemsize;
int maxalign = 0;
- char dtypeflags = 0;
+ /* Types with fields need the Python C API for field access */
+ char dtypeflags = NPY_NEEDS_PYAPI;
int has_out_of_order_fields = 0;
fields = PyDict_New();
diff --git a/numpy/core/src/multiarray/mapping.c b/numpy/core/src/multiarray/mapping.c
index 1436c9abb..e2b8ef700 100644
--- a/numpy/core/src/multiarray/mapping.c
+++ b/numpy/core/src/multiarray/mapping.c
@@ -1646,8 +1646,10 @@ array_assign_item(PyArrayObject *self, Py_ssize_t i, PyObject *op)
return -1;
}
if (PyArray_CopyObject(view, op) < 0) {
+ Py_DECREF(view);
return -1;
}
+ Py_DECREF(view);
}
return 0;
}
diff --git a/numpy/core/src/multiarray/methods.c b/numpy/core/src/multiarray/methods.c
index abfa04cb6..9104ffd03 100644
--- a/numpy/core/src/multiarray/methods.c
+++ b/numpy/core/src/multiarray/methods.c
@@ -352,9 +352,9 @@ array_swapaxes(PyArrayObject *self, PyObject *args)
}
-/* steals typed reference */
/*NUMPY_API
Get a subset of bytes from each element of the array
+ steals reference to typed, must not be NULL
*/
NPY_NO_EXPORT PyObject *
PyArray_GetField(PyArrayObject *self, PyArray_Descr *typed, int offset)
@@ -410,6 +410,7 @@ array_getfield(PyArrayObject *self, PyObject *args, PyObject *kwds)
/*NUMPY_API
Set a subset of bytes from each element of the array
+ steals reference to dtype, must not be NULL
*/
NPY_NO_EXPORT int
PyArray_SetField(PyArrayObject *self, PyArray_Descr *dtype,
diff --git a/numpy/core/src/multiarray/multiarraymodule.c b/numpy/core/src/multiarray/multiarraymodule.c
index c6d3c632f..a05e87e84 100644
--- a/numpy/core/src/multiarray/multiarraymodule.c
+++ b/numpy/core/src/multiarray/multiarraymodule.c
@@ -1540,7 +1540,7 @@ PyArray_EquivTypenums(int typenum1, int typenum2)
* NPY_RELAXED_STRIDES_CHECKING: If the strides logic is changed, the
* order specific stride setting is not necessary.
*/
-static PyObject *
+static NPY_STEALS_REF_TO_ARG(1) PyObject *
_prepend_ones(PyArrayObject *arr, int nd, int ndmin, NPY_ORDER order)
{
npy_intp newdims[NPY_MAXDIMS];
diff --git a/numpy/core/src/multiarray/scalarapi.c b/numpy/core/src/multiarray/scalarapi.c
index 8bbfb41fa..d71823566 100644
--- a/numpy/core/src/multiarray/scalarapi.c
+++ b/numpy/core/src/multiarray/scalarapi.c
@@ -831,8 +831,9 @@ PyArray_Scalar(void *data, PyArray_Descr *descr, PyObject *base)
/*NUMPY_API
*
- *Return either an array or the appropriate Python object if the array
- *is 0d and matches a Python type.
+ * Return either an array or the appropriate Python object if the array
+ * is 0d and matches a Python type.
+ * steals reference to mp
*/
NPY_NO_EXPORT PyObject *
PyArray_Return(PyArrayObject *mp)
diff --git a/numpy/distutils/command/config.py b/numpy/distutils/command/config.py
index cadcc1dde..0086e3632 100644
--- a/numpy/distutils/command/config.py
+++ b/numpy/distutils/command/config.py
@@ -307,7 +307,10 @@ int main ()
self._check_compiler()
body = []
if decl:
- body.append("int %s (void);" % func)
+ if type(decl) == str:
+ body.append(decl)
+ else:
+ body.append("int %s (void);" % func)
# Handle MSVC intrinsics: force MS compiler to make a function call.
# Useful to test for some functions when built with optimization on, to
# avoid build error because the intrinsic and our 'fake' test
diff --git a/numpy/distutils/command/install.py b/numpy/distutils/command/install.py
index 2da21542f..a1dd47755 100644
--- a/numpy/distutils/command/install.py
+++ b/numpy/distutils/command/install.py
@@ -7,9 +7,10 @@ if 'setuptools' in sys.modules:
else:
import distutils.command.install as old_install_mod
have_setuptools = False
-old_install = old_install_mod.install
from distutils.file_util import write_file
+old_install = old_install_mod.install
+
class install(old_install):
# Always run install_clib - the command is cheap, so no need to bypass it;
@@ -28,9 +29,11 @@ class install(old_install):
We must pull in the entire code so we can override the level used in the
_getframe() call since we wrap this call by one more level.
"""
+ from distutils.command.install import install as distutils_install
+
# Explicit request for old-style install? Just do it
if self.old_and_unmanageable or self.single_version_externally_managed:
- return old_install_mod._install.run(self)
+ return distutils_install.run(self)
# Attempt to detect whether we were called from setup() or by another
# command. If we were called by setup(), our caller will be the
@@ -48,7 +51,7 @@ class install(old_install):
# We weren't called from the command line or setup(), so we
# should run in backward-compatibility mode to support bdist_*
# commands.
- old_install_mod._install.run(self)
+ distutils_install.run(self)
else:
self.do_egg_install()
diff --git a/numpy/random/mtrand/mtrand.pyx b/numpy/random/mtrand/mtrand.pyx
index 7ddc1bbf1..fdd82979a 100644
--- a/numpy/random/mtrand/mtrand.pyx
+++ b/numpy/random/mtrand/mtrand.pyx
@@ -743,8 +743,9 @@ cdef class RandomState:
Parameters
----------
size : int or tuple of ints, optional
- Defines the shape of the returned array of random floats. If None
- (the default), returns a single float.
+ Output shape. If the given shape is, e.g., ``(m, n, k)``, then
+ ``m * n * k`` samples are drawn. Default is None, in which case a
+ single value is returned.
Returns
-------
@@ -782,10 +783,10 @@ cdef class RandomState:
Parameters
----------
- size : tuple of ints, int, optional
- Shape of output. If this is, for example, (m,n,k), m*n*k samples
- are generated. If no shape is specified, a single sample is
- returned.
+ size : int or tuple of ints, optional
+ Output shape. If the given shape is, e.g., ``(m, n, k)``, then
+ ``m * n * k`` samples are drawn. Default is None, in which case a
+ single value is returned.
Returns
-------
@@ -838,8 +839,9 @@ cdef class RandomState:
If provided, one above the largest (signed) integer to be drawn
from the distribution (see above for behavior if ``high=None``).
size : int or tuple of ints, optional
- Output shape. Default is None, in which case a single int is
- returned.
+ Output shape. If the given shape is, e.g., ``(m, n, k)``, then
+ ``m * n * k`` samples are drawn. Default is None, in which case a
+ single value is returned.
Returns
-------
@@ -940,13 +942,14 @@ cdef class RandomState:
If an ndarray, a random sample is generated from its elements.
If an int, the random sample is generated as if a was np.arange(n)
size : int or tuple of ints, optional
- Output shape. Default is None, in which case a single value is
- returned.
+ Output shape. If the given shape is, e.g., ``(m, n, k)``, then
+ ``m * n * k`` samples are drawn. Default is None, in which case a
+ single value is returned.
replace : boolean, optional
Whether the sample is with or without replacement
p : 1-D array-like, optional
The probabilities associated with each entry in a.
- If not given the sample assumes a uniform distribtion over all
+ If not given the sample assumes a uniform distribution over all
entries in a.
Returns
@@ -1121,9 +1124,9 @@ cdef class RandomState:
Upper boundary of the output interval. All values generated will be
less than high. The default value is 1.0.
size : int or tuple of ints, optional
- Shape of output. If the given size is, for example, (m,n,k),
- m*n*k samples are generated. If no shape is specified, a single sample
- is returned.
+ Output shape. If the given shape is, e.g., ``(m, n, k)``, then
+ ``m * n * k`` samples are drawn. Default is None, in which case a
+ single value is returned.
Returns
-------
@@ -1309,7 +1312,9 @@ cdef class RandomState:
If provided, the largest (signed) integer to be drawn from the
distribution (see above for behavior if ``high=None``).
size : int or tuple of ints, optional
- Output shape. Default is None, in which case a single int is returned.
+ Output shape. If the given shape is, e.g., ``(m, n, k)``, then
+ ``m * n * k`` samples are drawn. Default is None, in which case a
+ single value is returned.
Returns
-------
@@ -1376,8 +1381,9 @@ cdef class RandomState:
Parameters
----------
size : int or tuple of ints, optional
- Output shape. Default is None, in which case a single value is
- returned.
+ Output shape. If the given shape is, e.g., ``(m, n, k)``, then
+ ``m * n * k`` samples are drawn. Default is None, in which case a
+ single value is returned.
Returns
-------
@@ -1421,9 +1427,10 @@ cdef class RandomState:
Mean ("centre") of the distribution.
scale : float
Standard deviation (spread or "width") of the distribution.
- size : tuple of ints
+ size : int or tuple of ints, optional
Output shape. If the given shape is, e.g., ``(m, n, k)``, then
- ``m * n * k`` samples are drawn.
+ ``m * n * k`` samples are drawn. Default is None, in which case a
+ single value is returned.
See Also
--------
@@ -1525,9 +1532,10 @@ cdef class RandomState:
Alpha, non-negative.
b : float
Beta, non-negative.
- size : tuple of ints, optional
- The number of samples to draw. The output is packed according to
- the size given.
+ size : int or tuple of ints, optional
+ Output shape. If the given shape is, e.g., ``(m, n, k)``, then
+ ``m * n * k`` samples are drawn. Default is None, in which case a
+ single value is returned.
Returns
-------
@@ -1582,9 +1590,10 @@ cdef class RandomState:
----------
scale : float
The scale parameter, :math:`\\beta = 1/\\lambda`.
- size : tuple of ints
- Number of samples to draw. The output is shaped
- according to `size`.
+ size : int or tuple of ints, optional
+ Output shape. If the given shape is, e.g., ``(m, n, k)``, then
+ ``m * n * k`` samples are drawn. Default is None, in which case a
+ single value is returned.
References
----------
@@ -1623,8 +1632,10 @@ cdef class RandomState:
Parameters
----------
- size : int or tuple of ints
- Shape of the output.
+ size : int or tuple of ints, optional
+ Output shape. If the given shape is, e.g., ``(m, n, k)``, then
+ ``m * n * k`` samples are drawn. Default is None, in which case a
+ single value is returned.
Returns
-------
@@ -1653,9 +1664,10 @@ cdef class RandomState:
----------
shape : float
Parameter, should be > 0.
- size : int or tuple of ints
+ size : int or tuple of ints, optional
Output shape. If the given shape is, e.g., ``(m, n, k)``, then
- ``m * n * k`` samples are drawn.
+ ``m * n * k`` samples are drawn. Default is None, in which case a
+ single value is returned.
Returns
-------
@@ -1738,9 +1750,10 @@ cdef class RandomState:
The shape of the gamma distribution.
scale : scalar > 0, optional
The scale of the gamma distribution. Default is equal to 1.
- size : shape_tuple, optional
+ size : int or tuple of ints, optional
Output shape. If the given shape is, e.g., ``(m, n, k)``, then
- ``m * n * k`` samples are drawn.
+ ``m * n * k`` samples are drawn. Default is None, in which case a
+ single value is returned.
Returns
-------
@@ -1834,10 +1847,10 @@ cdef class RandomState:
Degrees of freedom in numerator. Should be greater than zero.
dfden : float
Degrees of freedom in denominator. Should be greater than zero.
- size : {tuple, int}, optional
- Output shape. If the given shape is, e.g., ``(m, n, k)``,
- then ``m * n * k`` samples are drawn. By default only one sample
- is returned.
+ size : int or tuple of ints, optional
+ Output shape. If the given shape is, e.g., ``(m, n, k)``, then
+ ``m * n * k`` samples are drawn. Default is None, in which case a
+ single value is returned.
Returns
-------
@@ -1934,9 +1947,10 @@ cdef class RandomState:
Parameter, should be > 1.
nonc : float
Parameter, should be >= 0.
- size : int or tuple of ints
- Output shape. If the given shape is, e.g., ``(m, n, k)``, then
- ``m * n * k`` samples are drawn.
+ size : int or tuple of ints, optional
+ Output shape. If the given shape is, e.g., ``(m, n, k)``, then
+ ``m * n * k`` samples are drawn. Default is None, in which case a
+ single value is returned.
Returns
-------
@@ -2025,9 +2039,10 @@ cdef class RandomState:
----------
df : int
Number of degrees of freedom.
- size : tuple of ints, int, optional
- Size of the returned array. By default, a scalar is
- returned.
+ size : int or tuple of ints, optional
+ Output shape. If the given shape is, e.g., ``(m, n, k)``, then
+ ``m * n * k`` samples are drawn. Default is None, in which case a
+ single value is returned.
Returns
-------
@@ -2103,8 +2118,10 @@ cdef class RandomState:
Degrees of freedom, should be >= 1.
nonc : float
Non-centrality, should be > 0.
- size : int or tuple of ints
- Shape of the output.
+ size : int or tuple of ints, optional
+ Output shape. If the given shape is, e.g., ``(m, n, k)``, then
+ ``m * n * k`` samples are drawn. Default is None, in which case a
+ single value is returned.
Notes
-----
@@ -2190,8 +2207,10 @@ cdef class RandomState:
Parameters
----------
- size : int or tuple of ints
- Shape of the output.
+ size : int or tuple of ints, optional
+ Output shape. If the given shape is, e.g., ``(m, n, k)``, then
+ ``m * n * k`` samples are drawn. Default is None, in which case a
+ single value is returned.
Returns
-------
@@ -2256,8 +2275,9 @@ cdef class RandomState:
df : int
Degrees of freedom, should be > 0.
size : int or tuple of ints, optional
- Output shape. Default is None, in which case a single value is
- returned.
+ Output shape. If the given shape is, e.g., ``(m, n, k)``, then
+ ``m * n * k`` samples are drawn. Default is None, in which case a
+ single value is returned.
Returns
-------
@@ -2362,9 +2382,10 @@ cdef class RandomState:
Mode ("center") of the distribution.
kappa : float
Dispersion of the distribution, has to be >=0.
- size : int or tuple of int
+ size : int or tuple of ints, optional
Output shape. If the given shape is, e.g., ``(m, n, k)``, then
- ``m * n * k`` samples are drawn.
+ ``m * n * k`` samples are drawn. Default is None, in which case a
+ single value is returned.
Returns
-------
@@ -2460,9 +2481,10 @@ cdef class RandomState:
----------
shape : float, > 0.
Shape of the distribution.
- size : tuple of ints
+ size : int or tuple of ints, optional
Output shape. If the given shape is, e.g., ``(m, n, k)``, then
- ``m * n * k`` samples are drawn.
+ ``m * n * k`` samples are drawn. Default is None, in which case a
+ single value is returned.
See Also
--------
@@ -2552,9 +2574,10 @@ cdef class RandomState:
----------
a : float
Shape of the distribution.
- size : tuple of ints
+ size : int or tuple of ints, optional
Output shape. If the given shape is, e.g., ``(m, n, k)``, then
- ``m * n * k`` samples are drawn.
+ ``m * n * k`` samples are drawn. Default is None, in which case a
+ single value is returned.
See Also
--------
@@ -2645,9 +2668,10 @@ cdef class RandomState:
----------
a : float
parameter, > 0
- size : tuple of ints
+ size : int or tuple of ints, optional
Output shape. If the given shape is, e.g., ``(m, n, k)``, then
- ``m * n * k`` samples are drawn.
+ ``m * n * k`` samples are drawn. Default is None, in which case a
+ single value is returned.
Returns
-------
@@ -2759,6 +2783,10 @@ cdef class RandomState:
The position, :math:`\\mu`, of the distribution peak.
scale : float
:math:`\\lambda`, the exponential decay.
+ size : int or tuple of ints, optional
+ Output shape. If the given shape is, e.g., ``(m, n, k)``, then
+ ``m * n * k`` samples are drawn. Default is None, in which case a
+ single value is returned.
Notes
-----
@@ -2847,9 +2875,10 @@ cdef class RandomState:
The location of the mode of the distribution.
scale : float
The scale parameter of the distribution.
- size : tuple of ints
+ size : int or tuple of ints, optional
Output shape. If the given shape is, e.g., ``(m, n, k)``, then
- ``m * n * k`` samples are drawn.
+ ``m * n * k`` samples are drawn. Default is None, in which case a
+ single value is returned.
Returns
-------
@@ -2977,9 +3006,10 @@ cdef class RandomState:
scale : float > 0.
- size : {tuple, int}
+ size : int or tuple of ints, optional
Output shape. If the given shape is, e.g., ``(m, n, k)``, then
- ``m * n * k`` samples are drawn.
+ ``m * n * k`` samples are drawn. Default is None, in which case a
+ single value is returned.
Returns
-------
@@ -3067,9 +3097,10 @@ cdef class RandomState:
Mean value of the underlying normal distribution
sigma : float, > 0.
Standard deviation of the underlying normal distribution
- size : tuple of ints
+ size : int or tuple of ints, optional
Output shape. If the given shape is, e.g., ``(m, n, k)``, then
- ``m * n * k`` samples are drawn.
+ ``m * n * k`` samples are drawn. Default is None, in which case a
+ single value is returned.
Returns
-------
@@ -3185,8 +3216,9 @@ cdef class RandomState:
scale : scalar
Scale, also equals the mode. Should be >= 0.
size : int or tuple of ints, optional
- Shape of the output. Default is None, in which case a single
- value is returned.
+ Output shape. If the given shape is, e.g., ``(m, n, k)``, then
+ ``m * n * k`` samples are drawn. Default is None, in which case a
+ single value is returned.
Notes
-----
@@ -3267,8 +3299,9 @@ cdef class RandomState:
scale : scalar
Scale parameter, should be >= 0.
size : int or tuple of ints, optional
- Output shape. Default is None, in which case a single value is
- returned.
+ Output shape. If the given shape is, e.g., ``(m, n, k)``, then
+ ``m * n * k`` samples are drawn. Default is None, in which case a
+ single value is returned.
Returns
-------
@@ -3327,8 +3360,6 @@ cdef class RandomState:
raise ValueError("scale <= 0.0")
return cont2_array(self.internal_state, rk_wald, size, omean, oscale)
-
-
def triangular(self, left, mode, right, size=None):
"""
triangular(left, mode, right, size=None)
@@ -3349,8 +3380,9 @@ cdef class RandomState:
right : scalar
Upper limit, should be larger than `left`.
size : int or tuple of ints, optional
- Output shape. Default is None, in which case a single value is
- returned.
+ Output shape. If the given shape is, e.g., ``(m, n, k)``, then
+ ``m * n * k`` samples are drawn. Default is None, in which case a
+ single value is returned.
Returns
-------
@@ -3434,9 +3466,10 @@ cdef class RandomState:
parameter, >= 0.
p : float
parameter, >= 0 and <=1.
- size : {tuple, int}
+ size : int or tuple of ints, optional
Output shape. If the given shape is, e.g., ``(m, n, k)``, then
- ``m * n * k`` samples are drawn.
+ ``m * n * k`` samples are drawn. Default is None, in which case a
+ single value is returned.
Returns
-------
@@ -3543,9 +3576,10 @@ cdef class RandomState:
Parameter, > 0.
p : float
Parameter, >= 0 and <=1.
- size : int or tuple of ints
- Output shape. If the given shape is, e.g., ``(m, n, k)``, then
- ``m * n * k`` samples are drawn.
+ size : int or tuple of ints, optional
+ Output shape. If the given shape is, e.g., ``(m, n, k)``, then
+ ``m * n * k`` samples are drawn. Default is None, in which case a
+ single value is returned.
Returns
-------
@@ -3636,8 +3670,9 @@ cdef class RandomState:
lam : float
Expectation of interval, should be >= 0.
size : int or tuple of ints, optional
- Output shape. If the given shape is, e.g., ``(m, n, k)``, then
- ``m * n * k`` samples are drawn.
+ Output shape. If the given shape is, e.g., ``(m, n, k)``, then
+ ``m * n * k`` samples are drawn. Default is None, in which case a
+ single value is returned.
Notes
-----
@@ -3711,12 +3746,10 @@ cdef class RandomState:
----------
a : float > 1
Distribution parameter.
- size : int or tuple of int, optional
+ size : int or tuple of ints, optional
Output shape. If the given shape is, e.g., ``(m, n, k)``, then
- ``m * n * k`` samples are drawn; a single integer is equivalent in
- its result to providing a mono-tuple, i.e., a 1-D array of length
- *size* is returned. The default is None, in which case a single
- scalar is returned.
+ ``m * n * k`` samples are drawn. Default is None, in which case a
+ single value is returned.
Returns
-------
@@ -3803,9 +3836,10 @@ cdef class RandomState:
----------
p : float
The probability of success of an individual trial.
- size : tuple of ints
- Number of values to draw from the distribution. The output
- is shaped according to `size`.
+ size : int or tuple of ints, optional
+ Output shape. If the given shape is, e.g., ``(m, n, k)``, then
+ ``m * n * k`` samples are drawn. Default is None, in which case a
+ single value is returned.
Returns
-------
@@ -3867,9 +3901,10 @@ cdef class RandomState:
nsample : int or array_like
Number of items sampled. Must be at least 1 and at most
``ngood + nbad``.
- size : int or tuple of int
+ size : int or tuple of ints, optional
Output shape. If the given shape is, e.g., ``(m, n, k)``, then
- ``m * n * k`` samples are drawn.
+ ``m * n * k`` samples are drawn. Default is None, in which case a
+ single value is returned.
Returns
-------
@@ -3981,9 +4016,10 @@ cdef class RandomState:
scale : float > 0.
- size : {tuple, int}
+ size : int or tuple of ints, optional
Output shape. If the given shape is, e.g., ``(m, n, k)``, then
- ``m * n * k`` samples are drawn.
+ ``m * n * k`` samples are drawn. Default is None, in which case a
+ single value is returned.
Returns
-------