File: C:/Users/fred/anaconda3/Lib/site-packages/astropy/wcs/include/astropy_wcs/astropy_wcs_api.h
#ifndef ASTROPY_WCS_API_H
#define ASTROPY_WCS_API_H
#include "wcsconfig.h"
#include "pyutil.h"
#include "distortion.h"
#include "pipeline.h"
#include "sip.h"
#include "wcs.h"
#include "wcsprintf.h"
/*
HOW TO UPDATE THE PUBLIC API
This code uses a table of function pointers to dynamically expose the
public API to other code that wants to use astropy.wcs from C.
Each function should be:
1) Declared, as usual for C, in a .h file
2) Defined in a .c file that is compiled as part of the _wcs.so file
3) Have a macro that maps the function name to a position in the
function table. That macro should go in this file
(astropy_wcs_api.h)
4) An entry in the function table, which lives in astropy_wcs_api.c
Every time the function signatures change, or functions are added or
removed from the table, the value of REVISION should be incremented.
This allows for a rudimentary version check upon dynamic linking to
the astropy._wcs module.
*/
#define REVISION 4
#ifdef ASTROPY_WCS_BUILD
int _setup_api(PyObject* m);
#else
#if defined(NO_IMPORT_ASTROPY_WCS_API)
extern void** AstropyWcs_API;
#else
void** AstropyWcs_API;
#endif /* defined(NO_IMPORT_ASTROPY_PYWCS_API) */
/* Function macros that delegate to a function pointer in the AstropyWcs_API table */
#define AstropyWcs_GetCVersion (*(int (*)(void)) AstropyWcs_API[0])
#define wcsprm_python2c (*(void (*)(struct wcsprm*)) AstropyWcs_API[1])
#define wcsprm_c2python (*(void (*)(struct wcsprm*)) AstropyWcs_API[2])
#define distortion_lookup_t_init (*(int (*)(distortion_lookup_t* lookup)) AstropyWcs_API[3])
#define distortion_lookup_t_free (*(void (*)(distortion_lookup_t* lookup)) AstropyWcs_API[4])
#define get_distortion_offset (*(double (*)(const distortion_lookup_t*, const double* const)) AstropyWcs_API[5])
#define p4_pix2foc (*(int (*)(const unsigned int, const distortion_lookup_t**, const unsigned int, const double *, double *)) AstropyWcs_API[6])
#define p4_pix2deltas (*(int (*)(const unsigned int, const distortion_lookup_t**, const unsigned int, const double *, double *)) AstropyWcs_API[7])
#define sip_clear (*(void (*)(sip_t*) AstropyWcs_API[8]))
#define sip_init (*(int (*)(sip_t*, unsigned int, double*, unsigned int, double*, unsigned int, double*, unsigned int, double*, double*)) AstropyWcs_API[9])
#define sip_free (*(void (*)(sip_t*) AstropyWcs_API[10]))
#define sip_pix2foc (*(int (*)(sip_t*, unsigned int, unsigned int, double*, double*)) AstropyWcs_API[11])
#define sip_pix2deltas (*(int (*)(sip_t*, unsigned int, unsigned int, double*, double*)) AstropyWcs_API[12])
#define sip_foc2pix (*(int (*)(sip_t*, unsigned int, unsigned int, double*, double*)) AstropyWcs_API[13])
#define sip_foc2deltas (*(int (*)(sip_t*, unsigned int, unsigned int, double*, double*)) AstropyWcs_API[14])
#define pipeline_clear (*(void (*)(pipeline_t*)) AstropyWcs_API[15])
#define pipeline_init (*(void (*)(pipeline_t*, sip_t*, distortion_lookup_t**, struct wcsprm*)) AstropyWcs_API[16])
#define pipeline_free (*(void (*)(pipeline_t*)) AstropyWcs_API[17])
#define pipeline_all_pixel2world (*(int (*)(pipeline_t*, unsigned int, unsigned int, double*, double*)) AstropyWcs_API[18])
#define pipeline_pix2foc (*(int (*)(pipeline_t*, unsigned int, unsigned int, double*, double*)) AstropyWcs_API[19])
#define wcsp2s (*(int (*)(struct wcsprm *, int, int, const double[], double[], double[], double[], double[], int[])) AstropyWcs_API[20])
#define wcss2p (*(int (*)(struct wcsprm *, int, int, const double[], double[], double[], double[], double[], int[])) AstropyWcs_API[21])
#define wcsprt (*(int (*)(struct wcsprm *)) AstropyWcs_API[22])
#define wcslib_get_error_message (*(const char* (*)(int)) AstropyWcs_API[23])
#define wcsprintf_buf (*(const char * (*)()) AstropyWcs_API[24])
#ifndef NO_IMPORT_ASTROPY_WCS_API
int
import_astropy_wcs(void) {
PyObject *wcs_module = NULL;
PyObject *c_api = NULL;
int status = -1;
wcs_module = PyImport_ImportModule("astropy.wcs._wcs");
if (wcs_module == NULL) goto exit;
c_api = PyObject_GetAttrString(wcs_module, "_ASTROPY_WCS_API");
if (c_api == NULL) goto exit;
AstropyWcs_API = (void **)PyCapsule_GetPointer(c_api, "_wcs._ASTROPY_WCS_API");
if (AstropyWcs_API == NULL)
goto exit;
/* Perform runtime check of C API version */
if (REVISION != AstropyWcs_GetCVersion()) {
PyErr_Format(
PyExc_ImportError, "module compiled against " \
"ABI version '%x' but this version of astropy.wcs is '%x'", \
(int)REVISION, (int)AstropyWcs_GetCVersion());
return -1;
}
exit:
Py_XDECREF(wcs_module);
Py_XDECREF(c_api);
return status;
}
#endif /* !defined(NO_IMPORT_ASTROPY_WCS_API) */
#endif /* ASTROPY_WCS_BUILD */
#endif /* ASTROPY_WCS_API_H */