From ae76eb6e34f3db22a9e4ef00fa30fc3e0271e15d Mon Sep 17 00:00:00 2001 From: Jan Kwakkel Date: Wed, 6 Nov 2024 20:00:57 +0100 Subject: [PATCH 1/6] fix for user warning rewrite to deal with solara conditional use --- mesa/visualization/solara_viz.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/mesa/visualization/solara_viz.py b/mesa/visualization/solara_viz.py index 48f64c18aee..5adfb521f27 100644 --- a/mesa/visualization/solara_viz.py +++ b/mesa/visualization/solara_viz.py @@ -191,7 +191,8 @@ def ModelController( playing = solara.use_reactive(False) running = solara.use_reactive(True) if model_parameters is None: - model_parameters = solara.use_reactive({}) + model_parameters = {} + model_parameters = solara.use_reactive(model_parameters) async def step(): while playing.value and running.value: @@ -307,7 +308,8 @@ def ModelCreator( """ if model_parameters is None: - model_parameters = solara.use_reactive({}) + model_parameters = {} + model_parameters = solara.use_reactive(model_parameters) solara.use_effect( lambda: _check_model_params(model.value.__class__.__init__, fixed_params), From 4ed52aa6c9baac93592cfcbf11754fa0f9a63ddc Mon Sep 17 00:00:00 2001 From: Jan Kwakkel Date: Wed, 6 Nov 2024 20:04:52 +0100 Subject: [PATCH 2/6] bugfix closes #2462 --- mesa/visualization/solara_viz.py | 1 + 1 file changed, 1 insertion(+) diff --git a/mesa/visualization/solara_viz.py b/mesa/visualization/solara_viz.py index 5adfb521f27..eae1ab58d62 100644 --- a/mesa/visualization/solara_viz.py +++ b/mesa/visualization/solara_viz.py @@ -347,6 +347,7 @@ def _check_model_params(init_func, model_params): model_parameters[name].default == inspect.Parameter.empty and name not in model_params and name != "self" + and name != "kwargs" ): raise ValueError(f"Missing required model parameter: {name}") for name in model_params: From c95dc27e7730db03ad4346f88c9ef01cc7a58f4a Mon Sep 17 00:00:00 2001 From: Jan Kwakkel Date: Wed, 6 Nov 2024 21:29:32 +0100 Subject: [PATCH 3/6] requested changes --- mesa/visualization/solara_viz.py | 4 +++- tests/test_solara_viz.py | 13 +++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/mesa/visualization/solara_viz.py b/mesa/visualization/solara_viz.py index eae1ab58d62..4db62fd5cab 100644 --- a/mesa/visualization/solara_viz.py +++ b/mesa/visualization/solara_viz.py @@ -351,7 +351,9 @@ def _check_model_params(init_func, model_params): ): raise ValueError(f"Missing required model parameter: {name}") for name in model_params: - if name not in model_parameters: + if (name not in model_parameters + and "kwargs" not in model_parameters + ): raise ValueError(f"Invalid model parameter: {name}") diff --git a/tests/test_solara_viz.py b/tests/test_solara_viz.py index 680577570e8..be8913805bb 100644 --- a/tests/test_solara_viz.py +++ b/tests/test_solara_viz.py @@ -176,6 +176,11 @@ class ModelWithOnlyRequired: def __init__(self, param1, param2): pass + class ModelWithKwargs: + def __init__(self, **kwargs): + pass + + # Test that optional params can be omitted _check_model_params(ModelWithOptionalParams.__init__, {"required_param": 1}) @@ -184,6 +189,14 @@ def __init__(self, param1, param2): ModelWithOptionalParams.__init__, {"required_param": 1, "optional_param": 5} ) + # Test that kwargs are accepted + _check_model_params( + ModelWithKwargs.__init__, {"another_kwarg":6} + ) + _check_model_params( + ModelWithKwargs.__init__, {} + ) + # Test invalid parameter name raises ValueError with pytest.raises(ValueError, match="Invalid model parameter: invalid_param"): _check_model_params( From 7ee1fd533c4d06342233eb27cdd2f240c0c2e6ac Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Wed, 6 Nov 2024 20:29:41 +0000 Subject: [PATCH 4/6] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- mesa/visualization/solara_viz.py | 4 +--- tests/test_solara_viz.py | 9 ++------- 2 files changed, 3 insertions(+), 10 deletions(-) diff --git a/mesa/visualization/solara_viz.py b/mesa/visualization/solara_viz.py index 4db62fd5cab..92ce85fa318 100644 --- a/mesa/visualization/solara_viz.py +++ b/mesa/visualization/solara_viz.py @@ -351,9 +351,7 @@ def _check_model_params(init_func, model_params): ): raise ValueError(f"Missing required model parameter: {name}") for name in model_params: - if (name not in model_parameters - and "kwargs" not in model_parameters - ): + if name not in model_parameters and "kwargs" not in model_parameters: raise ValueError(f"Invalid model parameter: {name}") diff --git a/tests/test_solara_viz.py b/tests/test_solara_viz.py index be8913805bb..9860364df28 100644 --- a/tests/test_solara_viz.py +++ b/tests/test_solara_viz.py @@ -180,7 +180,6 @@ class ModelWithKwargs: def __init__(self, **kwargs): pass - # Test that optional params can be omitted _check_model_params(ModelWithOptionalParams.__init__, {"required_param": 1}) @@ -190,12 +189,8 @@ def __init__(self, **kwargs): ) # Test that kwargs are accepted - _check_model_params( - ModelWithKwargs.__init__, {"another_kwarg":6} - ) - _check_model_params( - ModelWithKwargs.__init__, {} - ) + _check_model_params(ModelWithKwargs.__init__, {"another_kwarg": 6}) + _check_model_params(ModelWithKwargs.__init__, {}) # Test invalid parameter name raises ValueError with pytest.raises(ValueError, match="Invalid model parameter: invalid_param"): From 07bae826685b6b8ed2cf0cf990f9431614b3a085 Mon Sep 17 00:00:00 2001 From: Jan Kwakkel Date: Wed, 6 Nov 2024 21:32:16 +0100 Subject: [PATCH 5/6] Update test_solara_viz.py --- tests/test_solara_viz.py | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/tests/test_solara_viz.py b/tests/test_solara_viz.py index 9860364df28..3d6cb11a577 100644 --- a/tests/test_solara_viz.py +++ b/tests/test_solara_viz.py @@ -188,9 +188,15 @@ def __init__(self, **kwargs): ModelWithOptionalParams.__init__, {"required_param": 1, "optional_param": 5} ) - # Test that kwargs are accepted - _check_model_params(ModelWithKwargs.__init__, {"another_kwarg": 6}) - _check_model_params(ModelWithKwargs.__init__, {}) + # Test that model_params are accepted if model uses **kwargs + _check_model_params( + ModelWithKwargs.__init__, {"another_kwarg":6} + ) + + # test hat kwargs are accepted even if no model_params are specified + _check_model_params( + ModelWithKwargs.__init__, {} + ) # Test invalid parameter name raises ValueError with pytest.raises(ValueError, match="Invalid model parameter: invalid_param"): From 0c6e5897d9ff6ad5acf96381fd750a052aa15dbe Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Wed, 6 Nov 2024 20:34:00 +0000 Subject: [PATCH 6/6] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- tests/test_solara_viz.py | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/tests/test_solara_viz.py b/tests/test_solara_viz.py index 3d6cb11a577..67a72dcba9b 100644 --- a/tests/test_solara_viz.py +++ b/tests/test_solara_viz.py @@ -189,14 +189,10 @@ def __init__(self, **kwargs): ) # Test that model_params are accepted if model uses **kwargs - _check_model_params( - ModelWithKwargs.__init__, {"another_kwarg":6} - ) + _check_model_params(ModelWithKwargs.__init__, {"another_kwarg": 6}) # test hat kwargs are accepted even if no model_params are specified - _check_model_params( - ModelWithKwargs.__init__, {} - ) + _check_model_params(ModelWithKwargs.__init__, {}) # Test invalid parameter name raises ValueError with pytest.raises(ValueError, match="Invalid model parameter: invalid_param"):