From 06c84e793d6aa22ca70cb9cb7094256c2643b5f4 Mon Sep 17 00:00:00 2001 From: Federico Date: Thu, 14 Mar 2024 20:56:27 +0100 Subject: [PATCH 1/5] add: tooltip option to altair.py --- mesa/experimental/components/altair.py | 29 +++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/mesa/experimental/components/altair.py b/mesa/experimental/components/altair.py index a66e4ab09ae..8c41e704c15 100644 --- a/mesa/experimental/components/altair.py +++ b/mesa/experimental/components/altair.py @@ -1,5 +1,6 @@ import contextlib from typing import Optional +import datetime import solara @@ -20,7 +21,7 @@ def SpaceAltair(model, agent_portrayal, dependencies: Optional[list[any]] = None def _draw_grid(space, agent_portrayal): def portray(g): all_agent_data = [] - for content, (x, y) in space.coord_iter(): + for content, (x, y) in g.coord_iter(): if not content: continue if not hasattr(content, "__iter__"): @@ -34,12 +35,38 @@ def portray(g): all_agent_data.append(agent_data) return all_agent_data + def detect_type(key): + key_type = type(all_agent_data[0][key]) + tooltip_type = "" + if (key_type == int): + tooltip_type = "quantitative" + elif (key_type == datetime.datetime): + tooltip_type = "temporal" + else: + tooltip_type = "nominal" + # TODO: check if the string can be considered + # as a date time object and, if so, + # change tooltip_type to "temporal" + + return tooltip_type + + all_agent_data = portray(space) + invalid_tooltips = ["color", "size", "x", "y"] + + tooltip_types = {} + for key in all_agent_data[0].keys(): + if key not in invalid_tooltips: + tooltip_types[key] = detect_type(key) + encoding_dict = { # no x-axis label "x": alt.X("x", axis=None, type="ordinal"), # no y-axis label "y": alt.Y("y", axis=None, type="ordinal"), + "tooltip": [ + alt.Tooltip(key, type=tooltip_types[key]) for key in all_agent_data[0].keys() if key not in invalid_tooltips + ] } has_color = "color" in all_agent_data[0] if has_color: From af4c3c58eae61396a411644c5d21c41d1596ef33 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Thu, 14 Mar 2024 20:31:49 +0000 Subject: [PATCH 2/5] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- mesa/experimental/components/altair.py | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/mesa/experimental/components/altair.py b/mesa/experimental/components/altair.py index 8c41e704c15..f8dbd36e37a 100644 --- a/mesa/experimental/components/altair.py +++ b/mesa/experimental/components/altair.py @@ -1,6 +1,6 @@ import contextlib -from typing import Optional import datetime +from typing import Optional import solara @@ -38,9 +38,9 @@ def portray(g): def detect_type(key): key_type = type(all_agent_data[0][key]) tooltip_type = "" - if (key_type == int): + if key_type == int: tooltip_type = "quantitative" - elif (key_type == datetime.datetime): + elif key_type == datetime.datetime: tooltip_type = "temporal" else: tooltip_type = "nominal" @@ -50,7 +50,6 @@ def detect_type(key): return tooltip_type - all_agent_data = portray(space) invalid_tooltips = ["color", "size", "x", "y"] @@ -65,8 +64,10 @@ def detect_type(key): # no y-axis label "y": alt.Y("y", axis=None, type="ordinal"), "tooltip": [ - alt.Tooltip(key, type=tooltip_types[key]) for key in all_agent_data[0].keys() if key not in invalid_tooltips - ] + alt.Tooltip(key, type=tooltip_types[key]) + for key in all_agent_data[0].keys() + if key not in invalid_tooltips + ], } has_color = "color" in all_agent_data[0] if has_color: From 3b705f95cf4d8c1653515f4c356969a413611e7a Mon Sep 17 00:00:00 2001 From: Federico Date: Fri, 15 Mar 2024 11:07:57 +0100 Subject: [PATCH 3/5] fixed tooltip type detection and syntax --- mesa/experimental/components/altair.py | 27 +++----------------------- 1 file changed, 3 insertions(+), 24 deletions(-) diff --git a/mesa/experimental/components/altair.py b/mesa/experimental/components/altair.py index f8dbd36e37a..802487256f9 100644 --- a/mesa/experimental/components/altair.py +++ b/mesa/experimental/components/altair.py @@ -1,5 +1,4 @@ import contextlib -import datetime from typing import Optional import solara @@ -35,39 +34,19 @@ def portray(g): all_agent_data.append(agent_data) return all_agent_data - def detect_type(key): - key_type = type(all_agent_data[0][key]) - tooltip_type = "" - if key_type == int: - tooltip_type = "quantitative" - elif key_type == datetime.datetime: - tooltip_type = "temporal" - else: - tooltip_type = "nominal" - # TODO: check if the string can be considered - # as a date time object and, if so, - # change tooltip_type to "temporal" - - return tooltip_type all_agent_data = portray(space) invalid_tooltips = ["color", "size", "x", "y"] - tooltip_types = {} - for key in all_agent_data[0].keys(): - if key not in invalid_tooltips: - tooltip_types[key] = detect_type(key) - encoding_dict = { # no x-axis label "x": alt.X("x", axis=None, type="ordinal"), # no y-axis label "y": alt.Y("y", axis=None, type="ordinal"), "tooltip": [ - alt.Tooltip(key, type=tooltip_types[key]) - for key in all_agent_data[0].keys() - if key not in invalid_tooltips - ], + alt.Tooltip(key, type=alt.utils.infer_vegalite_type([all_agent_data[0][key]])) + for key in all_agent_data[0] if key not in invalid_tooltips + ] } has_color = "color" in all_agent_data[0] if has_color: From 12216864311a3bda7e54c8fdb02a051bae9bc314 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Fri, 15 Mar 2024 10:11:03 +0000 Subject: [PATCH 4/5] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- mesa/experimental/components/altair.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/mesa/experimental/components/altair.py b/mesa/experimental/components/altair.py index 802487256f9..c4ba2fe6f38 100644 --- a/mesa/experimental/components/altair.py +++ b/mesa/experimental/components/altair.py @@ -34,7 +34,6 @@ def portray(g): all_agent_data.append(agent_data) return all_agent_data - all_agent_data = portray(space) invalid_tooltips = ["color", "size", "x", "y"] @@ -44,9 +43,12 @@ def portray(g): # no y-axis label "y": alt.Y("y", axis=None, type="ordinal"), "tooltip": [ - alt.Tooltip(key, type=alt.utils.infer_vegalite_type([all_agent_data[0][key]])) - for key in all_agent_data[0] if key not in invalid_tooltips - ] + alt.Tooltip( + key, type=alt.utils.infer_vegalite_type([all_agent_data[0][key]]) + ) + for key in all_agent_data[0] + if key not in invalid_tooltips + ], } has_color = "color" in all_agent_data[0] if has_color: From 9baf66e31feaef74956e5e2fc9f60d5f04e7470a Mon Sep 17 00:00:00 2001 From: Federico Date: Fri, 15 Mar 2024 23:45:53 +0100 Subject: [PATCH 5/5] tooltip semplification --- mesa/experimental/components/altair.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/mesa/experimental/components/altair.py b/mesa/experimental/components/altair.py index c4ba2fe6f38..6952c03f336 100644 --- a/mesa/experimental/components/altair.py +++ b/mesa/experimental/components/altair.py @@ -43,10 +43,8 @@ def portray(g): # no y-axis label "y": alt.Y("y", axis=None, type="ordinal"), "tooltip": [ - alt.Tooltip( - key, type=alt.utils.infer_vegalite_type([all_agent_data[0][key]]) - ) - for key in all_agent_data[0] + alt.Tooltip(key, type=alt.utils.infer_vegalite_type([value])) + for key, value in all_agent_data[0].items() if key not in invalid_tooltips ], }