Coverage for /pythoncovmergedfiles/medio/medio/usr/local/lib/python3.11/site-packages/numpy/_core/_asarray.py: 28%
Shortcuts on this page
r m x toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
Shortcuts on this page
r m x toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
1"""
2Functions in the ``as*array`` family that promote array-likes into arrays.
4`require` fits this category despite its name not matching this pattern.
5"""
6from .multiarray import array, asanyarray
7from .overrides import array_function_dispatch, finalize_array_function_like, set_module
9__all__ = ["require"]
12POSSIBLE_FLAGS = {
13 'C': 'C', 'C_CONTIGUOUS': 'C', 'CONTIGUOUS': 'C',
14 'F': 'F', 'F_CONTIGUOUS': 'F', 'FORTRAN': 'F',
15 'A': 'A', 'ALIGNED': 'A',
16 'W': 'W', 'WRITEABLE': 'W',
17 'O': 'O', 'OWNDATA': 'O',
18 'E': 'E', 'ENSUREARRAY': 'E'
19}
22@finalize_array_function_like
23@set_module('numpy')
24def require(a, dtype=None, requirements=None, *, like=None):
25 """
26 Return an ndarray of the provided type that satisfies requirements.
28 This function is useful to be sure that an array with the correct flags
29 is returned for passing to compiled code (perhaps through ctypes).
31 Parameters
32 ----------
33 a : array_like
34 The object to be converted to a type-and-requirement-satisfying array.
35 dtype : data-type
36 The required data-type. If None preserve the current dtype. If your
37 application requires the data to be in native byteorder, include
38 a byteorder specification as a part of the dtype specification.
39 requirements : str or sequence of str
40 The requirements list can be any of the following
42 * 'F_CONTIGUOUS' ('F') - ensure a Fortran-contiguous array
43 * 'C_CONTIGUOUS' ('C') - ensure a C-contiguous array
44 * 'ALIGNED' ('A') - ensure a data-type aligned array
45 * 'WRITEABLE' ('W') - ensure a writable array
46 * 'OWNDATA' ('O') - ensure an array that owns its own data
47 * 'ENSUREARRAY', ('E') - ensure a base array, instead of a subclass
48 ${ARRAY_FUNCTION_LIKE}
50 .. versionadded:: 1.20.0
52 Returns
53 -------
54 out : ndarray
55 Array with specified requirements and type if given.
57 See Also
58 --------
59 asarray : Convert input to an ndarray.
60 asanyarray : Convert to an ndarray, but pass through ndarray subclasses.
61 ascontiguousarray : Convert input to a contiguous array.
62 asfortranarray : Convert input to an ndarray with column-major
63 memory order.
64 ndarray.flags : Information about the memory layout of the array.
66 Notes
67 -----
68 The returned array will be guaranteed to have the listed requirements
69 by making a copy if needed.
71 Examples
72 --------
73 >>> import numpy as np
74 >>> x = np.arange(6).reshape(2,3)
75 >>> x.flags
76 C_CONTIGUOUS : True
77 F_CONTIGUOUS : False
78 OWNDATA : False
79 WRITEABLE : True
80 ALIGNED : True
81 WRITEBACKIFCOPY : False
83 >>> y = np.require(x, dtype=np.float32, requirements=['A', 'O', 'W', 'F'])
84 >>> y.flags
85 C_CONTIGUOUS : False
86 F_CONTIGUOUS : True
87 OWNDATA : True
88 WRITEABLE : True
89 ALIGNED : True
90 WRITEBACKIFCOPY : False
92 """
93 if like is not None:
94 return _require_with_like(
95 like,
96 a,
97 dtype=dtype,
98 requirements=requirements,
99 )
101 if not requirements:
102 return asanyarray(a, dtype=dtype)
104 requirements = {POSSIBLE_FLAGS[x.upper()] for x in requirements}
106 if 'E' in requirements:
107 requirements.remove('E')
108 subok = False
109 else:
110 subok = True
112 order = 'A'
113 if requirements >= {'C', 'F'}:
114 raise ValueError('Cannot specify both "C" and "F" order')
115 elif 'F' in requirements:
116 order = 'F'
117 requirements.remove('F')
118 elif 'C' in requirements:
119 order = 'C'
120 requirements.remove('C')
122 arr = array(a, dtype=dtype, order=order, copy=None, subok=subok)
124 for prop in requirements:
125 if not arr.flags[prop]:
126 return arr.copy(order)
127 return arr
130_require_with_like = array_function_dispatch()(require)