Extension types#

pyMHF provides a number of extra types which can be used to either extend the built-in python ctypes library, or interface with c++ code more easily.

Note

These types should be considered experimental unless otherwise specified.

ctypes extensions#

c_enum32#

This class is a wrapper around the ctypes.c_uint32 type, but it’s able to be subscripted to provide a concrete type based on the IntEnum used.

For example, consider the following code:

from pymhf.utils.partial_struct import partial_struct
import ctypes
from enum import IntEnum
from typing import Annotated

class States(IntEnum):
    OFF = 0
    ON = 1
    UNDEFINED = 2

@partial_struct
class Test(ctypes.Structure):
    a: Annotated[c_enum32[States], 0x0]
    b: Annotated[ctypes.c_uint32, 0x10]

In the above we have cretated an enum which is mapped to a ctypes.c_uint32 variable. We can assign the value of a to an enum member after the struct has been instantiated with data, as well as being able to “see” the value of the int as an enum member instead.