Untitled

 avatar
unknown
plain_text
2 years ago
1.2 kB
4
Indexable
class Options:

    def __init__(self, rule_set):
        self.rule_set = rule_set
        self.selected = set()

    def selection(self):
        """Selection"""
        return self.selected

    def remove_dependents(self, options):
        to_remove = set(options)
        done = False
        while not done:
            done = True
            for i, other_option in enumerate(self.selected):
                if to_remove & self.rule_set.compute_deps(other_option):
                    if other_option not in to_remove:
                        done = False
                    to_remove.add(other_option)
        self.selected -= to_remove

    def toggle(self, option):
        """
        Toggle an option.

        :param option: Which option to toggle.
        :param verbose: Print which options were selected or unselected.
        """
        if option in self.selected:
            self.remove_dependents(option)
        else:
            deps = self.rule_set.compute_deps(option)
            self.remove_dependents(
                set().union(*[self.rule_set.conflicts[d] for d in deps])
            )
            self.selected |= deps
Editor is loading...