Mesa 3.0.0b2__py3-none-any.whl → 3.0.1__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/agent.py +15 -3
- mesa/batchrunner.py +26 -1
- mesa/examples/README.md +11 -11
- mesa/examples/__init__.py +2 -2
- mesa/examples/advanced/epstein_civil_violence/agents.py +44 -38
- mesa/examples/advanced/epstein_civil_violence/app.py +29 -28
- mesa/examples/advanced/epstein_civil_violence/model.py +33 -65
- mesa/examples/advanced/pd_grid/app.py +9 -5
- mesa/examples/advanced/pd_grid/model.py +1 -1
- mesa/examples/advanced/sugarscape_g1mt/app.py +5 -13
- mesa/examples/advanced/sugarscape_g1mt/model.py +3 -1
- mesa/examples/advanced/wolf_sheep/agents.py +53 -39
- mesa/examples/advanced/wolf_sheep/app.py +37 -19
- mesa/examples/advanced/wolf_sheep/model.py +68 -74
- mesa/examples/basic/boid_flockers/agents.py +49 -18
- mesa/examples/basic/boid_flockers/app.py +2 -2
- mesa/examples/basic/boid_flockers/model.py +55 -19
- mesa/examples/basic/boltzmann_wealth_model/agents.py +23 -5
- mesa/examples/basic/boltzmann_wealth_model/app.py +22 -13
- mesa/examples/basic/boltzmann_wealth_model/model.py +48 -13
- mesa/examples/basic/boltzmann_wealth_model/st_app.py +2 -2
- mesa/examples/basic/conways_game_of_life/app.py +15 -3
- mesa/examples/basic/schelling/agents.py +9 -5
- mesa/examples/basic/schelling/app.py +5 -5
- mesa/examples/basic/schelling/model.py +48 -26
- mesa/examples/basic/virus_on_network/app.py +25 -47
- mesa/experimental/cell_space/cell_collection.py +14 -2
- mesa/experimental/cell_space/discrete_space.py +16 -2
- mesa/experimental/devs/simulator.py +59 -14
- mesa/model.py +4 -4
- mesa/space.py +0 -30
- mesa/time.py +4 -4
- mesa/visualization/__init__.py +17 -6
- mesa/visualization/components/__init__.py +83 -0
- mesa/visualization/components/{altair.py → altair_components.py} +34 -2
- mesa/visualization/components/matplotlib_components.py +175 -0
- mesa/visualization/mpl_space_drawing.py +593 -0
- mesa/visualization/solara_viz.py +156 -67
- {mesa-3.0.0b2.dist-info → mesa-3.0.1.dist-info}/METADATA +6 -8
- {mesa-3.0.0b2.dist-info → mesa-3.0.1.dist-info}/RECORD +46 -44
- {mesa-3.0.0b2.dist-info → mesa-3.0.1.dist-info}/WHEEL +1 -1
- mesa/visualization/components/matplotlib.py +0 -386
- /mesa/visualization/{UserParam.py → user_param.py} +0 -0
- {mesa-3.0.0b2.dist-info → mesa-3.0.1.dist-info}/entry_points.txt +0 -0
- {mesa-3.0.0b2.dist-info → mesa-3.0.1.dist-info}/licenses/LICENSE +0 -0
- {mesa-3.0.0b2.dist-info → mesa-3.0.1.dist-info}/licenses/NOTICE +0 -0
mesa/visualization/solara_viz.py
CHANGED
|
@@ -24,15 +24,16 @@ See the Visualization Tutorial and example models for more details.
|
|
|
24
24
|
from __future__ import annotations
|
|
25
25
|
|
|
26
26
|
import asyncio
|
|
27
|
-
import
|
|
27
|
+
import inspect
|
|
28
28
|
from collections.abc import Callable
|
|
29
29
|
from typing import TYPE_CHECKING, Literal
|
|
30
30
|
|
|
31
31
|
import reacton.core
|
|
32
32
|
import solara
|
|
33
33
|
|
|
34
|
-
import mesa.visualization.components.
|
|
35
|
-
from mesa.
|
|
34
|
+
import mesa.visualization.components.altair_components as components_altair
|
|
35
|
+
from mesa.experimental.devs.simulator import Simulator
|
|
36
|
+
from mesa.visualization.user_param import Slider
|
|
36
37
|
from mesa.visualization.utils import force_update, update_counter
|
|
37
38
|
|
|
38
39
|
if TYPE_CHECKING:
|
|
@@ -42,12 +43,13 @@ if TYPE_CHECKING:
|
|
|
42
43
|
@solara.component
|
|
43
44
|
def SolaraViz(
|
|
44
45
|
model: Model | solara.Reactive[Model],
|
|
46
|
+
*,
|
|
45
47
|
components: list[reacton.core.Component]
|
|
46
48
|
| list[Callable[[Model], reacton.core.Component]]
|
|
47
49
|
| Literal["default"] = "default",
|
|
48
50
|
play_interval: int = 100,
|
|
51
|
+
simulator: Simulator | None = None,
|
|
49
52
|
model_params=None,
|
|
50
|
-
seed: float = 0,
|
|
51
53
|
name: str | None = None,
|
|
52
54
|
):
|
|
53
55
|
"""Solara visualization component.
|
|
@@ -66,10 +68,9 @@ def SolaraViz(
|
|
|
66
68
|
Defaults to "default", which uses the default Altair space visualization.
|
|
67
69
|
play_interval (int, optional): Interval for playing the model steps in milliseconds.
|
|
68
70
|
This controls the speed of the model's automatic stepping. Defaults to 100 ms.
|
|
71
|
+
simulator: A simulator that controls the model (optional)
|
|
69
72
|
model_params (dict, optional): Parameters for (re-)instantiating a model.
|
|
70
73
|
Can include user-adjustable parameters and fixed parameters. Defaults to None.
|
|
71
|
-
seed (int, optional): Seed for the random number generator. This ensures reproducibility
|
|
72
|
-
of the model's behavior. Defaults to 0.
|
|
73
74
|
name (str | None, optional): Name of the visualization. Defaults to the models class name.
|
|
74
75
|
|
|
75
76
|
Returns:
|
|
@@ -87,41 +88,39 @@ def SolaraViz(
|
|
|
87
88
|
value results in faster stepping, while a higher value results in slower stepping.
|
|
88
89
|
"""
|
|
89
90
|
if components == "default":
|
|
90
|
-
components = [components_altair.
|
|
91
|
+
components = [components_altair.make_altair_space()]
|
|
92
|
+
if model_params is None:
|
|
93
|
+
model_params = {}
|
|
91
94
|
|
|
92
95
|
# Convert model to reactive
|
|
93
96
|
if not isinstance(model, solara.Reactive):
|
|
94
97
|
model = solara.use_reactive(model) # noqa: SH102, RUF100
|
|
95
98
|
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
original_step = model.value.step
|
|
99
|
-
|
|
100
|
-
def step():
|
|
101
|
-
original_step()
|
|
102
|
-
force_update()
|
|
103
|
-
|
|
104
|
-
model.value.step = step
|
|
105
|
-
# Add a trigger to model itself
|
|
106
|
-
model.value.force_update = force_update
|
|
107
|
-
force_update()
|
|
108
|
-
|
|
109
|
-
solara.use_effect(connect_to_model, [model.value])
|
|
99
|
+
# set up reactive model_parameters shared by ModelCreator and ModelController
|
|
100
|
+
reactive_model_parameters = solara.use_reactive({})
|
|
110
101
|
|
|
111
102
|
with solara.AppBar():
|
|
112
103
|
solara.AppBarTitle(name if name else model.value.__class__.__name__)
|
|
113
104
|
|
|
114
105
|
with solara.Sidebar(), solara.Column():
|
|
115
106
|
with solara.Card("Controls"):
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
if model_params is not None:
|
|
119
|
-
with solara.Card("Model Parameters"):
|
|
120
|
-
ModelCreator(
|
|
107
|
+
if not isinstance(simulator, Simulator):
|
|
108
|
+
ModelController(
|
|
121
109
|
model,
|
|
122
|
-
|
|
123
|
-
|
|
110
|
+
model_parameters=reactive_model_parameters,
|
|
111
|
+
play_interval=play_interval,
|
|
124
112
|
)
|
|
113
|
+
else:
|
|
114
|
+
SimulatorController(
|
|
115
|
+
model,
|
|
116
|
+
simulator,
|
|
117
|
+
model_parameters=reactive_model_parameters,
|
|
118
|
+
play_interval=play_interval,
|
|
119
|
+
)
|
|
120
|
+
with solara.Card("Model Parameters"):
|
|
121
|
+
ModelCreator(
|
|
122
|
+
model, model_params, model_parameters=reactive_model_parameters
|
|
123
|
+
)
|
|
125
124
|
with solara.Card("Information"):
|
|
126
125
|
ShowSteps(model.value)
|
|
127
126
|
|
|
@@ -172,24 +171,89 @@ JupyterViz = SolaraViz
|
|
|
172
171
|
|
|
173
172
|
|
|
174
173
|
@solara.component
|
|
175
|
-
def ModelController(
|
|
174
|
+
def ModelController(
|
|
175
|
+
model: solara.Reactive[Model],
|
|
176
|
+
*,
|
|
177
|
+
model_parameters: dict | solara.Reactive[dict] = None,
|
|
178
|
+
play_interval: int = 100,
|
|
179
|
+
):
|
|
176
180
|
"""Create controls for model execution (step, play, pause, reset).
|
|
177
181
|
|
|
178
182
|
Args:
|
|
179
|
-
model
|
|
180
|
-
|
|
183
|
+
model: Reactive model instance
|
|
184
|
+
model_parameters: Reactive parameters for (re-)instantiating a model.
|
|
185
|
+
play_interval: Interval for playing the model steps in milliseconds.
|
|
186
|
+
|
|
181
187
|
"""
|
|
182
188
|
playing = solara.use_reactive(False)
|
|
183
189
|
running = solara.use_reactive(True)
|
|
184
|
-
|
|
190
|
+
if model_parameters is None:
|
|
191
|
+
model_parameters = {}
|
|
192
|
+
model_parameters = solara.use_reactive(model_parameters)
|
|
185
193
|
|
|
186
|
-
def
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
194
|
+
async def step():
|
|
195
|
+
while playing.value and running.value:
|
|
196
|
+
await asyncio.sleep(play_interval / 1000)
|
|
197
|
+
do_step()
|
|
198
|
+
|
|
199
|
+
solara.lab.use_task(
|
|
200
|
+
step, dependencies=[playing.value, running.value], prefer_threaded=False
|
|
201
|
+
)
|
|
202
|
+
|
|
203
|
+
def do_step():
|
|
204
|
+
"""Advance the model by one step."""
|
|
205
|
+
model.value.step()
|
|
206
|
+
running.value = model.value.running
|
|
190
207
|
force_update()
|
|
191
208
|
|
|
192
|
-
|
|
209
|
+
def do_reset():
|
|
210
|
+
"""Reset the model to its initial state."""
|
|
211
|
+
playing.value = False
|
|
212
|
+
running.value = True
|
|
213
|
+
model.value = model.value = model.value.__class__(**model_parameters.value)
|
|
214
|
+
|
|
215
|
+
def do_play_pause():
|
|
216
|
+
"""Toggle play/pause."""
|
|
217
|
+
playing.value = not playing.value
|
|
218
|
+
|
|
219
|
+
with solara.Row(justify="space-between"):
|
|
220
|
+
solara.Button(label="Reset", color="primary", on_click=do_reset)
|
|
221
|
+
solara.Button(
|
|
222
|
+
label="▶" if not playing.value else "❚❚",
|
|
223
|
+
color="primary",
|
|
224
|
+
on_click=do_play_pause,
|
|
225
|
+
disabled=not running.value,
|
|
226
|
+
)
|
|
227
|
+
solara.Button(
|
|
228
|
+
label="Step",
|
|
229
|
+
color="primary",
|
|
230
|
+
on_click=do_step,
|
|
231
|
+
disabled=playing.value or not running.value,
|
|
232
|
+
)
|
|
233
|
+
|
|
234
|
+
|
|
235
|
+
@solara.component
|
|
236
|
+
def SimulatorController(
|
|
237
|
+
model: solara.Reactive[Model],
|
|
238
|
+
simulator,
|
|
239
|
+
*,
|
|
240
|
+
model_parameters: dict | solara.Reactive[dict] = None,
|
|
241
|
+
play_interval: int = 100,
|
|
242
|
+
):
|
|
243
|
+
"""Create controls for model execution (step, play, pause, reset).
|
|
244
|
+
|
|
245
|
+
Args:
|
|
246
|
+
model: Reactive model instance
|
|
247
|
+
simulator: Simulator instance
|
|
248
|
+
model_parameters: Reactive parameters for (re-)instantiating a model.
|
|
249
|
+
play_interval: Interval for playing the model steps in milliseconds.
|
|
250
|
+
|
|
251
|
+
"""
|
|
252
|
+
playing = solara.use_reactive(False)
|
|
253
|
+
running = solara.use_reactive(True)
|
|
254
|
+
if model_parameters is None:
|
|
255
|
+
model_parameters = {}
|
|
256
|
+
model_parameters = solara.use_reactive(model_parameters)
|
|
193
257
|
|
|
194
258
|
async def step():
|
|
195
259
|
while playing.value and running.value:
|
|
@@ -202,14 +266,18 @@ def ModelController(model: solara.Reactive[Model], play_interval=100):
|
|
|
202
266
|
|
|
203
267
|
def do_step():
|
|
204
268
|
"""Advance the model by one step."""
|
|
205
|
-
|
|
269
|
+
simulator.run_for(1)
|
|
206
270
|
running.value = model.value.running
|
|
271
|
+
force_update()
|
|
207
272
|
|
|
208
273
|
def do_reset():
|
|
209
274
|
"""Reset the model to its initial state."""
|
|
210
275
|
playing.value = False
|
|
211
276
|
running.value = True
|
|
212
|
-
|
|
277
|
+
simulator.reset()
|
|
278
|
+
model.value = model.value = model.value.__class__(
|
|
279
|
+
simulator, **model_parameters.value
|
|
280
|
+
)
|
|
213
281
|
|
|
214
282
|
def do_play_pause():
|
|
215
283
|
"""Toggle play/pause."""
|
|
@@ -268,7 +336,12 @@ def check_param_is_fixed(param):
|
|
|
268
336
|
|
|
269
337
|
|
|
270
338
|
@solara.component
|
|
271
|
-
def ModelCreator(
|
|
339
|
+
def ModelCreator(
|
|
340
|
+
model: solara.Reactive[Model],
|
|
341
|
+
user_params: dict,
|
|
342
|
+
*,
|
|
343
|
+
model_parameters: dict | solara.Reactive[dict] = None,
|
|
344
|
+
):
|
|
272
345
|
"""Solara component for creating and managing a model instance with user-defined parameters.
|
|
273
346
|
|
|
274
347
|
This component allows users to create a model instance with specified parameters and seed.
|
|
@@ -276,9 +349,9 @@ def ModelCreator(model, model_params, seed=1):
|
|
|
276
349
|
number generator.
|
|
277
350
|
|
|
278
351
|
Args:
|
|
279
|
-
model
|
|
280
|
-
|
|
281
|
-
|
|
352
|
+
model: A reactive model instance. This is the main model to be created and managed.
|
|
353
|
+
user_params: Parameters for (re-)instantiating a model. Can include user-adjustable parameters and fixed parameters. Defaults to None.
|
|
354
|
+
model_parameters: reactive parameters for reinitializing the model
|
|
282
355
|
|
|
283
356
|
Returns:
|
|
284
357
|
solara.component: A Solara component that renders the model creation and management interface.
|
|
@@ -299,40 +372,50 @@ def ModelCreator(model, model_params, seed=1):
|
|
|
299
372
|
- The component provides an interface for adjusting user-defined parameters and reseeding the model.
|
|
300
373
|
|
|
301
374
|
"""
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
375
|
+
if model_parameters is None:
|
|
376
|
+
model_parameters = {}
|
|
377
|
+
model_parameters = solara.use_reactive(model_parameters)
|
|
305
378
|
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
**{k: v.get("value") for k, v in user_params.items()},
|
|
310
|
-
}
|
|
379
|
+
solara.use_effect(
|
|
380
|
+
lambda: _check_model_params(model.value.__class__.__init__, fixed_params),
|
|
381
|
+
[model.value],
|
|
311
382
|
)
|
|
383
|
+
user_params, fixed_params = split_model_params(user_params)
|
|
312
384
|
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
385
|
+
# set model_parameters to the default values for all parameters
|
|
386
|
+
model_parameters.value = {
|
|
387
|
+
**fixed_params,
|
|
388
|
+
**{k: v.get("value") for k, v in user_params.items()},
|
|
389
|
+
}
|
|
316
390
|
|
|
317
391
|
def on_change(name, value):
|
|
318
|
-
|
|
392
|
+
model_parameters.value = {**model_parameters.value, name: value}
|
|
319
393
|
|
|
320
|
-
|
|
321
|
-
model.value = model.value.__class__(**model_parameters)
|
|
322
|
-
model.value._seed = reactive_seed.value
|
|
394
|
+
UserInputs(user_params, on_change=on_change)
|
|
323
395
|
|
|
324
|
-
solara.use_effect(create_model, [model_parameters, reactive_seed.value])
|
|
325
396
|
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
label="Seed",
|
|
329
|
-
value=reactive_seed,
|
|
330
|
-
continuous_update=True,
|
|
331
|
-
)
|
|
397
|
+
def _check_model_params(init_func, model_params):
|
|
398
|
+
"""Check if model parameters are valid for the model's initialization function.
|
|
332
399
|
|
|
333
|
-
|
|
400
|
+
Args:
|
|
401
|
+
init_func: Model initialization function
|
|
402
|
+
model_params: Dictionary of model parameters
|
|
334
403
|
|
|
335
|
-
|
|
404
|
+
Raises:
|
|
405
|
+
ValueError: If a parameter is not valid for the model's initialization function
|
|
406
|
+
"""
|
|
407
|
+
model_parameters = inspect.signature(init_func).parameters
|
|
408
|
+
for name in model_parameters:
|
|
409
|
+
if (
|
|
410
|
+
model_parameters[name].default == inspect.Parameter.empty
|
|
411
|
+
and name not in model_params
|
|
412
|
+
and name != "self"
|
|
413
|
+
and name != "kwargs"
|
|
414
|
+
):
|
|
415
|
+
raise ValueError(f"Missing required model parameter: {name}")
|
|
416
|
+
for name in model_params:
|
|
417
|
+
if name not in model_parameters and "kwargs" not in model_parameters:
|
|
418
|
+
raise ValueError(f"Invalid model parameter: {name}")
|
|
336
419
|
|
|
337
420
|
|
|
338
421
|
@solara.component
|
|
@@ -399,6 +482,12 @@ def UserInputs(user_params, on_change=None):
|
|
|
399
482
|
on_value=change_handler,
|
|
400
483
|
value=options.get("value"),
|
|
401
484
|
)
|
|
485
|
+
elif input_type == "InputText":
|
|
486
|
+
solara.InputText(
|
|
487
|
+
label=label,
|
|
488
|
+
on_value=change_handler,
|
|
489
|
+
value=options.get("value"),
|
|
490
|
+
)
|
|
402
491
|
else:
|
|
403
492
|
raise ValueError(f"{input_type} is not a supported input type")
|
|
404
493
|
|
|
@@ -1,13 +1,11 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: Mesa
|
|
3
|
-
Version: 3.0.
|
|
3
|
+
Version: 3.0.1
|
|
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
|
|
11
9
|
Keywords: ABM,agent,based,model,modeling,multi-agent,simulation
|
|
12
10
|
Classifier: Development Status :: 3 - Alpha
|
|
13
11
|
Classifier: Intended Audience :: Science/Research
|
|
@@ -93,9 +91,9 @@ interface; and analyze their results using Python's data analysis
|
|
|
93
91
|
tools. Its goal is to be the Python-based alternative to NetLogo,
|
|
94
92
|
Repast, or MASON.
|
|
95
93
|
|
|
96
|
-

|
|
97
95
|
|
|
98
|
-
*Above: A Mesa implementation of the
|
|
96
|
+
*Above: A Mesa implementation of the WolfSheep model, this
|
|
99
97
|
can be displayed in browser windows or Jupyter.*
|
|
100
98
|
|
|
101
99
|
## Features
|
|
@@ -107,18 +105,18 @@ can be displayed in browser windows or Jupyter.*
|
|
|
107
105
|
|
|
108
106
|
## Using Mesa
|
|
109
107
|
|
|
110
|
-
To install our latest stable release (
|
|
108
|
+
To install our latest stable release (3.0.x), run:
|
|
111
109
|
|
|
112
110
|
``` bash
|
|
113
111
|
pip install -U mesa
|
|
114
112
|
```
|
|
115
113
|
|
|
116
|
-
To install our latest pre-release
|
|
114
|
+
To install our latest pre-release, run:
|
|
117
115
|
|
|
118
116
|
``` bash
|
|
119
117
|
pip install -U --pre mesa
|
|
120
118
|
```
|
|
121
|
-
|
|
119
|
+
Starting with Mesa 3.0, we don't install all our dependencies anymore by default.
|
|
122
120
|
```bash
|
|
123
121
|
# You can customize the additional dependencies you need, if you want. Available are:
|
|
124
122
|
pip install -U --pre mesa[network,viz]
|
|
@@ -1,65 +1,65 @@
|
|
|
1
|
-
mesa/__init__.py,sha256=
|
|
2
|
-
mesa/agent.py,sha256=
|
|
3
|
-
mesa/batchrunner.py,sha256=
|
|
1
|
+
mesa/__init__.py,sha256=8B9IpZf-BdiuFZqO7WrQ9uT9O6Pe0o7oUr0U-q4v_xI,657
|
|
2
|
+
mesa/agent.py,sha256=k85bw5iVX0MmaVlJg3mG_liobN_sIVsrZf76YZ_hMyA,25289
|
|
3
|
+
mesa/batchrunner.py,sha256=sMFLTxj5avP_-HGO0leLVuxXK2dH0xdPopvhAmawwRQ,7213
|
|
4
4
|
mesa/datacollection.py,sha256=xyb07aBpd-HSDh5bk-XcVqGiDu5bfaLlxj5eDlGIwqY,16138
|
|
5
|
-
mesa/model.py,sha256=
|
|
6
|
-
mesa/space.py,sha256=
|
|
7
|
-
mesa/time.py,sha256=
|
|
8
|
-
mesa/examples/README.md,sha256
|
|
9
|
-
mesa/examples/__init__.py,sha256=
|
|
5
|
+
mesa/model.py,sha256=Eb7wksREf882HGY-t7IwHVRIYDLzNaYOSmOLIdbaykA,10502
|
|
6
|
+
mesa/space.py,sha256=cfzlRfy9chegp8d89k2aqI29jo9cb18USlz2G2iOZU4,64082
|
|
7
|
+
mesa/time.py,sha256=KXwDqZHHvYbuqzB8zRbHglN23qVMfj8RXD-T_kJ3DfY,15022
|
|
8
|
+
mesa/examples/README.md,sha256=dNn8kv0BNQem3NNhO5mbOANQoK8UUYOo7rnkCFV9tnE,2882
|
|
9
|
+
mesa/examples/__init__.py,sha256=fP1vcexySnKowS2CKhfeyYLt058VpIkK26EOo3btyO0,825
|
|
10
10
|
mesa/examples/advanced/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
11
11
|
mesa/examples/advanced/epstein_civil_violence/Epstein Civil Violence.ipynb,sha256=yh50ZAK2BVJyJIKsQTTxywnasqWn1IiQUVrwmZKue4w,29032
|
|
12
12
|
mesa/examples/advanced/epstein_civil_violence/Readme.md,sha256=IEU5IZTe5EbvAA2vkYxiIw8vK3O0MZcjbxzn8I2cQic,1874
|
|
13
13
|
mesa/examples/advanced/epstein_civil_violence/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
14
|
-
mesa/examples/advanced/epstein_civil_violence/agents.py,sha256=
|
|
15
|
-
mesa/examples/advanced/epstein_civil_violence/app.py,sha256=
|
|
16
|
-
mesa/examples/advanced/epstein_civil_violence/model.py,sha256=
|
|
14
|
+
mesa/examples/advanced/epstein_civil_violence/agents.py,sha256=0X4JLj2K2cl1bACkFLI6-K6tKbr2SLZlAy_kjgUDjzA,5863
|
|
15
|
+
mesa/examples/advanced/epstein_civil_violence/app.py,sha256=puJmjkEevHyilfDpnkE65Y2ax6JEyOALg-IEtK8jBKk,1787
|
|
16
|
+
mesa/examples/advanced/epstein_civil_violence/model.py,sha256=fcTkjCRhEhDerDC1W_lrezdoWD1y5xIublkGIhCak8w,3918
|
|
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=DzGj4LZUjV0xMQAwkRsv2Aoap1cUvLscJswfA1PdVDs,1716
|
|
20
20
|
mesa/examples/advanced/pd_grid/analysis.ipynb,sha256=ReYtRe2JVyCCXoMBONvynXDQ_eGtQSWhNcuJY3CYTTI,82323
|
|
21
|
-
mesa/examples/advanced/pd_grid/app.py,sha256=
|
|
22
|
-
mesa/examples/advanced/pd_grid/model.py,sha256=
|
|
21
|
+
mesa/examples/advanced/pd_grid/app.py,sha256=u8dnB3cXkTENU26O1XN3REFTxEwvXLFLD3EybgVQWP0,1354
|
|
22
|
+
mesa/examples/advanced/pd_grid/model.py,sha256=DiHGeX7fR1slvcAzbmDCxnmXJ2Txjmju_gII3e-EJgY,2345
|
|
23
23
|
mesa/examples/advanced/sugarscape_g1mt/Readme.md,sha256=x3kKw1Rre2FPkNhGDLtdzeThmH089mxsGYUPZUeu26k,3595
|
|
24
24
|
mesa/examples/advanced/sugarscape_g1mt/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
25
25
|
mesa/examples/advanced/sugarscape_g1mt/agents.py,sha256=zE7zbO2_OaQiFDq_-t-0hv4ButBWv26dnS1zaPc3_ZE,10183
|
|
26
|
-
mesa/examples/advanced/sugarscape_g1mt/app.py,sha256=
|
|
27
|
-
mesa/examples/advanced/sugarscape_g1mt/model.py,sha256=
|
|
26
|
+
mesa/examples/advanced/sugarscape_g1mt/app.py,sha256=PYuHoAH4AfU8fbrkBpY-ZW8evwz5izLEP8srN1CHp_Y,1946
|
|
27
|
+
mesa/examples/advanced/sugarscape_g1mt/model.py,sha256=NFQRqwuOwP3kz1fNNPEm2XkdbS0G3-TgneiJdQZHqck,6111
|
|
28
28
|
mesa/examples/advanced/sugarscape_g1mt/sugar-map.txt,sha256=zZtGYciBPT4miZVnbVuoQ5TugTmGrbDWV9yb5KH6tnU,5000
|
|
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=
|
|
33
|
-
mesa/examples/advanced/wolf_sheep/app.py,sha256=
|
|
34
|
-
mesa/examples/advanced/wolf_sheep/model.py,sha256=
|
|
32
|
+
mesa/examples/advanced/wolf_sheep/agents.py,sha256=SISizN_alheFAXEP3NaeQTx22SPs0v3pRYqXKRyuXCo,3801
|
|
33
|
+
mesa/examples/advanced/wolf_sheep/app.py,sha256=PwXnrjqlx73I4nlXiG7himbscwyvr9LrueHXbSOqCA0,2498
|
|
34
|
+
mesa/examples/advanced/wolf_sheep/model.py,sha256=UYUY8GP6YA64mbJkWDr9eUSZlE8naxv8-a2qaGPdUXE,4531
|
|
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=OgmiMCgUa1723v8cBGI0SVAld2U4ZJguE3vqFF5JihU,3779
|
|
39
|
+
mesa/examples/basic/boid_flockers/app.py,sha256=5wKzyctjTq3iX1MJc69l3753a_iyYhFq3kv54h7dGSE,1289
|
|
40
|
+
mesa/examples/basic/boid_flockers/model.py,sha256=scy0OaYzQVY5vVarsI7dUydynwoH3-uYoYcsBTtwtyA,3399
|
|
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
|
-
mesa/examples/basic/boltzmann_wealth_model/agents.py,sha256=
|
|
44
|
-
mesa/examples/basic/boltzmann_wealth_model/app.py,sha256=
|
|
45
|
-
mesa/examples/basic/boltzmann_wealth_model/model.py,sha256=
|
|
46
|
-
mesa/examples/basic/boltzmann_wealth_model/st_app.py,sha256=
|
|
43
|
+
mesa/examples/basic/boltzmann_wealth_model/agents.py,sha256=Jol2aspw--UtQn0EiReXVmlWtzpdC2o_YUTAyu1sDk4,1546
|
|
44
|
+
mesa/examples/basic/boltzmann_wealth_model/app.py,sha256=JlGpOmkjLut0hM9rY_BSGiRfHnrwpzlOi8Cw2Drv3-s,2160
|
|
45
|
+
mesa/examples/basic/boltzmann_wealth_model/model.py,sha256=ED4EFHJlrrcF12WYOEpXpPt5asK2T6uzpq_S97EtfHo,2941
|
|
46
|
+
mesa/examples/basic/boltzmann_wealth_model/st_app.py,sha256=X8C7w294UidciQqiiuBWkypaOQS79aS3kQKydT21V4c,3456
|
|
47
47
|
mesa/examples/basic/conways_game_of_life/Readme.md,sha256=VRgN6roF6leQ_IMYwxFypSfFjZo9jnCd-rkPTjpp7II,1453
|
|
48
48
|
mesa/examples/basic/conways_game_of_life/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
49
49
|
mesa/examples/basic/conways_game_of_life/agents.py,sha256=ETn87GV8it9p0nlSn6f1qu5CDEmqokkr6Rq7KWaT-5U,1627
|
|
50
|
-
mesa/examples/basic/conways_game_of_life/app.py,sha256=
|
|
50
|
+
mesa/examples/basic/conways_game_of_life/app.py,sha256=DrA1CwiT43rDMZGSDO62B77_QymySkq486IeV9K8nJY,1433
|
|
51
51
|
mesa/examples/basic/conways_game_of_life/model.py,sha256=c7lwSelxTplbQlbfGjBSevS2TEg5DFJA8bvhbYbyD_s,1174
|
|
52
52
|
mesa/examples/basic/conways_game_of_life/st_app.py,sha256=_poqU2VR4rfiiq4WFXTbOUSW7liuM86iq913mW6LS50,2400
|
|
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
|
-
mesa/examples/basic/schelling/agents.py,sha256=
|
|
55
|
+
mesa/examples/basic/schelling/agents.py,sha256=BzipyAU5d_H4DoTm3xkeZLDazsr49rbaVr_kyk1rDJA,937
|
|
56
56
|
mesa/examples/basic/schelling/analysis.ipynb,sha256=JDJy6-U6eO-LrHWxZr1c3lkvtoY0DNHa-kJ4J-Z-wwo,5804
|
|
57
|
-
mesa/examples/basic/schelling/app.py,sha256
|
|
58
|
-
mesa/examples/basic/schelling/model.py,sha256=
|
|
57
|
+
mesa/examples/basic/schelling/app.py,sha256=DlePd3iTkBSzurRy1vbZXlAugpxcEMFFR5Iy6b9RWp8,973
|
|
58
|
+
mesa/examples/basic/schelling/model.py,sha256=ruqiMNBBsWV81srYZgdsfDVwgMWYuw2VAzSQhsK5E98,2762
|
|
59
59
|
mesa/examples/basic/virus_on_network/Readme.md,sha256=UnCkKiJK7wVw40a-oDR6qdf3QpCsBhgNOVZg-2UXPlc,2528
|
|
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
|
-
mesa/examples/basic/virus_on_network/app.py,sha256=
|
|
62
|
+
mesa/examples/basic/virus_on_network/app.py,sha256=Bxjm2FHxnbjQd3V1absTM4GDOrWOlOYZtYMn3Yy0Ol8,2439
|
|
63
63
|
mesa/examples/basic/virus_on_network/model.py,sha256=jQoCmvygwCvhUrlL0l7V8GcDLv94CgwtuK7DDGU8q8g,2813
|
|
64
64
|
mesa/experimental/UserParam.py,sha256=f32nmFjroe76HpxU75ZCEOqFW2nAsDfmqIf8kQ1zt-E,2086
|
|
65
65
|
mesa/experimental/__init__.py,sha256=faBYyHSp-sFQPaBx8-WsLToVKCndpSzpt18HmNZtasM,385
|
|
@@ -67,8 +67,8 @@ mesa/experimental/solara_viz.py,sha256=uWrNQAX3oEWSftmyjNorN839dBCUp86hnhpL704dy
|
|
|
67
67
|
mesa/experimental/cell_space/__init__.py,sha256=-NtSCT7mA-aszLSAdqbICGqeFe2vBdb-GrcW562legY,999
|
|
68
68
|
mesa/experimental/cell_space/cell.py,sha256=lDm7NQhPDFf3-SZu5W594lDNGtzcdSPUSSsELFRg0bs,7166
|
|
69
69
|
mesa/experimental/cell_space/cell_agent.py,sha256=jvYOV9OIaBaqAsAG0YLV64X_f3BJe_wP7qfos_RXi0Y,3759
|
|
70
|
-
mesa/experimental/cell_space/cell_collection.py,sha256=
|
|
71
|
-
mesa/experimental/cell_space/discrete_space.py,sha256=
|
|
70
|
+
mesa/experimental/cell_space/cell_collection.py,sha256=ADK_42ykyWQpVGVSFE8GG_djqTgL8wfWwu2YTwXUPcs,4007
|
|
71
|
+
mesa/experimental/cell_space/discrete_space.py,sha256=A54lHbTo4udcU4zkJEnsWuWKOBrELg-1eU8-dPoLMPk,5826
|
|
72
72
|
mesa/experimental/cell_space/grid.py,sha256=oWTy6kaaHXLPneA-w5XdqzwA0YItMWYgCq_UjNH9iA8,7711
|
|
73
73
|
mesa/experimental/cell_space/network.py,sha256=_x0zKlI-odNCSRb_Zqh4nBPjqnW5iVj8sVheKPCLzmU,1321
|
|
74
74
|
mesa/experimental/cell_space/voronoi.py,sha256=lSY8zQhELvOy0RfDyZIek09UMwY9_20UY9SPqFWsNoM,10014
|
|
@@ -76,18 +76,20 @@ mesa/experimental/components/altair.py,sha256=49OHgrm1JncfrKqDfw_5ifPtsbMKdgVYCa
|
|
|
76
76
|
mesa/experimental/components/matplotlib.py,sha256=j477UBk_7yW5vzT3rjhnuTixpA7PedDNghoK9TLgHVY,8043
|
|
77
77
|
mesa/experimental/devs/__init__.py,sha256=EByaC66ikUIu9G9p1geLm6ESEMWZOPTO9r9627S83j0,211
|
|
78
78
|
mesa/experimental/devs/eventlist.py,sha256=fPj2jfW-jTe-UnIE6TsF1BM2ITKe3jGfVUhu3gBv7UQ,6250
|
|
79
|
-
mesa/experimental/devs/simulator.py,sha256=
|
|
79
|
+
mesa/experimental/devs/simulator.py,sha256=RHlJsri57zf22i4fdEdUKekuJUunB1oRzEbhDntMuOk,12107
|
|
80
80
|
mesa/experimental/devs/examples/epstein_civil_violence.py,sha256=E8YSV3O5ihKsntGtnltHM-4IyS8eg2DSRUqmIiw_1iU,10916
|
|
81
81
|
mesa/experimental/devs/examples/wolf_sheep.py,sha256=1eb1CfYNQoprqSJat-LPYPvwWH1ENQdj39viEqwSk0s,8103
|
|
82
|
-
mesa/visualization/
|
|
83
|
-
mesa/visualization/
|
|
84
|
-
mesa/visualization/solara_viz.py,sha256=
|
|
82
|
+
mesa/visualization/__init__.py,sha256=o30F2VApnDJ6Zq0_U5_wBnj-6-Bu7FGPsOq3A6p2EqA,743
|
|
83
|
+
mesa/visualization/mpl_space_drawing.py,sha256=yf3Sc7pm5EJLxfWQdtR-9PcUtZveEEjar1WUr7qwI4o,20057
|
|
84
|
+
mesa/visualization/solara_viz.py,sha256=zdM4OXol7-LGg0mSYm3XbxaEqKJPPqlxxuA5rY5G60o,17937
|
|
85
|
+
mesa/visualization/user_param.py,sha256=Dl2WOwLYLf0pfLpabCZtIdFRyKZrK6Qtc3utZx5GPYg,2139
|
|
85
86
|
mesa/visualization/utils.py,sha256=lJHgRKF5BHLf72Tw3YpwyiWuRoIimaTKQ7xBCw_Rx3A,146
|
|
86
|
-
mesa/visualization/components/
|
|
87
|
-
mesa/visualization/components/
|
|
88
|
-
mesa
|
|
89
|
-
mesa-3.0.
|
|
90
|
-
mesa-3.0.
|
|
91
|
-
mesa-3.0.
|
|
92
|
-
mesa-3.0.
|
|
93
|
-
mesa-3.0.
|
|
87
|
+
mesa/visualization/components/__init__.py,sha256=Bq3nrPikcaIo9BSs0O3zptWVLlUmAkLo3s0mEmpH1RE,3022
|
|
88
|
+
mesa/visualization/components/altair_components.py,sha256=wotpFFQgMY-ZR3lNVm_fRos-iDg0Wjnj6Tk67_7f1SQ,5847
|
|
89
|
+
mesa/visualization/components/matplotlib_components.py,sha256=xQETaFyHIfmL_9JwrLIgubuIQ7-pp7TMoXT1WMmozus,5441
|
|
90
|
+
mesa-3.0.1.dist-info/METADATA,sha256=9jjOsPVzWuvIfpzrmHt1zghWhA4F64f3KRzbc_tJBmE,9782
|
|
91
|
+
mesa-3.0.1.dist-info/WHEEL,sha256=3U_NnUcV_1B1kPkYaPzN-irRckL5VW_lytn0ytO_kRY,87
|
|
92
|
+
mesa-3.0.1.dist-info/entry_points.txt,sha256=IOcQtetGF8l4wHpOs_hGb19Rz-FS__BMXOJR10IBPsA,39
|
|
93
|
+
mesa-3.0.1.dist-info/licenses/LICENSE,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
|
|
94
|
+
mesa-3.0.1.dist-info/licenses/NOTICE,sha256=GbsWoK0QWv1JyZ_xer2s-jNilv0RtWl-0UrtlJANHPg,578
|
|
95
|
+
mesa-3.0.1.dist-info/RECORD,,
|