Mesa 2.2.4__py3-none-any.whl → 2.3.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of Mesa might be problematic. Click here for more details.
- mesa/__init__.py +2 -1
- mesa/agent.py +35 -31
- mesa/datacollection.py +4 -1
- mesa/experimental/UserParam.py +56 -0
- mesa/experimental/__init__.py +5 -1
- mesa/experimental/cell_space/__init__.py +23 -0
- mesa/experimental/cell_space/cell.py +152 -0
- mesa/experimental/cell_space/cell_agent.py +37 -0
- mesa/experimental/cell_space/cell_collection.py +81 -0
- mesa/experimental/cell_space/discrete_space.py +64 -0
- mesa/experimental/cell_space/grid.py +204 -0
- mesa/experimental/cell_space/network.py +40 -0
- mesa/experimental/components/altair.py +72 -0
- mesa/experimental/components/matplotlib.py +6 -2
- mesa/experimental/devs/__init__.py +4 -0
- mesa/experimental/devs/eventlist.py +166 -0
- mesa/experimental/devs/examples/epstein_civil_violence.py +273 -0
- mesa/experimental/devs/examples/wolf_sheep.py +250 -0
- mesa/experimental/devs/simulator.py +293 -0
- mesa/experimental/jupyter_viz.py +121 -59
- mesa/main.py +8 -5
- mesa/model.py +5 -4
- mesa/space.py +32 -16
- mesa/time.py +3 -110
- {mesa-2.2.4.dist-info → mesa-2.3.0.dist-info}/METADATA +12 -9
- mesa-2.3.0.dist-info/RECORD +45 -0
- {mesa-2.2.4.dist-info → mesa-2.3.0.dist-info}/WHEEL +1 -1
- mesa-2.2.4.dist-info/RECORD +0 -31
- {mesa-2.2.4.dist-info → mesa-2.3.0.dist-info}/entry_points.txt +0 -0
- {mesa-2.2.4.dist-info → mesa-2.3.0.dist-info}/licenses/LICENSE +0 -0
mesa/space.py
CHANGED
|
@@ -71,6 +71,21 @@ def is_integer(x: Real) -> bool:
|
|
|
71
71
|
return isinstance(x, _types_integer)
|
|
72
72
|
|
|
73
73
|
|
|
74
|
+
def warn_if_agent_has_position_already(placement_func):
|
|
75
|
+
def wrapper(self, agent, *args, **kwargs):
|
|
76
|
+
if agent.pos is not None:
|
|
77
|
+
warnings.warn(
|
|
78
|
+
f"""Agent {agent.unique_id} is being placed with
|
|
79
|
+
place_agent() despite already having the position {agent.pos}. In most
|
|
80
|
+
cases, you'd want to clear the current position with remove_agent()
|
|
81
|
+
before placing the agent again.""",
|
|
82
|
+
stacklevel=2,
|
|
83
|
+
)
|
|
84
|
+
placement_func(self, agent, *args, **kwargs)
|
|
85
|
+
|
|
86
|
+
return wrapper
|
|
87
|
+
|
|
88
|
+
|
|
74
89
|
class _Grid:
|
|
75
90
|
"""Base class for a rectangular grid.
|
|
76
91
|
|
|
@@ -135,14 +150,12 @@ class _Grid:
|
|
|
135
150
|
self._empties_built = True
|
|
136
151
|
|
|
137
152
|
@overload
|
|
138
|
-
def __getitem__(self, index: int | Sequence[Coordinate]) -> list[GridContent]:
|
|
139
|
-
...
|
|
153
|
+
def __getitem__(self, index: int | Sequence[Coordinate]) -> list[GridContent]: ...
|
|
140
154
|
|
|
141
155
|
@overload
|
|
142
156
|
def __getitem__(
|
|
143
157
|
self, index: tuple[int | slice, int | slice]
|
|
144
|
-
) -> GridContent | list[GridContent]:
|
|
145
|
-
...
|
|
158
|
+
) -> GridContent | list[GridContent]: ...
|
|
146
159
|
|
|
147
160
|
def __getitem__(self, index):
|
|
148
161
|
"""Access contents from the grid."""
|
|
@@ -405,11 +418,9 @@ class _Grid:
|
|
|
405
418
|
"""
|
|
406
419
|
return list(self.iter_cell_list_contents(cell_list))
|
|
407
420
|
|
|
408
|
-
def place_agent(self, agent: Agent, pos: Coordinate) -> None:
|
|
409
|
-
...
|
|
421
|
+
def place_agent(self, agent: Agent, pos: Coordinate) -> None: ...
|
|
410
422
|
|
|
411
|
-
def remove_agent(self, agent: Agent) -> None:
|
|
412
|
-
...
|
|
423
|
+
def remove_agent(self, agent: Agent) -> None: ...
|
|
413
424
|
|
|
414
425
|
def move_agent(self, agent: Agent, pos: Coordinate) -> None:
|
|
415
426
|
"""Move an agent from its current position to a new position.
|
|
@@ -450,6 +461,7 @@ class _Grid:
|
|
|
450
461
|
# Find the closest position without sorting all positions
|
|
451
462
|
closest_pos = None
|
|
452
463
|
min_distance = float("inf")
|
|
464
|
+
agent.random.shuffle(pos)
|
|
453
465
|
for p in pos:
|
|
454
466
|
distance = self._distance_squared(p, current_pos)
|
|
455
467
|
if distance < min_distance:
|
|
@@ -763,16 +775,14 @@ class _PropertyGrid(_Grid):
|
|
|
763
775
|
|
|
764
776
|
Attributes:
|
|
765
777
|
properties (dict): A dictionary mapping property layer names to PropertyLayer instances.
|
|
766
|
-
empty_mask:
|
|
778
|
+
empty_mask (np.ndarray): A boolean array indicating empty cells on the grid.
|
|
767
779
|
|
|
768
780
|
Methods:
|
|
769
781
|
add_property_layer(property_layer): Adds a new property layer to the grid.
|
|
770
782
|
remove_property_layer(property_name): Removes a property layer from the grid by its name.
|
|
771
783
|
get_neighborhood_mask(pos, moore, include_center, radius): Generates a boolean mask of the neighborhood.
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
select_extreme_value_cells(property_name, mode, mask, return_list): Selects cells with extreme values of a property,
|
|
775
|
-
optionally with a mask, returning either a list of coordinates or a mask.
|
|
784
|
+
select_cells(conditions, extreme_values, masks, only_empty, return_list): Selects cells based on multiple conditions,
|
|
785
|
+
extreme values, masks, with an option to select only empty cells, returning either a list of coordinates or a mask.
|
|
776
786
|
|
|
777
787
|
Mask Usage:
|
|
778
788
|
Several methods in this class accept a mask as an input, which is a NumPy ndarray of boolean values. This mask
|
|
@@ -978,6 +988,7 @@ class SingleGrid(_PropertyGrid):
|
|
|
978
988
|
the grid for empty spaces.
|
|
979
989
|
"""
|
|
980
990
|
|
|
991
|
+
@warn_if_agent_has_position_already
|
|
981
992
|
def place_agent(self, agent: Agent, pos: Coordinate) -> None:
|
|
982
993
|
"""Place the agent at the specified location, and set its pos variable."""
|
|
983
994
|
if self.is_cell_empty(pos):
|
|
@@ -1026,6 +1037,7 @@ class MultiGrid(_PropertyGrid):
|
|
|
1026
1037
|
"""Default value for new cell elements."""
|
|
1027
1038
|
return []
|
|
1028
1039
|
|
|
1040
|
+
@warn_if_agent_has_position_already
|
|
1029
1041
|
def place_agent(self, agent: Agent, pos: Coordinate) -> None:
|
|
1030
1042
|
"""Place the agent at the specified location, and set its pos variable."""
|
|
1031
1043
|
x, y = pos
|
|
@@ -1357,6 +1369,7 @@ class ContinuousSpace:
|
|
|
1357
1369
|
self._agent_points = None
|
|
1358
1370
|
self._index_to_agent = {}
|
|
1359
1371
|
|
|
1372
|
+
@warn_if_agent_has_position_already
|
|
1360
1373
|
def place_agent(self, agent: Agent, pos: FloatCoordinate) -> None:
|
|
1361
1374
|
"""Place a new agent in the space.
|
|
1362
1375
|
|
|
@@ -1517,6 +1530,7 @@ class NetworkGrid:
|
|
|
1517
1530
|
"""Default value for a new node."""
|
|
1518
1531
|
return []
|
|
1519
1532
|
|
|
1533
|
+
@warn_if_agent_has_position_already
|
|
1520
1534
|
def place_agent(self, agent: Agent, node_id: int) -> None:
|
|
1521
1535
|
"""Place an agent in a node."""
|
|
1522
1536
|
self.G.nodes[node_id]["agent"].append(agent)
|
|
@@ -1539,9 +1553,11 @@ class NetworkGrid:
|
|
|
1539
1553
|
neighborhood = sorted(neighbors_with_distance.keys())
|
|
1540
1554
|
return neighborhood
|
|
1541
1555
|
|
|
1542
|
-
def get_neighbors(
|
|
1543
|
-
|
|
1544
|
-
|
|
1556
|
+
def get_neighbors(
|
|
1557
|
+
self, node_id: int, include_center: bool = False, radius: int = 1
|
|
1558
|
+
) -> list[Agent]:
|
|
1559
|
+
"""Get all agents in adjacent nodes (within a certain radius)."""
|
|
1560
|
+
neighborhood = self.get_neighborhood(node_id, include_center, radius)
|
|
1545
1561
|
return self.get_cell_list_contents(neighborhood)
|
|
1546
1562
|
|
|
1547
1563
|
def move_agent(self, agent: Agent, node_id: int) -> None:
|
mesa/time.py
CHANGED
|
@@ -25,9 +25,7 @@ Key concepts:
|
|
|
25
25
|
# Remove this __future__ import once the oldest supported Python is 3.10
|
|
26
26
|
from __future__ import annotations
|
|
27
27
|
|
|
28
|
-
import heapq
|
|
29
28
|
import warnings
|
|
30
|
-
import weakref
|
|
31
29
|
from collections import defaultdict
|
|
32
30
|
from collections.abc import Iterable
|
|
33
31
|
|
|
@@ -393,46 +391,7 @@ class RandomActivationByType(BaseScheduler):
|
|
|
393
391
|
|
|
394
392
|
class DiscreteEventScheduler(BaseScheduler):
|
|
395
393
|
"""
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
This scheduler manages events where each event is associated with a
|
|
399
|
-
specific time and agent. The scheduler advances time not in fixed
|
|
400
|
-
increments, but to the moment the next event is scheduled to occur.
|
|
401
|
-
|
|
402
|
-
This implementation uses a priority queue (heapq) to manage events. Each
|
|
403
|
-
event is a tuple of the form (time, random_value, agent), where:
|
|
404
|
-
- time (float): The scheduled time for the event.
|
|
405
|
-
- random_value (float): A secondary sorting criterion to randomize
|
|
406
|
-
the order of events that are scheduled for the same time.
|
|
407
|
-
- agent (Agent): The agent associated with the event.
|
|
408
|
-
|
|
409
|
-
The random value for secondary sorting ensures that when two events are
|
|
410
|
-
scheduled for the same time, their execution order is randomized, thus
|
|
411
|
-
preventing direct comparison issues between different types of agents and
|
|
412
|
-
maintaining the integrity of the simulation's randomness.
|
|
413
|
-
|
|
414
|
-
Attributes:
|
|
415
|
-
model (Model): The model instance associated with the scheduler.
|
|
416
|
-
event_queue (list): A priority queue of scheduled events.
|
|
417
|
-
time_step (int or float): The fixed time period by which the model advances
|
|
418
|
-
on each step. Defaults to 1.
|
|
419
|
-
|
|
420
|
-
Methods:
|
|
421
|
-
schedule_event(time, agent): Schedule an event for a specific time.
|
|
422
|
-
schedule_in(delay, agent): Schedule an event after a specified delay.
|
|
423
|
-
step(): Execute all events within the next time_step period.
|
|
424
|
-
get_next_event_time(): Returns the time of the next scheduled event.
|
|
425
|
-
|
|
426
|
-
Usage:
|
|
427
|
-
1. Instantiate the DiscreteEventScheduler with a model instance and a time_step period.
|
|
428
|
-
2. Add agents to the scheduler using schedule.add(). With schedule_now=True (default),
|
|
429
|
-
the first event for the agent will be scheduled immediately.
|
|
430
|
-
3. In the Agent step() method, schedule the next event for the agent
|
|
431
|
-
(using schedule_in or schedule_event).
|
|
432
|
-
3. Add self.schedule.step() to the model's step() method, as usual.
|
|
433
|
-
|
|
434
|
-
Now, with each model step, the scheduler will execute all events within the
|
|
435
|
-
next time_step period, and advance time one time_step forward.
|
|
394
|
+
This class has been deprecated and replaced by the functionality provided by experimental.devs
|
|
436
395
|
"""
|
|
437
396
|
|
|
438
397
|
def __init__(self, model: Model, time_step: TimeT = 1) -> None:
|
|
@@ -444,72 +403,6 @@ class DiscreteEventScheduler(BaseScheduler):
|
|
|
444
403
|
|
|
445
404
|
"""
|
|
446
405
|
super().__init__(model)
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
warnings.warn(
|
|
451
|
-
"The DiscreteEventScheduler is experimental. It may be changed or removed in any and all future releases, including patch releases.\n"
|
|
452
|
-
"We would love to hear what you think about this new feature. If you have any thoughts, share them with us here: https://github.com/projectmesa/mesa/discussions/1923",
|
|
453
|
-
FutureWarning,
|
|
454
|
-
stacklevel=2,
|
|
406
|
+
raise Exception(
|
|
407
|
+
"DiscreteEventScheduler is deprecated in favor of the functionality provided by experimental.devs"
|
|
455
408
|
)
|
|
456
|
-
|
|
457
|
-
def schedule_event(self, time: TimeT, agent: Agent) -> None:
|
|
458
|
-
"""Schedule an event for an agent at a specific time."""
|
|
459
|
-
if time < self.time:
|
|
460
|
-
raise ValueError(
|
|
461
|
-
f"Scheduled time ({time}) must be >= the current time ({self.time})"
|
|
462
|
-
)
|
|
463
|
-
if agent not in self._agents:
|
|
464
|
-
raise ValueError(
|
|
465
|
-
"trying to schedule an event for agent which is not known to the scheduler"
|
|
466
|
-
)
|
|
467
|
-
|
|
468
|
-
# Create an event, sorted first on time, secondary on a random value
|
|
469
|
-
event = (time, self.model.random.random(), weakref.ref(agent))
|
|
470
|
-
heapq.heappush(self.event_queue, event)
|
|
471
|
-
|
|
472
|
-
def schedule_in(self, delay: TimeT, agent: Agent) -> None:
|
|
473
|
-
"""Schedule an event for an agent after a specified delay."""
|
|
474
|
-
if delay < 0:
|
|
475
|
-
raise ValueError("Delay must be non-negative")
|
|
476
|
-
event_time = self.time + delay
|
|
477
|
-
self.schedule_event(event_time, agent)
|
|
478
|
-
|
|
479
|
-
def step(self) -> None:
|
|
480
|
-
"""Execute the next event and advance the time."""
|
|
481
|
-
end_time = self.time + self.time_step
|
|
482
|
-
|
|
483
|
-
while self.event_queue and self.event_queue[0][0] <= end_time:
|
|
484
|
-
# Get the next event (ignore the random value during unpacking)
|
|
485
|
-
time, _, agent = heapq.heappop(self.event_queue)
|
|
486
|
-
agent = agent() # unpack weakref
|
|
487
|
-
|
|
488
|
-
if agent:
|
|
489
|
-
# Advance time to the event's time
|
|
490
|
-
self.time = time
|
|
491
|
-
# Execute the event
|
|
492
|
-
agent.step()
|
|
493
|
-
|
|
494
|
-
# After processing events, advance time by the time_step
|
|
495
|
-
self.time = end_time
|
|
496
|
-
self.steps += 1
|
|
497
|
-
|
|
498
|
-
def get_next_event_time(self) -> TimeT | None:
|
|
499
|
-
"""Returns the time of the next scheduled event."""
|
|
500
|
-
if not self.event_queue:
|
|
501
|
-
return None
|
|
502
|
-
return self.event_queue[0][0]
|
|
503
|
-
|
|
504
|
-
def add(self, agent: Agent, schedule_now: bool = True) -> None:
|
|
505
|
-
"""Add an Agent object to the schedule and optionally schedule its first event.
|
|
506
|
-
|
|
507
|
-
Args:
|
|
508
|
-
agent: An Agent to be added to the schedule. Must have a step() method.
|
|
509
|
-
schedule_now: If True, schedules the first event for the agent immediately.
|
|
510
|
-
"""
|
|
511
|
-
super().add(agent) # Call the add method from BaseScheduler
|
|
512
|
-
|
|
513
|
-
if schedule_now:
|
|
514
|
-
# Schedule the first event immediately
|
|
515
|
-
self.schedule_event(self.time, agent)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.3
|
|
2
2
|
Name: Mesa
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.3.0
|
|
4
4
|
Summary: Agent-based modeling (ABM) in Python
|
|
5
5
|
Project-URL: homepage, https://github.com/projectmesa/mesa
|
|
6
6
|
Project-URL: repository, https://github.com/projectmesa/mesa
|
|
@@ -16,6 +16,8 @@ Classifier: Operating System :: OS Independent
|
|
|
16
16
|
Classifier: Programming Language :: Python :: 3 :: Only
|
|
17
17
|
Classifier: Programming Language :: Python :: 3.9
|
|
18
18
|
Classifier: Programming Language :: Python :: 3.10
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
19
21
|
Classifier: Topic :: Scientific/Engineering
|
|
20
22
|
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
21
23
|
Classifier: Topic :: Scientific/Engineering :: Artificial Life
|
|
@@ -32,6 +34,7 @@ Requires-Dist: tqdm
|
|
|
32
34
|
Provides-Extra: dev
|
|
33
35
|
Requires-Dist: coverage; extra == 'dev'
|
|
34
36
|
Requires-Dist: pytest-cov; extra == 'dev'
|
|
37
|
+
Requires-Dist: pytest-mock; extra == 'dev'
|
|
35
38
|
Requires-Dist: pytest>=4.6; extra == 'dev'
|
|
36
39
|
Requires-Dist: ruff~=0.1.1; extra == 'dev'
|
|
37
40
|
Requires-Dist: sphinx; extra == 'dev'
|
|
@@ -46,12 +49,12 @@ Description-Content-Type: text/markdown
|
|
|
46
49
|
|
|
47
50
|
# Mesa: Agent-based modeling in Python
|
|
48
51
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
[](https://codecov.io/gh/projectmesa/mesa)
|
|
52
|
-
[](https://github.com/projectmesa/mesa/actions) [](https://codecov.io/gh/projectmesa/mesa) |
|
|
55
|
+
| Package | [](https://pypi.org/project/Mesa/) [](https://pypi.org/project/Mesa/) [](https://pypi.org/project/Mesa/) |
|
|
56
|
+
| Meta | [](https://github.com/astral-sh/ruff) [](https://github.com/psf/black) [](https://github.com/pypa/hatch) |
|
|
57
|
+
| Chat | [](https://matrix.to/#/#project-mesa:matrix.org) |
|
|
55
58
|
|
|
56
59
|
Mesa allows users to quickly create agent-based models using built-in
|
|
57
60
|
core components (such as spatial grids and agent schedulers) or
|
|
@@ -160,7 +163,7 @@ If you would like to add a feature, please reach out via [ticket](https://github
|
|
|
160
163
|
join a dev session (see [Mesa discussions](https://github.com/projectmesa/mesa/discussions)). A feature is most likely
|
|
161
164
|
to be added if you build it!
|
|
162
165
|
|
|
163
|
-
Don't forget to checkout the [Contributors guide](https://github.com/projectmesa/mesa/blob/main/CONTRIBUTING.
|
|
166
|
+
Don't forget to checkout the [Contributors guide](https://github.com/projectmesa/mesa/blob/main/CONTRIBUTING.md).
|
|
164
167
|
|
|
165
168
|
## Citing Mesa
|
|
166
169
|
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
mesa/__init__.py,sha256=Hhvyt9tR-PXIbP9nhT3WxDOURSucRP7mVZM3YXUxkMo,680
|
|
2
|
+
mesa/agent.py,sha256=L_kHMM3lTVLq8EM3UsX1xVLLo-P5IqFrJEqg83gT7xs,12902
|
|
3
|
+
mesa/batchrunner.py,sha256=2A1_FbFlSCkDm8xfv1ZamFiBE4VYce8sKP5SR_CledE,6087
|
|
4
|
+
mesa/datacollection.py,sha256=Iwz8Nuib1Fmo8sJ0ng-qstBhAkdKXn-CXomylCkCRGQ,11195
|
|
5
|
+
mesa/main.py,sha256=7MovfNz88VWNnfXP0kcERB6C3GfkVOh0hb0o32hM9LU,1602
|
|
6
|
+
mesa/model.py,sha256=RxTCJUBfEgRIu3dXiMK9oMlxS3owwNQaQIrVRs6HsZY,5823
|
|
7
|
+
mesa/space.py,sha256=K2QsFXbBPPSzsPQMJMxERNX0kJ5dhlp0NNrWxuQpq-Q,62471
|
|
8
|
+
mesa/time.py,sha256=G83UKWeMFMnQV9-79Ps2gbD_Qz3hM07IFYLzf5Rvz1w,15243
|
|
9
|
+
mesa/cookiecutter-mesa/cookiecutter.json,sha256=tBSWli39fOWUXGfiDCTKd92M7uKaBIswXbkOdbUufYY,337
|
|
10
|
+
mesa/cookiecutter-mesa/hooks/post_gen_project.py,sha256=8JoXZKIioRYEWJURC0udj8WS3rg0c4So62sOZSGbrMY,294
|
|
11
|
+
mesa/cookiecutter-mesa/{{cookiecutter.snake}}/README.md,sha256=Yji4lGY-NtQSnW-oBj0_Jhs-XhCfZA8R1mBBM_IllGs,80
|
|
12
|
+
mesa/cookiecutter-mesa/{{cookiecutter.snake}}/run.pytemplate,sha256=7bYSRdq83--T1gnEuFls5aunb7lLNtUKFS2MUrovEg0,74
|
|
13
|
+
mesa/cookiecutter-mesa/{{cookiecutter.snake}}/setup.pytemplate,sha256=UtRpLM_CkeUZRec-Ef_LiO_x7SKaWN11fOiH9T1UmTw,214
|
|
14
|
+
mesa/cookiecutter-mesa/{{cookiecutter.snake}}/{{cookiecutter.snake}}/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
15
|
+
mesa/cookiecutter-mesa/{{cookiecutter.snake}}/{{cookiecutter.snake}}/model.pytemplate,sha256=gTxSZ9t8My_Qiwuusqaf8DmspncrLKptxbg9cvfbloc,1842
|
|
16
|
+
mesa/cookiecutter-mesa/{{cookiecutter.snake}}/{{cookiecutter.snake}}/server.pytemplate,sha256=nqi6cPjhiyrYw82_Y9hLSrfZtSVCGIhMLOXRB7kKTlQ,823
|
|
17
|
+
mesa/experimental/UserParam.py,sha256=kpFu5yH_RSTI4S2XQxYAGWJgGwQo6j-yCADYJHry4lE,1641
|
|
18
|
+
mesa/experimental/__init__.py,sha256=ncy-EG4IMoSzknYXLMt3Z61nkMwkrH96QbJpGUqOpxQ,168
|
|
19
|
+
mesa/experimental/jupyter_viz.py,sha256=q2Xn-QjH0nqJoxY1RV_SSHC_OgMFZyKWHJjrn5jHCRk,13444
|
|
20
|
+
mesa/experimental/cell_space/__init__.py,sha256=trFVKf2l5RbkCUyxP09Kox_J3ak2YdM4o3t40Tsjjm4,628
|
|
21
|
+
mesa/experimental/cell_space/cell.py,sha256=AUnvVnXWhdgzr0bLKDRDO9c93v22Zkw6W-tWxhEhGdQ,4578
|
|
22
|
+
mesa/experimental/cell_space/cell_agent.py,sha256=G4u9ht4gW9ns1y2L7pFumF3K4HiP6ROuxwrxHZ-mL1M,1107
|
|
23
|
+
mesa/experimental/cell_space/cell_collection.py,sha256=Rjho3zIyKaamO2X9XEZu16qlmEP41tIHyhMST2KHK4o,2293
|
|
24
|
+
mesa/experimental/cell_space/discrete_space.py,sha256=ta__YojsrrhWL4DgMzUqZpSgbeexKMrA6bxlYPJGfK0,1921
|
|
25
|
+
mesa/experimental/cell_space/grid.py,sha256=IltngMSlMwLsJSNYrs6B4J5ylUbL5Vk1vPX_OhWGzTs,6949
|
|
26
|
+
mesa/experimental/cell_space/network.py,sha256=NWEdROFyO18pHOTb6_t9zjjUyGhAztPJm8a9b21c8ZU,1195
|
|
27
|
+
mesa/experimental/components/altair.py,sha256=_atxt79OpRjykAEwockKm0K9dp1jDPmcLeKqffZ0Bfo,2397
|
|
28
|
+
mesa/experimental/components/matplotlib.py,sha256=DVf41wdN1J56IQJXaeonqL4rcwYlsUIUB7C6r5ozdfg,4325
|
|
29
|
+
mesa/experimental/devs/__init__.py,sha256=CWam15vCj-RD_biMyqv4sJfos1fsL823P7MDEGrbwW8,174
|
|
30
|
+
mesa/experimental/devs/eventlist.py,sha256=H9hufe9VmwvlXQr146wCa7PgbzVvivG4Bk9rlEERZ7A,4880
|
|
31
|
+
mesa/experimental/devs/simulator.py,sha256=NQ3rtBIzykBtMWNslG_Fg04NQn2lYT8cmH-7ndr8v0Y,9530
|
|
32
|
+
mesa/experimental/devs/examples/epstein_civil_violence.py,sha256=KqH9KI-A_BYt7oWi9kaOhTzjrf2pETqzSpAQG8ewud0,9667
|
|
33
|
+
mesa/experimental/devs/examples/wolf_sheep.py,sha256=h5z-eDqMpYeOjrq293N2BcQbs_LDVsgtg9vblXJM7XQ,7697
|
|
34
|
+
mesa/flat/__init__.py,sha256=hSqQDjkfIgDu7B3aYtjPeNEUXdlKPHQuNN8HEV0XR6s,218
|
|
35
|
+
mesa/flat/visualization.py,sha256=5aCm8xDCmZij3hoJZvOVmmpzU9ACXSSSvmQr51buLVg,290
|
|
36
|
+
mesa/visualization/ModularVisualization.py,sha256=gT-FYRnvTFFxtehu-N-8eBLShCF8t_Ut8Au4iVPZIlA,60
|
|
37
|
+
mesa/visualization/TextVisualization.py,sha256=BIP0XcmIdYhz0igqe8yRZXlXeOOqJZeu8q9XViJTuLc,57
|
|
38
|
+
mesa/visualization/UserParam.py,sha256=D3qxoX-Cpqhyn06IdIO_C5s0u8nlhv3988lVwkBlcGo,49
|
|
39
|
+
mesa/visualization/__init__.py,sha256=5fwVAzgVsmxAzgoLxdC26l2ZE-m2bWj963xPNSDaQEQ,287
|
|
40
|
+
mesa/visualization/modules.py,sha256=pf6K3KECX51VNNqpFCm2EE5KV0A22UYmfXzTVXPnF_o,47
|
|
41
|
+
mesa-2.3.0.dist-info/METADATA,sha256=l0JwAmr_TViBClkM7zKIc3JfS9sv28dgyzsjZ-2ERmU,7865
|
|
42
|
+
mesa-2.3.0.dist-info/WHEEL,sha256=zEMcRr9Kr03x1ozGwg5v9NQBKn3kndp6LSoSlVg-jhU,87
|
|
43
|
+
mesa-2.3.0.dist-info/entry_points.txt,sha256=IOcQtetGF8l4wHpOs_hGb19Rz-FS__BMXOJR10IBPsA,39
|
|
44
|
+
mesa-2.3.0.dist-info/licenses/LICENSE,sha256=OGUgret9fRrm8J3pdsPXETIjf0H8puK_Nmy970ZzT78,572
|
|
45
|
+
mesa-2.3.0.dist-info/RECORD,,
|
mesa-2.2.4.dist-info/RECORD
DELETED
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
mesa/__init__.py,sha256=1rj0Zvd80Sk-TWYndb9bpGNn5ZuBQqGa2SQ46mDiw0A,679
|
|
2
|
-
mesa/agent.py,sha256=Dh7FikTOr36fjQJ3w59h5reEIJWevhtZvCSW-adk8qk,13103
|
|
3
|
-
mesa/batchrunner.py,sha256=2A1_FbFlSCkDm8xfv1ZamFiBE4VYce8sKP5SR_CledE,6087
|
|
4
|
-
mesa/datacollection.py,sha256=4WGJYc2jAvdiBi-e-uEPp5G100KlVambym9a4ZAxsuU,11139
|
|
5
|
-
mesa/main.py,sha256=_7y918D0EEHJBLgiV7rqVNWvCyzjamHUSQ873OeEGf8,1468
|
|
6
|
-
mesa/model.py,sha256=6OPZ717idd3O7AyA-Y5f0rjuwPoRzBLOqk0BCUs6sXM,5908
|
|
7
|
-
mesa/space.py,sha256=9cN0fW0E850oBFp1lBVvr9_JWKN8wEbUrWuG05QHTE8,61870
|
|
8
|
-
mesa/time.py,sha256=BAchKHNFh0ggQqaIMvojHhAF6I3zSQRlDXhQCyKq0NU,20208
|
|
9
|
-
mesa/cookiecutter-mesa/cookiecutter.json,sha256=tBSWli39fOWUXGfiDCTKd92M7uKaBIswXbkOdbUufYY,337
|
|
10
|
-
mesa/cookiecutter-mesa/hooks/post_gen_project.py,sha256=8JoXZKIioRYEWJURC0udj8WS3rg0c4So62sOZSGbrMY,294
|
|
11
|
-
mesa/cookiecutter-mesa/{{cookiecutter.snake}}/README.md,sha256=Yji4lGY-NtQSnW-oBj0_Jhs-XhCfZA8R1mBBM_IllGs,80
|
|
12
|
-
mesa/cookiecutter-mesa/{{cookiecutter.snake}}/run.pytemplate,sha256=7bYSRdq83--T1gnEuFls5aunb7lLNtUKFS2MUrovEg0,74
|
|
13
|
-
mesa/cookiecutter-mesa/{{cookiecutter.snake}}/setup.pytemplate,sha256=UtRpLM_CkeUZRec-Ef_LiO_x7SKaWN11fOiH9T1UmTw,214
|
|
14
|
-
mesa/cookiecutter-mesa/{{cookiecutter.snake}}/{{cookiecutter.snake}}/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
15
|
-
mesa/cookiecutter-mesa/{{cookiecutter.snake}}/{{cookiecutter.snake}}/model.pytemplate,sha256=gTxSZ9t8My_Qiwuusqaf8DmspncrLKptxbg9cvfbloc,1842
|
|
16
|
-
mesa/cookiecutter-mesa/{{cookiecutter.snake}}/{{cookiecutter.snake}}/server.pytemplate,sha256=nqi6cPjhiyrYw82_Y9hLSrfZtSVCGIhMLOXRB7kKTlQ,823
|
|
17
|
-
mesa/experimental/__init__.py,sha256=lHhvI2jfsLHfICO7q-LRA6UK4Pyxr7edkBDbjTqPGVo,55
|
|
18
|
-
mesa/experimental/jupyter_viz.py,sha256=snVzObTPw-ekZyp6wmaCQdmQ2444gmvY443asNqKM98,11722
|
|
19
|
-
mesa/experimental/components/matplotlib.py,sha256=5xqlSc8wwYxVc_M0GNt0NC0BRS8cdEp6TvBqHoRMhvY,4065
|
|
20
|
-
mesa/flat/__init__.py,sha256=hSqQDjkfIgDu7B3aYtjPeNEUXdlKPHQuNN8HEV0XR6s,218
|
|
21
|
-
mesa/flat/visualization.py,sha256=5aCm8xDCmZij3hoJZvOVmmpzU9ACXSSSvmQr51buLVg,290
|
|
22
|
-
mesa/visualization/ModularVisualization.py,sha256=gT-FYRnvTFFxtehu-N-8eBLShCF8t_Ut8Au4iVPZIlA,60
|
|
23
|
-
mesa/visualization/TextVisualization.py,sha256=BIP0XcmIdYhz0igqe8yRZXlXeOOqJZeu8q9XViJTuLc,57
|
|
24
|
-
mesa/visualization/UserParam.py,sha256=D3qxoX-Cpqhyn06IdIO_C5s0u8nlhv3988lVwkBlcGo,49
|
|
25
|
-
mesa/visualization/__init__.py,sha256=5fwVAzgVsmxAzgoLxdC26l2ZE-m2bWj963xPNSDaQEQ,287
|
|
26
|
-
mesa/visualization/modules.py,sha256=pf6K3KECX51VNNqpFCm2EE5KV0A22UYmfXzTVXPnF_o,47
|
|
27
|
-
mesa-2.2.4.dist-info/METADATA,sha256=Ay9vvBwnAMzLgDbbKho9IALEkIal7VAZopk5Ehh_MxE,7148
|
|
28
|
-
mesa-2.2.4.dist-info/WHEEL,sha256=TJPnKdtrSue7xZ_AVGkp9YXcvDrobsjBds1du3Nx6dc,87
|
|
29
|
-
mesa-2.2.4.dist-info/entry_points.txt,sha256=IOcQtetGF8l4wHpOs_hGb19Rz-FS__BMXOJR10IBPsA,39
|
|
30
|
-
mesa-2.2.4.dist-info/licenses/LICENSE,sha256=OGUgret9fRrm8J3pdsPXETIjf0H8puK_Nmy970ZzT78,572
|
|
31
|
-
mesa-2.2.4.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|