def __init__(self, base, top): self.base = base self.top = top cmd1 = StreamSpec.from_yaml(self.base.get_commands_spec()) cmd2 = StreamSpec.from_yaml(self.top.get_commands_spec()) cmd_spec = StreamSpec.join(cmd1, cmd2).to_yaml() components = [self.base.get_state_space(), self.top.get_state_space()] state_space = ProductManifold(components) Dynamics.__init__(self, commands_spec=cmd_spec, state_space=state_space)
def test_compression1(): spec = StreamSpec.from_yaml({"shape": [100, 100], "format": "C", "range": [0, 5], "default": 4}) yaml2 = spec.to_yaml() assert yaml2["format"] == "C" assert yaml2["range"] == [0, 5] assert yaml2["default"] == 4
def check_pickling(x): spec = StreamSpec.from_yaml(x) sio = StringIO() pickle.dump(spec, sio) sio = StringIO(sio.getvalue()) spec2 = pickle.load(sio) assert spec == spec2
def check_conversions(x): spec = StreamSpec.from_yaml(x) assert isinstance(spec, StreamSpec) y = spec.to_yaml() assert isinstance(y, dict) spec2 = spec.from_yaml(y) assert spec == spec2
def __init__(self, world=None, id_world=None, vehicle=None, id_vehicle=None, dt=VehiclesConstants.DEFAULT_SIMULATION_DT, **kwargs): self.dt = dt if not ((world is not None) ^ (id_world is not None)): raise ValueError('Specify exactly one of "world" and "id_world".') if not ((vehicle is not None) ^ (id_vehicle is not None)): raise ValueError('Specify exactly one of "vehicle" ' 'and "id_vehicle".') vehicles = get_conftools_vehicles() worlds = get_conftools_worlds() # TODO: user shortcuts if vehicle is not None: id_vehicle = vehicle['id'] vehicle_spec = vehicle # TODO: check well formed vehicle = vehicles.instance_spec(vehicle) else: vehicle_spec = vehicles[id_vehicle] vehicle = vehicles.instance(id_vehicle) if world is not None: id_world = world['id'] # TODO: check well formed world_spec = world world = worlds.instance_spec(world) else: world_spec = worlds[id_world] world = worlds.instance(id_world) VehicleSimulation.__init__(self, vehicle, world, **kwargs) cmd_spec = StreamSpec.from_yaml( self.vehicle.dynamics.get_commands_spec()) self.last_commands = cmd_spec.get_default_value() if len(self.vehicle.sensors) == 0: raise Exception('Vehicle %r has no sensors defined.' % id_vehicle) obs_spec = create_obs_spec(self.vehicle) self._boot_spec = BootSpec(obs_spec=obs_spec, cmd_spec=cmd_spec, id_robot=id_vehicle) # XXX: id, desc, extra? self.commands_source = BootOlympicsConstants.CMD_SOURCE_REST self.boot_episode_started = False # Save for later self.id_world = id_world self.id_vehicle = id_vehicle self.world_spec = world_spec self.vehicle_spec = vehicle_spec
def create_obs_spec(vehicle): obs_spec = None for attached in vehicle.sensors: sensor = attached.sensor ss = StreamSpec.from_yaml(sensor.observations_spec) obs_spec = (ss if obs_spec is None else StreamSpec.join(obs_spec, ss)) assert obs_spec is not None assert obs_spec is not None return obs_spec
def check_parsing(x): StreamSpec.from_yaml(x)
def test_default_values_5(): """ 2D default values """ spec = StreamSpec.from_yaml({"shape": [2, 2], "format": "D", "range": [0, 5], "default": 4}) assert_allclose(spec.get_default_value(), [[4, 4], [4, 4]])
def test_default_values_4(): """ Given default value; all the same. """ spec = StreamSpec.from_yaml({"shape": [3], "format": "D", "range": [0, 5], "default": 4}) assert_allclose(spec.get_default_value(), [4, 4, 4])
def test_default_values_3(): """ Given default value. """ spec = StreamSpec.from_yaml({"shape": [3], "format": "D", "range": [0, 3], "default": [1, 2, 3]}) assert_allclose(spec.get_default_value(), [1, 2, 3])
def test_default_values_2(): """ Default default value is middle of range, rounded down for discrete. """ spec = StreamSpec.from_yaml({"shape": [3], "format": "D", "range": [0, 1]}) assert_allclose(spec.get_default_value(), [0, 0, 0])
def test_default_values_1(): """ Default default value is middle of range. """ spec = StreamSpec.from_yaml({"shape": [3], "format": "C", "range": [0, 1]}) assert_allclose(spec.get_default_value(), [0.5, 0.5, 0.5])