Mesa 3.1.1__py3-none-any.whl → 3.1.3__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 +1 -1
- mesa/examples/advanced/pd_grid/analysis.ipynb +44 -89
- mesa/examples/advanced/wolf_sheep/agents.py +33 -1
- mesa/examples/basic/boid_flockers/agents.py +26 -38
- mesa/examples/basic/boid_flockers/app.py +6 -1
- mesa/examples/basic/boid_flockers/model.py +30 -37
- mesa/examples/basic/schelling/analysis.ipynb +42 -36
- mesa/examples/basic/schelling/app.py +1 -1
- mesa/examples/basic/schelling/model.py +3 -3
- mesa/experimental/__init__.py +2 -2
- mesa/experimental/cell_space/voronoi.py +1 -4
- mesa/experimental/continuous_space/__init__.py +8 -0
- mesa/experimental/continuous_space/continuous_space.py +273 -0
- mesa/experimental/continuous_space/continuous_space_agents.py +101 -0
- mesa/model.py +1 -1
- mesa/space.py +7 -0
- mesa/visualization/mpl_space_drawing.py +22 -13
- mesa/visualization/solara_viz.py +30 -7
- {mesa-3.1.1.dist-info → mesa-3.1.3.dist-info}/METADATA +5 -2
- {mesa-3.1.1.dist-info → mesa-3.1.3.dist-info}/RECORD +24 -21
- {mesa-3.1.1.dist-info → mesa-3.1.3.dist-info}/WHEEL +1 -1
- {mesa-3.1.1.dist-info → mesa-3.1.3.dist-info}/entry_points.txt +0 -0
- {mesa-3.1.1.dist-info → mesa-3.1.3.dist-info}/licenses/LICENSE +0 -0
- {mesa-3.1.1.dist-info → mesa-3.1.3.dist-info}/licenses/NOTICE +0 -0
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
"""Continuous space agents."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from itertools import compress
|
|
6
|
+
from typing import Protocol
|
|
7
|
+
|
|
8
|
+
import numpy as np
|
|
9
|
+
|
|
10
|
+
from mesa.agent import Agent
|
|
11
|
+
from mesa.experimental.continuous_space import ContinuousSpace
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class HasPositionProtocol(Protocol):
|
|
15
|
+
"""Protocol for continuous space position holders."""
|
|
16
|
+
|
|
17
|
+
position: np.ndarray
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class ContinuousSpaceAgent(Agent):
|
|
21
|
+
"""A continuous space agent.
|
|
22
|
+
|
|
23
|
+
Attributes:
|
|
24
|
+
space (ContinuousSpace): the continuous space in which the agent is located
|
|
25
|
+
position (np.ndarray): the position of the agent
|
|
26
|
+
|
|
27
|
+
"""
|
|
28
|
+
|
|
29
|
+
__slots__ = ["_mesa_index", "space"]
|
|
30
|
+
|
|
31
|
+
@property
|
|
32
|
+
def position(self) -> np.ndarray:
|
|
33
|
+
"""Position of the agent."""
|
|
34
|
+
return self.space.agent_positions[self.space._agent_to_index[self]]
|
|
35
|
+
|
|
36
|
+
@position.setter
|
|
37
|
+
def position(self, value: np.ndarray) -> None:
|
|
38
|
+
if not self.space.in_bounds(value):
|
|
39
|
+
if self.space.torus:
|
|
40
|
+
value = self.space.torus_correct(value)
|
|
41
|
+
else:
|
|
42
|
+
raise ValueError(f"point {value} is outside the bounds of the space")
|
|
43
|
+
|
|
44
|
+
self.space.agent_positions[self.space._agent_to_index[self]] = value
|
|
45
|
+
|
|
46
|
+
@property
|
|
47
|
+
def pos(self): # noqa: D102
|
|
48
|
+
# just here for compatibility with solara_viz.
|
|
49
|
+
return self.position
|
|
50
|
+
|
|
51
|
+
@pos.setter
|
|
52
|
+
def pos(self, value):
|
|
53
|
+
# just here for compatibility solara_viz.
|
|
54
|
+
pass
|
|
55
|
+
|
|
56
|
+
def __init__(self, space: ContinuousSpace, model):
|
|
57
|
+
"""Initialize a continuous space agent.
|
|
58
|
+
|
|
59
|
+
Args:
|
|
60
|
+
space: the continuous space in which the agent is located
|
|
61
|
+
model: the model to which the agent belongs
|
|
62
|
+
|
|
63
|
+
"""
|
|
64
|
+
super().__init__(model)
|
|
65
|
+
self.space: ContinuousSpace = space
|
|
66
|
+
self.space._add_agent(self)
|
|
67
|
+
# self.position[:] = np.nan
|
|
68
|
+
|
|
69
|
+
def remove(self) -> None:
|
|
70
|
+
"""Remove and delete the agent from the model and continuous space."""
|
|
71
|
+
super().remove()
|
|
72
|
+
self.space._remove_agent(self)
|
|
73
|
+
self._mesa_index = None
|
|
74
|
+
self.space = None
|
|
75
|
+
|
|
76
|
+
def get_neighbors_in_radius(
|
|
77
|
+
self, radius: float | int = 1
|
|
78
|
+
) -> tuple[list, np.ndarray]:
|
|
79
|
+
"""Get neighbors within radius.
|
|
80
|
+
|
|
81
|
+
Args:
|
|
82
|
+
radius: radius within which to look for neighbors
|
|
83
|
+
|
|
84
|
+
"""
|
|
85
|
+
agents, dists = self.space.get_agents_in_radius(self.position, radius=radius)
|
|
86
|
+
logical = np.asarray([agent is not self for agent in agents])
|
|
87
|
+
agents = list(compress(agents, logical))
|
|
88
|
+
return agents, dists[logical]
|
|
89
|
+
|
|
90
|
+
def get_nearest_neighbors(self, k: int = 1) -> tuple[list, np.ndarray]:
|
|
91
|
+
"""Get neighbors within radius.
|
|
92
|
+
|
|
93
|
+
Args:
|
|
94
|
+
k: the number of nearest neighbors to return
|
|
95
|
+
|
|
96
|
+
"""
|
|
97
|
+
# return includes self, so we need to get k+1
|
|
98
|
+
agents, dists = self.space.get_k_nearest_agents(self.position, k=k + 1)
|
|
99
|
+
logical = np.asarray([agent is not self for agent in agents])
|
|
100
|
+
agents = list(compress(agents, logical))
|
|
101
|
+
return agents, dists[logical]
|
mesa/model.py
CHANGED
|
@@ -94,7 +94,7 @@ class Model:
|
|
|
94
94
|
self._seed = seed # this allows for reproducing stdlib.random
|
|
95
95
|
|
|
96
96
|
try:
|
|
97
|
-
self.rng: np.random.Generator = np.random.default_rng(
|
|
97
|
+
self.rng: np.random.Generator = np.random.default_rng(seed)
|
|
98
98
|
except TypeError:
|
|
99
99
|
rng = self.random.randint(0, sys.maxsize)
|
|
100
100
|
self.rng: np.random.Generator = np.random.default_rng(rng)
|
mesa/space.py
CHANGED
|
@@ -1415,6 +1415,13 @@ class ContinuousSpace:
|
|
|
1415
1415
|
coordinates. i.e. if you are searching for the
|
|
1416
1416
|
neighbors of a given agent, True will include that
|
|
1417
1417
|
agent in the results.
|
|
1418
|
+
|
|
1419
|
+
Notes:
|
|
1420
|
+
If 1 or more agents are located on pos, include_center=False will remove all these agents
|
|
1421
|
+
from the results. So, if you really want to get the neighbors of a given agent,
|
|
1422
|
+
you should set include_center=True, and then filter the list of agents to remove
|
|
1423
|
+
the given agent (i.e., self when calling it from an agent).
|
|
1424
|
+
|
|
1418
1425
|
"""
|
|
1419
1426
|
if self._agent_points is None:
|
|
1420
1427
|
self._build_agent_cache()
|
|
@@ -20,7 +20,7 @@ from matplotlib.axes import Axes
|
|
|
20
20
|
from matplotlib.cm import ScalarMappable
|
|
21
21
|
from matplotlib.collections import PatchCollection
|
|
22
22
|
from matplotlib.colors import LinearSegmentedColormap, Normalize, to_rgba
|
|
23
|
-
from matplotlib.patches import RegularPolygon
|
|
23
|
+
from matplotlib.patches import Polygon, RegularPolygon
|
|
24
24
|
|
|
25
25
|
import mesa
|
|
26
26
|
from mesa.experimental.cell_space import (
|
|
@@ -117,7 +117,6 @@ def draw_space(
|
|
|
117
117
|
agent_portrayal: A callable that returns a dict specifying how to show the agent
|
|
118
118
|
propertylayer_portrayal: a dict specifying how to show propertylayer(s)
|
|
119
119
|
ax: the axes upon which to draw the plot
|
|
120
|
-
post_process: a callable called with the Axes instance
|
|
121
120
|
space_drawing_kwargs: any additional keyword arguments to be passed on to the underlying function for drawing the space.
|
|
122
121
|
|
|
123
122
|
Returns:
|
|
@@ -144,7 +143,10 @@ def draw_space(
|
|
|
144
143
|
draw_orthogonal_grid(space, agent_portrayal, ax=ax, **space_drawing_kwargs)
|
|
145
144
|
case mesa.space.NetworkGrid() | mesa.experimental.cell_space.Network():
|
|
146
145
|
draw_network(space, agent_portrayal, ax=ax, **space_drawing_kwargs)
|
|
147
|
-
case
|
|
146
|
+
case (
|
|
147
|
+
mesa.space.ContinuousSpace()
|
|
148
|
+
| mesa.experimental.continuous_space.ContinuousSpace()
|
|
149
|
+
):
|
|
148
150
|
draw_continuous_space(space, agent_portrayal, ax=ax)
|
|
149
151
|
case VoronoiGrid():
|
|
150
152
|
draw_voronoi_grid(space, agent_portrayal, ax=ax)
|
|
@@ -499,7 +501,11 @@ def draw_continuous_space(
|
|
|
499
501
|
|
|
500
502
|
|
|
501
503
|
def draw_voronoi_grid(
|
|
502
|
-
space: VoronoiGrid,
|
|
504
|
+
space: VoronoiGrid,
|
|
505
|
+
agent_portrayal: Callable,
|
|
506
|
+
ax: Axes | None = None,
|
|
507
|
+
draw_grid: bool = True,
|
|
508
|
+
**kwargs,
|
|
503
509
|
):
|
|
504
510
|
"""Visualize a voronoi grid.
|
|
505
511
|
|
|
@@ -507,6 +513,7 @@ def draw_voronoi_grid(
|
|
|
507
513
|
space: the space to visualize
|
|
508
514
|
agent_portrayal: a callable that is called with the agent and returns a dict
|
|
509
515
|
ax: a Matplotlib Axes instance. If none is provided a new figure and ax will be created using plt.subplots
|
|
516
|
+
draw_grid: whether to draw the grid or not
|
|
510
517
|
kwargs: additional keyword arguments passed to ax.scatter
|
|
511
518
|
|
|
512
519
|
Returns:
|
|
@@ -539,16 +546,18 @@ def draw_voronoi_grid(
|
|
|
539
546
|
|
|
540
547
|
_scatter(ax, arguments, **kwargs)
|
|
541
548
|
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
)
|
|
550
|
-
|
|
549
|
+
def setup_voroinoimesh(cells):
|
|
550
|
+
patches = []
|
|
551
|
+
for cell in cells:
|
|
552
|
+
patch = Polygon(cell.properties["polygon"])
|
|
553
|
+
patches.append(patch)
|
|
554
|
+
mesh = PatchCollection(
|
|
555
|
+
patches, edgecolor="k", facecolor=(1, 1, 1, 0), linestyle="dotted", lw=1
|
|
556
|
+
)
|
|
557
|
+
return mesh
|
|
551
558
|
|
|
559
|
+
if draw_grid:
|
|
560
|
+
ax.add_collection(setup_voroinoimesh(space.all_cells.cells))
|
|
552
561
|
return ax
|
|
553
562
|
|
|
554
563
|
|
mesa/visualization/solara_viz.py
CHANGED
|
@@ -52,6 +52,7 @@ def SolaraViz(
|
|
|
52
52
|
| Literal["default"] = "default",
|
|
53
53
|
*,
|
|
54
54
|
play_interval: int = 100,
|
|
55
|
+
render_interval: int = 1,
|
|
55
56
|
simulator: Simulator | None = None,
|
|
56
57
|
model_params=None,
|
|
57
58
|
name: str | None = None,
|
|
@@ -72,6 +73,8 @@ def SolaraViz(
|
|
|
72
73
|
Defaults to "default", which uses the default Altair space visualization.
|
|
73
74
|
play_interval (int, optional): Interval for playing the model steps in milliseconds.
|
|
74
75
|
This controls the speed of the model's automatic stepping. Defaults to 100 ms.
|
|
76
|
+
render_interval (int, optional): Controls how often plots are updated during a simulation,
|
|
77
|
+
allowing users to skip intermediate steps and update graphs less frequently.
|
|
75
78
|
simulator: A simulator that controls the model (optional)
|
|
76
79
|
model_params (dict, optional): Parameters for (re-)instantiating a model.
|
|
77
80
|
Can include user-adjustable parameters and fixed parameters. Defaults to None.
|
|
@@ -90,6 +93,8 @@ def SolaraViz(
|
|
|
90
93
|
model instance is provided, it will be converted to a reactive model using `solara.use_reactive`.
|
|
91
94
|
- The `play_interval` argument controls the speed of the model's automatic stepping. A lower
|
|
92
95
|
value results in faster stepping, while a higher value results in slower stepping.
|
|
96
|
+
- The `render_interval` argument determines how often plots are updated during simulation. Higher values
|
|
97
|
+
reduce update frequency,resulting in faster execution.
|
|
93
98
|
"""
|
|
94
99
|
if components == "default":
|
|
95
100
|
components = [components_altair.make_altair_space()]
|
|
@@ -103,7 +108,7 @@ def SolaraViz(
|
|
|
103
108
|
# set up reactive model_parameters shared by ModelCreator and ModelController
|
|
104
109
|
reactive_model_parameters = solara.use_reactive({})
|
|
105
110
|
reactive_play_interval = solara.use_reactive(play_interval)
|
|
106
|
-
|
|
111
|
+
reactive_render_interval = solara.use_reactive(render_interval)
|
|
107
112
|
with solara.AppBar():
|
|
108
113
|
solara.AppBarTitle(name if name else model.value.__class__.__name__)
|
|
109
114
|
|
|
@@ -117,11 +122,20 @@ def SolaraViz(
|
|
|
117
122
|
max=500,
|
|
118
123
|
step=10,
|
|
119
124
|
)
|
|
125
|
+
solara.SliderInt(
|
|
126
|
+
label="Render Interval (steps)",
|
|
127
|
+
value=reactive_render_interval,
|
|
128
|
+
on_value=lambda v: reactive_render_interval.set(v),
|
|
129
|
+
min=1,
|
|
130
|
+
max=100,
|
|
131
|
+
step=2,
|
|
132
|
+
)
|
|
120
133
|
if not isinstance(simulator, Simulator):
|
|
121
134
|
ModelController(
|
|
122
135
|
model,
|
|
123
136
|
model_parameters=reactive_model_parameters,
|
|
124
137
|
play_interval=reactive_play_interval,
|
|
138
|
+
render_interval=reactive_render_interval,
|
|
125
139
|
)
|
|
126
140
|
else:
|
|
127
141
|
SimulatorController(
|
|
@@ -129,6 +143,7 @@ def SolaraViz(
|
|
|
129
143
|
simulator,
|
|
130
144
|
model_parameters=reactive_model_parameters,
|
|
131
145
|
play_interval=reactive_play_interval,
|
|
146
|
+
render_interval=reactive_render_interval,
|
|
132
147
|
)
|
|
133
148
|
with solara.Card("Model Parameters"):
|
|
134
149
|
ModelCreator(
|
|
@@ -189,6 +204,7 @@ def ModelController(
|
|
|
189
204
|
*,
|
|
190
205
|
model_parameters: dict | solara.Reactive[dict] = None,
|
|
191
206
|
play_interval: int | solara.Reactive[int] = 100,
|
|
207
|
+
render_interval: int | solara.Reactive[int] = 1,
|
|
192
208
|
):
|
|
193
209
|
"""Create controls for model execution (step, play, pause, reset).
|
|
194
210
|
|
|
@@ -196,7 +212,7 @@ def ModelController(
|
|
|
196
212
|
model: Reactive model instance
|
|
197
213
|
model_parameters: Reactive parameters for (re-)instantiating a model.
|
|
198
214
|
play_interval: Interval for playing the model steps in milliseconds.
|
|
199
|
-
|
|
215
|
+
render_interval: Controls how often the plots are updated during simulation steps.Higher value reduce update frequency.
|
|
200
216
|
"""
|
|
201
217
|
playing = solara.use_reactive(False)
|
|
202
218
|
running = solara.use_reactive(True)
|
|
@@ -215,9 +231,12 @@ def ModelController(
|
|
|
215
231
|
|
|
216
232
|
@function_logger(__name__)
|
|
217
233
|
def do_step():
|
|
218
|
-
"""Advance the model by
|
|
219
|
-
|
|
234
|
+
"""Advance the model by the number of steps specified by the render_interval slider."""
|
|
235
|
+
for _ in range(render_interval.value):
|
|
236
|
+
model.value.step()
|
|
237
|
+
|
|
220
238
|
running.value = model.value.running
|
|
239
|
+
|
|
221
240
|
force_update()
|
|
222
241
|
|
|
223
242
|
@function_logger(__name__)
|
|
@@ -259,6 +278,7 @@ def SimulatorController(
|
|
|
259
278
|
*,
|
|
260
279
|
model_parameters: dict | solara.Reactive[dict] = None,
|
|
261
280
|
play_interval: int | solara.Reactive[int] = 100,
|
|
281
|
+
render_interval: int | solara.Reactive[int] = 1,
|
|
262
282
|
):
|
|
263
283
|
"""Create controls for model execution (step, play, pause, reset).
|
|
264
284
|
|
|
@@ -267,7 +287,11 @@ def SimulatorController(
|
|
|
267
287
|
simulator: Simulator instance
|
|
268
288
|
model_parameters: Reactive parameters for (re-)instantiating a model.
|
|
269
289
|
play_interval: Interval for playing the model steps in milliseconds.
|
|
290
|
+
render_interval: Controls how often the plots are updated during simulation steps.Higher values reduce update frequency.
|
|
270
291
|
|
|
292
|
+
Notes:
|
|
293
|
+
The `step button` increments the step by the value specified in the `render_interval` slider.
|
|
294
|
+
This behavior ensures synchronization between simulation steps and plot updates.
|
|
271
295
|
"""
|
|
272
296
|
playing = solara.use_reactive(False)
|
|
273
297
|
running = solara.use_reactive(True)
|
|
@@ -285,8 +309,8 @@ def SimulatorController(
|
|
|
285
309
|
)
|
|
286
310
|
|
|
287
311
|
def do_step():
|
|
288
|
-
"""Advance the model by
|
|
289
|
-
simulator.run_for(
|
|
312
|
+
"""Advance the model by the number of steps specified by the render_interval slider."""
|
|
313
|
+
simulator.run_for(render_interval.value)
|
|
290
314
|
running.value = model.value.running
|
|
291
315
|
force_update()
|
|
292
316
|
|
|
@@ -390,7 +414,6 @@ def ModelCreator(
|
|
|
390
414
|
or are dictionaries containing parameter details such as type, value, min, and max.
|
|
391
415
|
- The `seed` argument ensures reproducibility by setting the initial seed for the model's random number generator.
|
|
392
416
|
- The component provides an interface for adjusting user-defined parameters and reseeding the model.
|
|
393
|
-
|
|
394
417
|
"""
|
|
395
418
|
if model_parameters is None:
|
|
396
419
|
model_parameters = {}
|
|
@@ -1,11 +1,13 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: Mesa
|
|
3
|
-
Version: 3.1.
|
|
3
|
+
Version: 3.1.3
|
|
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
|
|
7
7
|
Author-email: Project Mesa Team <projectmesa@googlegroups.com>
|
|
8
8
|
License: Apache 2.0
|
|
9
|
+
License-File: LICENSE
|
|
10
|
+
License-File: NOTICE
|
|
9
11
|
Keywords: ABM,agent,based,model,modeling,multi-agent,simulation
|
|
10
12
|
Classifier: Development Status :: 3 - Alpha
|
|
11
13
|
Classifier: Intended Audience :: Science/Research
|
|
@@ -22,6 +24,7 @@ Classifier: Topic :: Scientific/Engineering :: Artificial Life
|
|
|
22
24
|
Requires-Python: >=3.11
|
|
23
25
|
Requires-Dist: numpy
|
|
24
26
|
Requires-Dist: pandas
|
|
27
|
+
Requires-Dist: scipy
|
|
25
28
|
Requires-Dist: tqdm
|
|
26
29
|
Provides-Extra: all
|
|
27
30
|
Requires-Dist: ipython; extra == 'all'
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
mesa/__init__.py,sha256=
|
|
1
|
+
mesa/__init__.py,sha256=cQpR402xBpOx0vJjUbQB8d6D9d2JK_ZpWkmWSlm4cWk,611
|
|
2
2
|
mesa/agent.py,sha256=4CXMOFA9KhvTypaV_OHZGqxOR4GVwyX4x8DOtQENUQA,26130
|
|
3
3
|
mesa/batchrunner.py,sha256=w8StV82F_7DAAVQc5V7_Ggp0EL1NYn__UcBE-Nwrgv4,7771
|
|
4
4
|
mesa/datacollection.py,sha256=8loT4pQsXcHArxHSsbRc7HTc2GP5gsEIeKFKr3xya4I,15991
|
|
5
5
|
mesa/mesa_logging.py,sha256=PEDqUaQ2Y4bkYBkrHVkGT0sF86gUdbSH1T3vCg3qQeE,4949
|
|
6
|
-
mesa/model.py,sha256=
|
|
7
|
-
mesa/space.py,sha256=
|
|
6
|
+
mesa/model.py,sha256=VkdBea_mkWcBMxMq-pwuU23UlI1gbG4TOIyqkBfeiFo,8354
|
|
7
|
+
mesa/space.py,sha256=MNCblKf862pdkoIAa-VpjaurmI8GJtb02W3q3QWFjTE,64458
|
|
8
8
|
mesa/examples/README.md,sha256=dNn8kv0BNQem3NNhO5mbOANQoK8UUYOo7rnkCFV9tnE,2882
|
|
9
9
|
mesa/examples/__init__.py,sha256=pyPWFRUxyYtQilJECbH7LY1eYBk8VB0Yg-_SbFEEvFA,825
|
|
10
10
|
mesa/examples/advanced/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -17,7 +17,7 @@ mesa/examples/advanced/epstein_civil_violence/model.py,sha256=fcTkjCRhEhDerDC1W_
|
|
|
17
17
|
mesa/examples/advanced/pd_grid/Readme.md,sha256=UVUQxZRFdfymCKDdQEn3ZEwgSqgp9cKJPsU8oZpLFnY,2367
|
|
18
18
|
mesa/examples/advanced/pd_grid/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
19
19
|
mesa/examples/advanced/pd_grid/agents.py,sha256=8JnezmnwxjcqAUAgXa1iWls0Nz4yBS-TJi1TSVcHbqM,1752
|
|
20
|
-
mesa/examples/advanced/pd_grid/analysis.ipynb,sha256=
|
|
20
|
+
mesa/examples/advanced/pd_grid/analysis.ipynb,sha256=TTSY7mZlIYPjPjpW7cxr7Gzpo-NKKEBpXX4_f0V6NfI,5432
|
|
21
21
|
mesa/examples/advanced/pd_grid/app.py,sha256=-_fTP7f_oITKHt7dDVJou7Oa7u7v_C4Ml5yw7D1sbx8,1457
|
|
22
22
|
mesa/examples/advanced/pd_grid/model.py,sha256=-ytTSW0a_TQGTQW02k7XKAMiMak_b2XkJUw5kkGNHMQ,2291
|
|
23
23
|
mesa/examples/advanced/sugarscape_g1mt/Readme.md,sha256=x3kKw1Rre2FPkNhGDLtdzeThmH089mxsGYUPZUeu26k,3595
|
|
@@ -29,15 +29,15 @@ mesa/examples/advanced/sugarscape_g1mt/sugar-map.txt,sha256=zZtGYciBPT4miZVnbVuo
|
|
|
29
29
|
mesa/examples/advanced/sugarscape_g1mt/tests.py,sha256=UNahmZTgLquSqmoi_9GcE3JP0qBHjkrHFZ15NMm0ce8,2517
|
|
30
30
|
mesa/examples/advanced/wolf_sheep/Readme.md,sha256=6zrtCg4Fb-hgQxqdLMpTkIYMwD6owCv8BMz_qn0N98Q,3165
|
|
31
31
|
mesa/examples/advanced/wolf_sheep/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
32
|
-
mesa/examples/advanced/wolf_sheep/agents.py,sha256=
|
|
32
|
+
mesa/examples/advanced/wolf_sheep/agents.py,sha256=lxk9nxDaIGxB7zJ0pIOF2PfOAee8lX-vG447Cklt7UQ,5090
|
|
33
33
|
mesa/examples/advanced/wolf_sheep/app.py,sha256=IIl-gDh1O3oYIvrXXGmKHbW5Iw3ZpCn691dGwKgyI3E,2508
|
|
34
34
|
mesa/examples/advanced/wolf_sheep/model.py,sha256=IUN1STm6jCGuzXo2sCF86r1U-dI63yhLhnI14tu9BSw,4567
|
|
35
35
|
mesa/examples/basic/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
36
36
|
mesa/examples/basic/boid_flockers/Readme.md,sha256=4KJinsLPtUciQSMzvaX3tU5r1HTUg3AFOFDKy73W5RE,894
|
|
37
37
|
mesa/examples/basic/boid_flockers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
38
|
-
mesa/examples/basic/boid_flockers/agents.py,sha256=
|
|
39
|
-
mesa/examples/basic/boid_flockers/app.py,sha256=
|
|
40
|
-
mesa/examples/basic/boid_flockers/model.py,sha256=
|
|
38
|
+
mesa/examples/basic/boid_flockers/agents.py,sha256=f9IpVMpuo6WPtMffLOqgKsxoG4syJt8-k9Njvh4fMN8,3232
|
|
39
|
+
mesa/examples/basic/boid_flockers/app.py,sha256=5y52V_PRENzNGkmV_-KB5ZQeUN589i1ntJW-AIgZD0s,1323
|
|
40
|
+
mesa/examples/basic/boid_flockers/model.py,sha256=hgYScacUAv6Yq240al41r9Iv3Iqbn4wfFVQEHyorJ3c,2981
|
|
41
41
|
mesa/examples/basic/boltzmann_wealth_model/Readme.md,sha256=wl1ylO9KWoTiuIJKOnk2FGdcmyVUqJ5wiSbVUa3WWAc,2725
|
|
42
42
|
mesa/examples/basic/boltzmann_wealth_model/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
43
43
|
mesa/examples/basic/boltzmann_wealth_model/agents.py,sha256=Jol2aspw--UtQn0EiReXVmlWtzpdC2o_YUTAyu1sDk4,1546
|
|
@@ -53,15 +53,15 @@ mesa/examples/basic/conways_game_of_life/st_app.py,sha256=9qz3o0pOuvLZR-_aPPVHN-
|
|
|
53
53
|
mesa/examples/basic/schelling/Readme.md,sha256=CRKBfYtnLJLlTKLsTRQ-7gsQRxVxDooOBN5uP8PEtaU,2296
|
|
54
54
|
mesa/examples/basic/schelling/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
55
55
|
mesa/examples/basic/schelling/agents.py,sha256=WdDM-BYeOUuIL_2U5rlZz4Rs_5orstHY2Z6G6zvQEyg,1224
|
|
56
|
-
mesa/examples/basic/schelling/analysis.ipynb,sha256=
|
|
57
|
-
mesa/examples/basic/schelling/app.py,sha256=
|
|
58
|
-
mesa/examples/basic/schelling/model.py,sha256=
|
|
56
|
+
mesa/examples/basic/schelling/analysis.ipynb,sha256=UMDoumvBFhZilwJhxl5Mou2bmDDqxguK5RdnoY2gkNc,5910
|
|
57
|
+
mesa/examples/basic/schelling/app.py,sha256=eqgqCu6_6jk1RrmT82e_AoEDMvy8eZ0OJnnlITpiBXQ,1067
|
|
58
|
+
mesa/examples/basic/schelling/model.py,sha256=ZNTK42pJnIJfsnqaI0ZXFxw9xtWPXkUMIemMr4uXmW8,2766
|
|
59
59
|
mesa/examples/basic/virus_on_network/Readme.md,sha256=qmXGx4Fo0tRBvJiiJ684bkWJPn2gcFaiikLwgc5APWI,2336
|
|
60
60
|
mesa/examples/basic/virus_on_network/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
61
61
|
mesa/examples/basic/virus_on_network/agents.py,sha256=a_WhqYblJlW6od67eXfU-nb7IMRyYpgxtf0le--VYoA,1975
|
|
62
62
|
mesa/examples/basic/virus_on_network/app.py,sha256=8I8VWQ7pBcOaNGyLDEO4IbNSTRy161-eWg-iEUVQ3-I,2553
|
|
63
63
|
mesa/examples/basic/virus_on_network/model.py,sha256=jQoCmvygwCvhUrlL0l7V8GcDLv94CgwtuK7DDGU8q8g,2813
|
|
64
|
-
mesa/experimental/__init__.py,sha256=
|
|
64
|
+
mesa/experimental/__init__.py,sha256=hSGXGvsVANvqhgA994HcLBLIRC2WhSF3e_w2gvoCMUo,943
|
|
65
65
|
mesa/experimental/cell_space/__init__.py,sha256=0A3YTen0Lk-e3Q73VEXK7N2UEHb9f50gW11H_jx7DXc,1744
|
|
66
66
|
mesa/experimental/cell_space/cell.py,sha256=Dl0ek7W_vgAZOp6zXBvkwYTG7E36OQ-4zZ5bW43mKtw,6600
|
|
67
67
|
mesa/experimental/cell_space/cell_agent.py,sha256=LOTLKR2To9hU-igKsauA5sikS7k8wgwlt-Pi0C7lGU0,4262
|
|
@@ -70,7 +70,10 @@ mesa/experimental/cell_space/discrete_space.py,sha256=qNGez9SV4E83Outs_12suuS0Zt
|
|
|
70
70
|
mesa/experimental/cell_space/grid.py,sha256=d-1S2iXijGkoJ9yc271pB8iXlzsX13usJjcjevCs_rU,10432
|
|
71
71
|
mesa/experimental/cell_space/network.py,sha256=ujN2dV1i9hcXh6H0s7gwTuPT6gh7BCaziOUYPCybQKk,1862
|
|
72
72
|
mesa/experimental/cell_space/property_layer.py,sha256=HFpBWOjI7PFU_K8VDb_pl9h62MftCBWL7PUKQNT3Ke8,17379
|
|
73
|
-
mesa/experimental/cell_space/voronoi.py,sha256=
|
|
73
|
+
mesa/experimental/cell_space/voronoi.py,sha256=FXJD8ci81Jil3FaL7ZFNfMPGvXvg3uym5Ooo1ZqKSKs,10199
|
|
74
|
+
mesa/experimental/continuous_space/__init__.py,sha256=JkCkL4zZpe8c0GHqw4huM2-uoGOYqrCyt7J1M454kFA,269
|
|
75
|
+
mesa/experimental/continuous_space/continuous_space.py,sha256=UcD-nsi5oEAJzf8ZI7BU26FYn6DdJzsW-dgXqaZIrQk,9530
|
|
76
|
+
mesa/experimental/continuous_space/continuous_space_agents.py,sha256=859ypIiWMgjknTsER0i8Y6aCWjMpw6MC5cfoKa6l_iA,3044
|
|
74
77
|
mesa/experimental/devs/__init__.py,sha256=wkDrpqQ3qHGqrsOSTD-UOj-qOw0oFgnCw_ZXr9xFs90,1200
|
|
75
78
|
mesa/experimental/devs/eventlist.py,sha256=6igPkHJt-syLcdpFV14_n6HGej2F1cM9giDQo85fHPw,7217
|
|
76
79
|
mesa/experimental/devs/simulator.py,sha256=UiVRIlNodSIveD2mS_8-vj0T_FulU8vhXxSxCfsK1Vc,12991
|
|
@@ -79,16 +82,16 @@ mesa/experimental/mesa_signals/mesa_signal.py,sha256=Vxo4gIV6a959MANL3RMANsGh0R9
|
|
|
79
82
|
mesa/experimental/mesa_signals/observable_collections.py,sha256=rHEj6BYxLHFFGzSdoDKAdtzJ6y-IHHfcP3qEDJJsY6Y,3917
|
|
80
83
|
mesa/experimental/mesa_signals/signals_util.py,sha256=fmq_FsIxsIvGjtmc4A9TGdBUtdliMHhEOpjRXivRDjA,1618
|
|
81
84
|
mesa/visualization/__init__.py,sha256=YW-oHEOTjbtDKD_TylAMtVnt8mrsz1Fw7ifdc4WeHxA,743
|
|
82
|
-
mesa/visualization/mpl_space_drawing.py,sha256=
|
|
83
|
-
mesa/visualization/solara_viz.py,sha256=
|
|
85
|
+
mesa/visualization/mpl_space_drawing.py,sha256=iqm1PYUUsmhUIraK8L9OTcTaDPDYQtlQCKtepREBA5c,20326
|
|
86
|
+
mesa/visualization/solara_viz.py,sha256=ItExWMLjg7rHb5RGlZx99YsuPhmC4i0ZCaY1MYzgqZ4,20931
|
|
84
87
|
mesa/visualization/user_param.py,sha256=Dl2WOwLYLf0pfLpabCZtIdFRyKZrK6Qtc3utZx5GPYg,2139
|
|
85
88
|
mesa/visualization/utils.py,sha256=lJHgRKF5BHLf72Tw3YpwyiWuRoIimaTKQ7xBCw_Rx3A,146
|
|
86
89
|
mesa/visualization/components/__init__.py,sha256=Bq3nrPikcaIo9BSs0O3zptWVLlUmAkLo3s0mEmpH1RE,3022
|
|
87
90
|
mesa/visualization/components/altair_components.py,sha256=wotpFFQgMY-ZR3lNVm_fRos-iDg0Wjnj6Tk67_7f1SQ,5847
|
|
88
91
|
mesa/visualization/components/matplotlib_components.py,sha256=xQETaFyHIfmL_9JwrLIgubuIQ7-pp7TMoXT1WMmozus,5441
|
|
89
|
-
mesa-3.1.
|
|
90
|
-
mesa-3.1.
|
|
91
|
-
mesa-3.1.
|
|
92
|
-
mesa-3.1.
|
|
93
|
-
mesa-3.1.
|
|
94
|
-
mesa-3.1.
|
|
92
|
+
mesa-3.1.3.dist-info/METADATA,sha256=4-LYctEQ5WYoTPl1jXxSOrIn6vfKV4lLTR_l7byd7E8,9970
|
|
93
|
+
mesa-3.1.3.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
94
|
+
mesa-3.1.3.dist-info/entry_points.txt,sha256=IOcQtetGF8l4wHpOs_hGb19Rz-FS__BMXOJR10IBPsA,39
|
|
95
|
+
mesa-3.1.3.dist-info/licenses/LICENSE,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
|
|
96
|
+
mesa-3.1.3.dist-info/licenses/NOTICE,sha256=GbsWoK0QWv1JyZ_xer2s-jNilv0RtWl-0UrtlJANHPg,578
|
|
97
|
+
mesa-3.1.3.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|