mhostetter / galois

A performant NumPy extension for Galois fields and their applications
https://mhostetter.github.io/galois/
MIT License
295 stars 27 forks source link

Upgrade to Sphinx v7 #559

Open mhostetter opened 3 days ago

mhostetter commented 3 days ago

The issues are caused by this block, which was a hack to get Sphinx to support class properties.

# conf.py
ArrayMeta_properties = [
    member for member in dir(galois.Array) if inspect.isdatadescriptor(getattr(type(galois.Array), member, None))
]
for p in ArrayMeta_properties:
    # Fetch the class properties from the private metaclasses
    ArrayMeta_property = getattr(galois._domains._meta.ArrayMeta, p)

    # Temporarily delete the class properties from the private metaclasses
    delattr(galois._domains._meta.ArrayMeta, p)

    # Add a Python 3.9 style class property to the public class
    setattr(galois.Array, p, classproperty(ArrayMeta_property))

    # Add back the class properties to the private metaclasses
    setattr(galois._domains._meta.ArrayMeta, p, ArrayMeta_property)

FieldArrayMeta_properties = [
    member
    for member in dir(galois.FieldArray)
    if inspect.isdatadescriptor(getattr(type(galois.FieldArray), member, None))
]
for p in FieldArrayMeta_properties:
    # Fetch the class properties from the private metaclasses
    if p in ArrayMeta_properties:
        ArrayMeta_property = getattr(galois._domains._meta.ArrayMeta, p)
    FieldArrayMeta_property = getattr(galois._fields._meta.FieldArrayMeta, p)

    # Temporarily delete the class properties from the private metaclasses
    if p in ArrayMeta_properties:
        delattr(galois._domains._meta.ArrayMeta, p)
    delattr(galois._fields._meta.FieldArrayMeta, p)

    # Add a Python 3.9 style class property to the public class
    setattr(galois.FieldArray, p, classproperty(FieldArrayMeta_property))

    # Add back the class properties to the private metaclasses
    if p in ArrayMeta_properties:
        setattr(galois._domains._meta.ArrayMeta, p, ArrayMeta_property)
    setattr(galois._fields._meta.FieldArrayMeta, p, FieldArrayMeta_property)