# Path: bot/card.py
# class Card:
#     def __init__(self,
#                  gameObj: 'game.Game',
#                  playerObj: int,
#                  deckPosition: int,
#                  suit: Optional[Color],
#                  rank: Optional[Value]) -> None:
#     def __str__(self) -> str:
#     def got_positive_color(self, color: Color) -> None:
#     def got_negative_color(self, color: Color) -> None:
#     def got_positive_value(self, value: Value) -> None:
#     def got_negative_value(self, value: Value) -> None:


from bot import card


class CardKnowledge(card.Card):
    def __init__(self, bot, player, deckPosition, suit, rank):
        super().__init__(bot.game, player, deckPosition, suit, rank)
        self.bot = bot
        self.cantBe = {c: [False] * 6 for c in self.bot.colors}
        self.color = None
        self.value = None
        self.playable = None
        self.valuable = None
        self.worthless = None
        self.clued = False

    def __copy__(self):
        cls = self.__class__
        result = cls.__new__(cls)
        result.__dict__.update(self.__dict__)
        result.cantBe = {c: self.cantBe[c][:] for c in self.bot.colors}
        return result

    def mustBeColor(self, color):
        return color == self.color

    def mustBeValue(self, value):
        return value == self.value

    def cannotBeColor(self, color):
        if self.color is not None:
            return self.color != color

# Path: bot/card.py
# class Card:
#     def __init__(self,
#                  gameObj: 'game.Game',
#                  playerObj: int,
#                  deckPosition: int,
#                  suit: Optional[Color],
#                  rank: Optional[Value]) -> None:
#     def __str__(self) -> str:
#     def got_positive_color(self, color: Color) -> None:
#     def got_negative_color(self, color: Color) -> None:
#     def got_positive_value(self, value: Value) -> None:
#     def got_negative_value(self, value: Value) -> None:


# Path: onlyfulltag_v0_9/card_knowledge.py
from bot import card



class CardKnowledge(card.Card):
    def __init__(self, bot, player, deckPosition, suit, rank):
        super().__init__(bot.game, player, deckPosition, suit, rank)
        self.bot = bot
        self.cantBe = {c: [False] * 6 for c in self.bot.colors}
        self.color = None
        self.value = None
        self.playable = None
        self.valuable = None
        self.worthless = None
        self.clued = False

    def __copy__(self):
        cls = self.__class__
        result = cls.__new__(cls)
        result.__dict__.update(self.__dict__)
        result.cantBe = {c: self.cantBe[c][:] for c in self.bot.colors}
        return result

    def mustBeColor(self, color):
        return color == self.color

    def mustBeValue(self, value):
        return value == self.value

    def cannotBeColor(self, color):
        if self.color is not None:
            return self.color != color

        for v in self.bot.values: