Skip to content

Commit 360caa7

Browse files
committed
MAINT: utilize ufunc API const correctness internally
When internally defining ufuncs, declare data and types as const to take advantage of the const correctness of the API. See numpy#23847.
1 parent 2d2ff25 commit 360caa7

File tree

6 files changed

+45
-45
lines changed

6 files changed

+45
-45
lines changed

numpy/_core/code_generators/generate_umath.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1450,7 +1450,7 @@ def make_arrays(funcdict):
14501450
% (name, funcnames))
14511451
code1list.append("static void * %s_data[] = {%s};"
14521452
% (name, datanames))
1453-
code1list.append("static char %s_signatures[] = {%s};"
1453+
code1list.append("static const char %s_signatures[] = {%s};"
14541454
% (name, signames))
14551455
uf.empty = False
14561456
else:

numpy/_core/src/umath/_operand_flag_tests.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,9 @@ inplace_add(char **args, npy_intp const *dimensions, npy_intp const *steps, void
3636
PyUFuncGenericFunction funcs[1] = {&inplace_add};
3737

3838
/* These are the input and return dtypes of logit.*/
39-
static char types[2] = {NPY_INTP, NPY_INTP};
39+
static const char types[2] = {NPY_INTP, NPY_INTP};
4040

41-
static void *data[1] = {NULL};
41+
static void *const data[1] = {NULL};
4242

4343
static struct PyModuleDef moduledef = {
4444
PyModuleDef_HEAD_INIT,

numpy/_core/src/umath/_rational_tests.c

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1273,8 +1273,8 @@ PyMODINIT_FUNC PyInit__rational_tests(void) {
12731273
{
12741274
int types2[3] = {npy_rational,npy_rational,npy_rational};
12751275
PyObject* gufunc = PyUFunc_FromFuncAndDataAndSignature(0,0,0,0,2,1,
1276-
PyUFunc_None,(char*)"matrix_multiply",
1277-
(char*)"return result of multiplying two matrices of rationals",
1276+
PyUFunc_None,"matrix_multiply",
1277+
"return result of multiplying two matrices of rationals",
12781278
0,"(m,n),(n,p)->(m,p)");
12791279
if (!gufunc) {
12801280
goto fail;
@@ -1291,8 +1291,8 @@ PyMODINIT_FUNC PyInit__rational_tests(void) {
12911291
int types3[3] = {NPY_INT64,NPY_INT64,npy_rational};
12921292

12931293
PyObject* ufunc = PyUFunc_FromFuncAndData(0,0,0,0,2,1,
1294-
PyUFunc_None,(char*)"test_add",
1295-
(char*)"add two matrices of int64 and return rational matrix",0);
1294+
PyUFunc_None,"test_add",
1295+
"add two matrices of int64 and return rational matrix",0);
12961296
if (!ufunc) {
12971297
goto fail;
12981298
}
@@ -1306,8 +1306,8 @@ PyMODINIT_FUNC PyInit__rational_tests(void) {
13061306
/* Create test ufunc with rational types using RegisterLoopForDescr */
13071307
{
13081308
PyObject* ufunc = PyUFunc_FromFuncAndData(0,0,0,0,2,1,
1309-
PyUFunc_None,(char*)"test_add_rationals",
1310-
(char*)"add two matrices of rationals and return rational matrix",0);
1309+
PyUFunc_None,"test_add_rationals",
1310+
"add two matrices of rationals and return rational matrix",0);
13111311
PyArray_Descr* types[3] = {npyrational_descr,
13121312
npyrational_descr,
13131313
npyrational_descr};
@@ -1326,7 +1326,7 @@ PyMODINIT_FUNC PyInit__rational_tests(void) {
13261326
#define NEW_UNARY_UFUNC(name,type,doc) { \
13271327
int types[2] = {npy_rational,type}; \
13281328
PyObject* ufunc = PyUFunc_FromFuncAndData(0,0,0,0,1,1, \
1329-
PyUFunc_None,(char*)#name,(char*)doc,0); \
1329+
PyUFunc_None,#name,doc,0); \
13301330
if (!ufunc) { \
13311331
goto fail; \
13321332
} \
@@ -1345,8 +1345,8 @@ PyMODINIT_FUNC PyInit__rational_tests(void) {
13451345
static const char types[3] = {type,type,type}; \
13461346
static void* data[1] = {0}; \
13471347
PyObject* ufunc = PyUFunc_FromFuncAndData( \
1348-
(PyUFuncGenericFunction*)func, data,(char*)types, \
1349-
1,2,1,PyUFunc_One,(char*)#name,(char*)doc,0); \
1348+
(PyUFuncGenericFunction*)func, data,types, \
1349+
1,2,1,PyUFunc_One,#name,doc,0); \
13501350
if (!ufunc) { \
13511351
goto fail; \
13521352
} \

numpy/_core/src/umath/_umath_tests.c.src

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -422,29 +422,29 @@ defdict = {
422422
*/
423423

424424
static PyUFuncGenericFunction always_error_functions[] = { always_error_loop };
425-
static void *always_error_data[] = { (void *)NULL };
426-
static char always_error_signatures[] = { NPY_DOUBLE, NPY_DOUBLE, NPY_DOUBLE };
425+
static void *const always_error_data[] = { (void *)NULL };
426+
static const char always_error_signatures[] = { NPY_DOUBLE, NPY_DOUBLE, NPY_DOUBLE };
427427
static PyUFuncGenericFunction inner1d_functions[] = { INTP_inner1d, DOUBLE_inner1d };
428-
static void *inner1d_data[] = { (void *)NULL, (void *)NULL };
429-
static char inner1d_signatures[] = { NPY_INTP, NPY_INTP, NPY_INTP, NPY_DOUBLE, NPY_DOUBLE, NPY_DOUBLE };
428+
static void *const inner1d_data[] = { (void *)NULL, (void *)NULL };
429+
static const char inner1d_signatures[] = { NPY_INTP, NPY_INTP, NPY_INTP, NPY_DOUBLE, NPY_DOUBLE, NPY_DOUBLE };
430430
static PyUFuncGenericFunction innerwt_functions[] = { INTP_innerwt, DOUBLE_innerwt };
431-
static void *innerwt_data[] = { (void *)NULL, (void *)NULL };
432-
static char innerwt_signatures[] = { NPY_INTP, NPY_INTP, NPY_INTP, NPY_INTP, NPY_DOUBLE, NPY_DOUBLE, NPY_DOUBLE, NPY_DOUBLE };
431+
static void *const innerwt_data[] = { (void *)NULL, (void *)NULL };
432+
static const char innerwt_signatures[] = { NPY_INTP, NPY_INTP, NPY_INTP, NPY_INTP, NPY_DOUBLE, NPY_DOUBLE, NPY_DOUBLE, NPY_DOUBLE };
433433
static PyUFuncGenericFunction matrix_multiply_functions[] = { INTP_matrix_multiply, FLOAT_matrix_multiply, DOUBLE_matrix_multiply };
434-
static void *matrix_multiply_data[] = { (void *)NULL, (void *)NULL, (void *)NULL };
435-
static char matrix_multiply_signatures[] = { NPY_INTP, NPY_INTP, NPY_INTP, NPY_FLOAT, NPY_FLOAT, NPY_FLOAT, NPY_DOUBLE, NPY_DOUBLE, NPY_DOUBLE };
434+
static void *const matrix_multiply_data[] = { (void *)NULL, (void *)NULL, (void *)NULL };
435+
static const char matrix_multiply_signatures[] = { NPY_INTP, NPY_INTP, NPY_INTP, NPY_FLOAT, NPY_FLOAT, NPY_FLOAT, NPY_DOUBLE, NPY_DOUBLE, NPY_DOUBLE };
436436
static PyUFuncGenericFunction cross1d_functions[] = { INTP_cross1d, DOUBLE_cross1d };
437-
static void *cross1d_data[] = { (void *)NULL, (void *)NULL };
438-
static char cross1d_signatures[] = { NPY_INTP, NPY_INTP, NPY_INTP, NPY_DOUBLE, NPY_DOUBLE, NPY_DOUBLE };
437+
static void *const cross1d_data[] = { (void *)NULL, (void *)NULL };
438+
static const char cross1d_signatures[] = { NPY_INTP, NPY_INTP, NPY_INTP, NPY_DOUBLE, NPY_DOUBLE, NPY_DOUBLE };
439439
static PyUFuncGenericFunction euclidean_pdist_functions[] =
440440
{ FLOAT_euclidean_pdist, DOUBLE_euclidean_pdist };
441-
static void *eucldiean_pdist_data[] = { (void *)NULL, (void *)NULL };
442-
static char euclidean_pdist_signatures[] = { NPY_FLOAT, NPY_FLOAT,
441+
static void *const eucldiean_pdist_data[] = { (void *)NULL, (void *)NULL };
442+
static const char euclidean_pdist_signatures[] = { NPY_FLOAT, NPY_FLOAT,
443443
NPY_DOUBLE, NPY_DOUBLE };
444444

445445
static PyUFuncGenericFunction cumsum_functions[] = { INTP_cumsum, DOUBLE_cumsum };
446-
static void *cumsum_data[] = { (void *)NULL, (void *)NULL };
447-
static char cumsum_signatures[] = { NPY_INTP, NPY_INTP, NPY_DOUBLE, NPY_DOUBLE };
446+
static void *const cumsum_data[] = { (void *)NULL, (void *)NULL };
447+
static const char cumsum_signatures[] = { NPY_INTP, NPY_INTP, NPY_DOUBLE, NPY_DOUBLE };
448448

449449

450450
static int

numpy/fft/_pocketfft_umath.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -297,17 +297,17 @@ static PyUFuncGenericFunction fft_functions[] = {
297297
wrap_legacy_cpp_ufunc<fft_loop<npy_float>>,
298298
wrap_legacy_cpp_ufunc<fft_loop<npy_longdouble>>
299299
};
300-
static char fft_types[] = {
300+
static const char fft_types[] = {
301301
NPY_CDOUBLE, NPY_DOUBLE, NPY_CDOUBLE,
302302
NPY_CFLOAT, NPY_FLOAT, NPY_CFLOAT,
303303
NPY_CLONGDOUBLE, NPY_LONGDOUBLE, NPY_CLONGDOUBLE
304304
};
305-
static void *fft_data[] = {
305+
static void *const fft_data[] = {
306306
(void*)&pocketfft::FORWARD,
307307
(void*)&pocketfft::FORWARD,
308308
(void*)&pocketfft::FORWARD
309309
};
310-
static void *ifft_data[] = {
310+
static void *const ifft_data[] = {
311311
(void*)&pocketfft::BACKWARD,
312312
(void*)&pocketfft::BACKWARD,
313313
(void*)&pocketfft::BACKWARD
@@ -323,7 +323,7 @@ static PyUFuncGenericFunction rfft_n_odd_functions[] = {
323323
wrap_legacy_cpp_ufunc<rfft_n_odd_loop<npy_float>>,
324324
wrap_legacy_cpp_ufunc<rfft_n_odd_loop<npy_longdouble>>
325325
};
326-
static char rfft_types[] = {
326+
static const char rfft_types[] = {
327327
NPY_DOUBLE, NPY_DOUBLE, NPY_CDOUBLE,
328328
NPY_FLOAT, NPY_FLOAT, NPY_CFLOAT,
329329
NPY_LONGDOUBLE, NPY_LONGDOUBLE, NPY_CLONGDOUBLE
@@ -334,7 +334,7 @@ static PyUFuncGenericFunction irfft_functions[] = {
334334
wrap_legacy_cpp_ufunc<irfft_loop<npy_float>>,
335335
wrap_legacy_cpp_ufunc<irfft_loop<npy_longdouble>>
336336
};
337-
static char irfft_types[] = {
337+
static const char irfft_types[] = {
338338
NPY_CDOUBLE, NPY_DOUBLE, NPY_DOUBLE,
339339
NPY_CFLOAT, NPY_FLOAT, NPY_FLOAT,
340340
NPY_CLONGDOUBLE, NPY_LONGDOUBLE, NPY_LONGDOUBLE

numpy/linalg/umath_linalg.cpp

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -4215,88 +4215,88 @@ GUFUNC_FUNC_ARRAY_REAL_COMPLEX__(lstsq);
42154215
GUFUNC_FUNC_ARRAY_EIG(eig);
42164216
GUFUNC_FUNC_ARRAY_EIG(eigvals);
42174217

4218-
static char equal_2_types[] = {
4218+
static const char equal_2_types[] = {
42194219
NPY_FLOAT, NPY_FLOAT,
42204220
NPY_DOUBLE, NPY_DOUBLE,
42214221
NPY_CFLOAT, NPY_CFLOAT,
42224222
NPY_CDOUBLE, NPY_CDOUBLE
42234223
};
42244224

4225-
static char equal_3_types[] = {
4225+
static const char equal_3_types[] = {
42264226
NPY_FLOAT, NPY_FLOAT, NPY_FLOAT,
42274227
NPY_DOUBLE, NPY_DOUBLE, NPY_DOUBLE,
42284228
NPY_CFLOAT, NPY_CFLOAT, NPY_CFLOAT,
42294229
NPY_CDOUBLE, NPY_CDOUBLE, NPY_CDOUBLE
42304230
};
42314231

42324232
/* second result is logdet, that will always be a REAL */
4233-
static char slogdet_types[] = {
4233+
static const char slogdet_types[] = {
42344234
NPY_FLOAT, NPY_FLOAT, NPY_FLOAT,
42354235
NPY_DOUBLE, NPY_DOUBLE, NPY_DOUBLE,
42364236
NPY_CFLOAT, NPY_CFLOAT, NPY_FLOAT,
42374237
NPY_CDOUBLE, NPY_CDOUBLE, NPY_DOUBLE
42384238
};
42394239

4240-
static char eigh_types[] = {
4240+
static const char eigh_types[] = {
42414241
NPY_FLOAT, NPY_FLOAT, NPY_FLOAT,
42424242
NPY_DOUBLE, NPY_DOUBLE, NPY_DOUBLE,
42434243
NPY_CFLOAT, NPY_FLOAT, NPY_CFLOAT,
42444244
NPY_CDOUBLE, NPY_DOUBLE, NPY_CDOUBLE
42454245
};
42464246

4247-
static char eighvals_types[] = {
4247+
static const char eighvals_types[] = {
42484248
NPY_FLOAT, NPY_FLOAT,
42494249
NPY_DOUBLE, NPY_DOUBLE,
42504250
NPY_CFLOAT, NPY_FLOAT,
42514251
NPY_CDOUBLE, NPY_DOUBLE
42524252
};
42534253

4254-
static char eig_types[] = {
4254+
static const char eig_types[] = {
42554255
NPY_FLOAT, NPY_CFLOAT, NPY_CFLOAT,
42564256
NPY_DOUBLE, NPY_CDOUBLE, NPY_CDOUBLE,
42574257
NPY_CDOUBLE, NPY_CDOUBLE, NPY_CDOUBLE
42584258
};
42594259

4260-
static char eigvals_types[] = {
4260+
static const char eigvals_types[] = {
42614261
NPY_FLOAT, NPY_CFLOAT,
42624262
NPY_DOUBLE, NPY_CDOUBLE,
42634263
NPY_CDOUBLE, NPY_CDOUBLE
42644264
};
42654265

4266-
static char svd_1_1_types[] = {
4266+
static const char svd_1_1_types[] = {
42674267
NPY_FLOAT, NPY_FLOAT,
42684268
NPY_DOUBLE, NPY_DOUBLE,
42694269
NPY_CFLOAT, NPY_FLOAT,
42704270
NPY_CDOUBLE, NPY_DOUBLE
42714271
};
42724272

4273-
static char svd_1_3_types[] = {
4273+
static const char svd_1_3_types[] = {
42744274
NPY_FLOAT, NPY_FLOAT, NPY_FLOAT, NPY_FLOAT,
42754275
NPY_DOUBLE, NPY_DOUBLE, NPY_DOUBLE, NPY_DOUBLE,
42764276
NPY_CFLOAT, NPY_CFLOAT, NPY_FLOAT, NPY_CFLOAT,
42774277
NPY_CDOUBLE, NPY_CDOUBLE, NPY_DOUBLE, NPY_CDOUBLE
42784278
};
42794279

42804280
/* A, tau */
4281-
static char qr_r_raw_types[] = {
4281+
static const char qr_r_raw_types[] = {
42824282
NPY_DOUBLE, NPY_DOUBLE,
42834283
NPY_CDOUBLE, NPY_CDOUBLE,
42844284
};
42854285

42864286
/* A, tau, q */
4287-
static char qr_reduced_types[] = {
4287+
static const char qr_reduced_types[] = {
42884288
NPY_DOUBLE, NPY_DOUBLE, NPY_DOUBLE,
42894289
NPY_CDOUBLE, NPY_CDOUBLE, NPY_CDOUBLE,
42904290
};
42914291

42924292
/* A, tau, q */
4293-
static char qr_complete_types[] = {
4293+
static const char qr_complete_types[] = {
42944294
NPY_DOUBLE, NPY_DOUBLE, NPY_DOUBLE,
42954295
NPY_CDOUBLE, NPY_CDOUBLE, NPY_CDOUBLE,
42964296
};
42974297

42984298
/* A, b, rcond, x, resid, rank, s, */
4299-
static char lstsq_types[] = {
4299+
static const char lstsq_types[] = {
43004300
NPY_FLOAT, NPY_FLOAT, NPY_FLOAT, NPY_FLOAT, NPY_FLOAT, NPY_INT, NPY_FLOAT,
43014301
NPY_DOUBLE, NPY_DOUBLE, NPY_DOUBLE, NPY_DOUBLE, NPY_DOUBLE, NPY_INT, NPY_DOUBLE,
43024302
NPY_CFLOAT, NPY_CFLOAT, NPY_FLOAT, NPY_CFLOAT, NPY_FLOAT, NPY_INT, NPY_FLOAT,
@@ -4311,7 +4311,7 @@ typedef struct gufunc_descriptor_struct {
43114311
int nin;
43124312
int nout;
43134313
PyUFuncGenericFunction *funcs;
4314-
char *types;
4314+
const char *types;
43154315
} GUFUNC_DESCRIPTOR_t;
43164316

43174317
GUFUNC_DESCRIPTOR_t gufunc_descriptors [] = {

0 commit comments

Comments
 (0)