@@ -345,3 +345,104 @@ const NPY_ARRAY_ALIGNED = 0x0100
345345const NPY_ARRAY_NOTSWAPPED = 0x0200
346346const NPY_ARRAY_WRITEABLE = 0x0400
347347const NPY_ARR_HAS_DESCR = 0x0800
348+
349+ # Python type slot constants
350+ # From https://github.com/python/cpython/blob/main/Include/typeslots.h
351+ const Py_bf_getbuffer = Cint (1 )
352+ const Py_bf_releasebuffer = Cint (2 )
353+ const Py_mp_ass_subscript = Cint (3 )
354+ const Py_mp_length = Cint (4 )
355+ const Py_mp_subscript = Cint (5 )
356+ const Py_nb_absolute = Cint (6 )
357+ const Py_nb_add = Cint (7 )
358+ const Py_nb_and = Cint (8 )
359+ const Py_nb_bool = Cint (9 )
360+ const Py_nb_divmod = Cint (10 )
361+ const Py_nb_float = Cint (11 )
362+ const Py_nb_floor_divide = Cint (12 )
363+ const Py_nb_index = Cint (13 )
364+ const Py_nb_inplace_add = Cint (14 )
365+ const Py_nb_inplace_and = Cint (15 )
366+ const Py_nb_inplace_floor_divide = Cint (16 )
367+ const Py_nb_inplace_lshift = Cint (17 )
368+ const Py_nb_inplace_multiply = Cint (18 )
369+ const Py_nb_inplace_or = Cint (19 )
370+ const Py_nb_inplace_power = Cint (20 )
371+ const Py_nb_inplace_remainder = Cint (21 )
372+ const Py_nb_inplace_rshift = Cint (22 )
373+ const Py_nb_inplace_subtract = Cint (23 )
374+ const Py_nb_inplace_true_divide = Cint (24 )
375+ const Py_nb_inplace_xor = Cint (25 )
376+ const Py_nb_int = Cint (26 )
377+ const Py_nb_invert = Cint (27 )
378+ const Py_nb_lshift = Cint (28 )
379+ const Py_nb_multiply = Cint (29 )
380+ const Py_nb_negative = Cint (30 )
381+ const Py_nb_or = Cint (31 )
382+ const Py_nb_positive = Cint (32 )
383+ const Py_nb_power = Cint (33 )
384+ const Py_nb_remainder = Cint (34 )
385+ const Py_nb_rshift = Cint (35 )
386+ const Py_nb_subtract = Cint (36 )
387+ const Py_nb_true_divide = Cint (37 )
388+ const Py_nb_xor = Cint (38 )
389+ const Py_sq_ass_item = Cint (39 )
390+ const Py_sq_concat = Cint (40 )
391+ const Py_sq_contains = Cint (41 )
392+ const Py_sq_inplace_concat = Cint (42 )
393+ const Py_sq_inplace_repeat = Cint (43 )
394+ const Py_sq_item = Cint (44 )
395+ const Py_sq_length = Cint (45 )
396+ const Py_sq_repeat = Cint (46 )
397+ const Py_tp_alloc = Cint (47 )
398+ const Py_tp_base = Cint (48 )
399+ const Py_tp_bases = Cint (49 )
400+ const Py_tp_call = Cint (50 )
401+ const Py_tp_clear = Cint (51 )
402+ const Py_tp_dealloc = Cint (52 )
403+ const Py_tp_del = Cint (53 )
404+ const Py_tp_descr_get = Cint (54 )
405+ const Py_tp_descr_set = Cint (55 )
406+ const Py_tp_doc = Cint (56 )
407+ const Py_tp_getattr = Cint (57 )
408+ const Py_tp_getattro = Cint (58 )
409+ const Py_tp_hash = Cint (59 )
410+ const Py_tp_init = Cint (60 )
411+ const Py_tp_is_gc = Cint (61 )
412+ const Py_tp_iter = Cint (62 )
413+ const Py_tp_iternext = Cint (63 )
414+ const Py_tp_methods = Cint (64 )
415+ const Py_tp_new = Cint (65 )
416+ const Py_tp_repr = Cint (66 )
417+ const Py_tp_richcompare = Cint (67 )
418+ const Py_tp_setattr = Cint (68 )
419+ const Py_tp_setattro = Cint (69 )
420+ const Py_tp_str = Cint (70 )
421+ const Py_tp_traverse = Cint (71 )
422+ const Py_tp_members = Cint (72 )
423+ const Py_tp_getset = Cint (73 )
424+ const Py_tp_free = Cint (74 )
425+ const Py_nb_matrix_multiply = Cint (75 )
426+ const Py_nb_inplace_matrix_multiply = Cint (76 )
427+ const Py_am_await = Cint (77 )
428+ const Py_am_aiter = Cint (78 )
429+ const Py_am_anext = Cint (79 )
430+ const Py_tp_finalize = Cint (80 )
431+ const Py_am_send = Cint (81 )
432+ const Py_tp_vectorcall = Cint (82 )
433+ const Py_tp_token = Cint (83 )
434+
435+ # PyType_Spec and PyType_Slot structs
436+ # From https://docs.python.org/3/c-api/type.html#c.PyType_Spec
437+ @kwdef struct PyType_Slot
438+ slot:: Cint = 0
439+ pfunc:: Ptr{Cvoid} = C_NULL
440+ end
441+
442+ @kwdef struct PyType_Spec
443+ name:: Cstring = C_NULL
444+ basicsize:: Cint = 0
445+ itemsize:: Cint = 0
446+ flags:: Cuint = 0
447+ slots:: Ptr{PyType_Slot} = C_NULL
448+ end
0 commit comments