Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Model: Replace get_agents_of_type method with agents_by_type property #2267

Merged
merged 5 commits into from
Sep 3, 2024
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions benchmarks/WolfSheep/wolf_sheep.py
Original file line number Diff line number Diff line change
Expand Up @@ -227,8 +227,8 @@ def __init__(
patch.move_to(cell)

def step(self):
self.get_agents_of_type(Sheep).shuffle(inplace=True).do("step")
self.get_agents_of_type(Wolf).shuffle(inplace=True).do("step")
self.agents_by_type[Sheep].shuffle(inplace=True).do("step")
self.agents_by_type[Wolf].shuffle(inplace=True).do("step")


if __name__ == "__main__":
Expand Down
4 changes: 2 additions & 2 deletions mesa/experimental/devs/examples/wolf_sheep.py
Original file line number Diff line number Diff line change
Expand Up @@ -231,8 +231,8 @@ def __init__(
self.grid.place_agent(patch, pos)

def step(self):
self.get_agents_of_type(Sheep).shuffle(inplace=True).do("step")
self.get_agents_of_type(Wolf).shuffle(inplace=True).do("step")
self.agents_by_type[Sheep].shuffle(inplace=True).do("step")
self.agents_by_type[Wolf].shuffle(inplace=True).do("step")


if __name__ == "__main__":
Expand Down
28 changes: 16 additions & 12 deletions mesa/model.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,11 +33,13 @@
Properties:
agents: An AgentSet containing all agents in the model
agent_types: A list of different agent types present in the model.
agents_by_type: A dictionary where the keys are agent types and the values are the corresponding AgentSets.
steps: An integer representing the number of steps the model has taken.
It increases automatically at the start of each step() call.

Methods:
get_agents_of_type: Returns an AgentSet of agents of the specified type.
Deprecated: Use agents_by_type[agenttype] instead.
run_model: Runs the model's simulation until a defined end condition is reached.
step: Executes a single step of the model's simulation process.
next_id: Generates and returns the next unique identifier for an agent.
Expand Down Expand Up @@ -106,24 +108,26 @@
"""Return a list of all unique agent types registered with the model."""
return list(self._agents_by_type.keys())

def get_agents_of_type(self, agenttype: type[Agent]) -> AgentSet:
"""Retrieves an AgentSet containing all agents of the specified type.

Args:
agenttype: The type of agent to retrieve.

Raises:
KeyError: If agenttype does not exist

@property
def agents_by_type(self) -> dict[type[Agent], AgentSet]:
"""A dictionary where the keys are agent types and the values are the corresponding AgentSets."""
return self._agents_by_type

"""
return self._agents_by_type[agenttype]
def get_agents_of_type(self, agenttype: type[Agent]) -> AgentSet:
"""Deprecated: Retrieves an AgentSet containing all agents of the specified type."""
warnings.warn(

Check warning on line 118 in mesa/model.py

View check run for this annotation

Codecov / codecov/patch

mesa/model.py#L118

Added line #L118 was not covered by tests
f"Model.get_agents_of_type() is deprecated, please replace get_agents_of_type({agenttype})"
f"with the property agents_by_type[{agenttype}].",
DeprecationWarning,
stacklevel=2,
)
return self.agents_by_type[agenttype]

Check warning on line 124 in mesa/model.py

View check run for this annotation

Codecov / codecov/patch

mesa/model.py#L124

Added line #L124 was not covered by tests

def _setup_agent_registration(self):
"""helper method to initialize the agent registration datastructures"""
self._agents = {} # the hard references to all agents in the model
self._agents_by_type: dict[
type, AgentSet
type[Agent], AgentSet
] = {} # a dict with an agentset for each class of agents
self._all_agents = AgentSet([], self) # an agenset with all agents

Expand Down
2 changes: 1 addition & 1 deletion tests/test_time.py
Original file line number Diff line number Diff line change
Expand Up @@ -320,7 +320,7 @@ def test_random_activation_counts(self):
agent_types = model.agent_types
for agent_type in agent_types:
assert model.schedule.get_type_count(agent_type) == len(
model.get_agents_of_type(agent_type)
model.agents_by_type[agent_type]
)

# def test_add_non_unique_ids(self):
Expand Down
Loading