Coverage for .tox/p311/lib/python3.10/site-packages/scicom/historicalletters/space.py: 78%
32 statements
« prev ^ index » next coverage.py v7.4.4, created at 2024-04-16 09:50 +0200
« prev ^ index » next coverage.py v7.4.4, created at 2024-04-16 09:50 +0200
1import random
2from typing import Dict, DefaultDict, Set
3from collections import defaultdict
5import mesa
6import mesa_geo as mg
7from shapely.geometry import Point
9from scicom.historicalletters.agents import RegionAgent, SenderAgent
12class Nuts2Eu(mg.GeoSpace):
13 """Define regions containing senders of letters.
15 This is modified from a mesa-geo example, here
16 https://github.com/projectmesa/mesa-examples/blob/main/gis/geo_schelling_points/geo_schelling_points/space.py
17 """
18 _id_region_map: Dict[str, RegionAgent]
20 def __init__(self):
21 super().__init__(warn_crs_conversion=True)
22 self._id_region_map = {}
24 def add_regions(self, agents):
25 super().add_agents(agents)
26 for agent in agents:
27 self._id_region_map[agent.unique_id] = agent
29 def add_sender_to_region(self, agent, region_id):
30 agent.region_id = region_id
31 self._id_region_map[region_id].add_sender(agent)
33 def remove_sender_from_region(self, agent):
34 self._id_region_map[agent.region_id].remove_sender(agent)
35 agent.region_id = None
37 def add_sender(self, agent: SenderAgent, regionID: str) -> None:
38 super().add_agents([agent])
39 self.add_sender_to_region(agent, regionID)
41 def move_sender(
42 self, agent: SenderAgent, pos: mesa.space.FloatCoordinate, regionID: str
43 ) -> None:
44 self.__remove_sender(agent)
45 agent.geometry = pos
46 self.add_sender(agent, regionID)
48 def __remove_sender(self, agent: SenderAgent) -> None:
49 super().remove_agent(agent)
50 self.remove_sender_from_region(agent)