import ctypes
from typing import Any, Callable, Dict, Type
from ._cstd import div_t, lconv, ldiv_t, tm
from ._pyapi import (
Py_buffer,
Py_tss_t,
PyCodeObject,
PyFrameObject,
PyGetSetDef,
PyInterpreterState,
PyMethodDef,
PyModuleDef,
PyThreadState,
PyType_Slot,
PyType_Spec,
PyTypeObject,
PyVarObject,
)
from .c_pointer import TypedCPointer, VoidPointer
from .structure import Struct, StructPointer
from .util import raw_type
__all__ = (
"Tm",
"DivT",
"LDivT",
"Lconv",
"PyTypeSlot",
"PyTypeSpec",
"Buffer",
"TypeObject",
"ThreadState",
"FrameObject",
"VarObject",
"ModuleDef",
"TssT",
"InterpreterState",
"CodeObject",
"MethodDef",
"GetSetDef",
"STRUCT_MAP",
)
class Tm(Struct):
tm_sec: int
tm_min: int
tm_hour: int
tm_mday: int
tm_mon: int
tm_year: int
tm_wday: int
tm_yday: int
tm_isdst: int
class DivT(Struct):
quot: int
rem: int
class LDivT(DivT):
pass
class Lconv(Struct):
decimal_point: bytes
thousands_sep: bytes
grouping: bytes
int_curr_symbol: bytes
currency_symbol: bytes
mon_decimal_point: bytes
mon_thousands_sep: bytes
mon_grouping: bytes
positive_sign: bytes
negative_sign: bytes
frac_digits: bytes
p_cs_precedes: bytes
p_sep_by_space: bytes
n_sep_by_space: bytes
p_sign_posn: bytes
n_sign_posn: bytes
class PyTypeSlot(Struct):
slot: int
pfunc: VoidPointer
class PyTypeSpec(Struct):
name: bytes
basic_size: int
itemsize: int
flags: int
slots: StructPointer[PyTypeSlot]
class Buffer(Struct):
buf: VoidPointer
obj: VoidPointer
len: int
readonly: int
itemsize: int
format: bytes
ndim: int
shape: TypedCPointer[int] = raw_type(ctypes.POINTER(ctypes.c_ssize_t))
strides: TypedCPointer[int] = raw_type(ctypes.POINTER(ctypes.c_ssize_t))
suboffsets: TypedCPointer[int] = raw_type(ctypes.POINTER(ctypes.c_ssize_t))
internal: VoidPointer
class TypeObject(Struct):
__PYOBJECT__ = True
class ThreadState(Struct):
pass
class FrameObject(Struct):
__PYOBJECT__ = True
class VarObject(Struct):
ob_size: int = raw_type(ctypes.c_ssize_t)
ob_refcnt: int = raw_type(ctypes.c_ssize_t)
ob_type: StructPointer[TypeObject]
class ModuleDef(Struct):
m_base: bytes
pfunc: VoidPointer
class TssT(Struct):
pass
class InterpreterState(Struct):
pass
class CodeObject(Struct):
pass
class MethodDef(Struct):
ml_name: bytes
ml_meth: Callable[[Any], Any]
ml_flags: int
ml_doc: bytes
class GetSetDef(Struct):
name: bytes
get: Callable[[Any, VoidPointer], Any]
set: Callable[[Any, Any, VoidPointer], int]
doc: bytes
closure: VoidPointer
STRUCT_MAP: Dict[Type[ctypes.Structure], Type[Struct]] = {
tm: Tm,
div_t: DivT,
ldiv_t: LDivT,
lconv: Lconv,
PyType_Slot: PyTypeSlot,
PyType_Spec: PyTypeSpec,
Py_buffer: Buffer,
PyInterpreterState: InterpreterState,
PyModuleDef: ModuleDef,
Py_tss_t: TssT,
PyVarObject: VarObject,
PyFrameObject: FrameObject,
PyThreadState: ThreadState,
PyTypeObject: TypeObject,
PyCodeObject: CodeObject,
PyMethodDef: MethodDef,
PyGetSetDef: GetSetDef,
}