def compatible_with(self, other):
    if self.equals(other):
        return True
    if (not isinstance(other, type(self))):
        return False
    return (self.table.equals(other.table) and (self.empty_or_equal(self.predicates, other.predicates) and self.empty_or_equal(self.selections, other.selections) and self.empty_or_equal(self.sort_keys, other.sort_keys)))
def compatible_with(self, other):
    if self.equals(other):
        return True
    if (not isinstance(other, type(self))):
        return False
    return (self.table.equals(other.table) and (self.empty_or_equal(self.predicates, other.predicates) and self.empty_or_equal(self.selections, other.selections) and self.empty_or_equal(self.sort_keys, other.sort_keys)))