Skip to content

parametric_types

Val

Generic parametric class with easy value accessors

Source code in gamma/dispatch/parametric_types.py
class Val(metaclass=ValMeta):
    """Generic parametric class with easy value accessors"""

ValMeta

Bases: ParametricMeta

Source code in gamma/dispatch/parametric_types.py
class ValMeta(ParametricMeta):
    @property
    def values(cls) -> Tuple:
        """Return all values used to create the parametric value type"""
        return cls.__values__

    @property
    def value(cls) -> Any:
        vals = cls.values
        return vals and vals[0] or None

    def __normalize__(cls, obj):
        """Convert Val types to instances prior to sending to function."""
        if isinstance(obj, type):
            return obj()
        return obj

values: Tuple property

Return all values used to create the parametric value type

__normalize__(obj)

Convert Val types to instances prior to sending to function.

Source code in gamma/dispatch/parametric_types.py
def __normalize__(cls, obj):
    """Convert Val types to instances prior to sending to function."""
    if isinstance(obj, type):
        return obj()
    return obj

parametric

Bases: Generic[T]

Decorator to create new parametric base classes

Source code in gamma/dispatch/parametric_types.py
class parametric(Generic[T]):
    """Decorator to create new parametric base classes"""

    def __new__(deco, Class: T) -> T:
        Para = types.new_class(
            Class.__name__, (Class,), kwds={"metaclass": ParametricMeta}
        )
        module = inspect.getmodule(inspect.currentframe().f_back).__name__
        Para.__module__ = module
        return Para