MCPcopy Create free account
hub / github.com/numpy/numpy / scalar_value

Function scalar_value

numpy/core/src/multiarray/scalarapi.c:34–109  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

32}
33
34NPY_NO_EXPORT void *
35scalar_value(PyObject *scalar, PyArray_Descr *descr)
36{
37 int type_num;
38 int align;
39 uintptr_t memloc;
40 if (descr == NULL) {
41 descr = PyArray_DescrFromScalar(scalar);
42 type_num = descr->type_num;
43 Py_DECREF(descr);
44 }
45 else {
46 type_num = descr->type_num;
47 }
48 switch (type_num) {
49#define CASE(ut,lt) case NPY_##ut: return &PyArrayScalar_VAL(scalar, lt)
50 CASE(BOOL, Bool);
51 CASE(BYTE, Byte);
52 CASE(UBYTE, UByte);
53 CASE(SHORT, Short);
54 CASE(USHORT, UShort);
55 CASE(INT, Int);
56 CASE(UINT, UInt);
57 CASE(LONG, Long);
58 CASE(ULONG, ULong);
59 CASE(LONGLONG, LongLong);
60 CASE(ULONGLONG, ULongLong);
61 CASE(HALF, Half);
62 CASE(FLOAT, Float);
63 CASE(DOUBLE, Double);
64 CASE(LONGDOUBLE, LongDouble);
65 CASE(CFLOAT, CFloat);
66 CASE(CDOUBLE, CDouble);
67 CASE(CLONGDOUBLE, CLongDouble);
68 CASE(OBJECT, Object);
69 CASE(DATETIME, Datetime);
70 CASE(TIMEDELTA, Timedelta);
71#undef CASE
72 case NPY_STRING:
73 return (void *)PyBytes_AsString(scalar);
74 case NPY_UNICODE:
75 /* lazy initialization, to reduce the memory used by string scalars */
76 if (PyArrayScalar_VAL(scalar, Unicode) == NULL) {
77 Py_UCS4 *raw_data = PyUnicode_AsUCS4Copy(scalar);
78 if (raw_data == NULL) {
79 return NULL;
80 }
81 PyArrayScalar_VAL(scalar, Unicode) = raw_data;
82 return (void *)raw_data;
83 }
84 return PyArrayScalar_VAL(scalar, Unicode);
85 case NPY_VOID:
86 /* Note: no & needed here, so can't use CASE */
87 return PyArrayScalar_VAL(scalar, Void);
88 }
89
90 /*
91 * Must be a user defined type with an associated (registered) dtype.

Callers 5

PyArray_ScalarAsCtypeFunction · 0.85
PyArray_CastScalarDirectFunction · 0.85
PyArray_FromScalarFunction · 0.85
PyArray_ScalarFunction · 0.85

Calls 1

PyArray_DescrFromScalarFunction · 0.85

Tested by

no test coverage detected