/**
 * A module to expose the NumPy C SIMD vectorization interface "NPYV" for testing purposes.
 *
 * Please keep this module independent from other c-extension modules,
 * since NPYV intrinsics may be involved in their functionality,
 * which increases the degree of complexity in tracking and detecting errors.
 *
 * TODO: Add an independent sphinx doc.
 *
 * Please add any new NPYV intrinsics in '_simd.dispatch.c.src'.
 */
#ifndef _SIMD_SIMD_H_
#define _SIMD_SIMD_H_

#include <Python.h>
#include "numpy/npy_common.h"
#include "npy_cpu_features.h"
#include "npy_cpu_dispatch.h"
#include "numpy/npy_cpu.h"

#ifndef NPY_DISABLE_OPTIMIZATION
// autogenerated, required for CPU dispatch macros
#include "_simd.dispatch.h"
#endif
/**
 * Create a new module for each required optimization which contains all NPYV intrinsics,
 *
 * If required optimization is not supported by NPYV, the module will still provides
 * access to NPYV constants NPY_SIMD, NPY_SIMD_F64, and NPY_SIMD_WIDTH but without
 * any intrinsics.
 */
NPY_CPU_DISPATCH_DECLARE(NPY_VISIBILITY_HIDDEN PyObject *simd_create_module, (void))
#endif // _SIMD_SIMD_H_
