Mesa 3.0.0a4__py3-none-any.whl → 3.0.0a5__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 -3
- mesa/agent.py +106 -61
- mesa/batchrunner.py +15 -23
- mesa/cookiecutter-mesa/hooks/post_gen_project.py +2 -0
- mesa/cookiecutter-mesa/{{cookiecutter.snake}}/{{cookiecutter.snake}}/__init__.py +1 -0
- mesa/datacollection.py +138 -27
- mesa/experimental/UserParam.py +17 -6
- mesa/experimental/__init__.py +2 -0
- mesa/experimental/cell_space/__init__.py +7 -0
- mesa/experimental/cell_space/cell.py +61 -20
- mesa/experimental/cell_space/cell_agent.py +10 -5
- mesa/experimental/cell_space/cell_collection.py +54 -17
- mesa/experimental/cell_space/discrete_space.py +16 -5
- mesa/experimental/cell_space/grid.py +19 -8
- mesa/experimental/cell_space/network.py +9 -7
- mesa/experimental/cell_space/voronoi.py +26 -33
- mesa/experimental/components/altair.py +10 -0
- mesa/experimental/components/matplotlib.py +18 -0
- mesa/experimental/devs/__init__.py +2 -0
- mesa/experimental/devs/eventlist.py +36 -15
- mesa/experimental/devs/examples/epstein_civil_violence.py +65 -29
- mesa/experimental/devs/examples/wolf_sheep.py +38 -34
- mesa/experimental/devs/simulator.py +55 -15
- mesa/experimental/solara_viz.py +10 -19
- mesa/main.py +6 -4
- mesa/model.py +43 -45
- mesa/space.py +145 -120
- mesa/time.py +57 -67
- mesa/visualization/UserParam.py +19 -6
- mesa/visualization/__init__.py +3 -2
- mesa/visualization/components/altair.py +4 -2
- mesa/visualization/components/matplotlib.py +6 -4
- mesa/visualization/solara_viz.py +157 -83
- mesa/visualization/utils.py +3 -1
- {mesa-3.0.0a4.dist-info → mesa-3.0.0a5.dist-info}/METADATA +1 -1
- mesa-3.0.0a5.dist-info/RECORD +44 -0
- mesa-3.0.0a4.dist-info/RECORD +0 -44
- {mesa-3.0.0a4.dist-info → mesa-3.0.0a5.dist-info}/WHEEL +0 -0
- {mesa-3.0.0a4.dist-info → mesa-3.0.0a5.dist-info}/entry_points.txt +0 -0
- {mesa-3.0.0a4.dist-info → mesa-3.0.0a5.dist-info}/licenses/LICENSE +0 -0
mesa/visualization/solara_viz.py
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
"""
|
|
2
|
-
Mesa visualization module for creating interactive model visualizations.
|
|
1
|
+
"""Mesa visualization module for creating interactive model visualizations.
|
|
3
2
|
|
|
4
3
|
This module provides components to create browser- and Jupyter notebook-based visualizations of
|
|
5
4
|
Mesa models, allowing users to watch models run step-by-step and interact with model parameters.
|
|
@@ -8,7 +7,6 @@ Key features:
|
|
|
8
7
|
- SolaraViz: Main component for creating visualizations, supporting grid displays and plots
|
|
9
8
|
- ModelController: Handles model execution controls (step, play, pause, reset)
|
|
10
9
|
- UserInputs: Generates UI elements for adjusting model parameters
|
|
11
|
-
- Card: Renders individual visualization elements (space, measures)
|
|
12
10
|
|
|
13
11
|
The module uses Solara for rendering in Jupyter notebooks or as standalone web applications.
|
|
14
12
|
It supports various types of visualizations including matplotlib plots, agent grids, and
|
|
@@ -23,10 +21,14 @@ Usage:
|
|
|
23
21
|
See the Visualization Tutorial and example models for more details.
|
|
24
22
|
"""
|
|
25
23
|
|
|
24
|
+
from __future__ import annotations
|
|
25
|
+
|
|
26
|
+
import asyncio
|
|
26
27
|
import copy
|
|
27
|
-
import
|
|
28
|
+
from collections.abc import Callable
|
|
28
29
|
from typing import TYPE_CHECKING, Literal
|
|
29
30
|
|
|
31
|
+
import reacton.core
|
|
30
32
|
import solara
|
|
31
33
|
from solara.alias import rv
|
|
32
34
|
|
|
@@ -44,8 +46,7 @@ if TYPE_CHECKING:
|
|
|
44
46
|
def Card(
|
|
45
47
|
model, measures, agent_portrayal, space_drawer, dependencies, color, layout_type
|
|
46
48
|
):
|
|
47
|
-
"""
|
|
48
|
-
Create a card component for visualizing model space or measures.
|
|
49
|
+
"""Create a card component for visualizing model space or measures.
|
|
49
50
|
|
|
50
51
|
Args:
|
|
51
52
|
model: The Mesa model instance
|
|
@@ -91,21 +92,57 @@ def Card(
|
|
|
91
92
|
|
|
92
93
|
@solara.component
|
|
93
94
|
def SolaraViz(
|
|
94
|
-
model:
|
|
95
|
-
components: list[
|
|
96
|
-
|
|
97
|
-
|
|
95
|
+
model: Model | solara.Reactive[Model],
|
|
96
|
+
components: list[reacton.core.Component]
|
|
97
|
+
| list[Callable[[Model], reacton.core.Component]]
|
|
98
|
+
| Literal["default"] = "default",
|
|
99
|
+
play_interval: int = 100,
|
|
98
100
|
model_params=None,
|
|
99
|
-
seed=0,
|
|
101
|
+
seed: float = 0,
|
|
100
102
|
name: str | None = None,
|
|
101
103
|
):
|
|
102
|
-
|
|
104
|
+
"""Solara visualization component.
|
|
105
|
+
|
|
106
|
+
This component provides a visualization interface for a given model using Solara.
|
|
107
|
+
It supports various visualization components and allows for interactive model
|
|
108
|
+
stepping and parameter adjustments.
|
|
109
|
+
|
|
110
|
+
Args:
|
|
111
|
+
model (Model | solara.Reactive[Model]): A Model instance or a reactive Model.
|
|
112
|
+
This is the main model to be visualized. If a non-reactive model is provided,
|
|
113
|
+
it will be converted to a reactive model.
|
|
114
|
+
components (list[solara.component] | Literal["default"], optional): List of solara
|
|
115
|
+
components or functions that return a solara component.
|
|
116
|
+
These components are used to render different parts of the model visualization.
|
|
117
|
+
Defaults to "default", which uses the default Altair space visualization.
|
|
118
|
+
play_interval (int, optional): Interval for playing the model steps in milliseconds.
|
|
119
|
+
This controls the speed of the model's automatic stepping. Defaults to 100 ms.
|
|
120
|
+
model_params (dict, optional): Parameters for (re-)instantiating a model.
|
|
121
|
+
Can include user-adjustable parameters and fixed parameters. Defaults to None.
|
|
122
|
+
seed (int, optional): Seed for the random number generator. This ensures reproducibility
|
|
123
|
+
of the model's behavior. Defaults to 0.
|
|
124
|
+
name (str | None, optional): Name of the visualization. Defaults to the models class name.
|
|
125
|
+
|
|
126
|
+
Returns:
|
|
127
|
+
solara.component: A Solara component that renders the visualization interface for the model.
|
|
128
|
+
|
|
129
|
+
Example:
|
|
130
|
+
>>> model = MyModel()
|
|
131
|
+
>>> page = SolaraViz(model)
|
|
132
|
+
>>> page
|
|
133
|
+
|
|
134
|
+
Notes:
|
|
135
|
+
- The `model` argument can be either a direct model instance or a reactive model. If a direct
|
|
136
|
+
model instance is provided, it will be converted to a reactive model using `solara.use_reactive`.
|
|
137
|
+
- The `play_interval` argument controls the speed of the model's automatic stepping. A lower
|
|
138
|
+
value results in faster stepping, while a higher value results in slower stepping.
|
|
139
|
+
"""
|
|
103
140
|
if components == "default":
|
|
104
141
|
components = [components_altair.make_space_altair()]
|
|
105
142
|
|
|
106
143
|
# Convert model to reactive
|
|
107
144
|
if not isinstance(model, solara.Reactive):
|
|
108
|
-
model = solara.use_reactive(model)
|
|
145
|
+
model = solara.use_reactive(model) # noqa: SH102, RUF100
|
|
109
146
|
|
|
110
147
|
def connect_to_model():
|
|
111
148
|
# Patch the step function to force updates
|
|
@@ -125,40 +162,68 @@ def SolaraViz(
|
|
|
125
162
|
with solara.AppBar():
|
|
126
163
|
solara.AppBarTitle(name if name else model.value.__class__.__name__)
|
|
127
164
|
|
|
128
|
-
with solara.Sidebar():
|
|
129
|
-
with solara.Card("Controls"
|
|
130
|
-
|
|
165
|
+
with solara.Sidebar(), solara.Column():
|
|
166
|
+
with solara.Card("Controls"):
|
|
167
|
+
ModelController(model, play_interval)
|
|
168
|
+
|
|
169
|
+
if model_params is not None:
|
|
170
|
+
with solara.Card("Model Parameters"):
|
|
131
171
|
ModelCreator(
|
|
132
172
|
model,
|
|
133
173
|
model_params,
|
|
134
174
|
seed=seed,
|
|
135
175
|
)
|
|
136
|
-
|
|
137
|
-
with solara.Card("Information", margin=1, elevation=2):
|
|
176
|
+
with solara.Card("Information"):
|
|
138
177
|
ShowSteps(model.value)
|
|
139
178
|
|
|
140
|
-
|
|
141
|
-
[
|
|
142
|
-
*(component(model.value) for component in components),
|
|
143
|
-
]
|
|
144
|
-
)
|
|
179
|
+
ComponentsView(components, model.value)
|
|
145
180
|
|
|
146
181
|
|
|
147
|
-
|
|
182
|
+
def _wrap_component(
|
|
183
|
+
component: reacton.core.Component | Callable[[Model], reacton.core.Component],
|
|
184
|
+
) -> reacton.core.Component:
|
|
185
|
+
"""Wrap a component in an auto-updated Solara component if needed."""
|
|
186
|
+
if isinstance(component, reacton.core.Component):
|
|
187
|
+
return component
|
|
188
|
+
|
|
189
|
+
@solara.component
|
|
190
|
+
def WrappedComponent(model):
|
|
191
|
+
update_counter.get()
|
|
192
|
+
return component(model)
|
|
193
|
+
|
|
194
|
+
return WrappedComponent
|
|
148
195
|
|
|
149
196
|
|
|
150
197
|
@solara.component
|
|
151
|
-
def
|
|
152
|
-
|
|
153
|
-
|
|
198
|
+
def ComponentsView(
|
|
199
|
+
components: list[reacton.core.Component]
|
|
200
|
+
| list[Callable[[Model], reacton.core.Component]],
|
|
201
|
+
model: Model,
|
|
202
|
+
):
|
|
203
|
+
"""Display a list of components.
|
|
154
204
|
|
|
155
205
|
Args:
|
|
156
|
-
|
|
157
|
-
|
|
206
|
+
components: List of components to display
|
|
207
|
+
model: Model instance to pass to each component
|
|
158
208
|
"""
|
|
159
|
-
|
|
160
|
-
|
|
209
|
+
wrapped_components = [_wrap_component(component) for component in components]
|
|
210
|
+
|
|
211
|
+
with solara.Column():
|
|
212
|
+
for component in wrapped_components:
|
|
213
|
+
component(model)
|
|
214
|
+
|
|
215
|
+
|
|
216
|
+
JupyterViz = SolaraViz
|
|
161
217
|
|
|
218
|
+
|
|
219
|
+
@solara.component
|
|
220
|
+
def ModelController(model: solara.Reactive[Model], play_interval=100):
|
|
221
|
+
"""Create controls for model execution (step, play, pause, reset).
|
|
222
|
+
|
|
223
|
+
Args:
|
|
224
|
+
model (solara.Reactive[Model]): Reactive model instance
|
|
225
|
+
play_interval (int, optional): Interval for playing the model steps in milliseconds.
|
|
226
|
+
"""
|
|
162
227
|
playing = solara.use_reactive(False)
|
|
163
228
|
original_model = solara.use_reactive(None)
|
|
164
229
|
|
|
@@ -170,40 +235,40 @@ def ModelController(model: solara.Reactive["Model"], play_interval=100):
|
|
|
170
235
|
|
|
171
236
|
solara.use_effect(save_initial_model, [model.value])
|
|
172
237
|
|
|
173
|
-
def step():
|
|
238
|
+
async def step():
|
|
174
239
|
while playing.value:
|
|
175
|
-
|
|
240
|
+
await asyncio.sleep(play_interval / 1000)
|
|
176
241
|
do_step()
|
|
177
242
|
|
|
178
|
-
solara.
|
|
243
|
+
solara.lab.use_task(step, dependencies=[playing.value], prefer_threaded=False)
|
|
179
244
|
|
|
180
245
|
def do_step():
|
|
181
246
|
"""Advance the model by one step."""
|
|
182
247
|
model.value.step()
|
|
183
248
|
|
|
184
|
-
def do_play():
|
|
185
|
-
"""Run the model continuously."""
|
|
186
|
-
playing.value = True
|
|
187
|
-
|
|
188
|
-
def do_pause():
|
|
189
|
-
"""Pause the model execution."""
|
|
190
|
-
playing.value = False
|
|
191
|
-
|
|
192
249
|
def do_reset():
|
|
193
250
|
"""Reset the model to its initial state."""
|
|
194
251
|
playing.value = False
|
|
195
252
|
model.value = copy.deepcopy(original_model.value)
|
|
196
253
|
|
|
254
|
+
def do_play_pause():
|
|
255
|
+
"""Toggle play/pause."""
|
|
256
|
+
playing.value = not playing.value
|
|
257
|
+
|
|
197
258
|
with solara.Row(justify="space-between"):
|
|
198
259
|
solara.Button(label="Reset", color="primary", on_click=do_reset)
|
|
199
|
-
solara.Button(
|
|
200
|
-
|
|
201
|
-
|
|
260
|
+
solara.Button(
|
|
261
|
+
label="▶" if not playing.value else "❚❚",
|
|
262
|
+
color="primary",
|
|
263
|
+
on_click=do_play_pause,
|
|
264
|
+
)
|
|
265
|
+
solara.Button(
|
|
266
|
+
label="Step", color="primary", on_click=do_step, disabled=playing.value
|
|
267
|
+
)
|
|
202
268
|
|
|
203
269
|
|
|
204
270
|
def split_model_params(model_params):
|
|
205
|
-
"""
|
|
206
|
-
Split model parameters into user-adjustable and fixed parameters.
|
|
271
|
+
"""Split model parameters into user-adjustable and fixed parameters.
|
|
207
272
|
|
|
208
273
|
Args:
|
|
209
274
|
model_params: Dictionary of all model parameters
|
|
@@ -222,8 +287,7 @@ def split_model_params(model_params):
|
|
|
222
287
|
|
|
223
288
|
|
|
224
289
|
def check_param_is_fixed(param):
|
|
225
|
-
"""
|
|
226
|
-
Check if a parameter is fixed (not user-adjustable).
|
|
290
|
+
"""Check if a parameter is fixed (not user-adjustable).
|
|
227
291
|
|
|
228
292
|
Args:
|
|
229
293
|
param: Parameter to check
|
|
@@ -241,6 +305,36 @@ def check_param_is_fixed(param):
|
|
|
241
305
|
|
|
242
306
|
@solara.component
|
|
243
307
|
def ModelCreator(model, model_params, seed=1):
|
|
308
|
+
"""Solara component for creating and managing a model instance with user-defined parameters.
|
|
309
|
+
|
|
310
|
+
This component allows users to create a model instance with specified parameters and seed.
|
|
311
|
+
It provides an interface for adjusting model parameters and reseeding the model's random
|
|
312
|
+
number generator.
|
|
313
|
+
|
|
314
|
+
Args:
|
|
315
|
+
model (solara.Reactive[Model]): A reactive model instance. This is the main model to be created and managed.
|
|
316
|
+
model_params (dict): Dictionary of model parameters. This includes both user-adjustable parameters and fixed parameters.
|
|
317
|
+
seed (int, optional): Initial seed for the random number generator. Defaults to 1.
|
|
318
|
+
|
|
319
|
+
Returns:
|
|
320
|
+
solara.component: A Solara component that renders the model creation and management interface.
|
|
321
|
+
|
|
322
|
+
Example:
|
|
323
|
+
>>> model = solara.reactive(MyModel())
|
|
324
|
+
>>> model_params = {
|
|
325
|
+
>>> "param1": {"type": "slider", "value": 10, "min": 0, "max": 100},
|
|
326
|
+
>>> "param2": {"type": "slider", "value": 5, "min": 1, "max": 10},
|
|
327
|
+
>>> }
|
|
328
|
+
>>> creator = ModelCreator(model, model_params)
|
|
329
|
+
>>> creator
|
|
330
|
+
|
|
331
|
+
Notes:
|
|
332
|
+
- The `model_params` argument should be a dictionary where keys are parameter names and values either fixed values
|
|
333
|
+
or are dictionaries containing parameter details such as type, value, min, and max.
|
|
334
|
+
- The `seed` argument ensures reproducibility by setting the initial seed for the model's random number generator.
|
|
335
|
+
- The component provides an interface for adjusting user-defined parameters and reseeding the model.
|
|
336
|
+
|
|
337
|
+
"""
|
|
244
338
|
user_params, fixed_params = split_model_params(model_params)
|
|
245
339
|
|
|
246
340
|
reactive_seed = solara.use_reactive(seed)
|
|
@@ -260,37 +354,34 @@ def ModelCreator(model, model_params, seed=1):
|
|
|
260
354
|
set_model_parameters({**model_parameters, name: value})
|
|
261
355
|
|
|
262
356
|
def create_model():
|
|
263
|
-
model.value = model.value.__class__
|
|
264
|
-
|
|
265
|
-
)
|
|
266
|
-
model.value.__init__(**model_parameters)
|
|
357
|
+
model.value = model.value.__class__(**model_parameters)
|
|
358
|
+
model.value._seed = reactive_seed.value
|
|
267
359
|
|
|
268
360
|
solara.use_effect(create_model, [model_parameters, reactive_seed.value])
|
|
269
361
|
|
|
270
|
-
solara.
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
362
|
+
with solara.Row(justify="space-between"):
|
|
363
|
+
solara.InputText(
|
|
364
|
+
label="Seed",
|
|
365
|
+
value=reactive_seed,
|
|
366
|
+
continuous_update=True,
|
|
367
|
+
)
|
|
275
368
|
|
|
276
|
-
|
|
369
|
+
solara.Button(label="Reseed", color="primary", on_click=do_reseed)
|
|
277
370
|
|
|
278
371
|
UserInputs(user_params, on_change=on_change)
|
|
279
372
|
|
|
280
373
|
|
|
281
374
|
@solara.component
|
|
282
375
|
def UserInputs(user_params, on_change=None):
|
|
283
|
-
"""
|
|
284
|
-
|
|
376
|
+
"""Initialize user inputs for configurable model parameters.
|
|
377
|
+
|
|
285
378
|
Currently supports :class:`solara.SliderInt`, :class:`solara.SliderFloat`,
|
|
286
379
|
:class:`solara.Select`, and :class:`solara.Checkbox`.
|
|
287
380
|
|
|
288
381
|
Args:
|
|
289
|
-
user_params: Dictionary with options for the input, including label,
|
|
290
|
-
min and max values, and other fields specific to the input type.
|
|
382
|
+
user_params: Dictionary with options for the input, including label, min and max values, and other fields specific to the input type.
|
|
291
383
|
on_change: Function to be called with (name, value) when the value of an input changes.
|
|
292
384
|
"""
|
|
293
|
-
|
|
294
385
|
for name, options in user_params.items():
|
|
295
386
|
|
|
296
387
|
def change_handler(value, name=name):
|
|
@@ -348,26 +439,8 @@ def UserInputs(user_params, on_change=None):
|
|
|
348
439
|
raise ValueError(f"{input_type} is not a supported input type")
|
|
349
440
|
|
|
350
441
|
|
|
351
|
-
def make_text(renderer):
|
|
352
|
-
"""
|
|
353
|
-
Create a function that renders text using Markdown.
|
|
354
|
-
|
|
355
|
-
Args:
|
|
356
|
-
renderer: Function that takes a model and returns a string
|
|
357
|
-
|
|
358
|
-
Returns:
|
|
359
|
-
function: A function that renders the text as Markdown
|
|
360
|
-
"""
|
|
361
|
-
|
|
362
|
-
def function(model):
|
|
363
|
-
solara.Markdown(renderer(model))
|
|
364
|
-
|
|
365
|
-
return function
|
|
366
|
-
|
|
367
|
-
|
|
368
442
|
def make_initial_grid_layout(layout_types):
|
|
369
|
-
"""
|
|
370
|
-
Create an initial grid layout for visualization components.
|
|
443
|
+
"""Create an initial grid layout for visualization components.
|
|
371
444
|
|
|
372
445
|
Args:
|
|
373
446
|
layout_types: List of layout types (Space or Measure)
|
|
@@ -390,5 +463,6 @@ def make_initial_grid_layout(layout_types):
|
|
|
390
463
|
|
|
391
464
|
@solara.component
|
|
392
465
|
def ShowSteps(model):
|
|
466
|
+
"""Display the current step of the model."""
|
|
393
467
|
update_counter.get()
|
|
394
468
|
return solara.Text(f"Step: {model.steps}")
|
mesa/visualization/utils.py
CHANGED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
mesa/__init__.py,sha256=rKO9SY4p-VL83PFsk5hAbDCbhhUO8azgxc9buDoFCX4,618
|
|
2
|
+
mesa/agent.py,sha256=-KwohXkdrj6CZMn7paf3Jv_7fCfDPhsJasRNm-jgTTY,25043
|
|
3
|
+
mesa/batchrunner.py,sha256=YUYyCy8XBxbUj83BczXmxA6tsT6ttimIeqiD3-wkYL4,6103
|
|
4
|
+
mesa/datacollection.py,sha256=xyb07aBpd-HSDh5bk-XcVqGiDu5bfaLlxj5eDlGIwqY,16138
|
|
5
|
+
mesa/main.py,sha256=_KgeVGbi0znzezjjoM09vhGdyaqcuDEwb9M7vH2c_O4,1668
|
|
6
|
+
mesa/model.py,sha256=vUS64fuZI26b3TYX0BTK90S8lxPdmFI1tgxatNEYUI8,7981
|
|
7
|
+
mesa/space.py,sha256=1sVl78o5lYP6aEg32QIb9-tcv3V3UeFdC7A_h_8CgO8,62838
|
|
8
|
+
mesa/time.py,sha256=kGXHDjnRn-Ixwgxt3fijEvLRybWQe0g9pE5ZpW4Kaaw,14983
|
|
9
|
+
mesa/cookiecutter-mesa/cookiecutter.json,sha256=tBSWli39fOWUXGfiDCTKd92M7uKaBIswXbkOdbUufYY,337
|
|
10
|
+
mesa/cookiecutter-mesa/hooks/post_gen_project.py,sha256=UKz12l6mKc7fILK0MvV5djsTKwkmD4DlH8LYjFO8ehI,316
|
|
11
|
+
mesa/cookiecutter-mesa/{{cookiecutter.snake}}/README.md,sha256=Yji4lGY-NtQSnW-oBj0_Jhs-XhCfZA8R1mBBM_IllGs,80
|
|
12
|
+
mesa/cookiecutter-mesa/{{cookiecutter.snake}}/app.pytemplate,sha256=36f9k9CH6TK6VrXsPvTFXGUfCKzCLwgYTeK-Gt27GNg,584
|
|
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=WgJccMfsAlD_mA3zTBPJVHadF3FtO8xgi8SPKORzyMs,22
|
|
15
|
+
mesa/cookiecutter-mesa/{{cookiecutter.snake}}/{{cookiecutter.snake}}/model.pytemplate,sha256=Aml4Z6E1yj7E7DtHNSUqnKNRUdkxG9WWtJyW8fkxCng,1870
|
|
16
|
+
mesa/experimental/UserParam.py,sha256=f32nmFjroe76HpxU75ZCEOqFW2nAsDfmqIf8kQ1zt-E,2086
|
|
17
|
+
mesa/experimental/__init__.py,sha256=1hxkjcZvdJhhQx4iLlTTUAPs_SqRyN-us4qR8U6JKkw,209
|
|
18
|
+
mesa/experimental/solara_viz.py,sha256=uWrNQAX3oEWSftmyjNorN839dBCUp86hnhpL704dyGQ,15212
|
|
19
|
+
mesa/experimental/cell_space/__init__.py,sha256=Nz1EkgzhvrTcfOJI1M_WkHsIgPkU8QIOCNJl7jLlYpw,908
|
|
20
|
+
mesa/experimental/cell_space/cell.py,sha256=L1XMxq1mIaouviiPSgurj4uda0dAx7zMWnam6_aK79s,5907
|
|
21
|
+
mesa/experimental/cell_space/cell_agent.py,sha256=06R_7djVlD2S-kS86ugxiaeualWaTrSUmF82t3UBi44,1169
|
|
22
|
+
mesa/experimental/cell_space/cell_collection.py,sha256=ZcyuPEevCZEXW7jFnX6StjBMw4UBDQvUspZRcFi2dFg,3426
|
|
23
|
+
mesa/experimental/cell_space/discrete_space.py,sha256=q5MRPzMYzZb3hQW90L0PmVFJepXhjbZK_9hT4y6OLdY,2293
|
|
24
|
+
mesa/experimental/cell_space/grid.py,sha256=WT9AtQCgPzV8VonX0oSPRXgZNXoOR_mVgEAEOp5I4YA,7319
|
|
25
|
+
mesa/experimental/cell_space/network.py,sha256=hzhxGipRyM1PWOQFlPz--tc3pA_RRBT8Xq4pXHx5sD8,1252
|
|
26
|
+
mesa/experimental/cell_space/voronoi.py,sha256=lSY8zQhELvOy0RfDyZIek09UMwY9_20UY9SPqFWsNoM,10014
|
|
27
|
+
mesa/experimental/components/altair.py,sha256=49OHgrm1JncfrKqDfw_5ifPtsbMKdgVYCacL9SMwucc,2624
|
|
28
|
+
mesa/experimental/components/matplotlib.py,sha256=j477UBk_7yW5vzT3rjhnuTixpA7PedDNghoK9TLgHVY,8043
|
|
29
|
+
mesa/experimental/devs/__init__.py,sha256=EByaC66ikUIu9G9p1geLm6ESEMWZOPTO9r9627S83j0,211
|
|
30
|
+
mesa/experimental/devs/eventlist.py,sha256=Trvc5S-NG5B792uuk_cY8Q_5Rw99zioUYDQXcXWVuCo,5972
|
|
31
|
+
mesa/experimental/devs/simulator.py,sha256=wvqkLIDgbJNaem9nwMacyEYRp0W3ai5Oxptw3-QmbSw,10595
|
|
32
|
+
mesa/experimental/devs/examples/epstein_civil_violence.py,sha256=E8YSV3O5ihKsntGtnltHM-4IyS8eg2DSRUqmIiw_1iU,10916
|
|
33
|
+
mesa/experimental/devs/examples/wolf_sheep.py,sha256=aj5kiEWy-ezQXOomc5mgEdkup1yRYQknQm65ajPWBxs,8051
|
|
34
|
+
mesa/visualization/UserParam.py,sha256=Dl2WOwLYLf0pfLpabCZtIdFRyKZrK6Qtc3utZx5GPYg,2139
|
|
35
|
+
mesa/visualization/__init__.py,sha256=sa8lqeLcDtte19SMzFiKP6K4CrVLxAPwrhDu_AsDWTs,395
|
|
36
|
+
mesa/visualization/solara_viz.py,sha256=vVyAqp3aov8EKmYAvDELEdb5Fonr5JxLws6YZZ02GIk,16459
|
|
37
|
+
mesa/visualization/utils.py,sha256=lJHgRKF5BHLf72Tw3YpwyiWuRoIimaTKQ7xBCw_Rx3A,146
|
|
38
|
+
mesa/visualization/components/altair.py,sha256=E-iblqpWhx72qrjkNz4Ie9c66Hh1OFpLVjuDIg9m2sA,2804
|
|
39
|
+
mesa/visualization/components/matplotlib.py,sha256=wGPxZAS6c3HZgyrkoFKA6z5CqaTr2YVB6sDZtywTt_I,8277
|
|
40
|
+
mesa-3.0.0a5.dist-info/METADATA,sha256=EqwMNNaGiRZhmZVkg032KxexPwvNlEYGmzF9jQ5N05s,8339
|
|
41
|
+
mesa-3.0.0a5.dist-info/WHEEL,sha256=1yFddiXMmvYK7QYTqtRNtX66WJ0Mz8PYEiEUoOUUxRY,87
|
|
42
|
+
mesa-3.0.0a5.dist-info/entry_points.txt,sha256=IOcQtetGF8l4wHpOs_hGb19Rz-FS__BMXOJR10IBPsA,39
|
|
43
|
+
mesa-3.0.0a5.dist-info/licenses/LICENSE,sha256=OGUgret9fRrm8J3pdsPXETIjf0H8puK_Nmy970ZzT78,572
|
|
44
|
+
mesa-3.0.0a5.dist-info/RECORD,,
|
mesa-3.0.0a4.dist-info/RECORD
DELETED
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
mesa/__init__.py,sha256=UIq0dHx3cmtSSVuVFYYLpYS1rzbfn_tcT7vbqo1XLa0,618
|
|
2
|
-
mesa/agent.py,sha256=45KS_Cus2Yu-2g5moA8W6ntLWPKNnj9jUeNZiO4NqoI,22920
|
|
3
|
-
mesa/batchrunner.py,sha256=-n5mtNGWuKkE0kxWVenXw8b4LXe_LVAZ3rNEBcR2l1A,6097
|
|
4
|
-
mesa/datacollection.py,sha256=WUpZoFC2ZdLtKZ0oTwZTqraoP_yNx_yQY9pxO0TR8y0,11442
|
|
5
|
-
mesa/main.py,sha256=7MovfNz88VWNnfXP0kcERB6C3GfkVOh0hb0o32hM9LU,1602
|
|
6
|
-
mesa/model.py,sha256=_z_aPVu3ADJHZZD7YavBG7fdCYaDQqpkVNEcatWMM90,8551
|
|
7
|
-
mesa/space.py,sha256=5St5E26Np_b_fWv-_NEH82ZU0H3C9xHBAschRJtPpng,62698
|
|
8
|
-
mesa/time.py,sha256=53VX0x8zujaq32R6w_aBv1NmLpWO_h5K5BQTaK4mO3Q,14960
|
|
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}}/app.pytemplate,sha256=36f9k9CH6TK6VrXsPvTFXGUfCKzCLwgYTeK-Gt27GNg,584
|
|
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=Aml4Z6E1yj7E7DtHNSUqnKNRUdkxG9WWtJyW8fkxCng,1870
|
|
16
|
-
mesa/experimental/UserParam.py,sha256=WgnY3Q0padtGqUCaezgYzd6cZ7LziuIQnGKP3DBuHZY,1641
|
|
17
|
-
mesa/experimental/__init__.py,sha256=8KfQcTMv9HJEAjmK5A_KdnFYfoY0nHAz97G_JLJVMNM,183
|
|
18
|
-
mesa/experimental/solara_viz.py,sha256=WXQY4b5jLp_ABvhV2df6yerDIijBzns3pXd4hCl5fAA,15253
|
|
19
|
-
mesa/experimental/cell_space/__init__.py,sha256=gXntv_Ie13SIegBumJNaIPcTUmTQLb4LlGd1JxoIn9M,708
|
|
20
|
-
mesa/experimental/cell_space/cell.py,sha256=AUnvVnXWhdgzr0bLKDRDO9c93v22Zkw6W-tWxhEhGdQ,4578
|
|
21
|
-
mesa/experimental/cell_space/cell_agent.py,sha256=Q3SoeK8Af7p4bdcm_E6Hr2uiHCSRsXYvttPUAOo4lRs,1080
|
|
22
|
-
mesa/experimental/cell_space/cell_collection.py,sha256=4FmfDEg9LoFiJ0mF_nC8KUt9fCJ7Q21erjWPeBTQ_lw,2293
|
|
23
|
-
mesa/experimental/cell_space/discrete_space.py,sha256=ta__YojsrrhWL4DgMzUqZpSgbeexKMrA6bxlYPJGfK0,1921
|
|
24
|
-
mesa/experimental/cell_space/grid.py,sha256=gYDExuFBMF3OThUkhbXmolQFKBOqTukcibjfgXicP00,6948
|
|
25
|
-
mesa/experimental/cell_space/network.py,sha256=mAaFHBdd4s9kxUWHbViovLW2-pU2yXH0dtY_vF8sCJg,1179
|
|
26
|
-
mesa/experimental/cell_space/voronoi.py,sha256=swwfV1Hfi7wp3XfM-rb9Lq5H0yAPH9zohZnXzU8SiHM,9997
|
|
27
|
-
mesa/experimental/components/altair.py,sha256=V2CQ-Zr7PeijgWtYBNH3VklGVfrf1ee70XVh0DBBONQ,2366
|
|
28
|
-
mesa/experimental/components/matplotlib.py,sha256=J61gHkXd37XyZiNLGF1NaQPOYqDdh9tpSfbOzMqK3dI,7570
|
|
29
|
-
mesa/experimental/devs/__init__.py,sha256=CWam15vCj-RD_biMyqv4sJfos1fsL823P7MDEGrbwW8,174
|
|
30
|
-
mesa/experimental/devs/eventlist.py,sha256=nyUFNDWnnSPQnrMtj7Qj1PexxKyOwSJuIGBoxtSwVI0,5269
|
|
31
|
-
mesa/experimental/devs/simulator.py,sha256=0SMC7daIOyL2rYfoQOOTaTOYDos0gLeBUbU1Krd42HA,9557
|
|
32
|
-
mesa/experimental/devs/examples/epstein_civil_violence.py,sha256=wCquOwcNYc--DYGM9Vg4YGx1Kh--HRhSVGjGgzT4k-I,9491
|
|
33
|
-
mesa/experimental/devs/examples/wolf_sheep.py,sha256=Hz3sExzjKEzrkFcE2gd7p7a0Ubg-QBGrV-4XQYWgt3c,7501
|
|
34
|
-
mesa/visualization/UserParam.py,sha256=WgnY3Q0padtGqUCaezgYzd6cZ7LziuIQnGKP3DBuHZY,1641
|
|
35
|
-
mesa/visualization/__init__.py,sha256=T_3QNz9BVuyfcbcMK_2RGGfMYhB7J-8XtaVPViXm1OU,372
|
|
36
|
-
mesa/visualization/solara_viz.py,sha256=8eQ-4dTYWuP0fmoaRMV3QqA1DL0tG0wPLmLAiYiiDO0,12188
|
|
37
|
-
mesa/visualization/utils.py,sha256=ade9YVhKx3gEaqDySj4YeSixTOHWGjzIIFDPGXL4uAs,103
|
|
38
|
-
mesa/visualization/components/altair.py,sha256=2VE4yRHrvBNXpDQUPuj0ejsPU0v3BqSzkphjbIcqzoc,2707
|
|
39
|
-
mesa/visualization/components/matplotlib.py,sha256=v-XwsChqWy9ukLe3zi-Q93UBUF20lxTB7lwckX4pB3M,8138
|
|
40
|
-
mesa-3.0.0a4.dist-info/METADATA,sha256=2DMGHgOya24WeUxtyEsBY1rzGlFxVkMZ2bcKFXeCZRw,8339
|
|
41
|
-
mesa-3.0.0a4.dist-info/WHEEL,sha256=1yFddiXMmvYK7QYTqtRNtX66WJ0Mz8PYEiEUoOUUxRY,87
|
|
42
|
-
mesa-3.0.0a4.dist-info/entry_points.txt,sha256=IOcQtetGF8l4wHpOs_hGb19Rz-FS__BMXOJR10IBPsA,39
|
|
43
|
-
mesa-3.0.0a4.dist-info/licenses/LICENSE,sha256=OGUgret9fRrm8J3pdsPXETIjf0H8puK_Nmy970ZzT78,572
|
|
44
|
-
mesa-3.0.0a4.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|