From 2f5e5d0a74177d11f2a99add458ce191220fadae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=2E=20Fernando=20S=C3=A1nchez?= Date: Tue, 18 Oct 2022 17:03:40 +0200 Subject: [PATCH] Black formatting --- examples/events_and_messages/cars.py | 89 ++++++++++++++++++---------- 1 file changed, 59 insertions(+), 30 deletions(-) diff --git a/examples/events_and_messages/cars.py b/examples/events_and_messages/cars.py index e4fed18..04d7894 100644 --- a/examples/events_and_messages/cars.py +++ b/examples/events_and_messages/cars.py @@ -28,11 +28,12 @@ from mesa.space import MultiGrid @dataclass class Journey: """ - This represents a request for a journey. Passengers and drivers exchange this object. + This represents a request for a journey. Passengers and drivers exchange this object. A journey may have a driver assigned or not. If the driver has not been assigned, this object is considered a "request for a journey". """ + origin: (int, int) destination: (int, int) tip: float @@ -54,20 +55,33 @@ class City(EventedEnvironment): :param int height: Height of the internal grid :param int width: Width of the internal grid """ - def __init__(self, *args, n_cars=1, n_passengers=10, - height=100, width=100, agents=None, - model_reporters=None, - **kwargs): + + def __init__( + self, + *args, + n_cars=1, + n_passengers=10, + height=100, + width=100, + agents=None, + model_reporters=None, + **kwargs, + ): self.grid = MultiGrid(width=width, height=height, torus=False) if agents is None: agents = [] for i in range(n_cars): - agents.append({'agent_class': Driver}) + agents.append({"agent_class": Driver}) for i in range(n_passengers): - agents.append({'agent_class': Passenger}) - model_reporters = model_reporters or {'earnings': 'total_earnings', 'n_passengers': 'number_passengers'} - print('REPORTERS', model_reporters) - super().__init__(*args, agents=agents, model_reporters=model_reporters, **kwargs) + agents.append({"agent_class": Passenger}) + model_reporters = model_reporters or { + "earnings": "total_earnings", + "n_passengers": "number_passengers", + } + print("REPORTERS", model_reporters) + super().__init__( + *args, agents=agents, model_reporters=model_reporters, **kwargs + ) for agent in self.agents: self.grid.place_agent(agent, (0, 0)) self.grid.move_to_empty(agent) @@ -87,13 +101,13 @@ class Driver(Evented, FSM): earnings = 0 def on_receive(self, msg, sender): - '''This is not a state. It will run (and block) every time check_messages is invoked''' + """This is not a state. It will run (and block) every time check_messages is invoked""" if self.journey is None and isinstance(msg, Journey) and msg.driver is None: msg.driver = self self.journey = msg def check_passengers(self): - '''If there are no more passengers, stop forever''' + """If there are no more passengers, stop forever""" c = self.count_agents(agent_class=Passenger) self.info(f"Passengers left {c}") if not c: @@ -102,17 +116,19 @@ class Driver(Evented, FSM): @default_state @state def wandering(self): - '''Move around the city until a journey is accepted''' + """Move around the city until a journey is accepted""" target = None self.check_passengers() self.journey = None while self.journey is None: # No potential journeys detected (see on_receive) if target is None or not self.move_towards(target): - target = self.random.choice(self.model.grid.get_neighborhood(self.pos, moore=False)) + target = self.random.choice( + self.model.grid.get_neighborhood(self.pos, moore=False) + ) self.check_passengers() - self.check_messages() # This will call on_receive behind the scenes, and the agent's status will be updated - yield Delta(30) # Wait at least 30 seconds before checking again + self.check_messages() # This will call on_receive behind the scenes, and the agent's status will be updated + yield Delta(30) # Wait at least 30 seconds before checking again try: # Re-send the journey to the passenger, to confirm that we have been selected @@ -126,7 +142,7 @@ class Driver(Evented, FSM): @state def driving(self): - '''The journey has been accepted. Pick them up and take them to their destination''' + """The journey has been accepted. Pick them up and take them to their destination""" while self.move_towards(self.journey.origin): yield while self.move_towards(self.journey.destination, with_passenger=True): @@ -136,7 +152,7 @@ class Driver(Evented, FSM): return self.wandering def move_towards(self, target, with_passenger=False): - '''Move one cell at a time towards a target''' + """Move one cell at a time towards a target""" self.info(f"Moving { self.pos } -> { target }") if target[0] == self.pos[0] and target[1] == self.pos[1]: return False @@ -151,30 +167,36 @@ class Driver(Evented, FSM): break self.model.grid.move_agent(self, tuple(next_pos)) if with_passenger: - self.journey.passenger.pos = self.pos # This could be communicated through messages + self.journey.passenger.pos = ( + self.pos + ) # This could be communicated through messages return True - + class Passenger(Evented, FSM): pos = None def on_receive(self, msg, sender): - '''This is not a state. It will be run synchronously every time `check_messages` is run''' + """This is not a state. It will be run synchronously every time `check_messages` is run""" if isinstance(msg, Journey): self.journey = msg return msg - @default_state @state def asking(self): - destination = (self.random.randint(0, self.model.grid.height), self.random.randint(0, self.model.grid.width)) + destination = ( + self.random.randint(0, self.model.grid.height), + self.random.randint(0, self.model.grid.width), + ) self.journey = None - journey = Journey(origin=self.pos, - destination=destination, - tip=self.random.randint(10, 100), - passenger=self) + journey = Journey( + origin=self.pos, + destination=destination, + tip=self.random.randint(10, 100), + passenger=self, + ) timeout = 60 expiration = self.now + timeout @@ -185,20 +207,27 @@ class Passenger(Evented, FSM): yield self.received(expiration=expiration) except events.TimedOut: self.info(f"Passenger at: { self.pos }. Asking for journey.") - self.model.broadcast(journey, ttl=timeout, sender=self, agent_class=Driver) + self.model.broadcast( + journey, ttl=timeout, sender=self, agent_class=Driver + ) expiration = self.now + timeout self.check_messages() return self.driving_home @state def driving_home(self): - while self.pos[0] != self.journey.destination[0] or self.pos[1] != self.journey.destination[1]: + while ( + self.pos[0] != self.journey.destination[0] + or self.pos[1] != self.journey.destination[1] + ): yield self.received(timeout=60) self.info("Got home safe!") self.die() -simulation = Simulation(name='RideHailing', model_class=City, model_params={'n_passengers': 2}) +simulation = Simulation( + name="RideHailing", model_class=City, model_params={"n_passengers": 2} +) if __name__ == "__main__": with easy(simulation) as s: