Ejemplo n.º 1
0
    def register_obj_type(self, obj_cls=None, name=None, open=[], req=[]):

        if obj_cls is None:
            assert name is not None, 'Must provide either a name or class'
            obj_cls = GameObject
        elif name is None:
            name = obj_cls.__name__

        self.obj_types[name] = tdict(obj_cls=obj_cls,
                                     open=tset(open),
                                     req=tset(req))
Ejemplo n.º 2
0
def unjsonify(obj, tfm=None):
    '''
		Convert from a json readable python data structure (containing dict, list, tuples, humpack objects etc.)
		to a json conpatible object (only dicts, lists, and primitives).

		:param obj: Input data structure to be unjsonified
		:param tfm: Custom transform function to unjsonify certain data structures (use with caution)
	'''
    if tfm is not None:
        try:
            return tfm(obj, unjsonify)
        except UnknownElementError:
            pass
    if isinstance(obj, primitive):
        return obj
    if isinstance(obj, list):
        return tlist([unjsonify(o, tfm=tfm) for o in obj])
    if isinstance(obj, dict):
        if len(obj) == 1 and '_tuple' in obj:
            return tuple(unjsonify(o, tfm=tfm) for o in obj['_tuple'])
        if len(obj) == 1 and '_set' in obj:
            return tset(unjsonify(o, tfm=tfm) for o in obj['_set'])
        if len(obj) == 2 and '_ndarray' in obj and '_dtype' in obj:
            return np.array(unjsonify(obj['_ndarray'], tfm=tfm),
                            dtype=obj['_dtype'])
        return tdict({k: unjsonify(v, tfm=tfm) for k, v in obj.items()})

    raise UnknownElementError(obj)
Ejemplo n.º 3
0
    def reset(self, ctrl):

        game_info = ctrl._view_info()
        types = game_info['player_types']

        default = None

        for name, info in types.items():
            self.meta_info[name] = tdict(info)
            if 'open' not in self.meta_info[
                    name] or self.meta_info[name].open is None:
                self.meta_info[name].open = tset()

            if not self.hide_name:
                self.meta_info[name].open.add('name')

            if 'default' in info and info['default']:
                default = name

        if default is None:
            if len(self.meta_info) == 1:
                default = next(iter(self.meta_info))
            else:
                raise Exception('no default player type provided')

        self.default_player = default

        # by default only show player type if there is more than one type registered
        self.show_player_type = len(
            self.meta_info) > 1 or self.force_player_type
Ejemplo n.º 4
0
    def create(self, obj_type, visible=None, ID=None, **props):

        if obj_type in self.obj_types:
            info = self.obj_types[obj_type]
        else:
            raise MissingObjectError(obj_type)

        if ID is None:
            ID = self.get_ID()
        elif ID in self.table:
            raise ObjectIDCollisionError(ID)

        if visible is None:
            visible = self.players

        obj = info.obj_cls.__new__(info.obj_cls)

        obj._id = ID
        obj._table = self
        obj._open = info.open
        obj._req = info.req

        obj.__init__(obj_type=obj_type, visible=tset(visible), **props)

        self.table[obj._id] = obj

        # obj._verify()

        return obj
Ejemplo n.º 5
0
Archivo: viz.py Proyecto: isawzz/vid
    def __init__(self,
                 addr,
                 *users,
                 seed=None,
                 full_log=False,
                 god_mode=False):
        self.addr = addr
        self.full_log = full_log
        self.god_mode = god_mode

        self.rng = RandomGenerator()
        if seed is None:
            seed = random.getrandbits(64)
        self.rng.seed(seed)
        self.seed = seed

        self.in_progress = False
        self.msg = None
        self.log = None
        self.key = None
        self.actions = None
        self.users = tdeque(users)
        self.user2players = tdict()
        self.players = tdict()
        self.specs = tset()
Ejemplo n.º 6
0
    def begin(self, name, desc=None):
        if self.in_transaction():
            return

        # assert name is not None, 'must specify a name'

        self.set_name(name)
        self.set_desc(desc)
        self._current = tset()
Ejemplo n.º 7
0
def test_init():
	'''
	Test creating some standard humpack objects
	'''
	x = tdict()
	assert len(x) == 0
	
	x = tlist()
	assert len(x) == 0
	
	x = tset()
	assert len(x) == 0
Ejemplo n.º 8
0
def get_tdict():
    x = tdict()
    x.a = 1
    x.x = x
    x.l = [tlist(), tset()]
    x[100] = '100'
    x[None] = 1.2
    x.m = None
    x[True] = tlist
    x[list] = complex
    x['<>)dksfl_ ds: gkal'] = '<>1234543224'
    x['d = ds=a _+ sd;'] = bytes(range(256))
    x[12.2344 + .023j] = range(123, 456, 7)
    # np.random.seed(1)
    # x.b = np.random.randn(3).tobytes()
    x[b'\xaa'] = 'running'
    return x
Ejemplo n.º 9
0
def process_actions(
    raw
):  # process input when saving new action set (mostly turn options into ActionElement instances)

    if isinstance(raw, tuple):
        return tuple(process_actions(r) for r in raw)
    if isinstance(raw, set):
        return tset(process_actions(r) for r in raw)

    if isinstance(raw, ActionElement):
        return raw
    if isinstance(raw, GameObject):
        return ObjectAction(raw)
    if isinstance(raw, GamePlayer):
        return PlayerAction(raw)
    if isinstance(raw, (str, int, float, bool)):
        return FixedAction(raw)
    if type(raw).__module__ == 'numpy':  # unwrap numpy types
        return process_actions(raw.item())

    raise UnknownActionElement(raw)
Ejemplo n.º 10
0
def decode_action_set(code):
    code = _expand_actions(code)
    return tset(map(_flatten, code))