10000 redo pypy-fixes from pr 17 · mattip/numpy@e27aa9b · GitHub
[go: up one dir, main page]

Skip to content

Commit e27aa9b

Browse files
committed
redo pypy-fixes from pr 17
1 parent 9653fe5 commit e27aa9b

File tree

9 files changed

+40
-8
lines changed

9 files changed

+40
-8
lines changed

numpy/core/include/numpy/ndarraytypes.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -930,7 +930,7 @@ typedef struct PyArrayFlagsObject {
930930
int flags;
931931
} PyArrayFlagsObject;
932932

933-
HPyType_HELPERS(PyArrayFlagsObject);
933+
HPyType_LEGACY_HELPERS(PyArrayFlagsObject);
934934

935935
/* Mirrors buffer object to ptr */
936936

numpy/core/src/multiarray/abstractdtypes.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,18 +108,21 @@ NPY_NO_EXPORT HPyType_Spec HPyArray_PyIntAbstractDType_spec = {
108108
.name = "numpy._IntegerAbstractDType",
109109
.basicsize = sizeof(PyArray_Descr),
110110
.flags = Py_TPFLAGS_DEFAULT,
111+
.builtin_shape = HPyType_BuiltinShape_Legacy,
111112
};
112113

113114
NPY_NO_EXPORT HPyType_Spec HPyArray_PyFloatAbstractDType_spec = {
114115
.name = "numpy._FloatAbstractDType",
115116
.basicsize = sizeof(PyArray_Descr),
116117
.flags = HPy_TPFLAGS_DEFAULT,
118+
.builtin_shape = HPyType_BuiltinShape_Legacy,
117119
};
118120

119121
NPY_NO_EXPORT HPyType_Spec HPyArray_PyComplexAbstractDType_spec = {
120122
.name = "numpy._ComplexAbstractDType",
121123
.basicsize = sizeof(PyArray_Descr),
122124
.flags = HPy_TPFLAGS_DEFAULT,
125+
.builtin_shape = HPyType_BuiltinShape_Legacy,
123126
};
124127

125128
// "forward" declarations:

numpy/core/src/multiarray/array_method.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1154,4 +1154,5 @@ NPY_NO_EXPORT HPyType_Spec PyBoundArrayMethod_Type_Spec = {
11541154
.basicsize = sizeof(PyBoundArrayMethodObject),
11551155
.flags = HPy_TPFLAGS_DEFAULT,
11561156
.defines = boundarraymethod_defines,
1157+
.builtin_shape = SHAPE(PyBoundArrayMethodObject),
11571158
};

numpy/core/src/multiarray/array_method.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -224,12 +224,13 @@ HPyType_LEGACY_HELPERS(PyArrayMethodObject)
224224
* on the `ArrayMethod` itself.
225225
*/
226226
typedef struct {
227+
PyObject_HEAD
227228
HPyField *dtypes; /* PyArray_DTypeMeta **dtypes */
228229
HPyField method; /* PyArrayMethodObject *method */
229230
int nargs; /* method->nin + method->nout */
230231
} PyBoundArrayMethodObject;
231232

232-
HPyType_HELPERS(PyBoundArrayMethodObject)
233+
HPyType_LEGACY_HELPERS(PyBoundArrayMethodObject)
233234

234235

235236
extern NPY_NO_EXPORT PyTypeObject *PyArrayMethod_Type;

