# 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: enums.py
# class Value(IntEnum):
#     '''
#     Only for internal usage
#     '''
#     V1 = 1
#     V2 = 2
#     V3 = 3
#     V4 = 4
#     V5 = 5
# 
#     @property
#     def num_copies(self):
#         if self is Value.V1:
#             return 3
#         if self is Value.V2:
#             return 2
#         if self is Value.V3:
#             return 2
#         if self is Value.V4:
#             return 2
#         if self is Value.V5:
#             return 1
#         raise ValueError
# 
#     def rank(self):
#         if self is Value.V1:
#             return Rank.R1
#         if self is Value.V2:
#             return Rank.R2
#         if self is Value.V3:
#             return Rank.R3
#         if self is Value.V4:
#             return Rank.R4
#         if self is Value.V5:
#             return Rank.R5
#         raise ValueError


from enum import Enum, auto
from bot import card
from enums import Value
            self.playValue = None
            self.discardValues.clear()
        if self.playable is None and self.canBePlayable():
            self.setIsPlayable(True, strict=False)
            self.setIsWorthless(None)

        if self.worthless is True:
            self.valuable = False
            self.playable = False

        assert not self.playColors or not self.discardColors,\
            (self.playColors, self.discardColors)
        assert not self.playValue or not self.discardValues,\
            (self.playValue, self.discardValues)
        assert not self.playWorthless or not self.discardWorthless,\
            (self.playWorthless, self.discardWorthless)
        assert not self.playHold or not self.discardHold,\
            (self.playHold, self.discardHold)
        assert not self.playColors or not self.playValue,\
            (self.playColors, self.playValue)
        assert not self.discardColors or not self.discardValues,\
            (self.discardColors, self.discardValues)
        assert not self.playWorthless or not self.playHold,\
            (self.playWorthless, self.playHold)

    def canBePlayable(self):
        if self.worthless or self.playWorthless:
            return False
        if self.cluedAsPlay:
            if self.value is not None:

# 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: enums.py
# class Value(IntEnum):
#     '''
#     Only for internal usage
#     '''
#     V1 = 1
#     V2 = 2
#     V3 = 3
#     V4 = 4
#     V5 = 5
# 
#     @property
#     def num_copies(self):
#         if self is Value.V1:
#             return 3
#         if self is Value.V2:
#             return 2
#         if self is Value.V3:
#             return 2
#         if self is Value.V4:
#             return 2
#         if self is Value.V5:
#             return 1
#         raise ValueError
# 
#     def rank(self):
#         if self is Value.V1:
#             return Rank.R1
#         if self is Value.V2:
#             return Rank.R2
#         if self is Value.V3:
#             return Rank.R3
#         if self is Value.V4:
#             return Rank.R4
#         if self is Value.V5:
#             return Rank.R5
#         raise ValueError


# Path: multitagbot_v2_2/card_knowledge.py
from enum import Enum, auto
from bot import card
from enums import Value

            self.playValue = None
            self.discardValues.clear()
        if self.playable is None and self.canBePlayable():
            self.setIsPlayable(True, strict=False)
            self.setIsWorthless(None)

        if self.worthless is True:
            self.valuable = False
            self.playable = False

        assert not self.playColors or not self.discardColors,\
            (self.playColors, self.discardColors)
        assert not self.playValue or not self.discardValues,\
            (self.playValue, self.discardValues)
        assert not self.playWorthless or not self.discardWorthless,\
            (self.playWorthless, self.discardWorthless)
        assert not self.playHold or not self.discardHold,\
            (self.playHold, self.discardHold)
        assert not self.playColors or not self.playValue,\
            (self.playColors, self.playValue)
        assert not self.discardColors or not self.discardValues,\
            (self.discardColors, self.discardValues)
        assert not self.playWorthless or not self.playHold,\
            (self.playWorthless, self.playHold)

    def canBePlayable(self):
        if self.worthless or self.playWorthless:
            return False
        if self.cluedAsPlay:
            if self.value is not None:

                if self.value == Value.V5: