Esempio n. 1
0
class BlacklistItem:
    # name: Name of the item to see why it was discarded
    # coords: One up to six coords [[x, y], ...] of the pattern, values zero to six
    # misses: Amount of coords that don't have to match
    # transformations: List of transformations that should be applied to the
    # pattern before testing. L, R - Rotate. F - Flip. M - Mirror: ["R", "F"]
    def __init__(self, name, coords, misses=0, transformations=[]):
        self.name = name
        self.misses = misses

        self.main_pattern = Pattern(name, coords, misses)
        self.patterns = [self.main_pattern]

        self.transformations = transformations
        self._perform_transformations()

    def _perform_transformations(self):
        for r in self.transformations:
            rotated_coords = r.perform(self.get_coords())
            min_coord = coords_min(rotated_coords)
            relocated = relocate(rotated_coords, min_coord)
            self.patterns.append(
                Pattern(self.name + " " + r.get_suffix(), relocated,
                        self.misses))

    def get_name(self):
        return self.name

    def get_coords(self):
        return self.main_pattern.get_coords()

    def get_patterns(self):
        return self.patterns

    def get_main_pattern(self):
        return self.patterns[0]

    def get_misses(self):
        return self.misses

    def matches(self, tipp):
        for p in self.patterns:
            if p.matches(tipp):
                return True
        return False

    def __str__(self):
        return self.str_pretty(1)

    def str_pretty(self, verbosity=1):
        s = ''

        if verbosity > 0:
            if verbosity == 1:
                s += self.patterns[0].str_pretty(verbosity)
            if verbosity > 1:
                for p in self.patterns:
                    s += p.str_pretty(verbosity)

        return s