def clone(arg):
    known_types = ('state')
    try:
        assert arg.type in known_types, f'Can clone only types: {known_types}, received {arg}'
        if arg.type == 'state':
            return StateAsDict(arg).to_state()
    except:
        raise ValueError('Argument does not have type atrribute')
class DeterministicObservation(SplendorObservation):

    def __init__(self, state : State):
        super().__init__('deterministic')
        self.observation_dict = StateAsDict(state)

    def recreate_state(self):
        return self.observation_dict.to_state()
 def clone_internal_state(self):
     return StateAsDict(self.internal_state).to_state()
 def show_my_state(self):
     return (StateAsDict(self.internal_state))
 def restore_state(self, state):
     copy_of_state = StateAsDict(state).to_state()
     self.internal_state = copy_of_state
     self.action_space.update(self.internal_state)
import time

from splendor.envs.graphics.splendor_gui import SplendorGUI
from splendor.envs.mechanics.state_as_dict import StateAsDict

vis = SplendorGUI()
state_as_dict = StateAsDict()
state_as_dict.load_from_dict({
    'active_player_hand': {
        'noble_possessed_ids': {106},
        'cards_possessed_ids': {0, 3, 38, 39, 40, 74, 77, 79, 18, 20, 22, 29},
        'cards_reserved_ids': set(),
        'gems_possessed': [0, 0, 3, 1, 1, 3],
        'name': 'Player A'
    },
    'other_player_hand': {
        'noble_possessed_ids': set(),
        'cards_possessed_ids': {1, 36, 21},
        'cards_reserved_ids': set(),
        'gems_possessed': [0, 3, 1, 3, 3, 0],
        'name': 'Player B'
    },
    'board': {
        'nobles_on_board': {100, 101},
        'cards_on_board': {4, 5, 68, 37, 6, 11, 14, 17, 83, 51, 85, 62},
        'gems_on_board': [5, 1, 0, 0, 0, 1],
        'deck_order': [{
            'Row.CHEAP': [
                43, 54, 2, 59, 61, 76, 75, 72, 78, 57, 56, 55, 24, 19, 60, 58,
                23, 73, 7, 42, 41, 25
            ]
 def clone_state(state: State):
     return StateAsDict(state).to_state()
 def __init__(self, state : State):
     super().__init__('deterministic')
     self.observation_dict = StateAsDict(state)