Mesa 3.0.0b1__py3-none-any.whl → 3.0.0rc0__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.

Files changed (111) hide show
  1. mesa/__init__.py +1 -3
  2. mesa/agent.py +23 -8
  3. mesa/batchrunner.py +26 -1
  4. {examples → mesa/examples}/README.md +11 -11
  5. mesa/examples/__init__.py +21 -0
  6. {examples → mesa/examples}/advanced/epstein_civil_violence/Readme.md +3 -2
  7. examples/advanced/epstein_civil_violence/epstein_civil_violence/agent.py → mesa/examples/advanced/epstein_civil_violence/agents.py +44 -38
  8. mesa/examples/advanced/epstein_civil_violence/app.py +73 -0
  9. mesa/examples/advanced/epstein_civil_violence/model.py +114 -0
  10. examples/advanced/pd_grid/readme.md → mesa/examples/advanced/pd_grid/Readme.md +4 -3
  11. mesa/examples/advanced/pd_grid/app.py +54 -0
  12. {examples/advanced/pd_grid → mesa/examples/advanced}/pd_grid/model.py +1 -2
  13. {examples → mesa/examples}/advanced/sugarscape_g1mt/Readme.md +6 -29
  14. examples/advanced/sugarscape_g1mt/sugarscape_g1mt/trader_agents.py → mesa/examples/advanced/sugarscape_g1mt/agents.py +26 -3
  15. {examples → mesa/examples}/advanced/sugarscape_g1mt/app.py +19 -18
  16. {examples/advanced/sugarscape_g1mt → mesa/examples/advanced}/sugarscape_g1mt/model.py +6 -6
  17. {examples → mesa/examples}/advanced/sugarscape_g1mt/tests.py +3 -6
  18. mesa/examples/advanced/wolf_sheep/app.py +84 -0
  19. {examples/advanced/wolf_sheep → mesa/examples/advanced}/wolf_sheep/model.py +9 -8
  20. mesa/examples/basic/boid_flockers/Readme.md +22 -0
  21. {examples → mesa/examples}/basic/boid_flockers/app.py +3 -4
  22. {examples → mesa/examples}/basic/boid_flockers/model.py +1 -2
  23. {examples → mesa/examples}/basic/boltzmann_wealth_model/Readme.md +1 -5
  24. mesa/examples/basic/boltzmann_wealth_model/__init__.py +0 -0
  25. {examples → mesa/examples}/basic/boltzmann_wealth_model/app.py +15 -12
  26. {examples → mesa/examples}/basic/boltzmann_wealth_model/model.py +3 -4
  27. {examples → mesa/examples}/basic/conways_game_of_life/Readme.md +11 -7
  28. mesa/examples/basic/conways_game_of_life/__init__.py +0 -0
  29. {examples → mesa/examples}/basic/conways_game_of_life/agents.py +8 -8
  30. mesa/examples/basic/conways_game_of_life/app.py +51 -0
  31. {examples → mesa/examples}/basic/conways_game_of_life/model.py +3 -4
  32. {examples → mesa/examples}/basic/conways_game_of_life/st_app.py +2 -1
  33. examples/basic/schelling/README.md → mesa/examples/basic/schelling/Readme.md +2 -9
  34. mesa/examples/basic/schelling/__init__.py +0 -0
  35. {examples → mesa/examples}/basic/schelling/app.py +6 -7
  36. {examples → mesa/examples}/basic/schelling/model.py +1 -2
  37. mesa/examples/basic/virus_on_network/__init__.py +0 -0
  38. mesa/examples/basic/virus_on_network/app.py +114 -0
  39. {examples → mesa/examples}/basic/virus_on_network/model.py +4 -7
  40. mesa/experimental/cell_space/discrete_space.py +6 -0
  41. mesa/experimental/devs/eventlist.py +6 -0
  42. mesa/model.py +13 -0
  43. mesa/space.py +70 -35
  44. mesa/visualization/__init__.py +16 -5
  45. mesa/visualization/components/__init__.py +83 -0
  46. mesa/visualization/components/altair_components.py +188 -0
  47. mesa/visualization/components/matplotlib_components.py +176 -0
  48. mesa/visualization/mpl_space_drawing.py +558 -0
  49. mesa/visualization/solara_viz.py +30 -20
  50. {mesa-3.0.0b1.dist-info → mesa-3.0.0rc0.dist-info}/METADATA +1 -3
  51. mesa-3.0.0rc0.dist-info/RECORD +95 -0
  52. examples/advanced/epstein_civil_violence/epstein_civil_violence/model.py +0 -146
  53. examples/advanced/epstein_civil_violence/epstein_civil_violence/portrayal.py +0 -33
  54. examples/advanced/epstein_civil_violence/epstein_civil_violence/server.py +0 -81
  55. examples/advanced/epstein_civil_violence/requirements.txt +0 -3
  56. examples/advanced/epstein_civil_violence/run.py +0 -3
  57. examples/advanced/pd_grid/pd_grid/portrayal.py +0 -19
  58. examples/advanced/pd_grid/pd_grid/server.py +0 -21
  59. examples/advanced/pd_grid/requirements.txt +0 -3
  60. examples/advanced/pd_grid/run.py +0 -3
  61. examples/advanced/sugarscape_g1mt/requirements.txt +0 -6
  62. examples/advanced/sugarscape_g1mt/run.py +0 -105
  63. examples/advanced/sugarscape_g1mt/sugarscape_g1mt/resource_agents.py +0 -26
  64. examples/advanced/sugarscape_g1mt/sugarscape_g1mt/server.py +0 -61
  65. examples/advanced/wolf_sheep/requirements.txt +0 -1
  66. examples/advanced/wolf_sheep/run.py +0 -3
  67. examples/advanced/wolf_sheep/wolf_sheep/resources/sheep.png +0 -0
  68. examples/advanced/wolf_sheep/wolf_sheep/resources/wolf.png +0 -0
  69. examples/advanced/wolf_sheep/wolf_sheep/server.py +0 -78
  70. examples/basic/__init__.py +0 -13
  71. examples/basic/boid_flockers/Readme.md +0 -43
  72. examples/basic/conways_game_of_life/portrayal.py +0 -18
  73. examples/basic/conways_game_of_life/requirements.txt +0 -1
  74. examples/basic/conways_game_of_life/server.py +0 -11
  75. examples/basic/virus_on_network/app.py +0 -133
  76. mesa/cookiecutter-mesa/cookiecutter.json +0 -8
  77. mesa/cookiecutter-mesa/hooks/post_gen_project.py +0 -13
  78. mesa/cookiecutter-mesa/{{cookiecutter.snake}}/README.md +0 -4
  79. mesa/cookiecutter-mesa/{{cookiecutter.snake}}/app.pytemplate +0 -27
  80. mesa/cookiecutter-mesa/{{cookiecutter.snake}}/setup.pytemplate +0 -11
  81. mesa/cookiecutter-mesa/{{cookiecutter.snake}}/{{cookiecutter.snake}}/__init__.py +0 -1
  82. mesa/cookiecutter-mesa/{{cookiecutter.snake}}/{{cookiecutter.snake}}/model.pytemplate +0 -60
  83. mesa/examples.py +0 -3
  84. mesa/main.py +0 -65
  85. mesa/visualization/components/altair.py +0 -88
  86. mesa/visualization/components/matplotlib.py +0 -342
  87. mesa-3.0.0b1.dist-info/RECORD +0 -114
  88. {examples → mesa/examples/advanced}/__init__.py +0 -0
  89. {examples → mesa/examples}/advanced/epstein_civil_violence/Epstein Civil Violence.ipynb +0 -0
  90. {examples/advanced → mesa/examples/advanced/epstein_civil_violence}/__init__.py +0 -0
  91. {examples/advanced/epstein_civil_violence/epstein_civil_violence → mesa/examples/advanced/pd_grid}/__init__.py +0 -0
  92. /examples/advanced/pd_grid/pd_grid/agent.py → /mesa/examples/advanced/pd_grid/agents.py +0 -0
  93. {examples → mesa/examples}/advanced/pd_grid/analysis.ipynb +0 -0
  94. {examples/advanced/pd_grid/pd_grid → mesa/examples/advanced/sugarscape_g1mt}/__init__.py +0 -0
  95. {examples/advanced/sugarscape_g1mt → mesa/examples/advanced}/sugarscape_g1mt/sugar-map.txt +0 -0
  96. {examples → mesa/examples}/advanced/wolf_sheep/Readme.md +0 -0
  97. {examples/advanced/sugarscape_g1mt/sugarscape_g1mt → mesa/examples/advanced/wolf_sheep}/__init__.py +0 -0
  98. {examples/advanced/wolf_sheep → mesa/examples/advanced}/wolf_sheep/agents.py +0 -0
  99. {examples/advanced/wolf_sheep → mesa/examples/basic}/__init__.py +0 -0
  100. {examples/advanced/wolf_sheep/wolf_sheep → mesa/examples/basic/boid_flockers}/__init__.py +0 -0
  101. {examples → mesa/examples}/basic/boid_flockers/agents.py +0 -0
  102. {examples → mesa/examples}/basic/boltzmann_wealth_model/agents.py +0 -0
  103. {examples → mesa/examples}/basic/boltzmann_wealth_model/st_app.py +0 -0
  104. {examples → mesa/examples}/basic/schelling/agents.py +0 -0
  105. {examples → mesa/examples}/basic/schelling/analysis.ipynb +0 -0
  106. /examples/basic/virus_on_network/README.md → /mesa/examples/basic/virus_on_network/Readme.md +0 -0
  107. {examples → mesa/examples}/basic/virus_on_network/agents.py +0 -0
  108. {mesa-3.0.0b1.dist-info → mesa-3.0.0rc0.dist-info}/WHEEL +0 -0
  109. {mesa-3.0.0b1.dist-info → mesa-3.0.0rc0.dist-info}/entry_points.txt +0 -0
  110. {mesa-3.0.0b1.dist-info → mesa-3.0.0rc0.dist-info}/licenses/LICENSE +0 -0
  111. {mesa-3.0.0b1.dist-info → mesa-3.0.0rc0.dist-info}/licenses/NOTICE +0 -0