numpy/core/src/multiarray/arraytypes.c.src

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -630,7 +630,7 @@ static NPY_INLINE npy_longdouble
630630
hpy_string_to_long_double(HPyContext *ctx, HPy op)
631631
{
632632
const char *s;
633-
char *end;
633+
const char *end;
634634
npy_longdouble temp;
635635
HPy b;
636636

numpy/core/src/multiarray/dtypemeta.c

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,15 @@ legacy_dtype_default_new_impl(HPyContext *ctx, HPy h_self,
107107
return HPyField_Load(ctx, h_self, self->singleton);
108108
}
109109

110+
HPyDef_SLOT(legacy_dtype_tp_traverse, HPy_tp_traverse)
111+
static int legacy_dtype_tp_traverse_impl(void *self_p, HPyFunc_visitproc visit, void *arg) {
112+
PyArray_Descr *self = (PyArray_Descr*) self_p;
113+
if (&self->typeobj)
114+
HPy_VISIT(&self->typeobj);
115+
if (&self->names)
116+
HPy_VISIT(&self->names);
117+
return 0;
118+
}
110119

111120
//static PyArray_Descr *
112121
//nonparametric_discover_descr_from_pyobject(
@@ -599,6 +608,7 @@ hpy_object_common_dtype(HPyContext *ctx, HPy /* PyArray_DTypeMeta * */ cls,
599608

600609
static HPyDef *new_dtype_legacy_defines[] = {
601610
&legacy_dtype_default_new,
611+
&legacy_dtype_tp_traverse,
602612
NULL
603613
};
604614
static HPyType_Spec New_PyArrayDescr_spec_prototype = {

numpy/core/src/multiarray/flagsobject.c

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -741,7 +741,7 @@ static int
741741
arrayflags_setitem_impl(HPyContext *ctx, HPy self, HPy ind, HPy item)
742742
{
743743
const char *key;
744-
char buf[16];
744+
const char buf[16];
745745
int n;
746746
if (HPyUnicode_Check(ctx, ind)) {
747747
HPy tmp_str;
@@ -900,6 +900,15 @@ arrayflags_new_impl(HPyContext *ctx, HPy self, const HPy *args, HPy_ssize_t narg
900900
return HPyArray_NewFlagsObject(ctx, self, arg);
901901
}
902902

903+
HPyDef_SLOT(arrayflags_traverse, HPy_tp_traverse)
904+
static int
905+
arrayflags_traverse_impl(void *self, HPyFunc_visitproc visit, void *arg)
906+
{
907+
PyArrayFlagsObject *flags = (PyArrayFlagsObject *)self;
908+
HPy_VISIT(&flags->arr);
909+
return 0;
910+
}
911+
903912
/*
904913
static PyType_Slot arrayflags_slots[] = {
905914
//{Py_tp_str, arrayflags_print},
@@ -929,6 +938,7 @@ static HPyDef *arrayflags_defines[] = {
929938
&arrayflags_carray,
930939
&arrayflags_farray,
931940
&arrayflags_num,
941+
&arrayflags_traverse,
932942
NULL
933943
};
934944

@@ -937,6 +947,7 @@ NPY_NO_EXPORT HPyType_Spec PyArrayFlags_Type_Spec = {
937947
.basicsize = sizeof(PyArrayFlagsObject),
938948
.flags = HPy_TPFLAGS_DEFAULT,
939949
.defines = arrayflags_defines,
950+
.builtin_shape = HPyType_BuiltinShape_Legacy,
940951
};
941952

942953
NPY_NO_EXPORT PyTypeObject *_PyArrayFlags_Type_p;

numpy/core/src/multiarray/mapping.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1414,11 +1414,11 @@ hpy_prepare_index(HPyContext *ctx, HPy h_self, PyArrayObject *self, HPy h_index,
14141414
}
14151415
}
14161416
else if (used_ndim > PyArray_NDIM(self)) {
1417-
HPyErr_SetString(ctx, ctx->h_IndexError,
1417+
HPyErr_Format(ctx, ctx->h_IndexError,
14181418
"too many indices for array: "
1419-
"array is %d-dimensional, but %d were indexed"
1420-
/*,PyArray_NDIM(self),
1421-
used_ndim*/);
1419+
"array is %d-dimensional, but %d were indexed,"
1420+
PyArray_NDIM(self),
1421+
used_ndim);
14221422
goto failed_building_indices;
14231423
}
14241424
else if (index_ndim == 0) {

numpy/core/src/multiarray/scalarapi.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -559,6 +559,12 @@ HPyArray_FromScalar(HPyContext *ctx, HPy h_scalar, /*PyArray_Descr*/ HPy h_outco
559559
}
560560
else {
561561
char *memptr = hpy_scalar_value(ctx, h_scalar, typecode);
562+
if (memptr == NULL)
563+
{
564+
HPy_Close(ctx, h_r);
565+
HPy_Close(ctx, h_typecode);
566+
return HPy_NULL;
567+
}
562568

563569
memcpy(PyArray_DATA(r), memptr, typecode->elsize);
564570
if (PyDataType_FLAGCHK(typecode, NPY_ITEM_HASOBJECT)) {

0 commit comments

Comments
 (0)
0