| Server IP : 217.160.0.135 / Your IP : 216.73.217.85 Web Server : Apache System : Linux www 6.18.52-i1-ampere #1203 SMP Mon Sep 14 18:29:59 CEST 2026 aarch64 User : sws1074145052 ( 1074145052) PHP Version : 8.3.32 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : OFF | Pkexec : OFF Directory : /usr/lib/python3/dist-packages/pythran/pythonic/types/ |
Upload File : |
#ifndef PYTHONIC_TYPES_INT_HPP
#define PYTHONIC_TYPES_INT_HPP
#include <iostream>
#include "pythonic/include/types/int.hpp"
#include "pythonic/types/attr.hpp"
PYTHONIC_NS_BEGIN
namespace builtins
{
template <class T>
typename std::enable_if<std::is_integral<T>::value, T>::type
getattr(types::attr::REAL, T self)
{
return self;
}
template <class T>
typename std::enable_if<std::is_integral<T>::value, T>::type
getattr(types::attr::IMAG, T self)
{
return T(0);
}
}
PYTHONIC_NS_END
#ifdef ENABLE_PYTHON_MODULE
#include "pythonic/python/core.hpp"
#include "numpy/arrayobject.h"
PYTHONIC_NS_BEGIN
template <class T>
struct c_type_to_numpy_type
: c_type_to_numpy_type<decltype(std::declval<T>()())> {
};
template <>
struct c_type_to_numpy_type<long double>
: std::integral_constant<int, NPY_LONGDOUBLE> {
};
template <>
struct c_type_to_numpy_type<double> : std::integral_constant<int, NPY_DOUBLE> {
};
template <>
struct c_type_to_numpy_type<float> : std::integral_constant<int, NPY_FLOAT> {
};
template <>
struct c_type_to_numpy_type<std::complex<float>>
: std::integral_constant<int, NPY_CFLOAT> {
};
template <>
struct c_type_to_numpy_type<std::complex<double>>
: std::integral_constant<int, NPY_CDOUBLE> {
};
template <>
struct c_type_to_numpy_type<std::complex<long double>>
: std::integral_constant<int, NPY_CLONGDOUBLE> {
};
template <>
struct c_type_to_numpy_type<signed long long>
: std::integral_constant<int, NPY_LONGLONG> {
};
template <>
struct c_type_to_numpy_type<unsigned long long>
: std::integral_constant<int, NPY_ULONGLONG> {
};
template <>
struct c_type_to_numpy_type<signed long>
: std::integral_constant<int, NPY_LONG> {
};
template <>
struct c_type_to_numpy_type<unsigned long>
: std::integral_constant<int, NPY_ULONG> {
};
template <>
struct c_type_to_numpy_type<signed int> : std::integral_constant<int, NPY_INT> {
};
template <>
struct c_type_to_numpy_type<unsigned int>
: std::integral_constant<int, NPY_UINT> {
};
template <>
struct c_type_to_numpy_type<signed short>
: std::integral_constant<int, NPY_SHORT> {
};
template <>
struct c_type_to_numpy_type<unsigned short>
: std::integral_constant<int, NPY_USHORT> {
};
template <>
struct c_type_to_numpy_type<char> : std::integral_constant<int, NPY_BYTE> {
};
template <>
struct c_type_to_numpy_type<signed char>
: std::integral_constant<int, NPY_BYTE> {
};
template <>
struct c_type_to_numpy_type<unsigned char>
: std::integral_constant<int, NPY_UBYTE> {
};
template <>
struct c_type_to_numpy_type<bool> : std::integral_constant<int, NPY_BOOL> {
};
#ifndef PyInt_FromLong
#define PyInt_FromLong PyLong_FromLong
#ifndef PyInt_CheckExact
#define PyInt_CheckExact PyLong_CheckExact
#endif
#ifndef PyInt_AsLong
#define PyInt_AsLong PyLong_AsLong
#endif
#endif
#define PYTHONIC_INT_TO_PYTHON(TYPE) \
PyObject *to_python<TYPE>::convert(TYPE l) \
{ \
return PyArray_Scalar( \
&l, PyArray_DescrFromType(c_type_to_numpy_type<TYPE>::value), \
nullptr); \
}
PYTHONIC_INT_TO_PYTHON(char)
PYTHONIC_INT_TO_PYTHON(unsigned char)
PYTHONIC_INT_TO_PYTHON(signed char)
PYTHONIC_INT_TO_PYTHON(unsigned short)
PYTHONIC_INT_TO_PYTHON(signed short)
PYTHONIC_INT_TO_PYTHON(unsigned int)
PYTHONIC_INT_TO_PYTHON(signed int)
PYTHONIC_INT_TO_PYTHON(unsigned long)
PyObject *to_python<signed long>::convert(signed long l)
{
return PyInt_FromLong(l);
}
PYTHONIC_INT_TO_PYTHON(unsigned long long)
PYTHONIC_INT_TO_PYTHON(signed long long)
#undef PYTHONIC_INT_TO_PYTHON
#define PYTHONIC_INT_FROM_PYTHON(TYPE, NTYPE) \
bool from_python<TYPE>::is_convertible(PyObject *obj) \
{ \
return PyInt_CheckExact(obj) || \
PyObject_TypeCheck(obj, &Py##NTYPE##ArrType_Type); \
} \
TYPE from_python<TYPE>::convert(PyObject *obj) \
{ \
return PyInt_AsLong(obj); \
}
PYTHONIC_INT_FROM_PYTHON(unsigned char, UByte)
PYTHONIC_INT_FROM_PYTHON(signed char, Byte)
PYTHONIC_INT_FROM_PYTHON(unsigned short, UShort)
PYTHONIC_INT_FROM_PYTHON(signed short, Short)
PYTHONIC_INT_FROM_PYTHON(unsigned int, UInt)
PYTHONIC_INT_FROM_PYTHON(signed int, Int)
PYTHONIC_INT_FROM_PYTHON(unsigned long, ULong)
PYTHONIC_INT_FROM_PYTHON(signed long, Long)
PYTHONIC_INT_FROM_PYTHON(unsigned long long, ULongLong)
PYTHONIC_INT_FROM_PYTHON(signed long long, LongLong)
#undef PYTHONIC_INT_FROM_PYTHON
PYTHONIC_NS_END
#endif
#endif