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