def _dump_msg1()

in src/rosbridge/zmq_serialize.py [0:0]


def _dump_msg1(o, parts):
    if isinstance(o, dict):
        return dict([(k, _dump_msg1(v, parts)) for k,v in o.items()])
    elif isinstance(o, list):
        return [_dump_msg1(v, parts) for v in o]
    elif isinstance(o, np.ndarray):
        if str(o.dtype) == 'object':
            return dict(__type='ndarray', dtype=str(o.dtype), shape=o.shape, flat=[_dump_msg1(x, parts) for x in o.flat])
        else:
            partno = len(parts)
            parts.append(o.tobytes())
            return dict(__type='ndarray', dtype=str(o.dtype), shape=o.shape, partno=partno)
    elif isinstance(o, gym.Space):
        if isinstance(o, gym.spaces.Box):
            return dict(__type='Box', low=_dump_msg1(o.low, parts), high=_dump_msg1(o.high, parts))
        elif isinstance(o, gym.spaces.Tuple):
            return dict(__type='Tuple', spaces=_dump_msg1(o.spaces, parts))
        elif isinstance(o, gym.spaces.Discrete):
            return dict(__type='Discrete', n=_dump_msg1(o.n, parts))
        else:
            raise Exception('Unknown space %s' % str(o))
    elif isinstance(o, float):
        if np.isposinf(o):
            return dict(__type='number', value='+inf')
        elif np.isneginf(o):
            return dict(__type='number', value='-inf')
        elif np.isnan(o):
            return dict(__type='number', value='nan')
        else:
            return o
    elif isinstance(o, tuple):
        return dict(__type='tuple', elems=[_dump_msg1(v, parts) for v in o])
    else:
        return o