@@ -1,342 +0,0 @@
1
- """Matplotlib based solara components for visualization MESA spaces and plots."""
2
-
3
- import warnings
4
-
5
- import matplotlib.pyplot as plt
6
- import networkx as nx
7
- import numpy as np
8
- import solara
9
- from matplotlib.cm import ScalarMappable
10
- from matplotlib.colors import LinearSegmentedColormap, Normalize, to_rgba
11
- from matplotlib.figure import Figure
12
-
13
- import mesa
14
- from mesa.experimental.cell_space import VoronoiGrid
15
- from mesa.space import PropertyLayer
16
- from mesa.visualization.utils import update_counter
17
-
18
-
19
- def make_space_matplotlib(agent_portrayal=None, propertylayer_portrayal=None):
20
- """Create a Matplotlib-based space visualization component.
21
-
22
- Args:
23
- agent_portrayal (function): Function to portray agents
24
- propertylayer_portrayal (dict): Dictionary of PropertyLayer portrayal specifications
25
-
26
- Returns:
27
- function: A function that creates a SpaceMatplotlib component
28
- """
29
- if agent_portrayal is None:
30
-
31
- def agent_portrayal(a):
32
- return {"id": a.unique_id}
33
-
34
- def MakeSpaceMatplotlib(model):
35
- return SpaceMatplotlib(model, agent_portrayal, propertylayer_portrayal)
36
-
37
- return MakeSpaceMatplotlib
38
-
39
-
40
- @solara.component
41
- def SpaceMatplotlib(
42
- model,
43
- agent_portrayal,
44
- propertylayer_portrayal,
45
- dependencies: list[any] | None = None,
46
- ):
47
- """Create a Matplotlib-based space visualization component."""
48
- update_counter.get()
49
- space_fig = Figure()
50
- space_ax = space_fig.subplots()
51
- space = getattr(model, "grid", None)
52
- if space is None:
53
- space = getattr(model, "space", None)
54
-
55
- if isinstance(space, mesa.space._Grid):
56
- _draw_grid(space, space_ax, agent_portrayal, propertylayer_portrayal, model)
57
- elif isinstance(space, mesa.space.ContinuousSpace):
58
- _draw_continuous_space(space, space_ax, agent_portrayal, model)
59
- elif isinstance(space, mesa.space.NetworkGrid):
60
- _draw_network_grid(space, space_ax, agent_portrayal)
61
- elif isinstance(space, VoronoiGrid):
62
- _draw_voronoi(space, space_ax, agent_portrayal)
63
- elif space is None and propertylayer_portrayal:
64
- draw_property_layers(space_ax, space, propertylayer_portrayal, model)
65
-
66
- solara.FigureMatplotlib(
67
- space_fig, format="png", bbox_inches="tight", dependencies=dependencies
68
- )
69
-
70
-
71
- def draw_property_layers(ax, space, propertylayer_portrayal, model):
72
- """Draw PropertyLayers on the given axes.
73
-
74
- Args:
75
- ax (matplotlib.axes.Axes): The axes to draw on.
76
- space (mesa.space._Grid): The space containing the PropertyLayers.
77
- propertylayer_portrayal (dict): Dictionary of PropertyLayer portrayal specifications.
78
- model (mesa.Model): The model instance.
79
- """
80
- for layer_name, portrayal in propertylayer_portrayal.items():
81
- layer = getattr(model, layer_name, None)
82
- if not isinstance(layer, PropertyLayer):
83
- continue
84
-
85
- data = layer.data.astype(float) if layer.data.dtype == bool else layer.data
86
- width, height = data.shape if space is None else (space.width, space.height)
87
-
88
- if space and data.shape != (width, height):
89
- warnings.warn(
90
- f"Layer {layer_name} dimensions ({data.shape}) do not match space dimensions ({width}, {height}).",
91
- UserWarning,
92
- stacklevel=2,
93
- )
94
-
95
- # Get portrayal properties, or use defaults
96
- alpha = portrayal.get("alpha", 1)
97
- vmin = portrayal.get("vmin", np.min(data))
98
- vmax = portrayal.get("vmax", np.max(data))
99
- colorbar = portrayal.get("colorbar", True)
100
-
101
- # Draw the layer
102
- if "color" in portrayal:
103
- rgba_color = to_rgba(portrayal["color"])
104
- normalized_data = (data - vmin) / (vmax - vmin)
105
- rgba_data = np.full((*data.shape, 4), rgba_color)
106
- rgba_data[..., 3] *= normalized_data * alpha
107
- rgba_data = np.clip(rgba_data, 0, 1)
108
- cmap = LinearSegmentedColormap.from_list(
109
- layer_name, [(0, 0, 0, 0), (*rgba_color[:3], alpha)]
110
- )
111
- im = ax.imshow(
112
- rgba_data.transpose(1, 0, 2),
113
- extent=(0, width, 0, height),
114
- origin="lower",
115
- )
116
- if colorbar:
117
- norm = Normalize(vmin=vmin, vmax=vmax)
118
- sm = ScalarMappable(norm=norm, cmap=cmap)
119
- sm.set_array([])
120
- ax.figure.colorbar(sm, ax=ax, orientation="vertical")
121
-
122
- elif "colormap" in portrayal:
123
- cmap = portrayal.get("colormap", "viridis")
124
- if isinstance(cmap, list):
125
- cmap = LinearSegmentedColormap.from_list(layer_name, cmap)
126
- im = ax.imshow(
127
- data.T,
128
- cmap=cmap,
129
- alpha=alpha,
130
- vmin=vmin,
131
- vmax=vmax,
132
- extent=(0, width, 0, height),
133
- origin="lower",
134
- )
135
- if colorbar:
136
- plt.colorbar(im, ax=ax, label=layer_name)
137
- else:
138
- raise ValueError(
139
- f"PropertyLayer {layer_name} portrayal must include 'color' or 'colormap'."
140
- )
141
-
142
-
143
- def _draw_grid(space, space_ax, agent_portrayal, propertylayer_portrayal, model):
144
- if propertylayer_portrayal:
145
- draw_property_layers(space_ax, space, propertylayer_portrayal, model)
146
-
147
- agent_data = _get_agent_data(space, agent_portrayal)
148
-
149
- space_ax.set_xlim(0, space.width)
150
- space_ax.set_ylim(0, space.height)
151
- _split_and_scatter(agent_data, space_ax)
152
-
153
- # Draw grid lines
154
- for x in range(space.width + 1):
155
- space_ax.axvline(x, color="gray", linestyle=":")
156
- for y in range(space.height + 1):
157
- space_ax.axhline(y, color="gray", linestyle=":")
158
-
159
-
160
- def _get_agent_data(space, agent_portrayal):
161
- """Helper function to get agent data for visualization."""
162
- x, y, s, c, m = [], [], [], [], []
163
- for agents, pos in space.coord_iter():
164
- if not agents:
165
- continue
166
- if not isinstance(agents, list):
167
- agents = [agents] # noqa PLW2901
168
- for agent in agents:
169
- data = agent_portrayal(agent)
170
- x.append(pos[0] + 0.5) # Center the agent in the cell
171
- y.append(pos[1] + 0.5) # Center the agent in the cell
172
- default_size = (180 / max(space.width, space.height)) ** 2
173
- s.append(data.get("size", default_size))
174
- c.append(data.get("color", "tab:blue"))
175
- m.append(data.get("shape", "o"))
176
- return {"x": x, "y": y, "s": s, "c": c, "m": m}
177
-
178
-
179
- def _split_and_scatter(portray_data, space_ax):
180
- """Helper function to split and scatter agent data."""
181
- for marker in set(portray_data["m"]):
182
- mask = [m == marker for m in portray_data["m"]]
183
- space_ax.scatter(
184
- [x for x, show in zip(portray_data["x"], mask) if show],
185
- [y for y, show in zip(portray_data["y"], mask) if show],
186
- s=[s for s, show in zip(portray_data["s"], mask) if show],
187
- c=[c for c, show in zip(portray_data["c"], mask) if show],
188
- marker=marker,
189
- )
190
-
191
-
192
- def _draw_network_grid(space, space_ax, agent_portrayal):
193
- graph = space.G
194
- pos = nx.spring_layout(graph, seed=0)
195
- nx.draw(
196
- graph,
197
- ax=space_ax,
198
- pos=pos,
199
- **agent_portrayal(graph),
200
- )
201
-
202
-
203
- def _draw_continuous_space(space, space_ax, agent_portrayal, model):
204
- def portray(space):
205
- x = []
206
- y = []
207
- s = [] # size
208
- c = [] # color
209
- m = [] # shape
210
- for agent in space._agent_to_index:
211
- data = agent_portrayal(agent)
212
- _x, _y = agent.pos
213
- x.append(_x)
214
- y.append(_y)
215
-
216
- # This is matplotlib's default marker size
217
- default_size = 20
218
- size = data.get("size", default_size)
219
- s.append(size)
220
- color = data.get("color", "tab:blue")
221
- c.append(color)
222
- mark = data.get("shape", "o")
223
- m.append(mark)
224
- return {"x": x, "y": y, "s": s, "c": c, "m": m}
225
-
226
- # Determine border style based on space.torus
227
- border_style = "solid" if not space.torus else (0, (5, 10))
228
-
229
- # Set the border of the plot
230
- for spine in space_ax.spines.values():
231
- spine.set_linewidth(1.5)
232
- spine.set_color("black")
233
- spine.set_linestyle(border_style)
234
-
235
- width = space.x_max - space.x_min
236
- x_padding = width / 20
237
- height = space.y_max - space.y_min
238
- y_padding = height / 20
239
- space_ax.set_xlim(space.x_min - x_padding, space.x_max + x_padding)
240
- space_ax.set_ylim(space.y_min - y_padding, space.y_max + y_padding)
241
-
242
- # Portray and scatter the agents in the space
243
- _split_and_scatter(portray(space), space_ax)
244
-
245
-
246
- def _draw_voronoi(space, space_ax, agent_portrayal):
247
- def portray(g):
248
- x = []
249
- y = []
250
- s = [] # size
251
- c = [] # color
252
-
253
- for cell in g.all_cells:
254
- for agent in cell.agents:
255
- data = agent_portrayal(agent)
256
- x.append(cell.coordinate[0])
257
- y.append(cell.coordinate[1])
258
- if "size" in data:
259
- s.append(data["size"])
260
- if "color" in data:
261
- c.append(data["color"])
262
- out = {"x": x, "y": y}
263
- out["s"] = s
264
- if len(c) > 0:
265
- out["c"] = c
266
-
267
- return out
268
-
269
- x_list = [i[0] for i in space.centroids_coordinates]
270
- y_list = [i[1] for i in space.centroids_coordinates]
271
- x_max = max(x_list)
272
- x_min = min(x_list)
273
- y_max = max(y_list)
274
- y_min = min(y_list)
275
-
276
- width = x_max - x_min
277
- x_padding = width / 20
278
- height = y_max - y_min
279
- y_padding = height / 20
280
- space_ax.set_xlim(x_min - x_padding, x_max + x_padding)
281
- space_ax.set_ylim(y_min - y_padding, y_max + y_padding)
282
- space_ax.scatter(**portray(space))
283
-
284
- for cell in space.all_cells:
285
- polygon = cell.properties["polygon"]
286
- space_ax.fill(
287
- *zip(*polygon),
288
- alpha=min(1, cell.properties[space.cell_coloring_property]),
289
- c="red",
290
- ) # Plot filled polygon
291
- space_ax.plot(*zip(*polygon), color="black") # Plot polygon edges in black
292
-
293
-
294
- def make_plot_measure(measure: str | dict[str, str] | list[str] | tuple[str]):
295
- """Create a plotting function for a specified measure.
296
-
297
- Args:
298
- measure (str | dict[str, str] | list[str] | tuple[str]): Measure(s) to plot.
299
-
300
- Returns:
301
- function: A function that creates a PlotMatplotlib component.
302
- """
303
-
304
- def MakePlotMeasure(model):
305
- return PlotMatplotlib(model, measure)
306
-
307
- return MakePlotMeasure
308
-
309
-
310
- @solara.component
311
- def PlotMatplotlib(model, measure, dependencies: list[any] | None = None):
312
- """Create a Matplotlib-based plot for a measure or measures.
313
-
314
- Args:
315
- model (mesa.Model): The model instance.
316
- measure (str | dict[str, str] | list[str] | tuple[str]): Measure(s) to plot.
317
- dependencies (list[any] | None): Optional dependencies for the plot.
318
-
319
- Returns:
320
- solara.FigureMatplotlib: A component for rendering the plot.
321
- """
322
- update_counter.get()
323
- fig = Figure()
324
- ax = fig.subplots()
325
- df = model.datacollector.get_model_vars_dataframe()
326
- if isinstance(measure, str):
327
- ax.plot(df.loc[:, measure])
328
- ax.set_ylabel(measure)
329
- elif isinstance(measure, dict):
330
- for m, color in measure.items():
331
- ax.plot(df.loc[:, m], label=m, color=color)
332
- ax.legend(loc="best")
333
- elif isinstance(measure, list | tuple):
334
- for m in measure:
335
- ax.plot(df.loc[:, m], label=m)
336
- ax.legend(loc="best")
337
- ax.set_xlabel("Step")
338
- # Set integer x axis
339
- ax.xaxis.set_major_locator(plt.MaxNLocator(integer=True))
340
- solara.FigureMatplotlib(
341
- fig, format="png", bbox_inches="tight", dependencies=dependencies
342
- )
@@ -1,114 +0,0 @@
1
- examples/README.md,sha256=-H6ECbl2bqkAK3PKz6ixlm9pN13f-CyKfNssm2Kbyw0,2810
2
- examples/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
- examples/advanced/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
- examples/advanced/epstein_civil_violence/Epstein Civil Violence.ipynb,sha256=yh50ZAK2BVJyJIKsQTTxywnasqWn1IiQUVrwmZKue4w,29032
5
- examples/advanced/epstein_civil_violence/Readme.md,sha256=X3VHD2oI43QEeNd2_PzcYSK1PQMXwJHipluZtud7hx4,1891
6
- examples/advanced/epstein_civil_violence/requirements.txt,sha256=wGbc4N4Ald5cHmssu6QROK9XwbFlWPAiE3U0dE4qrjs,29
7
- examples/advanced/epstein_civil_violence/run.py,sha256=pGq0Y8_T_1shBU8t4ohJjHEun2rLrtD8AnffIArgKUg,83
8
- examples/advanced/epstein_civil_violence/epstein_civil_violence/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
9
- examples/advanced/epstein_civil_violence/epstein_civil_violence/agent.py,sha256=R1Nu-_c_qBPCvr1vl6GgamOP4AUV9GJdcF3V7frAgdY,5676
10
- examples/advanced/epstein_civil_violence/epstein_civil_violence/model.py,sha256=Rf6UuypdkER85V3uX9eVsWvwG7FitL0-biVSIj6227s,5100
11
- examples/advanced/epstein_civil_violence/epstein_civil_violence/portrayal.py,sha256=Ob9wWMwMtTEp52zSiGoNVoowBOtbN8neHtU73OyqLuU,804
12
- examples/advanced/epstein_civil_violence/epstein_civil_violence/server.py,sha256=26Yrf_tuPC1V1iLbbEZT1AK4x9lhRe0EKu5yOGWETR8,2233
13
- examples/advanced/pd_grid/analysis.ipynb,sha256=ReYtRe2JVyCCXoMBONvynXDQ_eGtQSWhNcuJY3CYTTI,82323
14
- examples/advanced/pd_grid/readme.md,sha256=teHdk3retAgsLYiJ3BNPeH0Jj5vYVk3drV-OPeT4hQI,2334
15
- examples/advanced/pd_grid/requirements.txt,sha256=wGbc4N4Ald5cHmssu6QROK9XwbFlWPAiE3U0dE4qrjs,29
16
- examples/advanced/pd_grid/run.py,sha256=XHBRcsV1TkxDucGqpEujwzZRWefP7UnYux2mJ-ZE1FI,68
17
- examples/advanced/pd_grid/pd_grid/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
18
- examples/advanced/pd_grid/pd_grid/agent.py,sha256=DzGj4LZUjV0xMQAwkRsv2Aoap1cUvLscJswfA1PdVDs,1716
19
- examples/advanced/pd_grid/pd_grid/model.py,sha256=xLYg7aGYrTqdxSRH4EsuvjMixrbDbMPTlv-54zlSKAI,2295
20
- examples/advanced/pd_grid/pd_grid/portrayal.py,sha256=bm1966HZTZsbaukEAiCVd4LiZGNS5wsKnf4vygNf9a8,561
21
- examples/advanced/pd_grid/pd_grid/server.py,sha256=mgjFSVvGl00WwA5P3lOuEGTsnStUWigAcJ-0Ixbk1p0,531
22
- examples/advanced/sugarscape_g1mt/Readme.md,sha256=EQTefsVYNVM_J82Bf4BSHwEA7rAcF6j7TFTY99XSsuw,4126
23
- examples/advanced/sugarscape_g1mt/app.py,sha256=PSLY6nPWQ2KGz809-FlMrUp5mS_Yrh09CRUf8hR9yGM,1946
24
- examples/advanced/sugarscape_g1mt/requirements.txt,sha256=qOAQy-dhycq2AqbbIWY_v3IeSbehPyzBjqrrPE4KnWA,51
25
- examples/advanced/sugarscape_g1mt/run.py,sha256=LpepAdiG2ee3Ne2Ce1feamAYt43MdRz6MyZ14MdQ7_M,2940
26
- examples/advanced/sugarscape_g1mt/tests.py,sha256=y8s88SymYtul0OE4g6YVElm0rbZ7wq5AEUUvn8WbpJU,2582
27
- examples/advanced/sugarscape_g1mt/sugarscape_g1mt/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
28
- examples/advanced/sugarscape_g1mt/sugarscape_g1mt/model.py,sha256=MAQp3LIC0yiJBmGsWmuv7-UFc39W_R2n2MXyjNeNk7I,6038
29
- examples/advanced/sugarscape_g1mt/sugarscape_g1mt/resource_agents.py,sha256=PJRJv3odUCJT93iwpulxP9p-IL36sCu8KMQA8k3dWG8,789
30
- examples/advanced/sugarscape_g1mt/sugarscape_g1mt/server.py,sha256=oT70ARLGPW8SuyEH2PBYPGna0JQgzyqX7NFdgLxXbRM,1697
31
- examples/advanced/sugarscape_g1mt/sugarscape_g1mt/sugar-map.txt,sha256=zZtGYciBPT4miZVnbVuoQ5TugTmGrbDWV9yb5KH6tnU,5000
32
- examples/advanced/sugarscape_g1mt/sugarscape_g1mt/trader_agents.py,sha256=oWOxvKd67bCis2MPhaLEF8_YZZ4If40y1anEo8oJkhA,9473
33
- examples/advanced/wolf_sheep/Readme.md,sha256=6zrtCg4Fb-hgQxqdLMpTkIYMwD6owCv8BMz_qn0N98Q,3165
34
- examples/advanced/wolf_sheep/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
35
- examples/advanced/wolf_sheep/requirements.txt,sha256=RiDVcvMXkHZ6u1mwimddgbae3h9ngQGDnhNEGTgMTXE,10
36
- examples/advanced/wolf_sheep/run.py,sha256=GGoA95RIlaaVBGfdMcn_MPTEUTiGj1BzVETgLUnxOUU,71
37
- examples/advanced/wolf_sheep/wolf_sheep/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
38
- examples/advanced/wolf_sheep/wolf_sheep/agents.py,sha256=UocDCsKmXkWxt0-ToVIOhBjX-amYwMtZbHN8U2AolFI,3068
39
- examples/advanced/wolf_sheep/wolf_sheep/model.py,sha256=VAFqDNGhUzdKCR4Fajwnq6KMXsoLorw6XatBQNvIDCw,4416
40
- examples/advanced/wolf_sheep/wolf_sheep/server.py,sha256=vzb2l1dtEjR2qnoyHmSoGhj2o8GeB8nCxPe5DcR7Wug,2556
41
- examples/advanced/wolf_sheep/wolf_sheep/resources/sheep.png,sha256=WPO6dZNpSQmj3vbmXzJrFSBgZNvswfCqedOZB3pKaPY,1322
42
- examples/advanced/wolf_sheep/wolf_sheep/resources/wolf.png,sha256=1R9EXUI-BoI6exPTkscGrTpHEnEpsHM0_7oPmV-AhJQ,1473
43
- examples/basic/__init__.py,sha256=nvxSxncLovRhynU91IPhU9YtlnF2Akp9zlxVj9al_f4,384
44
- examples/basic/boid_flockers/Readme.md,sha256=-QjoIQcpGBXH0ix_3dHG-FcykbOf1FTkapSQme86nW0,1268
45
- examples/basic/boid_flockers/agents.py,sha256=QXT1zxOq_kdk_w60H2zPV3KpivzCHQ-ApyFIIDvxvok,2693
46
- examples/basic/boid_flockers/app.py,sha256=bNBDUZBwWqRegX_3OtMoro-y1NlVWWJIGGUYKyJLKHc,1237
47
- examples/basic/boid_flockers/model.py,sha256=a8B1afwAedgo-VyrCkS4KfnzO2G06kv4KKDuUcghwmw,2169
48
- examples/basic/boltzmann_wealth_model/Readme.md,sha256=FQSNNK7lXKZhGx_c688mrkjyr34g6YrHQw0nioD5bXk,2772
49
- examples/basic/boltzmann_wealth_model/agents.py,sha256=uVUo9jWQnv5I3uCaYE_N7X-cOdHhdy6RtLUL_znELgI,892
50
- examples/basic/boltzmann_wealth_model/app.py,sha256=yxaIPEvco21PQtdYmSfQGH2cYeFpOn7NCB-QXPDhfCk,1902
51
- examples/basic/boltzmann_wealth_model/model.py,sha256=XDd6XZ3z32R_bzC7tSwTBREda4KXpVnddVe6UxE4BUQ,1447
52
- examples/basic/boltzmann_wealth_model/st_app.py,sha256=v3Je2hSe8nXPgfmZhX8lHM-7xs8dk2g1Zz0X81AqX3k,3466
53
- examples/basic/conways_game_of_life/Readme.md,sha256=pYTAtzybiyxVZSmwwPlgIa4Y1X2d7iKLs_Ial0JVcsE,1535
54
- examples/basic/conways_game_of_life/agents.py,sha256=FF9eZgm_Lwt080wOk9LGnaXpdwD4WMSY44vHw2RE68A,1619
55
- examples/basic/conways_game_of_life/model.py,sha256=1X21-NlbtU9qseOfsLaTOTgGA9klWZCIFfgDWazyij4,1115
56
- examples/basic/conways_game_of_life/portrayal.py,sha256=pZYZFlShdz1OJ-lt5LhmJsxhKHBTjDv3I4JRBNfpHIs,531
57
- examples/basic/conways_game_of_life/requirements.txt,sha256=6qxgQJ4_fAsmgzZq2RuRG0xaP9NAg4QKBMBsQkVoNCM,9
58
- examples/basic/conways_game_of_life/server.py,sha256=Goe3hmrgiDFNV5k4q7BtUWnLpmY4lavVxyHsBmfaCKc,347
59
- examples/basic/conways_game_of_life/st_app.py,sha256=pAEepCp5vzfW52imEB_iTZ5254ZlQh0SnEUjSOOuJpA,2358
60
- examples/basic/schelling/README.md,sha256=G7SW0JkPpBBJg_bzG5LvcIJcaloMBwf-OJmOcLRPtqA,2417
61
- examples/basic/schelling/agents.py,sha256=dvznzN2As979x-4EH8Y-i7HhlCuv1OdtWYebOdxTdhk,773
62
- examples/basic/schelling/analysis.ipynb,sha256=JDJy6-U6eO-LrHWxZr1c3lkvtoY0DNHa-kJ4J-Z-wwo,5804
63
- examples/basic/schelling/app.py,sha256=DiSjAQZaI0jFBc3RvadrTHJlIaO64kOifxdt3EycDkI,945
64
- examples/basic/schelling/model.py,sha256=CfqWr1ZEu5FpC2YVYvHyJRlhN-mF8iQIaHcVTXWCA5M,1828
65
- examples/basic/virus_on_network/README.md,sha256=UnCkKiJK7wVw40a-oDR6qdf3QpCsBhgNOVZg-2UXPlc,2528
66
- examples/basic/virus_on_network/agents.py,sha256=a_WhqYblJlW6od67eXfU-nb7IMRyYpgxtf0le--VYoA,1975
67
- examples/basic/virus_on_network/app.py,sha256=y1Ie-E1cY3KhDnAVfFUSY0X6pf8dbBB8U62adtbEmk0,3288
68
- examples/basic/virus_on_network/model.py,sha256=EmInC4AdZLP_2S5yAoDrR-_7gq9siWuyyvV4mHM8VQw,2768
69
- mesa/__init__.py,sha256=eRKj2P6Fn6LvISXl5egh19VTDDu92HIPK1fKAxxIFnk,708
70
- mesa/agent.py,sha256=R8NchFZZlbUIE9eHkUV3U22W6EPS0JqEtkK1dhurv0I,24157
71
- mesa/batchrunner.py,sha256=0AqTcvjWNPp1aqn7zuUKSovx6Rnkk4M-KouCZ4Guqy0,6419
72
- mesa/datacollection.py,sha256=xyb07aBpd-HSDh5bk-XcVqGiDu5bfaLlxj5eDlGIwqY,16138
73
- mesa/examples.py,sha256=nD62FlGD-cf02sG_o6ViCJbOI0Z2sJbpqyjS_F19BbI,109
74
- mesa/main.py,sha256=_KgeVGbi0znzezjjoM09vhGdyaqcuDEwb9M7vH2c_O4,1668
75
- mesa/model.py,sha256=iJMlnqQPSgI1rUgnwpBIpyvdULO-XASlRU_H94nRlo8,9844
76
- mesa/space.py,sha256=1sVl78o5lYP6aEg32QIb9-tcv3V3UeFdC7A_h_8CgO8,62838
77
- mesa/time.py,sha256=5yWubqst13MfjXpsYjY-MNdIQH3KWi373KRmRZT5BBo,15044
78
- mesa/cookiecutter-mesa/cookiecutter.json,sha256=tBSWli39fOWUXGfiDCTKd92M7uKaBIswXbkOdbUufYY,337
79
- mesa/cookiecutter-mesa/hooks/post_gen_project.py,sha256=UKz12l6mKc7fILK0MvV5djsTKwkmD4DlH8LYjFO8ehI,316
80
- mesa/cookiecutter-mesa/{{cookiecutter.snake}}/README.md,sha256=Yji4lGY-NtQSnW-oBj0_Jhs-XhCfZA8R1mBBM_IllGs,80
81
- mesa/cookiecutter-mesa/{{cookiecutter.snake}}/app.pytemplate,sha256=36f9k9CH6TK6VrXsPvTFXGUfCKzCLwgYTeK-Gt27GNg,584
82
- mesa/cookiecutter-mesa/{{cookiecutter.snake}}/setup.pytemplate,sha256=UtRpLM_CkeUZRec-Ef_LiO_x7SKaWN11fOiH9T1UmTw,214
83
- mesa/cookiecutter-mesa/{{cookiecutter.snake}}/{{cookiecutter.snake}}/__init__.py,sha256=WgJccMfsAlD_mA3zTBPJVHadF3FtO8xgi8SPKORzyMs,22
84
- mesa/cookiecutter-mesa/{{cookiecutter.snake}}/{{cookiecutter.snake}}/model.pytemplate,sha256=Aml4Z6E1yj7E7DtHNSUqnKNRUdkxG9WWtJyW8fkxCng,1870
85
- mesa/experimental/UserParam.py,sha256=f32nmFjroe76HpxU75ZCEOqFW2nAsDfmqIf8kQ1zt-E,2086
86
- mesa/experimental/__init__.py,sha256=faBYyHSp-sFQPaBx8-WsLToVKCndpSzpt18HmNZtasM,385
87
- mesa/experimental/solara_viz.py,sha256=uWrNQAX3oEWSftmyjNorN839dBCUp86hnhpL704dyGQ,15212
88
- mesa/experimental/cell_space/__init__.py,sha256=-NtSCT7mA-aszLSAdqbICGqeFe2vBdb-GrcW562legY,999
89
- mesa/experimental/cell_space/cell.py,sha256=lDm7NQhPDFf3-SZu5W594lDNGtzcdSPUSSsELFRg0bs,7166
90
- mesa/experimental/cell_space/cell_agent.py,sha256=jvYOV9OIaBaqAsAG0YLV64X_f3BJe_wP7qfos_RXi0Y,3759
91
- mesa/experimental/cell_space/cell_collection.py,sha256=ZcyuPEevCZEXW7jFnX6StjBMw4UBDQvUspZRcFi2dFg,3426
92
- mesa/experimental/cell_space/discrete_space.py,sha256=bA-Ledq4mELnRtV5M-I9hhT3XKOy0uTdaT9U7u_Y0MY,5053
93
- mesa/experimental/cell_space/grid.py,sha256=oWTy6kaaHXLPneA-w5XdqzwA0YItMWYgCq_UjNH9iA8,7711
94
- mesa/experimental/cell_space/network.py,sha256=_x0zKlI-odNCSRb_Zqh4nBPjqnW5iVj8sVheKPCLzmU,1321
95
- mesa/experimental/cell_space/voronoi.py,sha256=lSY8zQhELvOy0RfDyZIek09UMwY9_20UY9SPqFWsNoM,10014
96
- mesa/experimental/components/altair.py,sha256=49OHgrm1JncfrKqDfw_5ifPtsbMKdgVYCacL9SMwucc,2624
97
- mesa/experimental/components/matplotlib.py,sha256=j477UBk_7yW5vzT3rjhnuTixpA7PedDNghoK9TLgHVY,8043
98
- mesa/experimental/devs/__init__.py,sha256=EByaC66ikUIu9G9p1geLm6ESEMWZOPTO9r9627S83j0,211
99
- mesa/experimental/devs/eventlist.py,sha256=Trvc5S-NG5B792uuk_cY8Q_5Rw99zioUYDQXcXWVuCo,5972
100
- mesa/experimental/devs/simulator.py,sha256=wvqkLIDgbJNaem9nwMacyEYRp0W3ai5Oxptw3-QmbSw,10595
101
- mesa/experimental/devs/examples/epstein_civil_violence.py,sha256=E8YSV3O5ihKsntGtnltHM-4IyS8eg2DSRUqmIiw_1iU,10916
102
- mesa/experimental/devs/examples/wolf_sheep.py,sha256=1eb1CfYNQoprqSJat-LPYPvwWH1ENQdj39viEqwSk0s,8103
103
- mesa/visualization/UserParam.py,sha256=Dl2WOwLYLf0pfLpabCZtIdFRyKZrK6Qtc3utZx5GPYg,2139
104
- mesa/visualization/__init__.py,sha256=sa8lqeLcDtte19SMzFiKP6K4CrVLxAPwrhDu_AsDWTs,395
105
- mesa/visualization/solara_viz.py,sha256=SHlQ8Y4k6EU7LxlJjjvvjDJWGWryahjQXCwMiVgoF0E,14944
106
- mesa/visualization/utils.py,sha256=lJHgRKF5BHLf72Tw3YpwyiWuRoIimaTKQ7xBCw_Rx3A,146
107
- mesa/visualization/components/altair.py,sha256=E-iblqpWhx72qrjkNz4Ie9c66Hh1OFpLVjuDIg9m2sA,2804
108
- mesa/visualization/components/matplotlib.py,sha256=_l0W_kjFsvpoOl-CBHvCoPplb5w_LQ77JC2xteIn2u0,11825
109
- mesa-3.0.0b1.dist-info/METADATA,sha256=Xnnt_bkId5QAI0-LWep2n0Kn-bf9iDEn9OI-RTbKzpo,9937
110
- mesa-3.0.0b1.dist-info/WHEEL,sha256=1yFddiXMmvYK7QYTqtRNtX66WJ0Mz8PYEiEUoOUUxRY,87
111
- mesa-3.0.0b1.dist-info/entry_points.txt,sha256=IOcQtetGF8l4wHpOs_hGb19Rz-FS__BMXOJR10IBPsA,39
112
- mesa-3.0.0b1.dist-info/licenses/LICENSE,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
113
- mesa-3.0.0b1.dist-info/licenses/NOTICE,sha256=GbsWoK0QWv1JyZ_xer2s-jNilv0RtWl-0UrtlJANHPg,578
114
- mesa-3.0.0b1.dist-info/RECORD,,
File without changes
File without changes