Source code for decision_graph.decision_tree.native.collection

from __future__ import annotations

from collections.abc import Mapping, Sequence
from typing import Any

from . import AttrExpression
from .abc import LogicGroup, ExpressionCollection

__all__ = ['LogicMapping', 'LogicGenerator']


[docs] class LogicMapping(ExpressionCollection):
[docs] def __init__(self, data: dict, name: str, logic_group: LogicGroup = None): if data is None: data = {} if not isinstance(data, Mapping): raise TypeError("The 'data' parameter must be a mapping!.") super().__init__( data=data, name=name, logic_group=logic_group )
def __bool__(self): return bool(self.data) def __len__(self): return self.data.__len__() def __getitem__(self, key: str): return AttrExpression(attr=key, logic_group=self) def __getattr__(self, key: str): return AttrExpression(attr=key, logic_group=self)
[docs] def reset(self): pass
[docs] def update(self, data: dict = None, **kwargs): if data is None: self.data.update(**kwargs) else: self.data.update(data, **kwargs)
[docs] def clear(self): self.data.clear()
[docs] class LogicGenerator(ExpressionCollection):
[docs] def __init__(self, data: list[Any], name: str, logic_group: LogicGroup = None): if data is None: data = [] if not isinstance(data, Sequence): raise TypeError("The 'data' parameter must be a sequence!.") super().__init__( data=data, name=name, logic_group=logic_group ) self.data = self.contexts.setdefault('data', data)
def __iter__(self): for index, value in enumerate(self.data): # if isinstance(value, ContextLogicExpression): # yield value yield AttrExpression(attr=index, logic_group=self) def __len__(self) -> int: return len(self.data) def __getitem__(self, index: int): return AttrExpression(attr=index, logic_group=self)
[docs] def append(self, value): self.data.append(value)
[docs] def remove(self, value): self.data.remove(value)
[docs] def clear(self): return self.data.clear()