Skip to content

[Enhancement] : agents selection in AgentsDf would be better if it returns agent_idx/name as key #162

Description

@Ben-geo

when selecting agent from agentsDF the return comes as agent to value mapping

w = model.agents["wealth"]
for k,v in w.items():
        print(k)

Code to reproduce

class ExampleAgentSet1(AgentSetPolars):
    def __init__(self, model: ModelDF):
        super().__init__(model)
        self["wealth"] = pl.Series("wealth", [1, 2, 3, 4])
        self["age"] = pl.Series("age", [10, 20, 30, 40])

    def add_wealth(self, amount: int) -> None:
        self["wealth"] += amount

    def step(self) -> None:
        self.add_wealth(1)

class ExampleAgentSet2(AgentSetPolars):
    def __init__(self, model: ModelDF):
        super().__init__(model)
        self["wealth"] = pl.Series("wealth", [10, 20, 30, 40])
        self["age"] = pl.Series("age", [11, 22, 33, 44])

    def add_wealth(self, amount: int) -> None:
        self["wealth"] += amount

    def step(self) -> None:
        self.add_wealth(2)

class ExampleAgentSet3(AgentSetPolars):
    def __init__(self, model: ModelDF):
        super().__init__(model)
        self["age"] = pl.Series("age", [1, 2, 3, 4])
        self["wealth"] = pl.Series("wealth", [1, 2, 3, 4])

    def age_agents(self, amount: int) -> None:
        self["age"] += amount

    def step(self) -> None:
        self.age_agents(1)



class ExampleModel(ModelDF):
    def __init__(self, agents: AgentsDF):
        super().__init__()
        self.agents = agents

    def step(self):
        self.agents.do("step")



@pytest.fixture
def fix1_AgentSetPolars() -> ExampleAgentSet1:
    return ExampleAgentSet1(ModelDF())

@pytest.fixture
def fix2_AgentSetPolars() -> ExampleAgentSet2:
    return ExampleAgentSet2(ModelDF())

@pytest.fixture
def fix3_AgentSetPolars() -> ExampleAgentSet3:
    return ExampleAgentSet3(ModelDF())


@pytest.fixture
def fix_AgentsDF(fix1_AgentSetPolars: ExampleAgentSet1,fix2_AgentSetPolars : ExampleAgentSet2, fix3_AgentSetPolars: ExampleAgentSet3) -> AgentsDF:
    model = ModelDF()
    agents = AgentsDF(model)
    agents.add([fix1_AgentSetPolars,fix2_AgentSetPolars,fix3_AgentSetPolars])
    return agents


@pytest.fixture
def fix1_model(fix_AgentsDF: AgentsDF) -> ExampleModel:
    return ExampleModel(fix_AgentsDF)

model = fix1_model
w = model.agents["wealth"]
for k,v in w.items():
        print(k)

please let me know if I am setting it up wrong

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementImprovements to existing features or performance.

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions