@@ -858,6 +858,7 @@ PyArray_AdaptDescriptorToArray(PyArrayObject *arr, PyObject *dtype)
858858 * (Initially it is a pointer to the user-provided head pointer).
859859 * @param fixed_DType User provided fixed DType class
860860 * @param flags Discovery flags (reporting and behaviour flags, see def.)
861+ * @param never_copy Specifies if a copy is allowed during array creation.
861862 * @return The updated number of maximum dimensions (i.e. scalars will set
862863 * this to the current dimensions).
863864 */
@@ -866,7 +867,8 @@ PyArray_DiscoverDTypeAndShape_Recursive(
866867 PyObject * obj , int curr_dims , int max_dims , PyArray_Descr * * out_descr ,
867868 npy_intp out_shape [NPY_MAXDIMS ],
868869 coercion_cache_obj * * * coercion_cache_tail_ptr ,
869- PyArray_DTypeMeta * fixed_DType , enum _dtype_discovery_flags * flags )
870+ PyArray_DTypeMeta * fixed_DType , enum _dtype_discovery_flags * flags ,
871+ int never_copy )
870872{
871873 PyArrayObject * arr = NULL ;
872874 PyObject * seq ;
@@ -924,7 +926,7 @@ PyArray_DiscoverDTypeAndShape_Recursive(
924926 requested_descr = * out_descr ;
925927 }
926928 arr = (PyArrayObject * )_array_from_array_like (obj ,
927- requested_descr , 0 , NULL );
929+ requested_descr , 0 , NULL , never_copy );
928930 if (arr == NULL ) {
929931 return -1 ;
930932 }
@@ -1118,7 +1120,7 @@ PyArray_DiscoverDTypeAndShape_Recursive(
11181120 max_dims = PyArray_DiscoverDTypeAndShape_Recursive (
11191121 objects [i ], curr_dims + 1 , max_dims ,
11201122 out_descr , out_shape , coercion_cache_tail_ptr , fixed_DType ,
1121- flags );
1123+ flags , never_copy );
11221124
11231125 if (max_dims < 0 ) {
11241126 return -1 ;
@@ -1158,6 +1160,7 @@ PyArray_DiscoverDTypeAndShape_Recursive(
11581160 * The result may be unchanged (remain NULL) when converting a
11591161 * sequence with no elements. In this case it is callers responsibility
11601162 * to choose a default.
1163+ * @param never_copy Specifies that a copy is not allowed.
11611164 * @return dimensions of the discovered object or -1 on error.
11621165 * WARNING: If (and only if) the output is a single array, the ndim
11631166 * returned _can_ exceed the maximum allowed number of dimensions.
@@ -1170,7 +1173,7 @@ PyArray_DiscoverDTypeAndShape(
11701173 npy_intp out_shape [NPY_MAXDIMS ],
11711174 coercion_cache_obj * * coercion_cache ,
11721175 PyArray_DTypeMeta * fixed_DType , PyArray_Descr * requested_descr ,
1173- PyArray_Descr * * out_descr )
1176+ PyArray_Descr * * out_descr , int never_copy )
11741177{
11751178 coercion_cache_obj * * coercion_cache_head = coercion_cache ;
11761179 * coercion_cache = NULL ;
@@ -1215,7 +1218,7 @@ PyArray_DiscoverDTypeAndShape(
12151218
12161219 int ndim = PyArray_DiscoverDTypeAndShape_Recursive (
12171220 obj , 0 , max_dims , out_descr , out_shape , & coercion_cache ,
1218- fixed_DType , & flags );
1221+ fixed_DType , & flags , never_copy );
12191222 if (ndim < 0 ) {
12201223 goto fail ;
12211224 }
@@ -1500,7 +1503,7 @@ _discover_array_parameters(PyObject *NPY_UNUSED(self),
15001503 int ndim = PyArray_DiscoverDTypeAndShape (
15011504 obj , NPY_MAXDIMS , shape ,
15021505 & coercion_cache ,
1503- fixed_DType , fixed_descriptor , (PyArray_Descr * * )& out_dtype );
1506+ fixed_DType , fixed_descriptor , (PyArray_Descr * * )& out_dtype , 0 );
15041507 Py_XDECREF (fixed_DType );
15051508 Py_XDECREF (fixed_descriptor );
15061509 if (ndim < 0 ) {
0 commit comments