numpy  2.0.0
src/umath/umathmodule.c File Reference
#include "Python.h"
#include "npy_config.h"
#include "numpy/arrayobject.h"
#include "numpy/ufuncobject.h"
#include "abstract.h"
#include "numpy/npy_math.h"
#include "funcs.inc"
#include "loops.h"
#include "ufunc_object.h"
#include "ufunc_type_resolution.h"
#include "__umath_generated.c"
#include "__ufunc_api.c"
#include <stdio.h>

Defines

#define _UMATHMODULE
#define NPY_NO_DEPRECATED_API   NPY_API_VERSION
#define LDEXP_LONG(typ)   typ##_ldexp
#define RETVAL
#define ADDCONST(str)   PyModule_AddIntConstant(m, #str, UFUNC_##str)
#define ADDSCONST(str)   PyModule_AddStringConstant(m, "UFUNC_" #str, UFUNC_##str)

Functions

static int object_ufunc_type_resolver (PyUFuncObject *ufunc, NPY_CASTING casting, PyArrayObject **operands, PyObject *type_tup, PyArray_Descr **out_dtypes)
static int object_ufunc_loop_selector (PyUFuncObject *ufunc, PyArray_Descr **NPY_UNUSED(dtypes), PyUFuncGenericFunction *out_innerloop, void **out_innerloopdata, int *out_needs_api)
static PyObject * ufunc_frompyfunc (PyObject *NPY_UNUSED(dummy), PyObject *args, PyObject *NPY_UNUSED(kwds))
static void InitOtherOperators (PyObject *dictionary)
PyMODINIT_FUNC initumath (void)

Variables

static PyUFuncGenericFunction pyfunc_functions [] = {PyUFunc_On_Om}
static PyUFuncGenericFunction frexp_functions []
static void * blank3_data [] = { (void *)NULL, (void *)NULL, (void *)NULL}
static void * blank6_data []
static char frexp_signatures []
static PyUFuncGenericFunction ldexp_functions []
static char ldexp_signatures []
static struct PyMethodDef methods []

Define Documentation

#define _UMATHMODULE
vim:syntax=c

* INCLUDES **

_UMATHMODULE IS needed in __ufunc_api.h, included from numpy/ufuncobject.h. This is a mess and it would be nice to fix it. It has nothing to do with __ufunc_api.c
#define ADDCONST (   str)    PyModule_AddIntConstant(m, #str, UFUNC_##str)
#define ADDSCONST (   str)    PyModule_AddStringConstant(m, "UFUNC_" #str, UFUNC_##str)
#define LDEXP_LONG (   typ)    typ##_ldexp
#define NPY_NO_DEPRECATED_API   NPY_API_VERSION
#define RETVAL

Function Documentation

static void InitOtherOperators ( PyObject *  dictionary) [static]
PyMODINIT_FUNC initumath ( void  )
Create the module and add the functions
Import the array
Initialize the types
Add some symbolic constants to the module
Load the ufunc operators into the array module's namespace
Setup the array object's numerical structures with appropriate
ufuncs in d
Check for errors
static int object_ufunc_loop_selector ( PyUFuncObject ufunc,
PyArray_Descr **  NPY_UNUSEDdtypes,
PyUFuncGenericFunction out_innerloop,
void **  out_innerloopdata,
int *  out_needs_api 
) [static]
static int object_ufunc_type_resolver ( PyUFuncObject ufunc,
NPY_CASTING  casting,
PyArrayObject **  operands,
PyObject *  type_tup,
PyArray_Descr **  out_dtypes 
) [static]
static PyObject* ufunc_frompyfunc ( PyObject *  NPY_UNUSEDdummy,
PyObject *  args,
PyObject *  NPY_UNUSEDkwds 
) [static]
Keywords are ignored for now
generalized ufunc
self->ptr holds a pointer for enough memory for self->data[0] (fdata) self->data self->name self->types
To be safest, all of these need their memory aligned on void * pointers Therefore, we may need to allocate extra space.
Do a better job someday

References PyUFunc_PyFuncData::callable, fname, PyUFunc_PyFuncData::nin, PyUFunc_PyFuncData::nout, NPY_OBJECT, object_ufunc_loop_selector(), object_ufunc_type_resolver(), PyArray_malloc, pyfunc_functions, PyUFunc_None, and PyUFunc_Type.


Variable Documentation

void* blank3_data[] = { (void *)NULL, (void *)NULL, (void *)NULL} [static]
void* blank6_data[] [static]
Initial value:
 { (void *)NULL, (void *)NULL, (void *)NULL,
                                (void *)NULL, (void *)NULL, (void *)NULL}
Initial value:
 {




    DOUBLE_frexp



}

* SETUP UFUNCS **

Less automated additions to the ufuncs
char frexp_signatures[] [static]
Initial value:
Initial value:
 {






    DOUBLE_ldexp,






}
char ldexp_signatures[] [static]
Initial value:
struct PyMethodDef methods[] [static]
Initial value:
 {
    {"frompyfunc",
        (PyCFunction) ufunc_frompyfunc,
        METH_VARARGS | METH_KEYWORDS, NULL},
    {"seterrobj",
        (PyCFunction) ufunc_seterr,
        METH_VARARGS, NULL},
    {"geterrobj",
        (PyCFunction) ufunc_geterr,
        METH_VARARGS, NULL},
    {NULL, NULL, 0, NULL}                
}
Setup the umath module
Remove for time being, it is declared in __ufunc_api.h
static PyTypeObject PyUFunc_Type;

* INCLUDE GENERATED CODE **

Referenced by ufunc_frompyfunc().