Source code for prodigy.analysis.evtinvariants.heuristics.positivity.logical

from typing import List, Optional, Collection

from prodigy.analysis.evtinvariants.heuristics.positivity.positivity import PositivityHeuristic


# pylint: disable-msg=keyword-arg-before-vararg

[docs] class OrHeuristic(PositivityHeuristic): def __init__(self, sub_heuristic: Optional[PositivityHeuristic] = None, *heuristics: PositivityHeuristic): super().__init__(sub_heuristic) self._heuristics: List[PositivityHeuristic] = list(heuristics) def _is_positive(self, f: str) -> Optional[bool]: result = None for heuristic in self._heuristics: result = heuristic.is_positive(f) if result is True or result is False: return result return result
[docs] class AndHeuristic(PositivityHeuristic): def __init__(self, sub_heuristic: Optional[PositivityHeuristic] = None, *heuristics: Collection[PositivityHeuristic]): super().__init__(sub_heuristic) self._heuristics: List[PositivityHeuristic] = list(*heuristics) def _is_positive(self, f: str) -> Optional[bool]: result = None for heuristic in self._heuristics: result = heuristic.is_positive(f) if result is False or result is None: return False return result
[docs] class NotHeuristic(PositivityHeuristic): def __init__(self, heuristic: PositivityHeuristic, sub_heuristic: Optional[PositivityHeuristic] = None): super().__init__(sub_heuristic) self._heuristic = heuristic def _is_positive(self, f: str) -> Optional[bool]: result = self._heuristic.is_positive(f) if result is None: return None return not result
# pylint: enable-msg=keyword-arg-before-vararg