summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Wiebe <mwwiebe@gmail.com>2011-08-19 17:32:07 -0700
committerCharles Harris <charlesr.harris@gmail.com>2011-08-27 07:26:58 -0600
commit3fec8d3db532ee3adba31f1fe076caa343e0856a (patch)
treebb46fd7f36d372f5f22496847af4a8211ef72626
parent840323e81c41f02926a0d29b62b202a74b1fc2fa (diff)
downloadnumpy-3fec8d3db532ee3adba31f1fe076caa343e0856a.tar.gz
ENH: missingdata: Add the maskna= parameter to np.ones and np.ones_like
-rw-r--r--numpy/core/code_generators/generate_umath.py6
-rw-r--r--numpy/core/code_generators/ufunc_docstrings.py20
-rw-r--r--numpy/core/numeric.py123
-rw-r--r--numpy/core/src/multiarray/number.c6
-rw-r--r--numpy/core/src/multiarray/number.h2
-rw-r--r--numpy/core/src/umath/loops.c.src12
-rw-r--r--numpy/core/src/umath/loops.h40
-rw-r--r--numpy/core/src/umath/loops.h.src10
-rw-r--r--numpy/core/tests/test_maskna.py6
-rw-r--r--numpy/core/tests/test_numeric.py16
10 files changed, 154 insertions, 87 deletions
diff --git a/numpy/core/code_generators/generate_umath.py b/numpy/core/code_generators/generate_umath.py
index 8771a040d..5fe31b945 100644
--- a/numpy/core/code_generators/generate_umath.py
+++ b/numpy/core/code_generators/generate_umath.py
@@ -330,9 +330,11 @@ defdict = {
TD(ints+inexact),
TD(O, f='Py_reciprocal'),
),
-'ones_like' :
+# This is no longer used as numpy.ones_like, however it is
+# still used by some internal calls.
+'_ones_like' :
Ufunc(1, 1, None,
- docstrings.get('numpy.core.umath.ones_like'),
+ docstrings.get('numpy.core.umath._ones_like'),
'PyUFunc_OnesLikeTypeResolution',
TD(noobj),
TD(O, f='Py_get_one'),
diff --git a/numpy/core/code_generators/ufunc_docstrings.py b/numpy/core/code_generators/ufunc_docstrings.py
index 591a898ed..760617340 100644
--- a/numpy/core/code_generators/ufunc_docstrings.py
+++ b/numpy/core/code_generators/ufunc_docstrings.py
@@ -2490,24 +2490,16 @@ add_newdoc('numpy.core.umath', 'not_equal',
""")
-add_newdoc('numpy.core.umath', 'ones_like',
+add_newdoc('numpy.core.umath', '_ones_like',
"""
- Returns an array of ones with the same shape and type as a given array.
-
- Equivalent to ``a.copy().fill(1)``.
-
- Please refer to the documentation for `zeros_like` for further details.
+ This function used to be the numpy.ones_like, but now a
+ specific function for that has been written for consistency with
+ the other *_like functions. It is only used internally in a limited
+ fashion now.
See Also
--------
- zeros_like, ones
-
- Examples
- --------
- >>> a = np.array([[1, 2, 3], [4, 5, 6]])
- >>> np.ones_like(a)
- array([[1, 1, 1],
- [1, 1, 1]])
+ ones_like
""")
diff --git a/numpy/core/numeric.py b/numpy/core/numeric.py
index 00184505d..7a879719a 100644
--- a/numpy/core/numeric.py
+++ b/numpy/core/numeric.py
@@ -5,7 +5,7 @@ __all__ = ['newaxis', 'ndarray', 'flatiter', 'nditer', 'nested_iters', 'ufunc',
'concatenate', 'fastCopyAndTranspose', 'lexsort', 'set_numeric_ops',
'can_cast', 'promote_types', 'min_scalar_type', 'result_type',
'asarray', 'asanyarray', 'ascontiguousarray', 'asfortranarray',
- 'isfortran', 'isna', 'empty_like', 'zeros_like',
+ 'isfortran', 'isna', 'empty_like', 'zeros_like', 'ones_like',
'correlate', 'convolve', 'inner', 'dot', 'einsum', 'outer', 'vdot',
'alterdot', 'restoredot', 'roll', 'rollaxis', 'cross', 'tensordot',
'array2string', 'get_printoptions', 'set_printoptions',
@@ -62,7 +62,6 @@ copyto = multiarray.copyto
ufunc = type(sin)
-# originally from Fernando Perez's IPython
def zeros_like(a, dtype=None, order='K', subok=True, maskna=False):
"""
Return an array of zeros with the same shape and type as a given array.
@@ -119,7 +118,93 @@ def zeros_like(a, dtype=None, order='K', subok=True, maskna=False):
multiarray.copyto(res, 0, casting='unsafe')
return res
-# end Fernando's utilities
+def ones(shape, dtype=None, order='C', maskna=False):
+ """
+ Return a new array of given shape and type, filled with ones.
+
+ Please refer to the documentation for `zeros` for further details.
+
+ See Also
+ --------
+ zeros, ones_like
+
+ Examples
+ --------
+ >>> np.ones(5)
+ array([ 1., 1., 1., 1., 1.])
+
+ >>> np.ones((5,), dtype=np.int)
+ array([1, 1, 1, 1, 1])
+
+ >>> np.ones((2, 1))
+ array([[ 1.],
+ [ 1.]])
+
+ >>> s = (2,2)
+ >>> np.ones(s)
+ array([[ 1., 1.],
+ [ 1., 1.]])
+
+ """
+ a = empty(shape, dtype, order, maskna)
+ multiarray.copyto(a, 1, casting='unsafe')
+ return a
+
+def ones_like(a, dtype=None, order='K', subok=True, maskna=False):
+ """
+ Return an array of ones with the same shape and type as a given array.
+
+ With default parameters, is equivalent to ``a.copy().fill(1)``.
+
+ Parameters
+ ----------
+ a : array_like
+ The shape and data-type of `a` define these same attributes of
+ the returned array.
+ dtype : data-type, optional
+ Overrides the data type of the result.
+ order : {'C', 'F', 'A', or 'K'}, optional
+ Overrides the memory layout of the result. 'C' means C-order,
+ 'F' means F-order, 'A' means 'F' if `a` is Fortran contiguous,
+ 'C' otherwise. 'K' means match the layout of `a` as closely
+ as possible.
+ maskna : boolean
+ If this is true, the returned array will have an NA mask.
+
+ Returns
+ -------
+ out : ndarray
+ Array of ones with the same shape and type as `a`.
+
+ See Also
+ --------
+ zeros_like : Return an array of zeros with shape and type of input.
+ empty_like : Return an empty array with shape and type of input.
+ zeros : Return a new array setting values to zero.
+ ones : Return a new array setting values to one.
+ empty : Return a new uninitialized array.
+
+ Examples
+ --------
+ >>> x = np.arange(6)
+ >>> x = x.reshape((2, 3))
+ >>> x
+ array([[0, 1, 2],
+ [3, 4, 5]])
+ >>> np.ones_like(x)
+ array([[1, 1, 1],
+ [1, 1, 1]])
+
+ >>> y = np.arange(3, dtype=np.float)
+ >>> y
+ array([ 0., 1., 2.])
+ >>> np.ones_like(y)
+ array([ 1., 1., 1.])
+
+ """
+ res = empty_like(a, dtype=dtype, order=order, subok=subok, maskna=maskna)
+ multiarray.copyto(res, 1, casting='unsafe')
+ return res
def extend_all(module):
@@ -1808,38 +1893,6 @@ def _maketup(descr, val):
res = [_maketup(fields[name][0],val) for name in dt.names]
return tuple(res)
-def ones(shape, dtype=None, order='C'):
- """
- Return a new array of given shape and type, filled with ones.
-
- Please refer to the documentation for `zeros` for further details.
-
- See Also
- --------
- zeros, ones_like
-
- Examples
- --------
- >>> np.ones(5)
- array([ 1., 1., 1., 1., 1.])
-
- >>> np.ones((5,), dtype=np.int)
- array([1, 1, 1, 1, 1])
-
- >>> np.ones((2, 1))
- array([[ 1.],
- [ 1.]])
-
- >>> s = (2,2)
- >>> np.ones(s)
- array([[ 1., 1.],
- [ 1., 1.]])
-
- """
- a = empty(shape, dtype, order)
- multiarray.copyto(a, 1, casting='unsafe')
- return a
-
def identity(n, dtype=None):
"""
Return the identity array.
diff --git a/numpy/core/src/multiarray/number.c b/numpy/core/src/multiarray/number.c
index 8bb9dfc3d..861ef5c05 100644
--- a/numpy/core/src/multiarray/number.c
+++ b/numpy/core/src/multiarray/number.c
@@ -52,7 +52,7 @@ PyArray_SetNumericOps(PyObject *dict)
SET(power);
SET(square);
SET(reciprocal);
- SET(ones_like);
+ SET(_ones_like);
SET(sqrt);
SET(negative);
SET(absolute);
@@ -103,7 +103,7 @@ PyArray_GetNumericOps(void)
GET(power);
GET(square);
GET(reciprocal);
- GET(ones_like);
+ GET(_ones_like);
GET(sqrt);
GET(negative);
GET(absolute);
@@ -348,7 +348,7 @@ fast_scalar_power(PyArrayObject *a1, PyObject *o2, int inplace)
fastop = n_ops.reciprocal;
}
else if (exp == 0.0) {
- fastop = n_ops.ones_like;
+ fastop = n_ops._ones_like;
}
else if (exp == 0.5) {
fastop = n_ops.sqrt;
diff --git a/numpy/core/src/multiarray/number.h b/numpy/core/src/multiarray/number.h
index 8f1cb3b91..0018b7348 100644
--- a/numpy/core/src/multiarray/number.h
+++ b/numpy/core/src/multiarray/number.h
@@ -10,7 +10,7 @@ typedef struct {
PyObject *power;
PyObject *square;
PyObject *reciprocal;
- PyObject *ones_like;
+ PyObject *_ones_like;
PyObject *sqrt;
PyObject *negative;
PyObject *absolute;
diff --git a/numpy/core/src/umath/loops.c.src b/numpy/core/src/umath/loops.c.src
index 0d1841b47..f4b0fc0df 100644
--- a/numpy/core/src/umath/loops.c.src
+++ b/numpy/core/src/umath/loops.c.src
@@ -611,7 +611,7 @@ BOOL_@kind@(char **args, npy_intp *dimensions, npy_intp *steps, void *NPY_UNUSED
/**end repeat**/
NPY_NO_EXPORT void
-BOOL_ones_like(char **args, npy_intp *dimensions, npy_intp *steps, void *NPY_UNUSED(data))
+BOOL__ones_like(char **args, npy_intp *dimensions, npy_intp *steps, void *NPY_UNUSED(data))
{
OUTPUT_LOOP {
*((Bool *)op1) = 1;
@@ -642,7 +642,7 @@ BOOL_ones_like(char **args, npy_intp *dimensions, npy_intp *steps, void *NPY_UNU
#define @S@@TYPE@_fmin @S@@TYPE@_minimum
NPY_NO_EXPORT void
-@S@@TYPE@_ones_like(char **args, npy_intp *dimensions, npy_intp *steps, void *NPY_UNUSED(data))
+@S@@TYPE@__ones_like(char **args, npy_intp *dimensions, npy_intp *steps, void *NPY_UNUSED(data))
{
OUTPUT_LOOP {
*((@s@@type@ *)op1) = 1;
@@ -985,7 +985,7 @@ TIMEDELTA_sign(char **args, npy_intp *dimensions, npy_intp *steps, void *NPY_UNU
*/
NPY_NO_EXPORT void
-@TYPE@_ones_like(char **args, npy_intp *dimensions, npy_intp *steps, void *NPY_UNUSED(data))
+@TYPE@__ones_like(char **args, npy_intp *dimensions, npy_intp *steps, void *NPY_UNUSED(data))
{
OUTPUT_LOOP {
*((@type@ *)op1) = 1;
@@ -1458,7 +1458,7 @@ NPY_NO_EXPORT void
}
NPY_NO_EXPORT void
-@TYPE@_ones_like(char **args, npy_intp *dimensions, npy_intp *steps, void *NPY_UNUSED(data))
+@TYPE@__ones_like(char **args, npy_intp *dimensions, npy_intp *steps, void *NPY_UNUSED(data))
{
OUTPUT_LOOP {
*((@type@ *)op1) = 1;
@@ -1762,7 +1762,7 @@ HALF_reciprocal(char **args, npy_intp *dimensions, npy_intp *steps, void *NPY_UN
}
NPY_NO_EXPORT void
-HALF_ones_like(char **args, npy_intp *dimensions, npy_intp *steps, void *NPY_UNUSED(data))
+HALF__ones_like(char **args, npy_intp *dimensions, npy_intp *steps, void *NPY_UNUSED(data))
{
OUTPUT_LOOP {
*((npy_half *)op1) = NPY_HALF_ONE;
@@ -2093,7 +2093,7 @@ C@TYPE@_reciprocal(char **args, npy_intp *dimensions, npy_intp *steps, void *NPY
}
NPY_NO_EXPORT void
-C@TYPE@_ones_like(char **args, npy_intp *dimensions, npy_intp *steps, void *NPY_UNUSED(data))
+C@TYPE@__ones_like(char **args, npy_intp *dimensions, npy_intp *steps, void *NPY_UNUSED(data))
{
OUTPUT_LOOP {
((@type@ *)op1)[0] = 1;
diff --git a/numpy/core/src/umath/loops.h b/numpy/core/src/umath/loops.h
index 2a792bf5b..9b16ed3fc 100644
--- a/numpy/core/src/umath/loops.h
+++ b/numpy/core/src/umath/loops.h
@@ -161,7 +161,7 @@ BOOL_logical_not(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(fu
NPY_NO_EXPORT void
-BOOL_ones_like(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(data));
+BOOL__ones_like(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(data));
/*
*****************************************************************************
@@ -178,7 +178,7 @@ BOOL_ones_like(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(data
#define BYTE_fmin BYTE_minimum
NPY_NO_EXPORT void
-BYTE_ones_like(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(data));
+BYTE__ones_like(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(data));
NPY_NO_EXPORT void
BYTE_square(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(data));
@@ -301,7 +301,7 @@ BYTE_fmod(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(func));
#define UBYTE_fmin UBYTE_minimum
NPY_NO_EXPORT void
-UBYTE_ones_like(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(data));
+UBYTE__ones_like(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(data));
NPY_NO_EXPORT void
UBYTE_square(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(data));
@@ -451,7 +451,7 @@ UBYTE_remainder(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(fun
#define SHORT_fmin SHORT_minimum
NPY_NO_EXPORT void
-SHORT_ones_like(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(data));
+SHORT__ones_like(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(data));
NPY_NO_EXPORT void
SHORT_square(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(data));
@@ -574,7 +574,7 @@ SHORT_fmod(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(func));
#define USHORT_fmin USHORT_minimum
NPY_NO_EXPORT void
-USHORT_ones_like(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(data));
+USHORT__ones_like(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(data));
NPY_NO_EXPORT void
USHORT_square(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(data));
@@ -724,7 +724,7 @@ USHORT_remainder(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(fu
#define INT_fmin INT_minimum
NPY_NO_EXPORT void
-INT_ones_like(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(data));
+INT__ones_like(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(data));
NPY_NO_EXPORT void
INT_square(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(data));
@@ -847,7 +847,7 @@ INT_fmod(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(func));
#define UINT_fmin UINT_minimum
NPY_NO_EXPORT void
-UINT_ones_like(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(data));
+UINT__ones_like(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(data));
NPY_NO_EXPORT void
UINT_square(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(data));
@@ -997,7 +997,7 @@ UINT_remainder(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(func
#define LONG_fmin LONG_minimum
NPY_NO_EXPORT void
-LONG_ones_like(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(data));
+LONG__ones_like(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(data));
NPY_NO_EXPORT void
LONG_square(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(data));
@@ -1120,7 +1120,7 @@ LONG_fmod(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(func));
#define ULONG_fmin ULONG_minimum
NPY_NO_EXPORT void
-ULONG_ones_like(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(data));
+ULONG__ones_like(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(data));
NPY_NO_EXPORT void
ULONG_square(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(data));
@@ -1270,7 +1270,7 @@ ULONG_remainder(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(fun
#define LONGLONG_fmin LONGLONG_minimum
NPY_NO_EXPORT void
-LONGLONG_ones_like(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(data));
+LONGLONG__ones_like(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(data));
NPY_NO_EXPORT void
LONGLONG_square(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(data));
@@ -1393,7 +1393,7 @@ LONGLONG_fmod(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(func)
#define ULONGLONG_fmin ULONGLONG_minimum
NPY_NO_EXPORT void
-ULONGLONG_ones_like(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(data));
+ULONGLONG__ones_like(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(data));
NPY_NO_EXPORT void
ULONGLONG_square(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(data));
@@ -1662,7 +1662,7 @@ HALF_reciprocal(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(dat
NPY_NO_EXPORT void
-HALF_ones_like(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(data));
+HALF__ones_like(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(data));
NPY_NO_EXPORT void
HALF_conjugate(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(func));
@@ -1816,7 +1816,7 @@ FLOAT_reciprocal(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(da
NPY_NO_EXPORT void
-FLOAT_ones_like(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(data));
+FLOAT__ones_like(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(data));
NPY_NO_EXPORT void
FLOAT_conjugate(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(func));
@@ -1970,7 +1970,7 @@ DOUBLE_reciprocal(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(d
NPY_NO_EXPORT void
-DOUBLE_ones_like(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(data));
+DOUBLE__ones_like(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(data));
NPY_NO_EXPORT void
DOUBLE_conjugate(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(func));
@@ -2124,7 +2124,7 @@ LONGDOUBLE_reciprocal(char **args, intp *dimensions, intp *steps, void *NPY_UNUS
NPY_NO_EXPORT void
-LONGDOUBLE_ones_like(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(data));
+LONGDOUBLE__ones_like(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(data));
NPY_NO_EXPORT void
LONGDOUBLE_conjugate(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(func));
@@ -2254,7 +2254,7 @@ NPY_NO_EXPORT void
CFLOAT_reciprocal(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(data));
NPY_NO_EXPORT void
-CFLOAT_ones_like(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(data));
+CFLOAT__ones_like(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(data));
NPY_NO_EXPORT void
CFLOAT_conjugate(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(func));
@@ -2370,7 +2370,7 @@ NPY_NO_EXPORT void
CDOUBLE_reciprocal(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(data));
NPY_NO_EXPORT void
-CDOUBLE_ones_like(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(data));
+CDOUBLE__ones_like(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(data));
NPY_NO_EXPORT void
CDOUBLE_conjugate(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(func));
@@ -2486,7 +2486,7 @@ NPY_NO_EXPORT void
CLONGDOUBLE_reciprocal(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(data));
NPY_NO_EXPORT void
-CLONGDOUBLE_ones_like(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(data));
+CLONGDOUBLE__ones_like(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(data));
NPY_NO_EXPORT void
CLONGDOUBLE_conjugate(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(func));
@@ -2547,7 +2547,7 @@ TIMEDELTA_sign(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(func
#line 432
NPY_NO_EXPORT void
-DATETIME_ones_like(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(data));
+DATETIME__ones_like(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(data));
#line 440
NPY_NO_EXPORT void
@@ -2587,7 +2587,7 @@ DATETIME_minimum(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(fu
#line 432
NPY_NO_EXPORT void
-TIMEDELTA_ones_like(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(data));
+TIMEDELTA__ones_like(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(data));
#line 440
NPY_NO_EXPORT void
diff --git a/numpy/core/src/umath/loops.h.src b/numpy/core/src/umath/loops.h.src
index fdedc1933..0b59b3095 100644
--- a/numpy/core/src/umath/loops.h.src
+++ b/numpy/core/src/umath/loops.h.src
@@ -65,7 +65,7 @@ BOOL_@kind@(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(func));
/**end repeat**/
NPY_NO_EXPORT void
-BOOL_ones_like(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(data));
+BOOL__ones_like(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(data));
/*
*****************************************************************************
@@ -90,7 +90,7 @@ BOOL_ones_like(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(data
#define @S@@TYPE@_fmin @S@@TYPE@_minimum
NPY_NO_EXPORT void
-@S@@TYPE@_ones_like(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(data));
+@S@@TYPE@__ones_like(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(data));
NPY_NO_EXPORT void
@S@@TYPE@_square(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(data));
@@ -255,7 +255,7 @@ NPY_NO_EXPORT void
NPY_NO_EXPORT void
-@TYPE@_ones_like(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(data));
+@TYPE@__ones_like(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(data));
NPY_NO_EXPORT void
@TYPE@_conjugate(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(func));
@@ -369,7 +369,7 @@ NPY_NO_EXPORT void
C@TYPE@_reciprocal(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(data));
NPY_NO_EXPORT void
-C@TYPE@_ones_like(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(data));
+C@TYPE@__ones_like(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(data));
NPY_NO_EXPORT void
C@TYPE@_conjugate(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(func));
@@ -431,7 +431,7 @@ TIMEDELTA_sign(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(func
*/
NPY_NO_EXPORT void
-@TYPE@_ones_like(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(data));
+@TYPE@__ones_like(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(data));
/**begin repeat1
* #kind = equal, not_equal, greater, greater_equal, less, less_equal#
diff --git a/numpy/core/tests/test_maskna.py b/numpy/core/tests/test_maskna.py
index e284f841b..8fd3fb174 100644
--- a/numpy/core/tests/test_maskna.py
+++ b/numpy/core/tests/test_maskna.py
@@ -62,6 +62,12 @@ def test_array_maskna_construction():
assert_(a.flags.maskna)
assert_equal(np.isna(a), False)
+ a = np.ones((3,))
+ assert_(not a.flags.maskna)
+ a = np.ones((3,), maskna=True)
+ assert_(a.flags.maskna)
+ assert_equal(np.isna(a), False)
+
# np.empty returns all NAs if maskna is set to True
a = np.empty((3,))
assert_(not a.flags.maskna)
diff --git a/numpy/core/tests/test_numeric.py b/numpy/core/tests/test_numeric.py
index 2f8c2fcc9..205bf56c4 100644
--- a/numpy/core/tests/test_numeric.py
+++ b/numpy/core/tests/test_numeric.py
@@ -1324,7 +1324,7 @@ class TestLikeFuncs(TestCase):
if not value is None:
assert_(all(dz == value))
- # Test the 'subok' parameter'
+ # Test the 'subok' parameter
a = np.matrix([[1,2],[3,4]])
b = like_function(a)
@@ -1333,6 +1333,20 @@ class TestLikeFuncs(TestCase):
b = like_function(a, subok=False)
assert_(not (type(b) is np.matrix))
+ # Test that 'maskna=True' works
+ a = np.arange(6).reshape(2,3)
+ res = like_function(a, maskna=True)
+ assert_(res.flags.maskna)
+ assert_(res.flags.ownmaskna)
+ assert_equal(res.shape, a.shape)
+ assert_equal(res.dtype, a.dtype)
+
+ # Test that no NA mask is created when the prototype is NA-masked
+ a = np.arange(6, maskna=True).reshape(2,3)
+ assert_(a.flags.maskna)
+ res = like_function(a)
+ assert_(not res.flags.maskna)
+
def test_ones_like(self):
self.check_like_function(np.ones_like, 1)