Source code for visions.declarative

from typing import Any, Callable, List, Optional, Sequence, Type, TypeVar, Union

from visions.relations import IdentityRelation, InferenceRelation
from visions.types.type import VisionsBaseType

T = TypeVar("T")


def process_relation(items: Union[dict, Type[VisionsBaseType]]) -> IdentityRelation:
    if isinstance(items, dict):
        return IdentityRelation(**items)
    elif issubclass(items, VisionsBaseType):
        return IdentityRelation(related_type=items)
    else:
        raise TypeError("identity should be a list, a dict of params or related_type.")


[docs]def create_type( name: str, contains: Callable[[Any, dict], bool], identity: Optional[ Union[Type[VisionsBaseType], List[Union[dict, Type[VisionsBaseType]]], dict] ] = None, inference: Optional[Union[List[dict], dict]] = None, ): def get_relations(): if isinstance(identity, Sequence): relations = [process_relation(item) for item in identity] else: relations = [] if identity is None else [process_relation(identity)] if inference is not None: if isinstance(inference, dict): relations += [InferenceRelation(**inference)] elif isinstance(inference, list): relations += [InferenceRelation(**params) for params in inference] else: raise TypeError("inference should be a list or a dict of params.") return relations def contains_op(series, state): return contains(series, state) return type( name, (VisionsBaseType,), { "get_relations": staticmethod(get_relations), "contains_op": staticmethod(contains_op), }, )