Source code for pathex.expressions.terms.letters_complement

from dataclasses import dataclass
from pathex.expressions.terms.term import Term


[docs]@dataclass(frozen=True) class LettersComplement(Term): """This class represents the complement of a language of singleton words (words of length 1). >>> from pathex.expressions.aliases import * >>> exp = ( LC('a')+'a' ) & ( C('ab')|C('ba')|C('aa')|C('xa') ) >>> assert exp.get_language() == exp.get_generator().get_language() == {'ba', 'xa'} >>> assert str(LC('abc')) in {'-(a|b|c)', '-(a|c|b)', '-(b|a|c)', '-(b|c|a)', '-(c|a|b)', '-(c|b|a)'} """ letters: frozenset def __init__(self, *letters) -> None: if len(letters) == 1: letters = next(iter(letters)) object.__setattr__(self, 'letters', frozenset(letters)) def __repr__(self) -> str: # pragma: no cover t = str(tuple(self.letters)) if len(self.letters) > 1 \ else str(tuple(self.letters))[:-2]+')' return f'{self.__class__.__name__}{t}' def __str__(self) -> str: t = '' for x in self.letters: t += f'{str(x)}|' t = t[:-1] if len(self.letters) > 1: t = f'({t})' return f'-{t}'